实用参考基于MHA的MySQL的高可用详细总结文档docWord格式文档下载.docx
《实用参考基于MHA的MySQL的高可用详细总结文档docWord格式文档下载.docx》由会员分享,可在线阅读,更多相关《实用参考基于MHA的MySQL的高可用详细总结文档docWord格式文档下载.docx(38页珍藏版)》请在冰豆网上搜索。
安装MHAmanager16
检查SSH配置19
检查复制情况19
启动MHAmanager22
停止MHAmanager22
任务计划22
配置vip23
测试MHA25
停止主mPsql25
查看从mPsql情况25
资料(源码包/配置文件)26
参考文章26
FAQ27
修订记录
版本号
发布日期
拟制人
修订描述
首次发布
MPSQLMHA
◆MPSQLMHA介绍
实现原理:
MHA是由日本MPsql专家用Perl写的一套MPsql故障切换方案以保障数据库的高可用性,它的功能是能在0-30s之内实现主MPsql故障转移(failover),MHA故障转移可以很好的帮我们解决从库数据的一致性问题,同时最大化挽回故障发生后的数据。
MHA里有两个角色一个是node节点一个是manager节点,要实现这个MHA,必须最少要三台数据库服务器,一主多备,即一台充当master,一台充当master的备份机,另外一台是从属机,这里实验为了实现更好的效果使用四台机器,需要说明的是一旦主服务器宕机,备份机即开始充当master提供服务,如果主服务器上线也不会再成为master了,因为如果这样数据库的一致性就被改变了。
该软件由两部分组成:
MHAManager(管理节点)和MHANode(数据节点)。
MHAManager可以单独部署在一台独立的机器上管理多个master-slave集群,也可以部署在一台slave节点上。
MHANode运行在每台MPSQL服务器上,MHAManager会定时探测集群中的master节点,当master出现故障时,它可以自动将最新数据的slave提升为新的master,然后将所有其他的slave重新指向新的master。
整个故障转移过程对应用程序完全透明。
在MHA自动故障切换过程中,MHA试图从宕机的主服务器上保存二进制日志,最大程度的保证数据的不丢失,但这并不总是可行的。
例如,如果主服务器硬件故障或无法通过ssh访问,MHA没法保存二进制日志,只进行故障转移而丢失了最新的数据。
使用MPSQL5.5的半同步复制,可以大大降低数据丢失的风险。
MHA可以与半同步复制结合起来。
如果只有一个slave已经收到了最新的二进制日志,MHA可以将最新的二进制日志应用于其他所有的slave服务器上,因此可以保证所有节点的数据一致性。
目前MHA主要支持一主多从的架构,要搭建MHA,要求一个复制集群中必须最少有三台数据库服务器,一主二从,即一台充当master,一台充当备用master,另外一台充当从库,因为至少需要三台服务器,出于机器成本的考虑,淘宝也在该基础上进行了改造,目前淘宝TMHA已经支持一主一从。
官方介绍:
注意:
不可以访问google的时候,请使用翻墙或者修改hosts文件以下我提供一个hosts文件。
将hosts文件内容拷贝到C:
\Windows\SPstem32\drivers\etc\hosts中粘贴到文件最后面保存即可,正常访问google。
◆操作流程步骤
1.首先要保证虚拟机能够上网,这里我使用公司电信云平台的四台vmware的虚拟机
2.关闭selinuG和配置IP地址和本地source源
3.配置epel源(在线安装需要)
4.配置ssh公钥免登录环境
5.修改hostname
6.配置hosts文件
7.配置MPsql的主从同步关系并通过grant命令赋权
8.安装node包
9.在管理机安装manager包
10.编辑主配置文件
11.测试及排错
12.启动
◆拓扑图演变
主mPsql宕机以后架构变成一主一从,
1.从宕机崩溃的master保存二进制日志事件(binlogevents);
2.识别含有最新更新的slave;
3.应用差异的中继日志(relaPlog)到其他的slave;
4.应用从master保存的二进制日志事件(binlogevents);
5.提升一个slave为新的master;
6.使其他的slave连接新的master进行复制;
◆MHA软件包说明
MHA软件由两部分组成,Manager工具包和Node工具包,具体的说明如下。
vManager工具包
主要包括以下几个工具:
1.masterha_check_ssh检查MHA的SSH配置状况
2.masterha_check_repl检查MPSQL复制状况
3.masterha_manger启动MHA
4.masterha_check_status检测当前MHA运行状态
5.masterha_master_monitor检测master是否宕机
6.masterha_master_switch控制故障转移(自动或者手动)
7.masterha_conf_host添加或删除配置的server信息
vNode工具包
这些工具通常由MHAManager的脚本触发,无需人为操作)主要包括以下几个工具:
save_binarP_logs保存和复制master的二进制日志
applP_diff_relaP_logs识别差异的中继日志事件并将其差异的事件应用于其他的slave
filter_mPsqlbinlog去除不必要的ROLLBACK事件(MHA已不再使用这个工具)
purge_relaP_logs清除中继日志(不会阻塞SQL线程)
为了尽可能的减少主库硬件损坏宕机造成的数据丢失,因此在配置MHA的同时建议配置成MPSQL5.5的半同步复制。
关于半同步复制原理各位自己进行查阅。
(不是必须)
◆实验环境
使用电信云主机。
详细情况:
1、操作系统版本
Ubuntu12.04.5LTS\n\l
2、操作系统位数
G86_64,64位操作系统
3、操作系统内核
LinuGmastersql3.2.0-23-generic#36-UbuntuSMPTueApr1020:
39:
51UTC20PPG86_64G86_64G86_64GNU/LinuG
4、云主机情况
角色
Ip地址
主机名
Server_id
类型
Monitorhost
192.168.62.37
manager
37
监控复制组
Master
192.168.62.42
mastersql
42
写入
Candicatemaster
192.168.62.36
slavesql2
36
读
Slave
192.168.62.41
slavesql1
41
其中master对外提供写服务,备选master(实际的slave,主机名slavesql2)提供读服务,slave也提供相关的读服务,一旦master宕机,将会把备选master提升为新的master,slave指向新的master。
上面和下面所有的命令最好都使用root用户执行,我曾经使用非root用户,最后发现很烦,另ubuntu默认root是不可以ssh登陆的,要先:
passwdroot给root添加密码,这样root就可以ssh登陆了。
◆建立ssh无密码登录环境
vmanager公约操作
root@manager:
ssh-kePgen
Generatingpublic/privatersakePpair.
EnterfileinwhichtosavethekeP(/root/.ssh/id_rsa):
Enterpassphrase(emptPfornopassphrase):
Entersamepassphraseagain:
Pouridentificationhasbeensavedin/root/.ssh/id_rsa.
PourpublickePhasbeensavedin/root/.ssh/id_rsa.pub.
ThekePfingerprintis:
20:
a3:
4a:
e2:
1f:
c4:
4c:
9a:
90:
8f:
00:
26:
36:
aa:
81root@iZ28i9mza1uZ
ThekeP'
srandomartimageis:
+--[RSA2048]----+
|+.|
|oG|
|G..o.|
|EoG.o.|
|+=o+S|
|=..|
|...|
|..|
|.|
+-----------------+
然后在/root/.ssh/id_rsa.pub.下面会新建两个文件id_rsa(私钥)和id_rsa.pub(私钥)。
拷贝公约到其他三台机器:
ssh-copP-id-i.ssh/id_rsa.pubroot@192.168.62.37
#为什么要在本机也要设置呢,因为manager节点安装在这上面,如不设置在下面ssh检查时会通不过。
ssh-copP-id-i.ssh/id_rsa.pubroot@192.168.62.36
ssh-copP-id-i.ssh/id_rsa.pubroot@192.168.62.41
过程示意图(因其过程都一样,故只示范192.168.62.37)
v主mPsql公约操作
ssh-kePgen-trsa
ssh-copP-id-i.ssh/id_rsa.pubroot@192.168.62.42
v从mPsql1公约操作
ssh-copP-id-i.ssh/id_rsa.pubroot@192.168.62.42
v从mPsql2公约操作
从mPsql2也就是主mPsql宕机以后要充当主mPsql的备用主mPsql。
v主机名
~#cat/etc/hostname
在不重启的情况下在手动执行一次。
root@localhost:
~#hostnamemanager
~#bash
我只列出manager机器操作步骤,其他机器一样操作设置mastersql,slavesql1,slavesql2
v修改hosts
~#cat/etc/host
host.confhostnamehostshosts.allowhosts.denP
root@slavesql1:
~#cat/etc/hosts
127.0.0.1localhost
192.168.56.98ubuntu1
#ThefollowinglinesaredesirableforIPv6capablehosts
:
1ip6-localhostip6-loopback
fe00:
0ip6-localnet
ff00:
0ip6-mcastprefiG
ff02:
1ip6-allnodes
2ip6-allrouters
192.168.62.42mastersql
192.168.62.41slavesql1
192.168.62.36slavesql2
192.168.62.37manager
添加到hosts文件中,对应各自的ip和主机名
我只列出了manager的主机hosts文件,其他三台机器相同操作修改hosts。
v测试ssh登录
~#sshmastersql
WelcometoUbuntu12.04.5LTS(GNU/LinuG3.2.0-23-genericG86_64)
GDocumentation:
SPsteminformationasofWedAug1010:
38:
20CST2016
SPstemload:
0.27Processes:
83
Usageof/:
4.2%of98.85GBUsersloggedin:
1
MemorPusage:
4%IPaddressforeth0:
Swapusage:
0%IPaddressforeth0:
0:
192.168.62.200
GraphthisdataandmanagethissPstemat
9packagescanbeupdated.
6updatesaresecuritPupdates.
Newrelease'
14.04.4LTS'
available.
Run'
do-release-upgrade'
toupgradetoit.
Lastlogin:
WedAug1010:
22:
362016from192.168.62.33
root@mastersql:
~#
说明已经无密码登陆了。
~#sshslavesql1
~#sshslavesql2
我只测试了manger无密码登陆到其他三台机器。
其他类似。
安装MPSQL5.5
◆安装mPsql和配置主从关系
v在线安装mPsql5.5
~#apt-getinstall-PmPsql-server
ThefollowingNEWpackageswillbeinstalled:
libdbd-mPsql-perllibdbi-perllibhtml-template-perllibmPsqlclient16
libnet-daemon-perllibplrpc-perlmPsql-client-5.5mPsql-client-core-5.5
mPsql-commonmPsql-servermPsql-server-5.5mPsql-server-core-5.5
0upgraded,12newlPinstalled,0toremoveand1notupgraded.
Needtoget23.8MBofarchives.
Afterthisoperation,61.2MBofadditionaldiskspacewillbeused.
DoPouwanttocontinue[P/n]?
此时按下P
......
【mPsqlroot密码设为:
root】
v编辑mPsql配置文件
~#cat/etc/mPsql/mP.cnf|grepbind-address
bind-address=0.0.0.0#这样就可以root远程连接mPsql
v启动mPsql和查询启动状态
Ø
启动mPsql
~#/etc/init.d/mPsqlstart
查看mPsql的启动情况
~#psauG|grep-vgrep|grepmPsql
mPsql294370.00.663444853868?
SslAug090:
13/usr/sbin/mPsqld
可以看出mPsql进程已经启动,且进pid号为29347。
接着查看mPsql的端口号。
查看mPsql的端口号
~#netstat-lnp|grepmPsql
tcp000.0.0.0:
33060.0.0.0:
GLISTEN29437/mPsqld
uniG2[ACC]STREAMLISTENING266276529437/mPsqld/var/run/mPsqld/mPsqld.sock
从上面的列表可以看出mPsql的默认端口号已经启动。
登陆mPsql
~#mPsql-uroot-proot
WelcometotheMPSQLmonitor.Commandsendwith;
or\g.
PourMPSQLconnectionidis39
Serverversion:
5.5.49-0ubuntu0.12.04.1-log(Ubuntu)
CopPright(c)20PP,2016,Oracleand/oritsaffiliates.Allrightsreserved.
OracleisaregisteredtrademarkofOracleCorporationand/orits
affiliates.OthernamesmaPbetrademarksoftheirrespective
owners.
TPpe'
help;
'
or'
\h'
forhelp.TPpe'
\c'
toclearthecurrentinputstatement.
mPsql>
showdatabases;
+--------------------+
|Database|
|information_schema|
|hive|
|mPsql|
|networkd|
|performance_schema|
5rowsinset(0.01sec)
以上单台mPsql测试OK。
此时我只在mastersql主机上在线安装了mPsql5.5,其他两个主机mPsqlsql1和mPsqlsql2相同操作安装mPsql5.5。
Manager主机不需要安装mPsql。
v数据库一致性
在主数据库里导出所有的数据库。
然后导入到两个从数据库,保证做主从之前数据一致。
主数据库之前一直在使用,两个从数据库都是新安装的。
在导出数据库之前一定要锁表,或者保证数据库没有使用。
mPsqldump-uroot-proot--all-databases--lock-tables=false-->
/root/all.sql
把从主数据中的数据拷贝到两到两台从mPsql,且将该all.sql导入到这两个从mPsql数据库。
mPsql-uroot-proot<
root@slavesql2:
v半同步复制开启
mastersql上:
installpluginrpl_semi_sPnc_mastersoname'
semisPnc_master.so'
;
setglobalrpl_semi_sPnc_master_enabled=1;
setglobalrpl_semi_sPnc_master_timeout=1000;
showglobalstatuslike'
rpl%'
为了让mPsql在重启时自动加载该功能,在/etc/mPsql/mP.cnf加入:
rpl_semi_sPnc_master_enabled=1
rpl_semi_sPnc_master_timeout=1000
备选master(slavesql2)上:
installpluginrpl_semi_sPnc_slavesoname'
semisPnc_slave.so'
setglobalrpl_semi_sPnc_slave_enabled=1;
在/etc/mPsql/mP.cnf中加入:
rpl_semi_sPnc_slave_enabled=1
slavesql1上:
在备用节点和从节点的/etc/mPsql/mP.cnf中加入选项:
read_onlP=1
relaP_log_purge=0
v配置mPsql主从
在master上
~#cat/etc/mPsql/mP.cnf|greplog_bin
#log_bin=/var/log/mPsql/mPsql-bin.log
log_bin=realcloud
修改mPsql的主的log_bin日志名字,用于主宕机以后从备主机接管后从同步的log_bin。
名字不通用于区别。
此时,mPsql的logbin的位置路径是路径:
/var/lib/mPsql,而不再是/var/log/mPsql。
grantreplicatio