设为首页 收藏本站
查看: 710|回复: 0

[经验分享] CENTOS6.3利用Keepalived构建双主MySQL+双机热备

[复制链接]

尚未签到

发表于 2018-12-31 15:06:21 | 显示全部楼层 |阅读模式
  CENTOS6.3利用Keepalived构建双主MySQL+双机热备
  showerlee 2013-08-28 01:15 MYSQL, 负载均衡 阅读 (582) 1条评论
  之前的博文介绍了如何配置MYSQL双主互备.
  见http://www.showerlee.com/archives/698
  这里介绍如何配合前者实现Keepalived双机热备
  系统环境:CentOS 6.3 x64
  MySQL版本:mysql-5.6.10
  Keepalived版本:keepalived-1.2.7
  MySQL-VIP:192.168.7.253
  MySQL-master1:192.168.7.201
  MySQL-master2:192.168.7.249
  首先关闭iptables和SELINUX
  # service iptables stop
  # setenforce 0
  # vi /etc/sysconfig/selinux
  ---------------
  SELINUX=disabled
  ---------------
  注: 若线上需要开启iptables,需加一条规则使keepalived的vrrp通行
  # iptables -A INPUT -p vrrp -j ACCEPT
  1.在MySQL-master1:192.168.7.201服务器上keepalived安装及配置
  编译安装,实际以本机kernel版本为准
  # wget http://www.keepalived.org/software/keepalived-1.2.7.tar.gz
  # tar zxvf keepalived-1.2.7.tar.gz
  # cd keepalived-1.2.7
  # ./configure --prefix=/usr/local/keepalived --with-kernel-dir=/usr/src/kernels/2.6.32-279.el6.x86_64
  # make && make install
  设置keepalived开机启动脚本
  # cp /usr/local/keepalived/etc/rc.d/init.d/keepalived /etc/rc.d/init.d/
  # cp /usr/local/keepalived/etc/sysconfig/keepalived /etc/sysconfig/
  # cp /usr/local/keepalived/sbin/keepalived /usr/sbin/
  # chkconfig keepalived on
  新建一个配置文件,默认keepalived启动会去/etc/keepalived目录下寻找配置文件
  # mkdir /etc/keepalived
  # vi /etc/keepalived/keepalived.conf
  ------------------
  global_defs {
  notification_email {
  lzyangel@126.com
  }
  #当主、备份设备发生改变时,通过邮件通知
  notification_email_from lzyangel@126.com
  smtp_server stmp.126.com
  smtp_connect_timeout 30
  router_id MySQL-ha
  }
  vrrp_instance VI_1{
  # 在初始化状态下定义为主设备
  state BACKUP
  # 注意网卡接口
  interface eth0
  virtual_router_id 51
  # 优先级,另一台改为90
  priority 100
  advert_int 1
  # 不主动抢占资源
  nopreempt
  authentication {
  # 认证方式,可以是PASS或AH两种认证方式
  auth_type PASS
  # 认证密码
  auth_pass 1111
  }
  virtual_ipaddress {
  # 虚拟IP地址,随着state的变化而增加删除
  192.168.7.253
  }
  }
  virtual_server 192.168.7.253 3306 {
  # 每个2秒检查一次real_server状态
  delay_loop 2
  # LVS算法
  lb_algo wrr
  # LVS模式
  lb_kind DR
  # 会话保持时间
  persistence_timeout 60
  protocol TCP
  real_server 192.168.7.201 3306 {
  # 权重
  weight 3
  # 检测到服务down后执行的脚本
  notify_down /etc/rc.d/keepalived.sh
  TCP_CHECK {
  # 连接超时时间
  connect_timeout 10
  # 重连次数
  nb_get_retry 3
  # 重连间隔时间
  delay_before_retry 3
  # 健康检查端口
  connect_port 3306
  }
  }
  }
  ----------------------
  编写检测服务down后所要执行的脚本
  # vi /etc/rc.d/keepalived.sh
  -------------
  #!/bin/sh
  /etc/init.d/keepalived stop
  -------------
  # chmod +x /etc/rc.d/keepalived.sh
  注:此脚本是上面配置文件notify_down选项所用到的,keepalived使用notify_down选项来检查real_server的服务状态。
  当发现real_server服务故障时,便触发此脚本.
  我们可以看到,脚本就一个命令:
  通过pkill keepalived强制杀死keepalived进程,从而实现了MySQL故障自动转移.
  另外,我们不用担心两个MySQL会同时提供数据更新操作,因为每台MySQL上的keepalived的配置里面只有本机MySQL的IP+VIP,而不是两台MySQL的IP+VIP.
  以上脚本是为了在测试环境实现VIP切换功能,生产环境建议使用如下脚本
  ---------------------------------
  #!/bin/bash
  # 环境变量
  PATH=/bin:/usr/bin:/sbin:/usr/sbin; export PATH
  # 暂停5秒执行,防止数据库人工正常重启
  sleep 5
  # mysql_id(存活=1 死掉=0)
  mysql_id=`ps -C mysqld --noheader |wc -l`
  # 判断mysql_id若死掉,则重启mysql一次,若仍然无法启动mysql则杀掉keepaliaved进程实现VIP切换
  if [ $mysql_id -eq 0 ];then
  /etc/init.d/mysqld restart
  sleep 5
  if [ $mysql_id -eq 0 ];then
  /etc/init.d/keepalived stop
  fi
  fi
  ---------------------------------
  启动keepalived
  # /etc/init.d/keepalived start
  查看连接状态
  # ps -aux | grep keepalived
  返回:
  ---------------
  root 1387 1 0 21:13 ? 00:00:00 keepalived -D
  root 1390 1387 0 21:13 ? 00:00:00 keepalived -D
  root 1391 1387 0 21:13 ? 00:00:00 keepalived -D
  root 1976 1911 0 21:16 pts/0 00:00:00 grep keepalived
  --------------------
  测试
  查看VIP信息
  # ip addr
  --------------------------
  ............
  inet 192.168.7.201/24 brd 192.168.7.255 scope global eth0
  inet 192.168.7.253/32 scope global eth0
  inet6 fe80::20c:29ff:feb2:9199/64 scope link
  valid_lft forever preferred_lft forever
  --------------------------
  注:如果出现主从在切换VIP时,主的VIP未自动关闭,从的正常开启,导致都获取到VIP,造成互相冲突的情况,可手动输入如下命令删除一方的VIP地址
  # ip addr del "虚拟ip" dev eth0
  但此方法只是一个临时的解决方案,当手动删除VIP后,重启keepalived服务会无法正常开启vip,需要重启服务器方能恢复。
  查看vrrp通信
  # tcpdump vrrp
  -------------------------
  .....
  18:10:56.365730 IP 192.168.7.201 > vrrp.mcast.net: VRRPv2, Advertisement, vrid 52, prio 40, authtype simple, intvl 1s, length 20
  18:10:57.366825 IP 192.168.7.201 > vrrp.mcast.net: VRRPv2, Advertisement, vrid 52, prio 40, authtype simple, intvl 1s, length 20
  18:10:58.367914 IP 192.168.7.201 > vrrp.mcast.net: VRRPv2, Advertisement, vrid 52, prio 40, authtype simple, intvl 1s, length 20
  -------------------------
  注:如果主keepalived挂掉,这里的日志会切换到备keeplived的信息
  找一台局域网PC,然后去ping MySQL的VIP,这时候MySQL的VIP是可以ping的通的
  停止MySQL服务,看keepalived健康检查程序是否会触发我们编写的脚本,去kill掉keepalived进程
  # service mysqld stop
  # ps -aux | grep keepalived
  无返回结果
  2.在MySQL-master2:192.168.7.249服务器上keepalived安装及配置
  编译安装,实际以本机kernel版本为准
  # wget http://www.keepalived.org/software/keepalived-1.2.7.tar.gz
  # tar zxvf keepalived-1.2.7.tar.gz
  # cd keepalived-1.2.7
  # ./configure --prefix=/usr/local/keepalived --with-kernel-dir=/usr/src/kernels/2.6.32-279.el6.x86_64
  # make && make install
  设置keepalived开机启动脚本
  # cp /usr/local/keepalived/etc/rc.d/init.d/keepalived /etc/rc.d/init.d/
  # cp /usr/local/keepalived/etc/sysconfig/keepalived /etc/sysconfig/
  # cp /usr/local/keepalived/sbin/keepalived /usr/sbin/
  # chkconfig keepalived on
  新建一个配置文件,默认keepalived启动会去/etc/keepalived目录下寻找配置文件
  # mkdir /etc/keepalived
  # vi /etc/keepalived/keepalived.conf
  ------------------
  global_defs {
  notification_email {
  lzyangel@126.com
  }
  notification_email_from lzyangel@126.com
  smtp_server stmp.126.com
  smtp_connect_timeout 30
  router_id MySQL-ha
  }
  vrrp_instance VI_1{
  # 两台配置此处均是BACKUP
  state BACKUP
  # 注意网卡接口
  interface eth0
  virtual_router_id 51
  # 优先级,另一台改为100
  priority 90
  advert_int 1
  # 不主动抢占资源
  nopreempt
  authentication {
  auth_type PASS
  auth_pass 1111
  }
  virtual_ipaddress {
  192.168.7.253
  }
  }
  virtual_server 192.168.7.253 3306 {
  # 每个2秒检查一次real_server状态
  delay_loop 2
  # LVS算法
  lb_algo wrr
  # LVS模式
  lb_kind DR
  # 会话保持时间
  persistence_timeout 60
  protocol TCP
  real_server 192.168.7.249 3306 {
  weight 3
  # 检测到服务down后执行的脚本
  notify_down /etc/rc.d/keepalived.sh
  TCP_CHECK {
  # 连接超时时间
  connect_timeout 10
  # 重连次数
  nb_get_retry 3
  # 重连间隔时间
  delay_before_retry 3
  # 健康检查端口
  connect_port 3306
  }
  }
  }
  ----------------------
  编写检测服务down后所要执行的脚本
  # vi /etc/rc.d/keepalived.sh
  -------------
  #!/bin/sh
  /etc/init.d/keepalived stop
  -------------
  # chmod +x /etc/rc.d/keepalived.sh
  启动keepalived
  # /etc/init.d/keepalived start
  查看连接状态
  # ps -aux | grep keepalived
  返回:
  ---------------
  root 1387 1 0 21:13 ? 00:00:00 keepalived -D
  root 1390 1387 0 21:13 ? 00:00:00 keepalived -D
  root 1391 1387 0 21:13 ? 00:00:00 keepalived -D
  root 1976 1911 0 21:16 pts/0 00:00:00 grep keepalived
  --------------------
  至此配置完成,网站后台只需要配置MySQL-VIP:192.168.7.253虚拟地址即可
  这里实际连接的master数据库,以哪台master先开mysql服务为准。
  当master1:192.168.7.201 mysql端口挡掉或者服务器异常关闭,keepalived会自动跳转到master2:192.168.7.249.
  因为两台数据库的数据时同步的,用户访问的是MySQL-VIP:192.168.7.253虚拟地址,所以网站数据连接会无缝透明转接到master2服务
  器,实现双机热备+数据同步功能。保证网站数据库的实时可用性。
  注:当某一台master服务器挂掉恢复后,需同时打开MYSQL服务和keepalived服务,保证另一台服务器如果挂掉会无缝转接。
  所以建议mysql与keeplived设置服务开机启动。
  # chkconfig mysqld on
  # chkconfig keepalived on
  ----------大功告成------------


运维网声明 1、欢迎大家加入本站运维交流群:群②:261659950 群⑤:202807635 群⑦870801961 群⑧679858003
2、本站所有主题由该帖子作者发表,该帖子作者与运维网享有帖子相关版权
3、所有作品的著作权均归原作者享有,请您和我们一样尊重他人的著作权等合法权益。如果您对作品感到满意,请购买正版
4、禁止制作、复制、发布和传播具有反动、淫秽、色情、暴力、凶杀等内容的信息,一经发现立即删除。若您因此触犯法律,一切后果自负,我们对此不承担任何责任
5、所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其内容的准确性、可靠性、正当性、安全性、合法性等负责,亦不承担任何法律责任
6、所有作品仅供您个人学习、研究或欣赏,不得用于商业或者其他用途,否则,一切后果均由您自己承担,我们对此不承担任何法律责任
7、如涉及侵犯版权等问题,请您及时通知我们,我们将立即采取措施予以解决
8、联系人Email:admin@iyunv.com 网址:www.yunweiku.com

所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其承担任何法律责任,如涉及侵犯版权等问题,请您及时通知我们,我们将立即处理,联系人Email:kefu@iyunv.com,QQ:1061981298 本贴地址:https://www.yunweiku.com/thread-658046-1-1.html 上篇帖子: 初级篇:借助LVS+Keepalived实现负载均衡 下篇帖子: 分步LVS: 详解利用Keepalived+Nginx解决站点高可用性
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

扫码加入运维网微信交流群X

扫码加入运维网微信交流群

扫描二维码加入运维网微信交流群,最新一手资源尽在官方微信交流群!快快加入我们吧...

扫描微信二维码查看详情

客服E-mail:kefu@iyunv.com 客服QQ:1061981298


QQ群⑦:运维网交流群⑦ QQ群⑧:运维网交流群⑧ k8s群:运维网kubernetes交流群


提醒:禁止发布任何违反国家法律、法规的言论与图片等内容;本站内容均来自个人观点与网络等信息,非本站认同之观点.


本站大部分资源是网友从网上搜集分享而来,其版权均归原作者及其网站所有,我们尊重他人的合法权益,如有内容侵犯您的合法权益,请及时与我们联系进行核实删除!



合作伙伴: 青云cloud

快速回复 返回顶部 返回列表