一、keepalived工作原理
keepalive高可用对之间是通过VRRP通信的。
1、VRRP,全称Virutal Router Redundancy Protocol(虚拟路由冗余协议),VRRP的出现是为了解决静态路由的单点故障。
2、VRRP是通过一种竞选协议机制来将路由任务交给某台VRRP路由器的。
3、VRRP使用IP多播(Multicast)方式实现高可用之间的通信,默认多播地址为:224.0.0.18。
4、工作时主节点发包,备节点接包。当备节点接收不到主节点发的数据包的时候,就启动接管程序接管主节点的资源。备节点可以有多个,通过优先级竞选。
5、VRRP使用了加密协议加密数据,但keepalive官方目前还是推荐使用明文的方式配置认证类型和密码。
二、keepalived服务工作原理
keepalived高可用对之间通过VRRP进行通信,VRRP是通过竞选机制来确定主备的,主的优先级高于备,因此在工作时会优先获得所有的资源,备节点处于等待状态,当主挂了的时候,备节点就会接管主节点的资源,然后顶替主节点对外提供服务。
在keepalive服务对之间,只有作为主的服务器会一直发送VRRP广播包,告诉备它还活着,此时备不会抢占主,当主不可用时,即备监听不到主发送的广播包时,就会启动相关服务接管资源,保证业务的连续性。接管速度最快可以小于1秒。
实验环境:
A机:ip 192.168.10.201 【RHEL 7.0】—主
B机:ip 192.168.10.202 【RHEL 7.3】—备
C机:ip 192.168.10.203 【RHEL 7.3】–Real Server 1
D机:ip 192.168.10.204 【CentOS 6.8】–Real Server 2
VIP:192.168.10.188
一、A、B机配置:
1、安装keepalived、ipvsadm
#yum install keepalived ipvsadm -y
2、配置keepalived:B机和A机的配置大体相同,注意下面配置文件中的红色字体。以下的配置为A机的配置。
2.1 vim /etc/keepalived/keepalived.conf
global_defs {
notification_email {
root@localhost
}
notification_email_from kaadmin@localhost
smtp_server 127.0.0.1
smtp_connect_timeout 30
router_id LVS_DEVEL
vrrp_mcast_group4 224.0.1.118
}
vrrp_script chk_mt {
script "/etc/keepalived/hlcheck.sh"
interval 1
weight -2
}
vrrp_instance VI_1 {
state MASTER #主LVS为MASTER,备用为:BACKUP
interface eno16777736 #备用的是RHEL7.3系统,要改为ens33
virtual_router_id 51
priority 100 #定义优先级,数字越大,优先级越高,主DR必须大于备用DR
advert_int 1
authentication {
auth_type PASS
auth_pass 6ae2fa680744 #可使用 openssl rand -hex 6产生
}
virtual_ipaddress {
192.168.10.188/16 dev eno16777736 label eno16777736:1 #指定虚拟IP地址,7.3系统网卡为ens33
}
track_script {
chk_mt
}
notify_master "/etc/keepalived/notify.sh master"
notify_backup "/etc/keepalived/notify.sh backup"
notify_fault "/etc/keepalived/notify.sh fault"
}
virtual_server 192.168.10.188 80 {
delay_loop 6 # 设置健康检查时间,单位是秒
lb_algo wrr #LVS调度算法有rr、wrr、sh、dh、lc、wjc、sed等
lb_kind DR #使用DR(直接路由),还有NAT、TUN等模式
nat_mask 255.255.0.0
protocol TCP
sorry_server 127.0.0.1 80
real_server 192.168.10.203 80 {
weight 1 # 配置节点权值,数字越大权重越高
HTTP_GET {
url {
path /
status_code 200
}
connect_timeout 3
nb_get_retry 3
delay_before_retry 3
}
}
real_server 192.168.10.204 80 {
weight 2
HTTP_GET {
url {
path /
status_code 200
}
connect_timeout 3
nb_get_retry 3
delay_before_retry 3
}
}
}
2.2 vim /etc/keepalived/notify.sh
vip=192.168.10.188
contact='root@localhost'
notify(){
mailsubject="`hostname` to be $1:$vip floating"
mailbody="`date '+%F %H:%M:%S'`:vrrp transition,`hostname` changed to be $1"
echo $mailbody | mail -s "$mailsubject" $contact
}
case "$1" in
master)
notify master
# /etc/rc.d/init.d/haproxy start
exit 0
;;
backup)
notify backup
exit 0
;;
fault)
notify fault
exit 0
;;
*)
echo 'Usage:`basename $0` {master|backup|fault}'
exit 1
;;
esac
2.3 vim /etc/keepalived/hlcheck.sh
#!/bin/bash
[[ -f /etc/keepalived/down ]] && exit 1 || exit 0
chmod +x /etc/keepalived/hlcheck.sh
B机的配置跟A机大体相同,注意修改上面的文件的红色字体部分即可。
二、配置RS1(Real Server 1)和RS2(Real Server 2)
RS1、RS2配置:
1、配置脚本: # vim /root/set.sh
#!/bin/bash
SNS_VIP=192.168.10.188
case $1 in
start)
ifconfig lo:0 $SNS_VIP netmask 255.255.255.255 broadcast $SNS_VIP
/sbin/route add -host $SNS_VIP dev lo:0
echo 1 > /proc/sys/net/ipv4/conf/all/arp_ignore
echo 1 > /proc/sys/net/ipv4/conf/lo/arp_ignore
echo 2 > /proc/sys/net/ipv4/conf/all/arp_announce
echo 2 > /proc/sys/net/ipv4/conf/lo/arp_announce
echo "RealServer Start OK…"
;;
stop)
ifconfig lo:0 down
route del $SNS_VIP >/dev/null 2>&1
echo 0 > /proc/sys/net/ipv4/conf/all/arp_ignore
echo 0 > /proc/sys/net/ipv4/conf/lo/arp_ignore
echo 0 > /proc/sys/net/ipv4/conf/all/arp_announce
echo 0 > /proc/sys/net/ipv4/conf/lo/arp_announce
echo "RealServer Stop…"
;;
esac
2、运行配置脚本:
[root@node3 ~]# bash set.sh start
3、配置脚本复制到/etc/init.d设置开机启动执行脚本
[root@node3 ~]# cp set.sh /etc/init.d
# echo "/etc/init.d/set.sh start" >> /etc/rc.local
#chmod +x /etc/rc.d/rc.local
4、安装httpd
yum install httpd -y
5、配置httpd测试页:
vim /var/www/html/index.html
RS1测试页的内容为:RS1 ==> RHEL 7.3 192.168.10.203
RS2测试页的内容为:RS2 ==> CentOS 6.8 192.168.10.204
5、RS1、RS2启动httpd服务
RS1:systemctl start httpd
RS2:service httpd start
三、A机、B机启动keepalived服务
systemctl start keepalved
为了方便测试,A、B、C、D四台机都清空防火墙或关闭防火墙
浏览器打开:192.168.10.188
OK测试正常。。。