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

[经验分享] keepalived结合MHA实现mysql高可用

[复制链接]

尚未签到

发表于 2018-12-29 12:32:44 | 显示全部楼层 |阅读模式
  

  本例结合本博另一篇文章 MHA-大杀器实现MYSQL单主宕机时,VIP漂移实现高可用,环境请参考上一篇文章
  

  本例使用keepalived-1.1.20.tar.gz版本
  

  

  

  [root@node1 keepalived-1.1.20]# ./configure --sysconf=/etc/ #此项表示设置keepalived的根目录
  

  如果编译报错“configure: error: Popt libraries is required” 则yum -y install popt-devel
  

  [root@node1 keepalived-1.1.20]# make && make install
  

  [root@node1 keepalived]# cp /usr/local/sbin/keepalived /usr/sbin/   #拷贝命令文件
  

  

  #####################主机的配置文件设置####################
  

  [root@node1 keepalived]# cat /etc/keepalived/keepalived.conf
  ! Configuration File for keepalived
  

  global_defs {#全局配置项
  router_id node1#本机标识号,设置全局唯一
  }
  vrrp_script check_run {#设置检测服务的脚本
  script "/root/check_mysql.sh"
  interval 1#每隔一秒检测一次
  }
  

  vrrp_instance mha {    #定义keepalived组
  state MASTER#定义本机的keepalived状态
  interface eth0#设置监听网卡
  virtual_router_id 100#设置虚拟router-id,所有keepalived的机器都得是一样
  priority 100   #设置权值,master必须高于backup
  advert_int 5#定义master与backup之间同步检查间隔,单位是秒
  track_interface {#设置监听网卡组
  eth0
  eth1
  }
  authentication {#设置keepalived组的验证类型和密码,所有主机须一样
  auth_type PASS
  auth_pass 1111
  }
  track_script {#设置服务监测脚本运行
  check_run
  }
  virtual_ipaddress {#设置VIP
  10.2.16.250/24
  }
  }
  

  #####################备机的配置文件设置####################
  

  [root@node2 ~]# cat /etc/keepalived/keepalived.conf
  ! Configuration File for keepalived
  

  global_defs {
  router_id node2
  }
  

  vrrp_script check_run {
  script "/root/check_mysql.sh"
  interval 1
  }
  

  vrrp_instance mha {
  state BACKUP
  interface eth0
  virtual_router_id 100
  priority 99
  advert_int 5
  track_interface {
  eth0
  eth1
  }
  track_interface {
  eth0
  eth1
  }
  track_script {
  check_run
  }
  authentication {
  auth_type PASS
  auth_pass 1111
  }
  virtual_ipaddress {
  10.2.16.250/24
  }
  }
  

  

  mysql服务检测脚本内容,按需修改:
  

  [root@node2 ~]# cat check_mysql.sh
  #!/bin/bash
  MYSQL=/usr/bin/mysql
  MYSQL_HOST=127.0.0.1
  MYSQL_USER=root
  MYSQL_PASSWORD=123456
  CHECK_TIME=3
  #mysql  is working MYSQL_OK is 1 , mysql down MYSQL_OK is 0
  MYSQL_OK=1
  function check_mysql_helth (){
  $MYSQL -h $MYSQL_HOST -u $MYSQL_USER -e "show status;" --password=123456 >/dev/null 2>&1
  if [ $? = 0 ] ;then
  MYSQL_OK=1
  else
  MYSQL_OK=0
  fi
  return $MYSQL_OK
  }
  while [ $CHECK_TIME -ne 0 ]
  do
  let "CHECK_TIME -= 1"
  check_mysql_helth
  if [ $MYSQL_OK = 1 ] ; then
  CHECK_TIME=0
  exit 0
  fi
  

  if [ $MYSQL_OK -eq 0 ] &&  [ $CHECK_TIME -eq 0 ]
  then
  pkill keepalived
  exit 1
  fi
  sleep 1
  done
  

  

  启动Keepalived:
  

  [root@node1 ~]#service keepalived start
  

  启动日志:
  [root@node1 ~]# tail -f /var/log/messages
  Jun 27 11:48:47 node2 Keepalived: Starting VRRP child process, pid=21545
  Jun 27 11:48:47 node2 Keepalived_vrrp: Registering Kernel netlink reflector
  Jun 27 11:48:47 node2 Keepalived_vrrp: Registering Kernel netlink command channel
  Jun 27 11:48:47 node2 Keepalived_vrrp: Registering gratutious ARP shared channel
  Jun 27 11:48:47 node2 Keepalived_vrrp: Opening file '/etc/keepalived/keepalived.conf'.
  Jun 27 11:48:47 node2 Keepalived_vrrp: Configuration is using : 65535 Bytes
  Jun 27 11:48:47 node2 Keepalived_vrrp: Using LinkWatch kernel netlink reflector...
  Jun 27 11:48:47 node2 Keepalived_vrrp: VRRP_Instance(mha) Entering BACKUP STATE
  Jun 27 11:48:47 node2 Keepalived_vrrp: VRRP sockpool: [ifindex(2), proto(112), fd(9,10)]
  Jun 27 11:48:47 node2 Keepalived_vrrp: VRRP_Script(check_run) succeeded
  

  

  Jun 27 11:49:03 node2 Keepalived_vrrp: VRRP_Instance(mha) Transition to MASTER STATE
  Jun 27 11:49:08 node2 Keepalived_vrrp: VRRP_Instance(mha) Entering MASTER STATE
  Jun 27 11:49:08 node2 Keepalived_vrrp: VRRP_Instance(mha) setting protocol VIPs.
  Jun 27 11:49:08 node2 Keepalived_vrrp: VRRP_Instance(mha) Sending gratuitous ARPs on eth0 for 10.2.16.250
  Jun 27 11:49:13 node2 Keepalived_vrrp: VRRP_Instance(mha) Sending gratuitous ARPs on eth0 for 10.2.16.250
  

  

  查看 VIP:
  [root@node1 ~]# ip addr
  1: lo:  mtu 16436 qdisc noqueue state UNKNOWN
  link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00
  inet 127.0.0.1/8 scope host lo
  inet6 ::1/128 scope host
  valid_lft forever preferred_lft forever
  2: eth0:  mtu 1500 qdisc pfifo_fast state UP qlen 1000
  link/ether 00:0c:29:c5:22:55 brd ff:ff:ff:ff:ff:ff
  inet 10.2.16.253/24 brd 10.2.16.255 scope global eth0
  inet 10.2.16.250/24 brd 10.2.16.255 scope global eth0
  inet6 fe80::20c:29ff:fec5:2255/64 scope link
  valid_lft forever preferred_lft forever
  3: eth1:  mtu 1500 qdisc pfifo_fast state UP qlen 1000
  link/ether 00:0c:29:c5:22:5f brd ff:ff:ff:ff:ff:ff
  inet 10.0.0.1/24 brd 10.0.0.255 scope global eth1
  inet6 fe80::20c:29ff:fec5:225f/64 scope link
  valid_lft forever preferred_lft forever
  

     此VIP用ifconfig看不到,但是真实存在的。
  

  ##########给keepalived 生成的VIP进行mysql登录授权###########
  

  注意:两台机器都需要执行:
  

  mysql> grant all on *.* to 'root'@'10.2.16.250' identified by '123456';
  

  
  ####check_mysql.sh 需要在两台机器上都存在
  

  
     ###############keepalived+mha+check_mysql运行原理#################
  
     实现VIP飘移,需要将node1的Mysql服务停掉,此时keepalived中运行的脚本会检测mysql,检测到mysql挂了之后,会pkill keepalived
     当BACKUP-keepalived检测到主keepalived挂掉之后,会自动启动VIP,而MHA检测到master的mysql挂掉之后,也会将Master移至BAKCUP上
     此时所有的权限都移至Mysql-backup上,并且他已经成为MASTER,接替宕机的master所有工作,从而实现高可用。
  

  

  

  

  

  

  

  

  

  

  

  

  





运维网声明 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-657254-1-1.html 上篇帖子: lvs(DR)+keepalived+mysql主从 下篇帖子: keepalived高可用nginx
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

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

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

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

扫描微信二维码查看详情

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


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


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


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



合作伙伴: 青云cloud

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