什么是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
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
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
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就行
现在没有真实的网卡,需要重新添加一块物理网卡。在vmware给dr1,dr2加物理网卡,
在dr1,ip a 查看ip发现多了一块ens37
在dr2,ip a查看多了ens37
在dr1端,进入配置文件[root@dr ~]# vim /etc/keepalived/keepalived.conf
把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高可用的验证
模拟keepalived集群出现故障,master宕机,验证高可用是否生效
systemctl stop keepalived
master模拟keepalived宕机,查看vip,vip地址到了backup上了。
宕掉master仍然能访问成功,说明keepalived高可用配置生效。
因为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地址是多少
【注意】理论支持实践,实践和理论相结合。书到用时方恨少,平时多看书,少熬夜。