MySQLMHA高可用环境搭建

              MySQLMHA高可用环境搭建


简介:

MHA(Master High

Availability)目前在MySQL高可用方面是一个相对成熟的解决方案。


该软件由两部分组成:MHA Manager(管理节点)和MHA Node(数据节点)。MHA Manager可以单独部署在一台独立的机器上管理多个master-slave集群,也可以部署在一台slave节点上。MHA Node运行在每台MySQL服务器上,MHA Manager会定时探测集群中的master节点,当master出现故障时,它可以自动将最新数据的slave提升为新的master,然后将所有其他的slave重新指向新的master。整个故障转移过程对应用程序完全透明。


目前MHA主要支持一主多从的架构,要搭建MHA,要求一个复制集群中必须最少有三台数据库服务器,一主二从,即一台充当master,一台充当备用master,另外一台充当从库,因为至少需要三台服务器。


官方介绍:https://code.google.com/p/mysql-master-ha/

图01展示了如何通过MHA Manager管理多组主从复制。可以将MHA工作原理总结为如下:

(1)从宕机崩溃的master保存二进制日志事件(binlog events);


(2)识别含有最新更新的slave;


(3)应用差异的中继日志(relay log)到其他的slave;


(4)应用从master保存的二进制日志事件(binlog events);


(5)提升一个slave为新的master;


(6)使其他的slave连接新的master进行复制;


MHA软件由两部分组成,Manager工具包和Node工具包,具体的说明如下。


Manager工具包主要包括以下几个工具:


复制代码

masterha_check_ssh              检查MHA的SSH配置状况

masterha_check_repl             检查MySQL复制状况

masterha_manger                 启动MHA

masterha_check_status           检测当前MHA运行状态

masterha_master_monitor         检测master是否宕机

masterha_master_switch          控制故障转移(自动或者手动)

masterha_conf_host              添加或删除配置的server信息

复制代码

Node工具包(这些工具通常由MHA

Manager的脚本触发,无需人为操作)主要包括以下几个工具:


save_binary_logs                保存和复制master的二进制日志

apply_diff_relay_logs           识别差异的中继日志事件并将其差异的事件应用于其他的slave

filter_mysqlbinlog              去除不必要的ROLLBACK事件(MHA已不再使用这个工具)

purge_relay_logs                清除中继日志(不会阻塞SQL线程)


部署

角色                IP地址             

========================= 

Master              192.168.60.57 

Slave               192.168.60.58   

Slave               192.168.60.59    

Monitor host        192.168.60.59


[if !supportLists]1.  [endif]Mysql 服务器安装部署

 分别在三台机器上分别部署mysql(基于GTID,ROW模式)

参照链接http://www.cnblogs.com/zfxJava/p/6004188.html配置

用户名和密码设置相同root/Pnt2017


[if !supportLists]2.  [endif]把上面的三个mysql节点配置成1主两从(192.168.60.57主,192.168.60.58从,192.168.60.59从)

1、配置主库:


1)、授权给从数据库服务器

在192.168.60.57,192.168.60.58上

mysql> GRANTREPLICATION SLAVE ON *.* to 'rep'@'192.168.60.%' identified by 'reppasswd';

mysql>FLUSHPRIVILEGES;


2、配置从库:

分别在192.168.60.58,192.168.60.59上

mysql>stopslave;

mysql> CHANGEMASTER TO MASTER_HOST='192.168.60.57', MASTER_USER='rep',MASTER_PASSWORD='reppasswd', MASTER_AUTO_POSITION=1;

mysql>startslave;

mysql> showslave status\G;

查看slave的状态,如果下面两项值为YES,则表示配置正确:

Slave_IO_Running:Yes

Slave_SQL_Running:Yes



三台机器相互免密登录配置

分别在192.168.60.57,192.168.60.58,192.168.60.59上执行下面的

sudo su - root

ssh-keygen 一直按回车

ssh-copy-id -i /root/.ssh/id_rsa -p 22 root@192.168.60.57

ssh-copy-id -i /root/.ssh/id_rsa -p 22 root@192.168.60.58

ssh-copy-id -i /root/.ssh/id_rsa -p 22 root@192.168.60.59


验证免密码登录配置成功:

在192.168.60.57,192.168.60.58,192.168.60.59上执行,sshroot@192.168.60.58;sshroot@192.168.60.59;ssh root@192.168.60.57如果不提示输入密码则表示配置好了;


创建MHA管理用户,在master192.168.60.57上创建。

mysql> grant all privileges on *.* to

'mha'@'192.168.60.%' identified  by 'mhapwd';    

mysql> flush  privileges;

Mha node和管理节点安装部署


1.把虚IP漂移perl脚本,mha 检测脚本,mha管理节点,mha node节点ftp到服务器/home/admin/soft

Mha node安装

在192.168.60.57,192.168.60.58,192.168.60.59

  查看perl版本号

perl -MShell -e "print\"module installed\n\""

perl -Mperl-DBD-MySQL -e "print\"moduleinstalled\n\""


安装perl支持包

yum -y install perl-DBD-MySQL ncftp perl-DBI

安装mha node软件包

rpm -ivh mha4mysql-node-0.57-0.el7.noarch.rpm


Mha manager安装以及配置

在192.168.60.59上


[if !supportLists]1.    [endif]确认你的CentOS 的版本首先通过以下命令确认你的CentOS 版本

$ cat /etc/redhat-release CentOS release 6.4 (Final)

2.

下载EPEL 的rpm 安装包现在从上面的地址下载CentOS 版本所对应的EPEL 的版本

$ wgethttp://download.fedoraproject.org/pub/epel/6/i386/epel-release-6-8.noarch.rpm


3. 安装EPEL

通过以下命令安装EPEL 软件包

$ sudo rpm -ivh epel-release-6-8.noarch.rpm


安装perl支持软件包

yum -y install perl-Cofig-Tiny perl-Time-HiRes.x86_64perl-Parallel-ForkManager perl-Log-Dispatch-Perl.noarch perl-DBD-MySQL ncftp


安装mha manager

rpm -ivh mha4mysql-manager-0.57......rpm


在主节点192.168.60.57上创建虚IP

/sbin/ifconfig eth0:1 192.168.60.90/24

用ip addr 查看配置情况

注释掉(删除VIP:/sbin/ifconfig eth0:1 down)


mha管理节点配置

在192.168.60.59上

mkdir -p /etc/mha

mkdir -p  /home/mysql_mha

cd /etc/mha


vi mysql_mha.cnf

[server default]

user=mha

password=mhapwd

manager_workdir=/mnt/db/mysql_mha

manager_log=/mnt/db/mysql_mha/manager.log

remote_workdir=/mnt/db/mysql_mha


ssh_user=root

repl_user=rep

repl_password=reppasswd

ping_interval=1

master_binlog_dir=/mnt/db/mysql/data

master_ip_failover_script=/usr/bin/mha_master_ip_failover.pl

secondary_check_script=/usr/bin/masterha_secondary_check-s 192.168.60.58 -s 192.168.60.59 -s 192.168.60.57


[server1]

hostname=192.168.60.57

candidate_master=1

[server2]

hostname=192.168.60.58

candidate_master=1

[server3]

hostname=192.168.60.59

no_master=1

mha manager检测命令以及启动监控


[if !supportLists]1.    [endif]检查SSH配置(node5 Monitor 监控节点上操作),如下:

# masterha_check_ssh--conf=/etc/mha/mysql_mha.cnf


[if !supportLists]2.    [endif]检查整个复制环境状况(node5 监控节点上操作),如下:

# masterha_check_repl--conf=/etc/mha/mysql_mha.cnf


[if !supportLists]3.    [endif]开启MHA Manager监控()如下:


# nohup masterha_manager --conf=/etc/mha/mysql_mha.cnf--remove_dead_master_conf --ignore_last_failover < /dev/null> /mnt/db/mysql_mha/manager.log 2>&1 &

参数说明: 

--remove_dead_master_conf    #该参数代表当发生主从切换后,老的主库的ip将会从配置文件中移除。   

--manger_log                  #日志存放位置   

--ignore_last_failover        #在缺省情况下,如果MHA检测到连续发生宕机,会生成mysql_mha.failover.complete文件,会造成MHA管理进程无法启动。

4. 查看MHA Manager监控是否正常:

# masterha_check_status --conf=/etc/mha/mysql_mha.cnf 



5. 查看启动日志(node5操作)如下:

# tail -n20 /mnt/db/mysql_mha/manager.log


6. 关闭MHA Manage监控:

(1) 关闭

# masterha_stop --conf=/etc/mha/mysql_mha.cnf

(2) 启动

# nohup masterha_manager --conf=/etc/mha/mysql_mha.cnf--remove_dead_master_conf --ignore_last_failover < /dev/null> /mnt/db/mysql_mha/manager.log 2>&1



六、MHA Failover切换

1. 自动Failover切换

(1) 模拟master mysql关闭

在192.168.60.57上执行servicemysqld stop

 (2)VIP将会切换到node2   

(3) /etc/mha/mysql_mha.cnf中将原主服务器配置文件清掉。   

(4) masterha_manager监控进程会自动退出关闭,并在/mnt/db/mysql_mha下生成mysql_mha.failover.complete文件,manager.log会记录全过程,从服务器会自动从新的主服务器复制。   

(5) 原主服务器mysqld启动的,需要清掉/mnt/db/mysql_mha 下生成mysql_mha.failover.complete文件,添加node1配置文件到/etc/mha/mysql_mha.cnf,通过manager.log中的记录的故障点,重新同步主服务器,成为从节点。


在57上用ip addr 查看虚IP是否 漂移

在58上用ip addr查看虚IP 90是否漂移过来

在59上执行show slave

status\G 查看主节点是否已经是58了.


重启57上的mysql 服务:service mysqld restart;

mysql -uroot -pPnt2017

mysql>stop slave;

mysql> CHANGE MASTER TOMASTER_HOST='192.168.60.58', MASTER_USER='rep', MASTER_PASSWORD='Pnt2017',MASTER_AUTO_POSITION=1;

mysql>start slave;

mysql> show slave status\G;


可以看到57的主节点已经是58了,后续可以类似的down掉58上的mysql 服务,虚IP飘到57上,主节点切到57上;



也可以进行手动切换命令如下:

masterha_master_switch--master_state=dead --conf=/etc/mha/mysql_mha.cnf--dead_master_host=192.168.60.57 --dead_master_port=3306--new_master_host=192.168.60.58 --new_master_port=3306 --ignore_last_failover



参考链接:http://www.linuxidc.com/Linux/2016-05/130925.htm

http://www.cnblogs.com/gomysql/p/3675429.html

©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 194,491评论 5 459
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 81,856评论 2 371
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 141,745评论 0 319
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 52,196评论 1 263
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 61,073评论 4 355
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 46,112评论 1 272
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 36,531评论 3 381
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 35,215评论 0 253
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 39,485评论 1 290
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 34,578评论 2 309
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 36,356评论 1 326
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 32,215评论 3 312
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 37,583评论 3 299
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 28,898评论 0 17
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 30,174评论 1 250
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 41,497评论 2 341
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 40,697评论 2 335

推荐阅读更多精彩内容