一、背景
因为有两台Mysql服务器,为了防止客户端连接数据库的情况下数据库down了,就是用Keepliaved来做vip飘移
node1 | 11.0.1.100 |
node2 | 11.0.1.101 |
vip | 11.0.1.102 |
系统版本 | redhat7.6 |
keepalived版本 | 2.2.2 |
二、部署
1.配置防火墙
在开启防火墙的状态下,需要防火墙放过vrrp协议,否则两台机器无法感知对方状态,会在双方都配置上vip,引发错误
firewall-cmd --direct --permanent --add-rule ipv4 filter INPUT 0 --destination 224.0.0.18 --protocol vrrp -j ACCEPT
firewall-cmd --direct --permanent --add-rule ipv4 filter OUTPUT 0 --destination 224.0.0.18 --protocol vrrp -j ACCEPT
firewall-cmd --reload
2.二进制安装keepalived软件
此处以11.0.1.100步骤演示,11.0.1.101安装步骤相同
2.1 上传keepalived-2.2.2.tar.gz 至10.12.1.204/root路径下
2.2 解压keepalived-2.2.2.tar.gz
cd /root
tar –xf keepalived-2.2.2.tar.gz
2.3 安装依赖包
yum install -y openssl openssl-devel psmisc(openssl为配置keepalived依赖,psmisc为下文killall指令软件包)
2.4 configure配置keepalive并检查是否配置成功
cd keepalived-2.2.2
./configure --prefix=/usr/local/keepalived --sysconf=/etc
echo $? #检查配置是否成功,成功输出值为0,失败为非0
2.5 编译并检查是否成功
make && make install #检查配置是否成功,成功输出值为0,失败为非0
echo $? #检查配置是否成功,成功输出值为0,失败为非0
3.keepalived配置
11.0.1.100 | 主节点 |
11.0.1.101 | 备节点 |
11.0.1.102 | vip节点 |
3.1 主节点配置文件
profile: /etc/keepalived/keepalived.conf
! Configuration File for keepalived
#全局定义模块
global_defs {
#表示运行Keepalived服务器的一个标识
router_id LVS_DEVEL2
#默认是不跳过检查。检查收到的 VRRP 通告中的所有地址可能会比较耗时,设置此命令的意思是,如果通告与接收的上一个通告来自相同的 master 路由器,则不执行检查(跳过检查)。
vrrp_skip_check_adv_addr
#严格遵守 VRRP 协议。下列情况将会阻止启动 Keepalived:1. 没有 VIP 地址。2. 单播邻居。3. 在 VRRP 版本 2 中有 IPv6 地址。
#vrrp_strict // 需要注释
#在一个接口发送的两个免费 ARP 之间的延迟
vrrp_garp_interval 0
#一个网卡上每组na消息之间的延迟时间,默认为0
vrrp_gna_interval 0
}
#检查模块
vrrp_script check_nginx {
#检查mysqld是否存活
script "/usr/bin/killall -0 mysqld"
interval 1
weight -30
fall 3
rise 5
timeout 2
}
#vrrp 实例定义模块
vrrp_instance VI_1 {
#master节点
state MASTER
#物理网卡
interface ens192
#虚拟路由id,主备必须相同(在同一网段有多套keepalived时,virtual_router_id不要相同)
virtual_router_id 56
#节点优先级,数字越大表示节点的优先级就越高(抢占模式priority相同的话,则不会发生抢占)
priority 100
#设置主备节点间vrrp通告状态的时间间隔
advert_int 1
# nopreempt // 不能设置非抢占模式,一旦设置之后,该机器不会去抢占另一台机器的ip,该模式不能应用在master节点上
authentication {
#指定认证方式
auth_type PASS
#指定认证所使用的密码(在同一网段有多套keepalived时,auth_pass不要相同)
auth_pass 3456
}
#虚拟ip地址
virtual_ipaddress {
11.0.1.102/24 dev ens192
}
track_script {
check_nginx
}
}
3.2 备节点配置文件
profile: /etc/keepalived/keepalived.conf
! Configuration File for keepalived
global_defs {
router_id LVS_DEVEL2
vrrp_skip_check_adv_addr
#vrrp_strict // 需要注释
vrrp_garp_interval 0
vrrp_gna_interval 0
}
vrrp_script check_nginx {
#检查mysqld是否存活
script "/usr/bin/killall -0 mysqld"
interval 1
weight -30
fall 3
rise 5
timeout 2
}
vrrp_instance VI_1 {
state BACKUP
interface ens192
#虚拟路由id,主备必须相同
virtual_router_id 56
#备节点80
priority 80
advert_int 1
# nopreempt // 不能设置非抢占模式,一旦设置之后,该机器不会去抢占另一台机器的ip,该模式不能应用在master节点上
# preempt_delay 5
authentication {
auth_type PASS
auth_pass 3456
}
virtual_ipaddress {
11.0.1.102/24 dev ens192
}
track_script {
check_nginx
}
}
4.服务启动
此处以11.0.1.100步骤演示,11.0.1.101安装步骤相同
4.1 首次启动命令
/usr/local/keepalived/sbin/keepalived -D -f /etc/keepalived/keepalived.conf
4.2 加入开机自启动,并注册为systemd服务
chkconfig keepalived on
4.3 停止keepalived二进制启动进程
pkill keepalived
4.4 更新systemd服务
systemctl daemon-reload
4.5 以systemd方式启动keepalived服务
systemctl start keepalived