一 Keepalived介绍

keepalived 是一个类似于 layer3, 4 & 5 交换机制的软件,也就是我们平时说的第 3 层、第 4 层和第 5层交换。 Keepalived 的作用是检测 web 服务器的状态,如果有一台 web 服务器死机,或工作出现故障,Keepalived 将检测到,并将有故障的 web 服务器从系统中剔除,当 web 服务器工作正常后 Keepalived 自动将web 服务器加入到服务器群中,这些工作全部自动完成,不需要人工干涉,需要人工做的只是修复故障的web 服务器。
Keepalived +LVS-DR集群

二 Keepalived工作原理

工作在 IP/TCP 协议栈的 IP 层, TCP 层,及应用层,。

Layer3: Keepalived 使用 Layer3 的方式工作式时, Keepalived 会定期向服务器群中的服务器发送一个 ICMP 的数据包(既我们平时用的 Ping 程序) , 如果发现某台服务的 IP 地址没有**,Keepalived 便报告这台服务器失效,并将它从服务器群中剔除,这种情况的典型例子是某台服务器被非法关机。 Layer3 的方式是以服务器的 IP 地址是否有效作为服务器工作正常与否的标准。

Layer4: 主要以 TCP 端口的状态来决定服务器工作正常与否。如 web server 的服务端口一般是80,如果 Keepalived 检测到 80 端口没有启动,则 Keepalived 将把这台服务器从服务器群中删除。

Layer5: Layer5 就是工作在具体的应用层了,比 Layer3,Layer4 要复杂一点,在网络上占用的带宽也要大一些。 Keepalived 将根据用户的设定检查服务器程序的运行是否正常,如果与用户的设定不相符,则 Keepalived 将把服务器从服务器群中剔除。

三 使用Keepalived构建LVS-DR模式

机器名 IP 网关 机器作用
yunzu62.cn DIP:192.168.2. 62/24 VIP:192.168.2.111/24 192.168.2.1 主LVS
yunzu63.cn DIP:192.168.2.63/24 VIP:192.168.2.111/24 192.168.2.1 备用LVS
yunzu64.cn 192.168.2.64/24 192.168.2.1 RS1 web1
yunzu65.cn 192.168.2.65/24 192.168.2.1 RS2:web2

网络拓扑

Keepalived +LVS-DR集群

安装ipvsadm

[[email protected] ~]#yum install ipvsadm -y

安装keepalived

[[email protected] ~]#yum install –y keepalived
查看安装路径
rpm -ql keepalived-1.3.5-1.el7.x86_64

四:配置Keepalived+LVS-DR模式

配置参数: 节点 yunzu62(主节点); 节点 yunzu63(备用节点) ;  虚拟 IP
192.168.2.111对外提供服务的 IP。 要求默认情况下由节点 yunzu62提供服务,当节点 yunzu62 不可用时,由节点 yunzu63 提供服务(即虚拟 IP 漂移至节点 yunzu63)。

主节点Yunzu62.cn配置

[[email protected] keepalived]# cp keepalived.conf keepalived.conf.bak
[[email protected] ~]# vim  /etc/keepalived/keepalived.conf
global_defs {
   notification_email {
     [email protected]                         #默认三个地址,修改可用地址
   }
   notification_email_from [email protected]
   smtp_server localhost
   smtp_connect_timeout 30
   router_id yunzu62    #标识当前节点名字,两个节点的此项需要不相同。
}
#默认的配置文件中,使用第三方 smtp 服务器,但这在现实中几乎没有意义,发不出邮件,我们将其挃定为 localhost, 我们也可以将通知信息的发送交给本地 sendmail 服务处理。
vrrp_instance apache {  #定义一个实例,一个集群就是一个实例。 默认VI_1 可以随意改
    state MASTER        #指定 A 节点为主节点 备用节点上设置为 BACKUP 即可
    interface ens33          #绑定虚拟 IP 的网络接口
    virtual_router_id 51    #VRRP 组名,两个节点的设置必须一样,以指明各个节点属于同一 VRRP 组
    priority 100            #主节点的优先级(1-254 之间),备用节点必须比主节点优先级低
    advert_int 1             #组播信息发送间隔,两个节点设置必须一样
    authentication {         #设置验证信息,两个节点必须一致
       auth_type PASS
        auth_pass 1111
    }
    virtual_ipaddress {
        192.168.2.111        #指定虚拟 IP, 两个节点设置必须一样
    }
}

#类似添加虚拟一个服务 ipvsadm -A -t 192.168.1.70:80 -s rr
virtual_server 192.168.2.111 80 {    #对虚拟IP63添加LVS相关内容
    delay_loop 6                    #Keepalived 多长时间监测一次 RS
    lb_algo rr                      #分发算法
    lb_kind DR                      #DR 模式
    #nat_mask 255.255.255.0
    persistence_timeout 50  #同一 IP 50秒内的请求都发到同个real server ,这个会影响LVS的 rr 调度算法, 同一 IP 超过 50 秒后,再次访问,才会被转发到另一台 real server 上。 persistence 持久性的意思, 可以注释,可以写小
    protocol TCP
#ipvsadm -a -t 192.168.2.111:80 -r 192.168.2.64 -g 添加的内容,类似这条命令
#ipvsadm -a -t 192.168.2.111:80 -r 192.168.2.65 –g 添加的内容,类似这条命令
    real_server 192.168.1.64 80 { #配置服务节点 1,需要指定 realserver 的真实 IP 地址和端口,IP不端口之间用空格隔开
        weight 1    #配置服务节点的权值,权值大小用数字表示,数字越大,权值越高,设置权值大小可以为不同性能的服务器 
        TCP_CHECK {     #这段内容手动添加,爸以前的内容删除
                connect_timeout 3       #表示 3 秒无响应超时
                nb_get_retry 3          #表示重试次数
                delay_before_retry 3    #表示重试间隔
                connect_port 80         #检测端口
                }
    }
    real_server 192.168.1.65 80 {
        weight 1
        TCP_CHECK {
                connect_timeout 3
                nb_get_retry 3
                delay_before_retry 3
                connect_port 80
                }
    }
}
#默认配置文件中还有两个 virtual_server 模版,把剩下的都删除了,就可以。 如:
#virtual_server 10.10.10.2 1358 {  。。。 }
#virtual_server 10.10.10.3 1358 {  。。。 }

[[email protected] keepalived]# systemctl restart keepalived
[[email protected] keepalived]# systemctl enable keepalived
[[email protected] keepalived]# ipvsadm -L –n

备用节点Yunzu63.cn配置

[[email protected] ~]#yum install ipvsadm -y
[[email protected] ~]#yum install keepalived -y
和主节点yunzu62配置差不多相同,直接从yunzu62上scp拷贝配置文件
[[email protected] ~]# scp /etc/keepalived/keepalived.conf      192.168.2.63:/etc/keepalived/
[[email protected]~]#  vim /etc/keepalived/keepalived.conf
 router_id yunzu63   #运行 keepalived 的机器标示符
}
vrrp_instance apache {
    state BACKUP            #当前 LVS 状态为备用分发器
    interface ens33
    virtual_router_id 51
    priority 90             #LVS 优先级,备的要比主的小
启动:
[[email protected] keepalived]# systemctl restart keepalived
[[email protected] keepalived]# systemctl enable keepalived

测试LVS IP飘移

[[email protected] keepalived]# systemctl stop keepalived
[[email protected] keepalived]# ip addr
1: lo: <LOOPBACK,UP,LOWER_UP> mtu 65536 qdisc noqueue state UNKNOWN qlen 1
    link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00
    inet 127.0.0.1/8 scope host lo
       valid_lft forever preferred_lft forever
    inet6 ::1/128 scope host
       valid_lft forever preferred_lft forever
2: ens32: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast state UP qlen 1000
    link/ether 00:0c:29:89:ac:42 brd ff:ff:ff:ff:ff:ff
    inet 192.168.2.63/24 brd 192.168.2.255 scope global ens32
       valid_lft forever preferred_lft forever
    inet 192.168.2.111/32 scope global ens32
       valid_lft forever preferred_lft forever

[[email protected] keepalived]# ipvsadm -L –n
IP Virtual Server version 1.2.1 (size=4096)
Prot LocalAddress:Port Scheduler Flags
  -> RemoteAddress:Port           Forward Weight ActiveConn InActConn
TCP  192.168.2.111:80 rr persistent 50
#看到192.168.1.63飘移过来了,就证明一切正常了

配置RS1

[[email protected] ~]# vim /etc/init.d/lvsrsdr    #写一个配置RS的脚本

#!/bin/bash
#description:start relserver
VIP=192.168.2.111
source /etc/init.d/functions                #加载环境变量(可以加载所有的环境变量)
case $1 in
start)
        echo ‘start LVS of Realserver DR’
        /sbin/ifconfig lo:1 $VIP broadcast $VIP netmask 255.255.255.255 up
        /sbin/route add -host $VIP dev lo:1
        echo ‘1’ > /proc/sys/net/ipv4/conf/lo/arp_ignore
       echo ‘2’ > /proc/sys/net/ipv4/conf/lo/arp_announce
        echo ‘1’ > /proc/sys/net/ipv4/conf/all/arp_ignore
        echo ‘2’ > /proc/sys/net/ipv4/conf/all/arp_announce
        ;;
stop)
        /sbin/ifconfig lo:1 down
        echo ‘Close LVS of Realserver DR’
        echo ‘0’ > /proc/sys/net/ipv4/conf/lo/arp_ignore
        echo ‘0’ > /proc/sys/net/ipv4/conf/lo/arp_announce
        echo ‘0’ > /proc/sys/net/ipv4/conf/all/arp_ignore
        echo ‘0’ > /proc/sys/net/ipv4/conf/all/arp_announce
        ;;
*)
        echo “Usage:$0 (start|stop)”
exit 1
esac

[[email protected] ~]# chmod +x /etc/init.d/lvsrsdr
[[email protected] ~]# /etc/init.d/lvsrsdr start
[[email protected] ~]# echo “/etc/init.d/lvsrsdr start” >> /etc/rc.local
[[email protected] ~]# ifconfig -a
lo:1: flags=73<UP,LOOPBACK,RUNNING>  mtu 65536
        inet 192.168.2.111  netmask 255.255.255.255
       loop  txqueuelen 1  (Local Loopback)

[[email protected] ~]# yum install -y httpd
[[email protected]~]# echo 192.168.2.64 > /var/www/html/index.html
[[email protected] ~]# systemctl restart httpd

配置RS2

从Yunzu64上拷贝脚本
[[email protected] ~]# scp /etc/init.d/lvsrsdr 192.168.2.65: /etc/init.d/     
然后执行
[[email protected] ~]# chmod +x /etc/init.d/lvsrsdr
[[email protected] ~]# /etc/init.d/lvsrsdr start
[[email protected] ~]# echo "/etc/init.d/lvsrsdr start " >> /etc/rc.local
[[email protected] ~]# ifconfig -a
lo:1: flags=73<UP,LOOPBACK,RUNNING>  mtu 65536
        inet 192.168.2.111  netmask 255.255.255.255
        loop  txqueuelen 1  (Local Loopback)

[[email protected] ~]# yum install -y httpd
[[email protected] ~]# echo 192.168.1.65 > /var/www/html/index.html
[[email protected] ~]# systemctl restart httpd

测试

[[email protected] ~]#elinxs 192.168.2.111 –-dump
192.168.2.64
[[email protected] ~]#elinxs 192.168.2.111 –-dump
192.168.2.65
#可以发现开始轮询了

测试主备切换,首选在主上Xueogd62上查看状态
[[email protected] keepalived]# ipvsadm -L -n
IP Virtual Server version 1.2.1 (size=4096)
Prot LocalAddress:Port Scheduler Flags
  -> RemoteAddress:Port           Forward Weight ActiveConn InActConn
TCP  192.168.2.111:80 rr
  -> 192.168.2.64:80              Route   1      0          0        
  -> 192.168.2.65:80              Route   1      0          1

在备上查看Yunzu63的状态
[[email protected] keepalived]# ipvsadm -L -n
IP Virtual Server version 1.2.1 (size=4096)
Prot LocalAddress:Port Scheduler Flags
  -> RemoteAddress:Port           Forward Weight ActiveConn InActConn

在yunzu62上停掉keepalived, 模拟故障,在查看yunzu63
[[email protected] ~]# systemctl stop keepalived       
[[email protected] keepalived]# ipvsadm -L –n
P Virtual Server version 1.2.1 (size=4096)
Prot LocalAddress:Port Scheduler Flags
  -> RemoteAddress:Port           Forward Weight ActiveConn InActConn
TCP  192.168.2.111:80 rr
  -> 192.168.2.64:80              Route   1      0          0        
  -> 192.168.2.65:80              Route   1      0          0

从日志看:
[[email protected] keepalived]# tailf /var/log/messages

相关文章: