前言
这篇文章主要记录keepalived做后端双机热备,没有搭配Nginx
一、安装
使用最简单的yum安装:
yum install -y curl gcc openssl-devel libnl3-devel net-snmp-devel
yum install -y keepalived
我自己yum安装后,检查了一下,文件自动就在系统路径下,如果不在,安装好后将默认路径下的文件拷贝到指定系统路径下实现命令直接启动
cp /usr/local/keepalived/etc/keepalived.conf /etc/keepalived/keepalived.conf
cp /usr/local/keepalived/etc/rc.d/init.d/keepalived /etc/rc.d/init.d/keepalived
cp /usr/local/keepalived/etc/sysconfig/keepalived /etc/sysconfig/keepalived
cp /usr/local/sbin/keepalived /usr/sbin/
二、命令
service keepalived start #启动服务
service keepalived stop #停止服务
service keepalived restart #重启服务
systemctl status keepalived.service #查看当前状态
此时启动keepalived可能会报错,可能会启动,但是片刻后查看状态又是dead,不要担心,基本没什么问题,只需要将你的服务环境(虚拟ip、端口、服务启动。。。)都准备好,修改完配置文件后再次启动。
三、配置文件
1、主机配置文件:
global_defs {
notification_email {
接收方邮箱
}
notification_email_from 发送方邮箱
smtp_server 127.0.0.1
smtp_connect_timeout 30
router_id LVS_1
}
vrrp_instance HA_1 {
state MASTER
interface eth0 #网卡根据实际情况配置
virtual_router_id 1
priority 100
advert_int 1
nopreempt
authentication {
auth_type PASS
auth_pass 1234
}
virtual_ipaddress {
虚拟ip/24
}
}
virtual_server 虚拟ip 服务端口 {
delay_loop 2
lb_algo wlc
lb_kind DR
nat_mask 255.255.255.0
protocol TCP
persistence_timeout 60
real_server 实际ip 服务端口 {
weight 1
notify_down /etc/keepalived/scripts/service_rep.sh
TCP_CHECK {
connect_port 服务端口
connect_timeout 3
nb_get_retry 2
delay_before_retry 3
}
}
}
2、备机配置文件:
global_defs {
notification_email {
接收方邮箱
}
notification_email_from 发送方邮箱
smtp_server 127.0.0.1
smtp_connect_timeout 30
router_id LVS_2
}
vrrp_instance HA_1 {
state BACKUP
interface eth0 #网卡根据实际情况配置
virtual_router_id 1
priority 50
advert_int 1
nopreempt
authentication {
auth_type PASS
auth_pass 1234
}
virtual_ipaddress {
虚拟ip/24
}
}
virtual_server 虚拟ip 服务端口 {
delay_loop 2
lb_algo wlc
lb_kind DR
nat_mask 255.255.255.0
protocol TCP
persistence_timeout 60
real_server 实际ip 服务端口 {
weight 1
notify_down /etc/keepalived/scripts/service_rep.sh
TCP_CHECK {
connect_port 服务端口
connect_timeout 3
nb_get_retry 2
delay_before_retry 3
}
}
}
3、service_rep.sh脚本内容:
配置文件中提到的service_rep.sh脚本需要放到配置文件中指定的目录下
#!/bin/sh
pkill keepalived
4、简单检查
(1)虚拟ip检查
可以通过ip addr简单检查一下在keepalived停掉的情况下,虚拟ip会不会跟着切换到不同的服务器
(2)脚本检查
有时候我们在window下编辑的脚本在Linux上会有问题,格式不一样
检查:cat -A filename,如果输出结果中行末尾是^M$,则是dos格式,如果行末尾只是$,则是unix格式
处理:sed -i “s/\r//” filename 或sed -i “s/^M//” filename,直接将回车符替换为空字符串
(3)给脚本执行权限
当自己的软件停了之后发现keepalived还在运行,应该是脚本没有执行,给脚本赋权限后变色
chmod u+x service_rep.sh
后期遇到的问题
配置了很多软件,以上的方式都没有任何问题,但是最近有个软件切换了服务器之后,以上配置出现了问题,多次检查配置文件也没有发现任何问题,但是,两台服务器上都出现了虚拟ip,查了一下这叫做“脑裂”,出现这种问题肯定是不对的。我们之前配置的是“非抢占模式(nopreempt)”,然后通过priority权重来区分谁的优先级更高,但是是通过组播的方式发送vrrp包实现主通知备自己还“活着”,但是,有些服务器可能会禁止组播,那么备机收不到主机发来的vrrp包,它就会默认主机挂掉了,所以会出现两台服务器都有虚拟ip。其实,我也不确认我的是不是这种情况,但是我改成单播模式后双机热备是好的,虚拟ip只在主机,可以切换。以下是追加的配置: