Mariadb keepalived + 双主
Mariadb keepalived + 双主说明:采取keepalived+双主模型对mariadb服务器做高可用,在双主的底子上,Keepalived可以分别实时监听AB,负责检测服务器的状态,当A宕机后,主动将流量切换到B,也可采取keepalived+主从,按场景选择,这里以双主为例
节点范例IPPORT主节点192.168.5.813306主节点192.168.5.823306keepalived192.168.5.81、192.168.5.82 81、82分别安装keepalived
yum -y install keepalived
设置为开机启动
systemctl enable keepalived
查看当前实例网口
ip addr
修改keepalived设置信息
vim /etc/keepalived/keepalived.conf # 安装完keepalived后自动生成的配置文件
设置方式有两种
[*]基于virtual_server
[*]基于virtual_script
基于virtual_server
81 keepalived.conf 设置文件内容如下
! Configuration File for keepalived
global_defs {
notification_email {
linxuekai@datapp.com.cn #提醒邮箱
}
smtp_server 127.0.0.1
smtp_connect_timeout 30
router_id cluster1
}
vrrp_instance VI_1 {
state BACKUP #keepalived的角色,有 MASTER|BACKUP,设为BACKUP将根据优先级决定主从,两台都设置BACKUP
interface ens160 #实例运行所要用到的网络接口
virtual_router_id 51 #实例所属的VRRP路由器ID
priority 100 #实例在VRRP路由器中的优先级
advert_int 1 #以秒为单位指定通告的间隔时间(设置为1)
nopreempt #不抢占,即允许一个priority较低的节点作为master(即使有priority更高的节点启动),一般只在优先级高的机器上配置
authentication { #标识VRRP认证定义块
auth_type PASS #指定要使用哪种身份认证,认证类型分为 PASS|AH(IPSEC)
auth_pass 1111 #指定要使用的密码字符串
}
virtual_ipaddress { #标识VRRP VIP定义块
192.168.5.100 #VIP IP
}
}
virtual_server 192.168.5.100 3306{ #标识虚拟服务器定义块
delay_loop 6 #以秒为单位指定检查之间的间隔时间
#lb_algo rr #选择一个特定的调度程序 (rr|wrr|lc|wlc… ),rr为默认,轮询算法
#lb_kind NAT #选择一个特定的转发方法,设置LVS实现负载均衡的机制,模式包含 NAT|DR|TUN
persistence_timeout 50 #为持久连接指定超时时间
protocol TCP 指定协议类型( TCP|UDP )
real_server 192.168.5.81 3306{ #指定一个真实服务器成员
weight3 #为真实服务器指定负载均衡的权重,数字越大,权重越高,可通过大小区分设置不同性能的服务器
notify_down /etc/keepalived/bin/chk_mariadb.sh #检测到realserver的服务down后执行的脚本
TCP_CHECK { #使用TCP连接检查真实服务器的可用性
connect_timeout 3 #指定连接远程服务器的超时时间
nb_get_retry 3 #重连次数
delay_before_retry 3 #重连间隔时间
connect_port 3306 #指定连接远程服务器的TCP端口
}
}
}
82 keepalived.conf 设置文件内容如下
! Configuration File for keepalived
global_defs {
notification_email {
linxuekai@datapp.com.cn #提醒邮箱
}
smtp_server 127.0.0.1
smtp_connect_timeout 30
router_id cluster1
}
vrrp_instance VI_1 {
state BACKUP
interface ens160
virtual_router_id 51
priority 90 #与81不同
#nopreempt #与81不同
advert_int
authentication {
auth_type PASS
auth_pass 1111
}
virtual_ipaddress {
192.168.5.100
}
}
virtual_server 192.168.5.100 3306{
delay_loop 6
#lb_algo rr #选择一个特定的调度程序 (rr|wrr|lc|wlc… ),rr为默认,轮询算法
#lb_kind NAT #选择一个特定的转发方法,设置LVS实现负载均衡的机制,模式包含 NAT|DR|TUN
persistence_timeout 50
protocol TCP 指定协议类型( TCP|UDP )
real_server 192.168.5.82 3306{ #修改为82ip
weight3
notify_down /etc/keepalived/bin/chk_mariadb.sh #检测到realserver的服务down后执行的脚本
TCP_CHECK {
connect_timeout 3
nb_get_retry 3
delay_before_retry 3
connect_port 3306
}
}
}
基于virtual_script
81、82 keepalived.conf 设置文件内容如下
global_defs {
notification_email {
linxuekai@datapp.com.cn #提醒邮箱
}
smtp_server 127.0.0.1
smtp_connect_timeout 30
router_id cluster1
}
vrrp_script chk_mariadb {
script "/etc/keepalived/bin/chk_mariadb.sh" #脚本监测
interval 2 #脚本执行间隔,每2s检测一次
weight -10 #脚本结果导致的优先级变更,检测失败(脚本返回非0)则优先级 -10
fall 2 #检测连续2次失败才算确定是真失败。会用weight减少优先级(1-255之间)
rise 1 #检测1次成功就算成功。但不修改优先级
}
vrrp_instance VI_MARIADB {
state BACKUP
interface ens160
virtual_router_id 52
priority 100
advert_int 1
nopreempt
authentication {
auth_type PASS
auth_pass 1111
}
virtual_ipaddress {
192.168.5.100
}
track_script {
chk_mariadb #指定上述定义脚本
}
}
添加检测脚本
作用:是当mariadb停止工作时主动关闭本机的keeplived,从而实现将故障主机踢出热备组,因每台机器上keepalived只添加了本机为realserver,所以当mysqld正常启动后,我们还需要手动启动keepalived服务
以下步调81、82均需要设置执行
添加脚本
vi/etc/keepalived/bin/chk_mariadb.sh
chk_mariadb.sh内容如下
#!/bin/bash
counter=$(netstat -na|grep "LISTEN"|grep "3306"|wc -l)
if [ "${counter}" -eq 0 ]; then
systemctl stop keepalived
fi
赋予脚本可执行权限
chmod+x /etc/keepalived/bin/chk_mariadb.sh
启动mariadb和keepalived
systemctl start mariadb
systemctl start keepalived
查看VIP(集群虚拟IP)的控制权
81、82分别执行
ip addr
show dev ens160 #ens160为网卡,替换成本身的即可 81效果
# ip addr
show dev ens1602: ens160: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc mq state UP group default qlen 1000 link/ether 00:0c:29:35:67:6e brd ff:ff:ff:ff:ff:ff inet 192.168.5.81/24 brd 192.168.5.255 scope global noprefixroute ens160 valid_lft forever preferred_lft forever inet 192.168.5.100/32 scope global ens160 valid_lft forever preferred_lft forever inet6 fe80::d9de:308c:f3c9:b7c6/64 scope link noprefixroute valid_lft forever preferred_lft forever 82效果
# ip addr
show dev ens1602: ens160: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc mq state UP group default qlen 1000 link/ether 00:0c:29:1e:40:1a brd ff:ff:ff:ff:ff:ff inet 192.168.5.82/24 brd 192.168.5.255 scope global noprefixroute ens160 valid_lft forever preferred_lft forever inet6 fe80::c5c:81d6:44fe:672c/64 scope link noprefixroute valid_lft forever preferred_lft forever 可以看出81是master,82是slave
验证keepalived康健检查
停止81节点的mariadb,观察keepalived是否会触发bash脚本
systemctl stop mariadb
ps -ef | grep keepalived #可以看到脚本触发,keepalived停止运行
查看81
# ip addr
show dev ens1602: ens160: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc mq state UP group default qlen 1000 link/ether 00:0c:29:35:67:6e brd ff:ff:ff:ff:ff:ff inet 192.168.5.81/24 brd 192.168.5.255 scope global noprefixroute ens160 valid_lft forever preferred_lft forever inet6 fe80::d9de:308c:f3c9:b7c6/64 scope link noprefixroute valid_lft forever preferred_lft forever 查看82
# ip addr
show dev ens1602: ens160: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc mq state UP group default qlen 1000 link/ether 00:0c:29:1e:40:1a brd ff:ff:ff:ff:ff:ff inet 192.168.5.82/24 brd 192.168.5.255 scope global noprefixroute ens160 valid_lft forever preferred_lft forever inet 192.168.5.100/32 scope global ens160#vip ip由81切换到了82 valid_lft forever preferred_lft forever inet6 fe80::c5c:81d6:44fe:672c/64 scope link noprefixroute valid_lft forever preferred_lft forever 上述效果可以说明在81master服务器的mariadb服务发生故障时,81主机触发了脚本,发生了主动故障切换
重新启动81节点的mariadb和keepalived
systemctl start mariadb
systemctl start keepalived
查看81
# ip addr
show dev ens1602: ens160: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc mq state UP group default qlen 1000 link/ether 00:0c:29:35:67:6e brd ff:ff:ff:ff:ff:ff inet 192.168.5.81/24 brd 192.168.5.255 scope global noprefixroute ens160 valid_lft forever preferred_lft forever inet6 fe80::d9de:308c:f3c9:b7c6/64 scope link noprefixroute valid_lft forever preferred_lft forever 说明设置的 nopreempt 生效,82仍旧是master,81抢不回去master的权利了,在生产环境中添加不抢占设置,保证了聚集稳定性,只有当82的服务宕机时,81才会再次成为master,否则它永久只能当82的备份。(注:nopreempt一样平常是在优先级高的mariadb上设置)
keepalived常见命令
日记
systemctl status keepalived.service -l
journalctl -u keepalived.service-f
tail -22f /var/log/messages | grep Keepalived
服务
systemctl stop keepalived
systemctl start keepalived
systemctl restart keepalived
systemctl status keepalived
查看当前vip对应节点
# 查看VIP是否在筛选效果中ip addr
show|grep "scope global"# 或者 ip addr
show|grep {vip} 标题排查
virtual_router_id 同网段重复,日记报错如下:
Keepalived_vrrp: bogus VRRP packet received on eth0 !!!
Keepalived_vrrp: VRRP_Instance(VI-kube-master) ignoring received advertisment...
Keepalived_vrrp: ip address associated with VRID not present in received packet : 192.168.5.81
Keepalived_vrrp: one or more VIP associated with VRID mismatch actual MASTER advert
解决方法:
同一网段内LB节点设置的 virtual_router_id 值有重复了,选择一个不重复的0~255之间的值,可以用以下命令查看已存在的vrid
tcpdump -nn -i any net 224.0.0.0/8 #需要tcpdump,没有则安装 yum install tcpdump
免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!更多信息从访问主页:qidao123.com:ToB企服之家,中国第一个企服评测及商务社交产业平台。
页:
[1]