Mariadb keepalived + 双主

打印 上一主题 下一主题

主题 1766|帖子 1766|积分 5298

马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。

您需要 登录 才可以下载或查看,没有账号?立即注册

x
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

  1. yum -y install keepalived
复制代码
设置为开机启动

  1. systemctl enable keepalived
复制代码
查看当前实例网口

  1. ip addr
复制代码
修改keepalived设置信息

  1. vim /etc/keepalived/keepalived.conf # 安装完keepalived后自动生成的配置文件
复制代码
设置方式有两种


  • 基于virtual_server
  • 基于virtual_script
基于virtual_server

81 keepalived.conf 设置文件内容如下
  1. ! Configuration File for keepalived
  2. global_defs {
  3.         notification_email {
  4.           linxuekai@datapp.com.cn #提醒邮箱
  5.         }
  6.         smtp_server 127.0.0.1
  7.         smtp_connect_timeout 30
  8.         router_id cluster1
  9. }
  10. vrrp_instance VI_1 {
  11.         state BACKUP        #keepalived的角色,有 MASTER|BACKUP,设为BACKUP将根据优先级决定主从,两台都设置BACKUP               
  12.         interface ens160 #实例运行所要用到的网络接口
  13.         virtual_router_id 51 #实例所属的VRRP路由器ID
  14.         priority 100 #实例在VRRP路由器中的优先级
  15.         advert_int 1 #以秒为单位指定通告的间隔时间(设置为1)
  16.         nopreempt #不抢占,即允许一个priority较低的节点作为master(即使有priority更高的节点启动),一般只在优先级高的机器上配置
  17.         authentication { #标识VRRP认证定义块
  18.                 auth_type PASS #指定要使用哪种身份认证,认证类型分为 PASS|AH(IPSEC)
  19.                 auth_pass 1111 #指定要使用的密码字符串
  20.         }
  21.         virtual_ipaddress { #标识VRRP VIP定义块
  22.         192.168.5.100 #VIP IP
  23.     }
  24. }
  25. virtual_server 192.168.5.100 3306{ #标识虚拟服务器定义块
  26.         delay_loop 6 #以秒为单位指定检查之间的间隔时间
  27.         #lb_algo rr #选择一个特定的调度程序 (rr|wrr|lc|wlc… ),rr为默认,轮询算法
  28.         #lb_kind NAT #选择一个特定的转发方法,设置LVS实现负载均衡的机制,模式包含 NAT|DR|TUN       
  29.         persistence_timeout 50 #为持久连接指定超时时间
  30.         protocol TCP 指定协议类型( TCP|UDP )
  31.         real_server 192.168.5.81 3306{ #指定一个真实服务器成员
  32.                 weight3 #为真实服务器指定负载均衡的权重,数字越大,权重越高,可通过大小区分设置不同性能的服务器
  33.                 notify_down     /etc/keepalived/bin/chk_mariadb.sh #检测到realserver的服务down后执行的脚本
  34.                 TCP_CHECK { #使用TCP连接检查真实服务器的可用性
  35.                         connect_timeout 3 #指定连接远程服务器的超时时间
  36.                         nb_get_retry 3 #重连次数
  37.                         delay_before_retry 3 #重连间隔时间
  38.                         connect_port 3306 #指定连接远程服务器的TCP端口
  39.         }
  40.     }
  41. }
复制代码
82 keepalived.conf 设置文件内容如下
  1. ! Configuration File for keepalived
  2. global_defs {
  3.         notification_email {
  4.           linxuekai@datapp.com.cn #提醒邮箱
  5.         }
  6.         smtp_server 127.0.0.1
  7.         smtp_connect_timeout 30
  8.         router_id cluster1
  9. }
  10. vrrp_instance VI_1 {
  11.         state BACKUP               
  12.         interface ens160
  13.         virtual_router_id 51
  14.         priority 90 #与81不同
  15.         #nopreempt #与81不同
  16.         advert_int
  17.         authentication {
  18.                 auth_type PASS
  19.                 auth_pass 1111
  20.         }
  21.         virtual_ipaddress {
  22.         192.168.5.100
  23.     }
  24. }
  25. virtual_server 192.168.5.100 3306{
  26.         delay_loop 6
  27.         #lb_algo rr #选择一个特定的调度程序 (rr|wrr|lc|wlc… ),rr为默认,轮询算法
  28.         #lb_kind NAT #选择一个特定的转发方法,设置LVS实现负载均衡的机制,模式包含 NAT|DR|TUN       
  29.         persistence_timeout 50
  30.         protocol TCP 指定协议类型( TCP|UDP )
  31.         real_server 192.168.5.82 3306{ #修改为82ip
  32.                 weight3
  33.                 notify_down     /etc/keepalived/bin/chk_mariadb.sh #检测到realserver的服务down后执行的脚本
  34.                 TCP_CHECK {
  35.                         connect_timeout 3
  36.                         nb_get_retry 3
  37.                         delay_before_retry 3
  38.                         connect_port 3306
  39.         }
  40.     }
  41. }
复制代码
基于virtual_script

81、82 keepalived.conf 设置文件内容如下
  1. global_defs {
  2.         notification_email {
  3.           linxuekai@datapp.com.cn #提醒邮箱
  4.         }
  5.         smtp_server 127.0.0.1
  6.         smtp_connect_timeout 30
  7.         router_id cluster1
  8. }
  9. vrrp_script chk_mariadb {
  10.         script "/etc/keepalived/bin/chk_mariadb.sh" #脚本监测
  11.         interval 2        #脚本执行间隔,每2s检测一次
  12.         weight -10        #脚本结果导致的优先级变更,检测失败(脚本返回非0)则优先级 -10
  13.         fall 2                 #检测连续2次失败才算确定是真失败。会用weight减少优先级(1-255之间)
  14.         rise 1                #检测1次成功就算成功。但不修改优先级
  15. }
  16. vrrp_instance VI_MARIADB {
  17.         state BACKUP
  18.         interface ens160
  19.         virtual_router_id 52
  20.         priority 100
  21.         advert_int 1
  22.         nopreempt
  23.         authentication {
  24.                 auth_type PASS
  25.                 auth_pass 1111
  26.         }
  27.         virtual_ipaddress {
  28.            192.168.5.100
  29.         }
  30.         track_script {
  31.            chk_mariadb #指定上述定义脚本
  32.         }
  33. }
复制代码
添加检测脚本

作用:是当mariadb停止工作时主动关闭本机的keeplived,从而实现将故障主机踢出热备组,因每台机器上keepalived只添加了本机为realserver,所以当mysqld正常启动后,我们还需要手动启动keepalived服务
以下步调81、82均需要设置执行
添加脚本
  1. vi  /etc/keepalived/bin/chk_mariadb.sh
复制代码
chk_mariadb.sh内容如下
  1. #!/bin/bash
  2. counter=$(netstat -na|grep "LISTEN"|grep "3306"|wc -l)
  3. if [ "${counter}" -eq 0 ]; then
  4.     systemctl stop keepalived
  5. fi
复制代码
赋予脚本可执行权限
  1. chmod+x /etc/keepalived/bin/chk_mariadb.sh
复制代码
启动mariadb和keepalived

  1. systemctl start mariadb
  2. systemctl start keepalived
复制代码
查看VIP(集群虚拟IP)的控制权

81、82分别执行
  1. ip addr
  2. show dev ens160 #ens160为网卡,替换成本身的即可
复制代码
81效果
  1. [root@cluster1 keepalived]# ip addr
  2. 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效果
  1. [root@cluster2 keepalived]# ip addr
  2. 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脚本
  1. systemctl stop mariadb
  2. ps -ef | grep keepalived #可以看到脚本触发,keepalived停止运行
复制代码
查看81
  1. [root@cluster1 keepalived]# ip addr
  2. 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
  1. [root@cluster2 keepalived]# ip addr
  2. 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
  1. systemctl start mariadb
  2. systemctl start keepalived
复制代码
查看81
  1. [root@cluster1 keepalived]# ip addr
  2. 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常见命令

日记

  1. systemctl status keepalived.service -l
  2. journalctl -u keepalived.service  -f
  3. tail -22f /var/log/messages | grep Keepalived
复制代码
服务

  1. systemctl stop keepalived
  2. systemctl start keepalived
  3. systemctl restart keepalived
  4. systemctl status keepalived
复制代码
查看当前vip对应节点

  1. # 查看VIP是否在筛选效果中ip addr
  2. show|grep "scope global"# 或者 ip addr
  3. show|grep {vip}
复制代码
标题排查

virtual_router_id 同网段重复,日记报错如下:
  1. Keepalived_vrrp[8548]: bogus VRRP packet received on eth0 !!!
  2. Keepalived_vrrp[8548]: VRRP_Instance(VI-kube-master) ignoring received advertisment...
  3. Keepalived_vrrp[8548]: ip address associated with VRID not present in received packet : 192.168.5.81
  4. Keepalived_vrrp[8548]: one or more VIP associated with VRID mismatch actual MASTER advert
复制代码
解决方法:
同一网段内LB节点设置的 virtual_router_id 值有重复了,选择一个不重复的0~255之间的值,可以用以下命令查看已存在的vrid
  1. tcpdump -nn -i any net 224.0.0.0/8 #需要tcpdump,没有则安装 yum install tcpdump
复制代码
免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!更多信息从访问主页:qidao123.com:ToB企服之家,中国第一个企服评测及商务社交产业平台。
回复

使用道具 举报

0 个回复

倒序浏览

快速回复

您需要登录后才可以回帖 登录 or 立即注册

本版积分规则

罪恶克星

论坛元老
这个人很懒什么都没写!
快速回复 返回顶部 返回列表