什么是keepalived?

keepalived是集群管理中保证集群高可用的一个服务软件,其功能类似于heartbeat, 用来防止单点故障。

keepalived的两大核心功能是失败切换(高可用)和健康检查。所谓的健康检查,就是采用tcp三次握手,icmp请求,http请求,udp echo请求等方式对负载均衡器后面的实际的服务器(通常是承载真实业务的服务器)进行保活;而失败切换主要是应用于配置了主备模式的负载均衡器,利用VRRP维持主备负载均衡器的心跳,当主负载均衡器出现问题时,由备负载均衡器承载对应的业务,从而在最大限度上减少流量损失,并提供服务的稳定性

keepalived工作原理?

keepalived是以VRRP协议为实现基础的,是实现路由器高可用的协议,VRRP全称Virtual Router Redundancy Protocol,即虚拟路由冗余协议。

将N台提供相同功能的服务器组成一个服务器组,这个组里面有一个master和多个backup,master上面有一个对外提供服务的vip(该服务器所在局域网内其他机器的默认路由为该vip),master会发组播,当backup收不到vrrp包时就认为master宕掉了,这时就需要根据VRRP的优先级来选举一个backup当master。从而保证路由器的高可用。

keepalived主要有三个模块,分别是core、check和vrrp。core模块为keepalived的核心,负责主进程的启动、维护以及全局配置文件的加载和解析。check负责健康检查,包括常见的各种检查方式。vrrp模块是来实现VRRP协议的。

什么是脑裂?

脑裂(split-brain):指在一个高可用(HA)系统中,当联系着的两个节点断开联系时,本来为一个整体的系统,分裂为两个独立节点,这时两个节点开始争抢共享资源,结果会导致系统混乱,数据损坏。

解决:stonith `shoot the other node in the head`    爆头

重启keepalived 关闭keepalived服务

Keepalived+Nginx(实现Nginx负载均衡的高可用)

keepalived安装配置之前的准备操作

1)实验环境:接上一期博客dr模式

共需要五台虚拟机:sr1 sr2 dr1 dr2

客户端,用于集群的测试,无需任何配置。

在单台dr负载均衡的基础上添加了一台dr2

dr1上的操作:

[root@dr ~]# ipvsadm -C
 [root@dr ~]# ipvsadm -Ln


删除ip:
 可以重启网卡
 也可以使用ip命令

[root@dr ~]# ip a d 192.168.22.251/24 dev ens33

dr2上的操作

[root@dr2 ~]# yum install ipvsadm

添加ip地址

[root@dr2 ~]# cd /etc/sysconfig/network-scripts/
[root@dr2 network-scripts]# cp ifcfg-ens33 ifcfg-ens33:0
[root@dr2 network-scripts]# vim ifcfg-ens33:0

keepalived实现zabbix高可用 keepalived 高可用_高可用

 ens33也改为动态的,不然重启不了

[root@dr2 network-scripts]#  ipvsadm -A -t 192.168.22.251:80 -s rr
[root@dr2 network-scripts]# ipvsadm -a -t 192.168.22.251:80 -r 192.168.22.157:80 -g
[root@dr2 network-scripts]# ipvsadm -a -t 192.168.22.251:80 -r 192.168.22.158:80 -g

测试:
client上的操作

# curl 192.168.22.251

keepalived实现zabbix高可用 keepalived 高可用_高可用_02

 dr2清除规则

[root@dr2 ~]# ipvsadm -C

删除ip

可以重启网卡
 也可以使用ip命令

[root@client network-scripts]# ip a d 192.168.22.251/24 dev ens33

Keepalived实现负载均衡高可用的搭建

[root@dr ~]# yum install keepalived -y在master上安装配置Keepalived 
[root@dr2 ~]# yum install keepalived -y在backup上安装配置Keepalived

keepalived实现zabbix高可用 keepalived 高可用_高可用_03

 

keepalived实现zabbix高可用 keepalived 高可用_运维_04

vim /etc/keepalived/keepalived.conf 修改配置文件,将文件内容全部清空(ggvG   dd),添加如下配置

//全局配置 
 ! Configuration File for keepalived       !开头的是注释global_defs {
         notification_email {
                 root@localhost
                 }
         notification_email_from keepalived@localhost(keepalived@localhost是邮件可以改,但本地服务器没有邮件,改不改都一样)
         smtp_server 127.0.0.1
         smtp_connect_timeout 30
         router_id Director1
         }

局部配置

vrrp_instance VI_1 {
         state MASTER       (这里是设置这台机器的角色是master)//另外一台机器是BACKUP
         interface ens33           //心跳网卡       DIP那一块网卡
         virtual_router_id 51     id两边都一样
         priority 150             //优先级(级别两边不一样,只要保证两个数字不一样就行,官方说最少是超50以上)
         advert_int 1               //检查间隔,单位秒
         authentication {
                 auth_type PASS
                 auth_pass 1111
                 }
         virtual_ipaddress {
             192.168.22.251/24 dev ens33:0       //VIP随便自己定义  只要是同一个网段就可以(相当于ipvsadm加了一个-A)
                 }
         }virtual_server 192.168.22.251 80 {               //LVS 配置,VIP
     delay_loop 3                                                  //服务论询的时间间隔
     lb_algo rr                                                       //LVS 调度算法
     lb_kind DR                                                     // LVS 集群模式
     protocol TCP                                 tcp协议
     real_server 192.168.22.157 80 {  端口都是80
         weight 1   权重都是1
         TCP_CHECK {


            connect_timeout 3   健康检查的超时时间(3秒之内,查到一个web服务器是挂的,我就认为后端有服务器是挂掉的)你有几个real_server就写几个配置

}
         }
     real_server 192.168.22.158 80 {
         weight 1
         TCP_CHECK {
             connect_timeout 3
             }
         }
 }

:wq保存,第一台机器就配置好了,scp把它拷贝到另外一台机器上。

拷贝master上的keepalived.conf到dr2上

[root@dr keepalived]# scp keepalived.conf 192.168.22.143:/etc/keepalived/

拷贝过去之后,开始做第二台机器。修改backup。

全局配置不用改,在局部配置改

state MASTER改为state BACKUP(一定要大写)

 priority 50

开启Keepalived服务

启动之前观察一下,都没有路由

[root@dr keepalived]# ipvsadm -L
[root@dr keepalived]# systemctl start keepalived

启动完毕,ip a查看vip其中任何一台机器上有vip就行

keepalived实现zabbix高可用 keepalived 高可用_服务器_05

 现在没有真实的网卡,需要重新添加一块物理网卡。在vmware给dr1,dr2加物理网卡,

keepalived实现zabbix高可用 keepalived 高可用_服务器_06

在dr1,ip a 查看ip发现多了一块ens37

keepalived实现zabbix高可用 keepalived 高可用_重启_07

 在dr2,ip a查看多了ens37

keepalived实现zabbix高可用 keepalived 高可用_运维_08

 在dr1端,进入配置文件[root@dr ~]# vim /etc/keepalived/keepalived.conf

keepalived实现zabbix高可用 keepalived 高可用_服务器_09

 把192.168.22.251/24 dev ens33:0把这里换成ens37

[root@dr2 ~]# vim /etc/keepalived/keepalived.conf  在backup端也一样机器配置文件去修改成ens37

重启Keepalived

测试

ip a  查看,其中任何一台机器上有vip就行,发现vip地址在dr1上。如何判断谁是master:看vip在哪台服务器,谁就是master。

keepalived实现zabbix高可用 keepalived 高可用_运维_10

 在客户端测试。

keepalived实现zabbix高可用 keepalived 高可用_运维_11

Keepalived高可用的验证

模拟keepalived集群出现故障,master宕机,验证高可用是否生效

systemctl stop keepalived

master模拟keepalived宕机,查看vip,vip地址到了backup上了。

keepalived实现zabbix高可用 keepalived 高可用_运维_12

宕掉master仍然能访问成功,说明keepalived高可用配置生效。

keepalived实现zabbix高可用 keepalived 高可用_运维_13

因为maste宕机,keepalived集群的backup服务器收不到来自master的心跳包,所以backup认为master死亡,backup会重新选举新的master,因为只有一台backup,所以vip会出现在这台服务器。

当master恢复正常,查看高可用集群的vip。由于master的优先级为150,backup的优先级为50,当master服务器恢复正常后,vip会迅速的重新回到master中,master服务器重新成为Keepalived集群中的master

实验过程总结

rs1:192.168.22.157

rs2:   192.168.22.158

dr1:192.168.22.155

dr2:192.168.22.143

客户端:192.168.22.156

1. 设置rs的配置 1.1 安装web服务器 1.2 添加vip:192.168.22.251

2. dr的配置

2.1 两块网卡 两台机器上的两块网卡名称必须一样

2.2 路由条目的顺序必须一样

2.3 区分谁当dip 谁的路由条目在上面 谁当dip

2.4 dip要固定下来 20 21 ens33

2.5 vip ens37 :ip地址 有或没有都行 只要这个网卡是启动状态 如果有Ip地址,这个Ip不能是vip

2.6 安装ipvsadm

3. 安装keepalived到两台dr上

修改keepalived.conf配置文件: 设置vip 设置角色 master backup

设置realserver是谁 ip地址是多少

【注意】理论支持实践,实践和理论相结合。书到用时方恨少,平时多看书,少熬夜。