“Yeah It’s on. ”
keepalived高可用集群(二)
前面(一)只是一个简单的配置,只能在主机宕掉之后,keepalived才会切换,而不能对应到某个服务或某些服务,这节将优化配置文件,达到更好的可用性。
一、keepalived单播
在阿里云中配置keepalived时,各服务器之间不允许广播或者组播,这里就用到了单播
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
# vim /etc/keepalived/keepalived.conf
global_defs {
router_id haweb_1
}
vrrp_sync_group VGM {
group {
VI_HA
}
}
vrrp_instance VI_HA {
state MASTER
interface ens33
lvs_sync_daemon_inteface ens33
virtual_router_id 51
priority 100
advert_int 5
authentication {
auth_type PASS
auth_pass zhangbin
}
unicast_src_ip 192.168.206.132 #源地址
unicast_peer {
192.168.206.135 #目标地址
}
virtual_ipaddress {
192.168.206.138/24 dev ens33 label ens33:0 #vip虚拟地址
}
}
二、针对某一服务的keepalived(防脑裂)
这里以nginx为例
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
# vim /etc/keepalived/nginxstatus.sh
#!/bin/bash
counter=$(ps -C nginx --no-heading|wc -l)
if [ "${counter}" = "0" ]; then
/usr/local/nginx/sbin/nginx
#/usr/bin/systemctl restart nginx.service
sleep 2
counter=$(ps -C nginx --no-heading|wc -l)
if [ "${counter}" = "0" ]; then
ps -ef |grep keepalived | grep -v grep | awk '{print $2}' | xargs kill -9
#/usr/bin/systemctl stop keepalived.service
fi
fi
1
chmod +x /etc/keepalived/nginxstatus.sh
然后修改keepalived配置文件
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
vi /etc/keepalived/keepalived.conf
! Configuration File for keepalived
global_defs {
router_id LVS_001B #router_id 这要个唯一
}
vrrp_instance VI_1 {
state MASTER
interface ens33
virtual_router_id 51 #这个virtual_router_id 在两台机器上要相同
priority 100
unicast_src_ip 192.168.3.55 #本地IP地址
unicast_peer {
192.168.3.56 #对端IP地址,此地址一定不能忘记
}
advert_int 1
authentication {
auth_type PASS
auth_pass zhangbin
}
virtual_ipaddress {
192.168.3.58/24 dev ens33 label ens33:0
}
}
virtual_server 192.168.3.58 80 {
delay_loop 2 #每隔2秒 检测real_server状态
lb_algo rr #定义lvs调度算法
lb_kind DR #定义lvs工作模式
persistence_timeout 60 #定义持久链接时长
protocol TCP #定义集群的协议
real_server 192.168.3.55 80 {
weight 1
notify_down /etc/keepalived/nginxstatus.sh #检查服务器失败后要执行的脚本,与notify_up相对
TCP_CHECK {
connect_port 80 #监控检查的端口
connect_timeout 3 #连接超时时间
nb_get_retry 2 #重连次数
delay_before_retry 1 #重连间隔
}
}
}
当主服务器上的nginx出现问题死掉后,脚本会杀死keepalived进程,然后服务转向从服务器