keepalived
作用: 防止单点故障 实现集群高可用
lvs :负载均衡
haproxy: 可以对后端进行检查 get /index.html 会剔除掉不健康的主机
keepalived:起初就是为了搭配lvs使用的,因为lvs本身对后端没有健康检查的作用,如果服务端有一个主机宕机,lvs还会将请求交给该主机,为了避免这种情况的发生,所有使用keepalived搭配lvs使用,让其能够对后端有健康检查的功能,从而剔除不正常的主机
之后为了解决更多的问题。对keepalived进行了优化,让其实现vrrp协议(虚拟路由冗余协议)从而能够解决单点故障,保证集群的一个高可用状态
高可用:防止集群的一个高可用状态
高并发:能够供多个客户端访问
单点故障:集群中一个节点坏掉
原理:
keepalived如何实现对故障的转移,解决单点故障,是因为keepalived可以设置虚拟ip,这个虚拟ip是实际工作的ip,当keepalived配置了虚拟ip,这个虚拟ip就会有一定的特定,会变成漂移ip,这个ip漂移到那个主机上,就是由那个主机正在工作,keepalived分为主和备(master和backup),主会定期给备份发送消息(消息时间为1s)从而证明自己在工作,如果当备份接收不到主的消息,则会认为主宕机,之后这个vip将会漂移到备份上,从而由备份进行工作,保证集群的高可用
当主恢复以后,漂移ip又会漂移到主上面,继续为整个集群工作
环境:
client | 192.168.10.30 |
---|---|
lvs+keepalived主 | ip 192.168.10.2 漂移ip 192.168.10.100 |
lvs+keepalived备 | ip 192.168.10.3 |
web1 | 192.168.10.10 lo:1 192.168.10.100 |
web2 | 192.168.10.20 lo:1 192.168.10.100 |
准备:
web1:
[root@localhost ~]# yum -y install httpd
[root@localhost ~]# echo 11111 > /var/www/html/index.html
[root@localhost ~]# systemctl restart httpd
[root@localhost ~]# curl 192.168.10.10
11111
web2:
[root@localhost ~]# yum -y install httpd
[root@localhost ~]# echo 22222 > /var/www/html/index.html
[root@localhost ~]# systemctl restart httpd
[root@localhost ~]# curl 192.168.10.20
22222
lvs+keepalived:(两台上操作一样)
[root@localhost ~]# yum -y install popt-devel kernel-devel openssl-devel
[root@localhost ~]# tar -zxf keepalived-1.2.13.tar.gz
[root@localhost ~]# cd keepalived-1.2.13/
[root@localhost keepalived-1.2.13]# ./configure --prefix=/ --with-kernel-dir=/usr/src/kernel && make && make install
[root@localhost keepalived-1.2.13]# echo $? #检测安装是否成功
0
实验:lvsDR模式
web:(两台操作一样)
[root@localhost ~]# cd /etc/sysconfig/network-scripts/
[root@localhost network-scripts]# cp ifcfg-lo ifcfg-lo:0
[root@localhost network-scripts]# vim ifcfg-lo:0
1 DEVICE=lo:0
2 IPADDR=192.168.10.100
3 NETMASK=255.255.255.255
9 NAME=one
[root@localhost network-scripts]# systemctl restart network
[root@localhost network-scripts]# vim /etc/sysctl.conf
[root@localhost network-scripts]# sysctl -p
net.ipv4.conf.lo.arp_ignore = 1
net.ipv4.conf.all.arp_ignore = 1
net.ipv4.conf.default.arp_ignore = 1
net.ipv4.conf.lo.arp_announce = 2
net.ipv4.conf.all.arp_announce = 2
net.ipv4.conf.default.arp_announce = 2
[root@localhost network-scripts]# route add -host 192.168.10.100 dev lo:0
lvs+keepalived:(两台上操作一样)
[root@localhost ~]# yum -y install ipvsadm
[root@localhost ~]# cp /etc/keepalived/keepalived.conf /etc/keepalived/keepalived.bak
[root@localhost ~]# modprobe ip_vs
lvs+keepalived主:
[root@localhost ~]# vim /etc/keepalived/keepalived.conf
17 interface ens33
25 virtual_ipaddress { #漂移ip
26 192.168.10.100
27 }
#下面这块只是在基于lvs时才做
30 virtual_server 192.168.10.100 80 {
31 delay_loop 6
32 lb_algo rr
33 lb_kind DR #工作模式
34 nat_mask 255.255.255.0 #子网掩码
35 persistence_timeout 0 #会话保持时间
36 protocol TCP #tcp连接
37
38 real_server 192.168.10.10 80 { #后端的真实主机
39 weight 1 #权重
40 connect_port 80 #连接端口
41 connect_timeout 3 #超时时间
42 nb_get_retry 3 #与节点连接的成功次数
43 delay_before_retry 3 #每隔多久建立连接
44 }
47 real_server 192.168.10.20 80 {
48 weight 1
49 connect_port 80
50 connect_timeout 3
51 nb_get_retry 3
52 delay_before_retry 3
53 }
54 }
#下面其余部分全部删除
[root@localhost ~]# scp /etc/keepalived/keepalived.conf root@192.168.10.3:/etc/keepalived/keepalived.conf
#
The authenticity of host '192.168.10.3 (192.168.10.3)' can't be established.
ECDSA key fingerprint is 72:3f:c7:4d:d7:98:b1:59:0e:0b:da:99:07:25:d8:63.
Are you sure you want to continue connecting (yes/no)? yes
Warning: Permanently added '192.168.10.3' (ECDSA) to the list of known hosts.
root@192.168.10.3's password:
keepalived.conf 100% 1039 1.0KB/s 00:00
lvs+keepalived备:
[root@localhost ~]# vim /etc/keepalived/keepalived.conf
16 state BACKUP
17 interface ens33
19 priority 90
回到主 两边启动:
[root@localhost ~]# service keepalived start
Starting keepalived (via systemctl): [ 确定 ]
[root@localhost ~]# ipvsadm -ln
IP Virtual Server version 1.2.1 (size=4096)
Prot LocalAddress:Port Scheduler Flags
-> RemoteAddress:Port Forward Weight ActiveConn InActConn
TCP 192.168.10.100:80 rr
-> 192.168.10.10:80 Route 1 0 0
-> 192.168.10.20:80 Route 1 0 0
lvs+keepalived主:
[root@localhost ~]# ip a
inet 192.168.10.100/32
注:备份的那台主机是没有漂移ip的
客户端验证:
[root@localhost ~]# curl 192.168.10.100
22222
[root@localhost ~]# curl 192.168.10.100
11111
注:如果将主关闭,那么漂移ip将会自动转移到备份上。但当主重新启动,漂移ip又将会回到主上
实际环境当中
不会设置主和备
而是会设置两个备份 这样他们会根据优先级来选择主 承接漂移ip 并且会设置非抢占模式 节省主恢复后,备份会将漂移ip交给主的时间,当主恢复后,不会主去抢占主的位置还是备份进行工作
16 state BACKUP
17 nopreempt #开启非抢占模式
需要先结束掉所有的keepalived
[root@localhost ~]# service keepalived stop
Stopping keepalived (via systemctl): [ OK ]
然后启动服务:
[root@localhost ~]# service keepalived start
Stopping keepalived (via systemctl): [ OK ]