keepalived结合MHA实现mysql高可用

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

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

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

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

[[email protected] keepalived-1.1.20]# make && make install

[[email protected] keepalived]# cp /usr/local/sbin/keepalived /usr/sbin/   #拷贝命令文件

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

[[email protected] 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

}

}

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

[[email protected] ~]# 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服务检测脚本内容,按需修改:

[[email protected] ~]# 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:

[[email protected] ~]#service keepalived start

启动日志:

[[email protected] ~]# 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:

[[email protected] ~]# ip addr

1: lo: <LOOPBACK,UP,LOWER_UP> 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: <BROADCAST,MULTICAST,UP,LOWER_UP> 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: <BROADCAST,MULTICAST,UP,LOWER_UP> 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看不到,但是真实存在的。

####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所有工作,从而实现高可用。

keepalived结合MHA实现mysql高可用,布布扣,bubuko.com

时间: 2024-12-20 16:13:19

keepalived结合MHA实现mysql高可用的相关文章

构建MHA实现MySQL高可用集群架构

一.MHA简介 MHA(Master HighAvailability)目前在MySQL高可用方面是一个相对成熟的解决方案,它由日本DeNA公司youshimaton(现就职于Facebook公司)开发,是一套优秀的作为MySQL高可用性环境下故障切换和主从提升的高可用软件.在MySQL故障切换过程中,MHA能做到在0~30秒之内自动完成数据库的故障切换操作,并且在进行故障切换的过程中,MHA能在最大程度上保证数据的一致性,以达到真正意义上的高可用. MHA里有两个角色一个是MHA Node(数

基于 MHA 的MySQL高可用-CentOS7(理论)

MHA 简介 MHA(Master High Availability)目前在 MySQL 高可用方面是一个相对成熟的解决方案, 它由日本 DeNA 公司的 youshimaton 员工(现就职于 Facebook 公司)开发,是一套优秀的作 为 MySQL 高可用性环境下故障切换和主从角色提升的高可用软件.在 MySQL 故障切换过程 中,MHA 能做到在 0~30 秒之内自动完成数据库的主从故障切换操作,并且在进行故障切换 的过程中,MHA 能在最大程度上保证数据的一致性,以达到真正意义上的

基于 MHA 的MySQL高可用-CentOS7(实例)

环境部署 角色 IP地址 主机名 ServerID 数据库类型 Primary Master 192.168.200.111 server01 1 写 Secondary Master 192.168.200.112 server02 2 写 Slave1 192.168.200.113 server03 3 读 Slave2 192.168.200.114 server04 4 读 Manager 192.168.200.115 server05 - 监控复制组 配置所有主机名称 master

使用mha 构建mysql高可用碰到几个问题

根据网上配置,安装好mha ,建议到https://code.google.com/archive/p/mysql-master-ha/downloads  下载0.56版本 1.首先先确定各个主机之间能ssh 无密码登录 2.perl 环境的配置,要确保每个节点,perl 可以操作mysql 3.要保证node 程序和manager 程序版本一致,安装manager 会需要很多依赖 4.配置文件中要配置secondary_check_script= masterha_secondary_che

第22章 mysql 高可用MMM、MHA

2015-10-25 目录 参考资料 [1] 唐汉明.深入浅出MySQL 数据库开发.优化与管理维护(第2版)[M].北京:人民邮电出版社,2014 [2] Schwartz.高性能MySQL(第3版)[M].北京:电子工业出版社,2013 [3] 分享MYSQL中的各种高可用技术(源自姜承尧大牛) [4] MHA工作原理 [5] 技术实战:基于 MHA 方式实现 MySQL 的高可用(1) [6] mysql HA方案: MHA [7] mysql高可用方案MHA介绍 [8] Mysql5.5

整个MHA+keepalived+lvs+mysql高可用架构配置说明

整个MHA+keepalived+lvs+mysql高可用架构配置说明1.1. 环境简介1.1.1.vmvare虚拟机,系统版本CentOS7.5 x86_64位最小化安装,mysql的版本5.7.21,1.1.2.虚拟机器的ssh端口均为默认22,1.1.3.虚拟机的iptables全部关闭,1.1.4.虚拟机的selinux全部关闭,1.1.5.虚拟机服务器时间全部一致 ntpdate 0.asia.pool.ntp.org1.1.6.3台机器的ssh端口为22**1.2.此次试验采用的是3

企业中MySQL高可用集群架构三部曲之MM+keepalived

各位老铁们,老张与大家又见面了.看到各位在博客里面给我的留言和访问量的情况,我很是欣慰,也谢谢大家对我的认可.我写这些博客,就是想把自己对于MySQL数据库的一些看法和自己平时的实战经验分享出来,我们可以一起探讨,共同进步.也保证今后只要一有空就更新博文,推出更多的干货. 我的学生经常对我说:"张老师,每次我遇到报错,有时还是会百度,但是最烦的是不知道百度哪篇帖子说的是正确的".其实这些呢,都是因为自己还没有对MySQL数据库核心知识的不熟悉,和对技术掌握的不牢固.平时下得功夫还是不到

MySQL高可用系列之MHA(二)

一.参数说明 MHA提供了一系列配置参数,深入理解每个参数的具体含义,对优化配置.合理使用MHA非常重要,很多高可用性也都是通过合理配置一些参数而实现的. MHA包括如下配置参数,分别说明如下: hostname/ip/port (Local Only) hostname为MySQL Server的IP地址或主机名: ip为MySQL Server的IP地址,缺省从$hostname中获取:port为MySQL Server的端口号,缺省为3306 ssh_host/ssh_ip/ssh_por

优酷土豆资深工程师:MySQL高可用之MaxScale与MHA

本文根据DBAplus社群第67期线上分享整理而成 本次分享主要包括以下内容: 1.MySQL高可用方案 2.为什么选择MHA 3.读写分离方案的寻找以及为什么选择Maxscale 一.MySQL  Failover的方案 常见的Failover方案 MMM MMM缺点: Monitor节点是单点,可以结合Keepalived实现高可用目前MySQL Failover 的方案 Keepalived会有脑裂的风险 在读写繁忙的业务中可能丢数据 MHA + ssh -o 测试心跳 + masterM