前往小程序,Get更优阅读体验!
立即前往
发布
社区首页 >专栏 >Keepalived+LVS+DR结合实现高可用群集

Keepalived+LVS+DR结合实现高可用群集

原创
作者头像
神秘泣男子
发布2025-01-21 11:58:40
发布2025-01-21 11:58:40
10900
代码可运行
举报
文章被收录于专栏:LinuxLinux
运行总次数:0
代码可运行

——前言——

以下内容全是重点 请仔细阅读

以下内容全是重点 请仔细阅读

Keepalived 是一个用于实现高可用性。它主要用于确保服务的连续性,防止单点故障,通常应用于负载均衡和故障转移场景。

Keepalived 简介

  1. Keepalived 是一个基于 VRRP(虚拟路由冗余协议)协议的软件实现。
  2. 它可以管理 LVS(Linux Virtual Server)集群系统,也可以单独用于实现服务的高可用。
  3. Keepalived 通过配置虚拟 IP 地址(VIP)来实现服务的故障转移。
  4. 它能够监控服务器和服务的状态,在发生故障时自动进行切换。

特别适合需要快速故障转移和负载均衡的网络环境

工作原理

  1. VRRP协议Keepalived使用VRRP(虚拟路由冗余协议)来实现高可用性。多台服务器组成一个VRRP组,共享一个虚拟IP地址。一台服务器作为主服务器,其他为备用服务器。主服务器定期发送VRRP通告包,如果备用服务器在一定时间内没有收到通告,就会接管虚拟IP。

2.健康检查

Keepalived定期检查本地和远程服务的健康状态。

支持多种检查方式,如TCP、HTTP、SSL等。

如果检测到服务不可用,会触发故障转移。

3.负载均衡

当与LVS(Linux Virtual Server)结合使用时,Keepalived可以管理LVS的配置。

支持多种负载均衡算法,如轮询、加权轮询、最少连接等。

4.配置管理

通过配置文件定义VRRP实例、虚拟IP、健康检查等参数。

支持动态配置更新,无需重启服务。

5.故障转移

当主服务器失效时,备用服务器会自动接管虚拟IP。

转移过程快速,通常在几秒内完成,对用户几乎无感知。

过这些机制,Keepalived能够有效地提供高可用性和负载均衡服务,确保系统的稳定性和可靠性。

实验环境

主 192.168.192.100    虚拟漂移地址 192.168.192.200

备 192.168.192.111     虚拟漂移地址 192.168.192.200

第一台Web服务器 192.168.192.112

第二台Web服务器 192.168.192.114

主服务器

代码语言:javascript
代码运行次数:0
复制
安装所需组件
yum -y install gcc openssl-devel libnfnetlink-devel libnl libnl3-devel

yum install -y keepalived ipvsadm

编辑配置文件

以下配置都是重点 大家可以一一比对

代码语言:javascript
代码运行次数:0
复制
vim /etc/keepalived/keepalived.conf
代码语言:javascript
代码运行次数:0
复制
! Configuration File for keepalived

global_defs {
   notification_email {
     acassen@firewall.loc
     failover@firewall.loc
     sysadmin@firewall.loc
   }
   ! 设置通知邮件的接收地址
   notification_email_from Alexandre.Cassen@firewall.loc  ! 设置通知邮件的发送地址
   smtp_server 192.168.200.1  ! 设置SMTP服务器地址
   smtp_connect_timeout 30  ! 设置SMTP连接超时时间(秒)
   router_id R1  ! 设置路由器标识

}

vrrp_instance VI_1 {
    state MASTER  ! 设置初始状态为主节点
    interface ens33  ! 设置VRRP实例绑定的网络接口
    virtual_router_id 2  ! 设置虚拟路由器ID
    priority 100  ! 设置优先级
    advert_int 1  ! 设置VRRP广播间隔(秒)
    authentication {
        auth_type PASS  ! 设置认证类型为密码
        auth_pass 1111  ! 设置认证密码
    }
    virtual_ipaddress {
        192.168.192.200  ! 设置虚拟IP地址
    }
}

virtual_server 192.168.192.200 80 {
    delay_loop 6  ! 设置健康检查间隔(秒)
    lb_algo rr  ! 设置负载均衡算法为轮询
    lb_kind DR  ! 设置LVS模式为直接路由
    nat_mask 255.255.255.0  ! 设置NAT掩码
!   persistence_timeout 50  ! 会话保持时间(秒),当前被注释
    protocol TCP  ! 设置协议为TCP

    real_server 192.168.192.112 80 {
        weight 1  ! 设置服务器权重
        TCP_CHECK {
            connect_port 80  ! 设置健康检查连接的端口
            connect_timeout 3  ! 设置连接超时时间(秒)
            nb_get_retry 3  ! 设置重试次数
            delay_before_retry 3  ! 设置重试间隔(秒)
        }
    }

    real_server 192.168.192.114 80 {
        weight 1
        TCP_CHECK {
            connect_port 80
            connect_timeout 3
            nb_get_retry 3
            delay_before_retry 3
        }
    }
}

keepalived会定期对real server进行健康检查,如果检查失败,它会尝试重新连接。如果在指定的重试次数内都无法成功连接**,keepalived会将该服务器标记为不可用,并将流量转发到其他可用的服务器。**

代码语言:javascript
代码运行次数:0
复制
systemctl start keepalived    #启动服务
systemctl enable keepalived    #开机自启

systemctl status keepalived

备服务器

代码语言:javascript
代码运行次数:0
复制
安装所需组件
yum -y install gcc openssl-devel libnfnetlink-devel libnl libnl3-devel
yum install -y keepalived ipvsadm

编辑配置文件

根据行号来修改所需的信息 我都列出来 大家自行寻找出来修改

代码语言:javascript
代码运行次数:0
复制
vim /etc/keepalived/keepalived.conf
代码语言:javascript
代码运行次数:0
复制
 12    router_id R2
 13 }
 14 
 15 vrrp_instance VI_1 {
 16     state BACKUP
 17     interface ens33
 18     virtual_router_id 2
 19     priority 95
 20     advert_int 1
 21     authentication {
 22         auth_type PASS
 23         auth_pass 1111
 24     }
 25     virtual_ipaddress {
 26         192.168.192.200
 27     }
 28 }
 
 30 virtual_server 192.168.192.200 80 {
 31     delay_loop 6
 32     lb_algo rr
 33     lb_kind DR
 34     nat_mask 255.255.255.0
 35 #   persistence_timeout 50
 36     protocol TCP
 37 
 38     real_server 192.168.192.112 80 {
 39         weight 1
 40         TCP_CHECK{
 41             connetc_port 80
 42             connect_timeout 3
 43             nb_get_retry 3
 44             delay_before_retry 3
 45          }
 46 
 47     real_server 192.168.192.114 80 {
 48         weight 1
 49         TCP_CHECK{
 50             connetc_port 80
 51             connect_timeout 3
 52             nb_get_retry 3
 53             delay_before_retry 3
 54          }
 55         }
 56         }
 57     }
代码语言:javascript
代码运行次数:0
复制
systemctl start keepalived  #启动服务
systemctl enable keepalived #开机自启

查看是否出错

代码语言:javascript
代码运行次数:0
复制
systemctl status keepalived

虚拟(漂移)地址测试

在主服务器上查看

代码语言:javascript
代码运行次数:0
复制
[root@localhost ~]# ip a sh dev ens33
2: ens33: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast state UP qlen 1000
    link/ether 00:0c:29:af:b6:81 brd ff:ff:ff:ff:ff:ff
    inet 192.168.192.100/24 brd 192.168.192.255 scope global ens33
       valid_lft forever preferred_lft forever
    inet 192.168.192.200/32 scope global ens33
       valid_lft forever preferred_lft forever
    inet6 fe80::20c:29ff:feaf:b681/64 scope link 
       valid_lft forever preferred_lft forever

备服务器查看

代码语言:javascript
代码运行次数:0
复制
[root@localhost ~]# ip a sh dev ens33
2: ens33: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast state UP qlen 1000
    link/ether 00:0c:29:b2:65:cb brd ff:ff:ff:ff:ff:ff
    inet 192.168.192.111/24 brd 192.168.192.255 scope global ens33
       valid_lft forever preferred_lft forever
    inet6 fe80::20c:29ff:feb2:65cb/64 scope link 
       valid_lft forever preferred_lft forever

此刻我们关闭终止主服务器keepalived

在查看

主服务器

备服务器

真实服务器(Web)

两台Web服务器配置

代码语言:javascript
代码运行次数:0
复制
yum install -y httpd
​
​
echo 111111 > /var/www/html/index.html
​
systemctl start httpd
curl 127.0.0.1
代码语言:javascript
代码运行次数:0
复制
cd /etc/sysconfig/network-scripts/
​
cp -p ifcfg-lo ifcfg-lo:0
vim ifcfg-lo:0
​
DEVICE=lo:0                #指定虚拟接口的名称。
IPADDR=192.168.192.200      #设置此接口的 IP 地址。
NETMASK=255.255.255.255     #设置网络掩码(这是 CIDR 表示法中的 /32)
NETWORK=192.168.192.200     #指定网络地址。
BROADCAST=192.168.192.200   #设置广播地址。
ONBOOT=yes                 #确保在启动时启动接口
NAME=loopback
        
ifup ifcfg-lo:0
​
route add -host 192.168.192.200 dev lo:0
​
代码语言:javascript
代码运行次数:0
复制
vim /etc/rc.local
/sbin/route add -host 192.168.192.200 dev lo:0

此命令添加路由,将 IP 192.168.192.200 的流量定向到环回接口 (lo:0)。这通常用于您希望系统将特定 IP 地址视为本地地址的配置,即使它实际上并未在任何物理接口上配置。

代码语言:javascript
代码运行次数:0
复制
vim /etc/sysctl.conf
加入以下信息
net.ipv4.conf.all.arp_ignore = 1
net.ipv4.conf.all.arp_announce =2
net.ipv4.conf.default.arp_ignore = 1
net.ipv4.conf.default.arp_announce =2
net.ipv4.conf.lo.arp_ignore = 1
net.ipv4.conf.lo.arp_announce =2
​
​
sysctl -p

这些设置主要用于提高网络安全性和性能,特别是在多网卡环境或负载均衡场景中。它们可以帮助减少不必要的ARP流量,防止ARP欺骗,并确保ARP请求只由适当的网络接口处理。

访问测试

在本机电脑查看

"成功的路上没有捷径,只有不断的努力与坚持。如果你和我一样,坚信努力会带来回报,请关注我,点个赞,一起迎接更加美好的明天!你的支持是我继续前行的动力!"

"每一次创作都是一次学习的过程,文章中若有不足之处,还请大家多多包容。你的关注和点赞是对我最大的支持,也欢迎大家提出宝贵的意见和建议,让我不断进步。"

神秘泣男子

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

如有侵权,请联系 cloudcommunity@tencent.com 删除。

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

如有侵权,请联系 cloudcommunity@tencent.com 删除。

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • ——前言——
  • Keepalived 简介
  • 工作原理
  • 实验环境
  • 主服务器
  • 备服务器
  • 虚拟(漂移)地址测试
  • 真实服务器(Web)
  • 访问测试
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档