1.为什么需要keepalived
keepalived是为了解决单点故障,给两台不同的ip提供了自动飘逸虚拟ip的功能
什么是vrrp
虚拟路由冗余协议
1.keepalived高可用是基于vrrp虚拟路由冗余协议实现
2.vrrp也就是虚拟路由冗余协议,是为了解静态路由的单点故障
3.vrrp通过竞选协议将路由任务交给某一台vrrp路由器
4.vrrp正常工作时,master会自动发送数据包,backup会自动接收数据包,如果backup机器收不到master的数据包,那么他就会自动的接收master的资源,backup节点可以有多个,通过优先级竞争,但keepalived服务器一般都是成对的出现
5.vrrp默认对数据包进行加密,但是官网默认还是推荐明文来配置认证
keepalived工作原理
1.keepalived就是基于vrrp协议实现的高可用,master的优先级必须高于 backup 因此启动时,master优先级获得机器 ip 的资源,backup机器 他不会抢夺资源
2.在keepalived工作是,master机器会一直发送vrrp广播数据包,告诉其他backup机器 “我还活着”,此时 backup机器不会抢夺 master的资源 ,当master出现问题了,导致 backup 收不到 master的数据包,因此开始接替 vip 保证业务的不中断,整个过程小于 1s
工作原理
1.两台LB机器均部署好 keepalived 工具,并启动相关的服务
2.角色 master 的机器获得ip资源 因为用户提供访问(nginx)
3.角色 backup 的机器作为 master 机器的热备机(master挂了,立即接替)
故障时
1.当 master 出现故障时
2.backup 机器自动接管 master 的所有工作,接管 vip 以及其他资源
修复后
1.master 修复后,自动接管他本身的资源,如 vip
2.backup 机器自动释放接管的资源
此时两台机器恢复启动角色,以及工作状态
注:vip只能出现在一台机器上,当 vip 出现在两台机器上就会出现脑裂现象
部署keepalived
准备四台机器
test 192.168.23.100 keepalived master机器
test1 192.168.23.101 keepalived backup机器
test2 192.168.23.102 web机器
test3 192.168.23.103 web机器
两台web机器安装nginx做负载均衡即可
yum install nginx -y
echo 'test2' > /usr/share/nginx/html/index.html
echo 'test3' > /usr/share/nginx/html/index.html
两台机器重启nginx
systemctl restart nginx
访问测试即可
部署负载均衡机器(test2 test3)
1.安装 nginx
yum install nginx -y
2.更改配置文件
upstream web-pool {
server 192.168.23.100;
server 192.168.23.101;
}
server {
listen 80;
server_name _;
location / {
proxy_pass http://web-pool/;
}
}
3.重启nginx
systemctl restart nginx
4.访问测试
[root@test2 conf.d]# curl 127.0.0.1
test
[root@test2 conf.d]# curl 127.0.0.1
test1
[root@test2 conf.d]# curl 127.0.0.1
test
[root@test2 conf.d]# curl 127.0.0.1
test1
[root@test3 conf.d]# curl 127.0.0.1
test
[root@test3 conf.d]# curl 127.0.0.1
test1
[root@test3 conf.d]# curl 127.0.0.1
test
此时 test2 和test3都可以访问,需要绑定那个地址呢,需要绑定 test2 和tes3 都通信的地址
需要给这俩绑定一个 192.168.23.0/24 没人用的ip
部署test2和test3的keepalived
1.安装 keepalived
yum install keepalived -y
2.更改master的keepalived配置文件的参数,注意,中文注释别写到配置文件中
[root@test2 ~]# cat /etc/keepalived/keepalived.conf
global_defs {
router_id test2 #路由器id,每个机器不一样,确保是两个独立的虚拟路由器,不一定要主机名,随便一个名字就可以
}
vrrp_instance VI_1 { #设置vrrp路由器组组名,属于同一组的名字一样
state MASTER #角色,是master 还是 backup
interface ens33 #vip绑定的网卡
virtual_router_id 50 #虚拟路由ip,同一组的一养
priority 100 #优先级,优先级越高,权重越高,也就是master大于backup
advert_int 1 #发送组播间隔 1s
authentication { #认证方式
auth_type PASS #密码认证,明文密码 1111 ,由于在组播内,可以存在多个,一组服务器,实现master和backup通信,要做基本的密码认证,由于是在内网环境,明文即可
auth_pass 1111
}
virtual_ipaddress { #指定虚拟 vip 地址,必须没有人使用
192.168.23.5/24
}
}
3.更改 test3机器为 backup
[root@test3 ~]# cat /etc/keepalived/keepalived.conf
global_defs {
router_id test3 #不一样
}
vrrp_instance VI_1 {
state BACKUP #不一样
interface ens33
virtual_router_id 50
priority 50 #不一样
advert_int 1
authentication {
auth_type PASS
auth_pass 1111
}
virtual_ipaddress {
192.168.23.5/24
}
}
重启 keepalived 查看vip是否生成
1.重启
systemctl restart keepalived
2.查看
[root@test2 ~]# ip a
1: lo: <LOOPBACK,UP,LOWER_UP> mtu 65536 qdisc noqueue state UNKNOWN group default qlen 1000
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: ens33: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast state UP group default qlen 1000
link/ether 00:0c:29:98:f6:8e brd ff:ff:ff:ff:ff:ff
inet 192.168.23.102/24 brd 192.168.23.255 scope global noprefixroute ens33
valid_lft forever preferred_lft forever
inet 192.168.23.104/24 scope global secondary ens33
valid_lft forever preferred_lft forever
inet6 fe80::4c2b:9f25:496:afac/64 scope link tentative noprefixroute dadfailed
valid_lft forever preferred_lft forever
inet6 fe80::22ab:bba5:bd53:58f5/64 scope link tentative noprefixroute dadfailed
valid_lft forever preferred_lft forever
inet6 fe80::f0b4:227a:7b06:1950/64 scope link noprefixroute
valid_lft forever preferred_lft forever
此时已经生成了虚拟ip,因为test2 是master 所以 vip在test2上
windows绑定 master的ip,测试访问
[root@test2 ~]# curl 192.168.23.104
test
[root@test2 ~]# curl 192.168.23.104
test1
[root@test2 ~]# curl 192.168.23.104
test