6A文基于MHA的MySQL的高可用详细总结文档.docx

上传人:b****1 文档编号:547060 上传时间:2023-04-29 格式:DOCX 页数:48 大小:129.72KB
下载 相关 举报
6A文基于MHA的MySQL的高可用详细总结文档.docx_第1页
第1页 / 共48页
6A文基于MHA的MySQL的高可用详细总结文档.docx_第2页
第2页 / 共48页
6A文基于MHA的MySQL的高可用详细总结文档.docx_第3页
第3页 / 共48页
6A文基于MHA的MySQL的高可用详细总结文档.docx_第4页
第4页 / 共48页
6A文基于MHA的MySQL的高可用详细总结文档.docx_第5页
第5页 / 共48页
6A文基于MHA的MySQL的高可用详细总结文档.docx_第6页
第6页 / 共48页
6A文基于MHA的MySQL的高可用详细总结文档.docx_第7页
第7页 / 共48页
6A文基于MHA的MySQL的高可用详细总结文档.docx_第8页
第8页 / 共48页
6A文基于MHA的MySQL的高可用详细总结文档.docx_第9页
第9页 / 共48页
6A文基于MHA的MySQL的高可用详细总结文档.docx_第10页
第10页 / 共48页
6A文基于MHA的MySQL的高可用详细总结文档.docx_第11页
第11页 / 共48页
6A文基于MHA的MySQL的高可用详细总结文档.docx_第12页
第12页 / 共48页
6A文基于MHA的MySQL的高可用详细总结文档.docx_第13页
第13页 / 共48页
6A文基于MHA的MySQL的高可用详细总结文档.docx_第14页
第14页 / 共48页
6A文基于MHA的MySQL的高可用详细总结文档.docx_第15页
第15页 / 共48页
6A文基于MHA的MySQL的高可用详细总结文档.docx_第16页
第16页 / 共48页
6A文基于MHA的MySQL的高可用详细总结文档.docx_第17页
第17页 / 共48页
6A文基于MHA的MySQL的高可用详细总结文档.docx_第18页
第18页 / 共48页
6A文基于MHA的MySQL的高可用详细总结文档.docx_第19页
第19页 / 共48页
6A文基于MHA的MySQL的高可用详细总结文档.docx_第20页
第20页 / 共48页
亲,该文档总共48页,到这儿已超出免费预览范围,如果喜欢就下载吧!
下载资源
资源描述

6A文基于MHA的MySQL的高可用详细总结文档.docx

《6A文基于MHA的MySQL的高可用详细总结文档.docx》由会员分享,可在线阅读,更多相关《6A文基于MHA的MySQL的高可用详细总结文档.docx(48页珍藏版)》请在冰点文库上搜索。

6A文基于MHA的MySQL的高可用详细总结文档.docx

6A文基于MHA的MySQL的高可用详细总结文档

文件版本:

V1.0

文件编号:

R&D0008

发布日期:

2016-08-10

编制:

GGG

审批:

MySQLMHA文档总结

 

GGG版权所有

目录

MySQLMHA介绍4

操作流程步骤5

拓扑图演变5

MHA软件包说明6

Manager工具包6

Node工具包7

实验环境7

建立ssh无密码登录环境8

manager公约操作8

主mysql公约操作8

从mysql1公约操作9

从mysql2公约操作9

主机名9

修改hosts9

测试ssh登录10

安装mysql和配置主从关系11

在线安装mysql5.511

编辑mysql配置文件11

启动mysql和查询启动状态11

数据库一致性12

半同步复制开启13

配置mysql主从13

测试mysql主从15

部署MHA16

安装MHANode16

安装MHAmanager16

检查SSH配置19

检查复制情况19

启动MHAmanager22

停止MHAmanager22

任务计划22

配置vip23

测试MHA25

停止主mysql25

查看从mysql情况25

资料(源码包/配置文件)26

参考文章26

FAQ27

修订记录

版本号

发布日期

拟制人

修订描述

V1.0

2016-08-10

GGG

首次发布

 

MySQLMHA

◆MySQLMHA介绍

实现原理:

MHA是由日本Mysql专家用Perl写的一套Mysql故障切换方案以保障数据库的高可用性,它的功能是能在0-30s之内实现主Mysql故障转移(failover),MHA故障转移可以很好的帮我们解决从库数据的一致性问题,同时最大化挽回故障发生后的数据。

MHA里有两个角色一个是node节点一个是manager节点,要实现这个MHA,必须最少要三台数据库服务器,一主多备,即一台充当master,一台充当master的备份机,另外一台是从属机,这里实验为了实现更好的效果使用四台机器,需要说明的是一旦主服务器宕机,备份机即开始充当master提供服务,如果主服务器上线也不会再成为master了,因为如果这样数据库的一致性就被改变了。

该软件由两部分组成:

MHAManager(管理节点)和MHANode(数据节点)。

MHAManager可以单独部署在一台独立的机器上管理多个master-slave集群,也可以部署在一台slave节点上。

MHANode运行在每台MySQL服务器上,MHAManager会定时探测集群中的master节点,当master出现故障时,它可以自动将最新数据的slave提升为新的master,然后将所有其他的slave重新指向新的master。

整个故障转移过程对应用程序完全透明。

在MHA自动故障切换过程中,MHA试图从宕机的主服务器上保存二进制日志,最大程度的保证数据的不丢失,但这并不总是可行的。

例如,如果主服务器硬件故障或无法通过ssh访问,MHA没法保存二进制日志,只进行故障转移而丢失了最新的数据。

使用MySQL5.5的半同步复制,可以大大降低数据丢失的风险。

MHA可以与半同步复制结合起来。

如果只有一个slave已经收到了最新的二进制日志,MHA可以将最新的二进制日志应用于其他所有的slave服务器上,因此可以保证所有节点的数据一致性。

目前MHA主要支持一主多从的架构,要搭建MHA,要求一个复制集群中必须最少有三台数据库服务器,一主二从,即一台充当master,一台充当备用master,另外一台充当从库,因为至少需要三台服务器,出于机器成本的考虑,淘宝也在该基础上进行了改造,目前淘宝TMHA已经支持一主一从。

官方介绍:

注意:

不可以访问google的时候,请使用翻墙或者修改hosts文件以下我提供一个hosts文件。

将hosts文件内容拷贝到C:

\Windows\System32\drivers\etc\hosts中粘贴到文件最后面保存即可,正常访问google。

◆操作流程步骤

1.首先要保证虚拟机能够上网,这里我使用公司电信云平台的四台vmware的虚拟机

2.关闭selinuG和配置IP地址和本地source源

3.配置epel源(在线安装需要)

4.配置ssh公钥免登录环境

5.修改hostname

6.配置hosts文件

7.配置Mysql的主从同步关系并通过grant命令赋权

8.安装node包

9.在管理机安装manager包

10.编辑主配置文件

11.测试及排错

12.启动

◆拓扑图演变

主mysql宕机以后架构变成一主一从,

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

2.识别含有最新更新的slave;

3.应用差异的中继日志(relaylog)到其他的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检查MySQL复制状况

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_binary_logs保存和复制master的二进制日志

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

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

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

注意:

为了尽可能的减少主库硬件损坏宕机造成的数据丢失,因此在配置MHA的同时建议配置成MySQL5.5的半同步复制。

关于半同步复制原理各位自己进行查阅。

(不是必须)

◆实验环境

使用电信云主机。

详细情况:

1、操作系统版本

Ubuntu12.04.5LTS\n\l

2、操作系统位数

G86_64,64位操作系统

3、操作系统内核

LinuGmastersql3.2.0-23-generic#36-UbuntuSMPTueApr1020:

39:

51UTC20XXG86_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-keygen

Generatingpublic/privatersakeypair.

Enterfileinwhichtosavethekey(/root/.ssh/id_rsa):

Enterpassphrase(emptyfornopassphrase):

Entersamepassphraseagain:

Youridentificationhasbeensavedin/root/.ssh/id_rsa.

Yourpublickeyhasbeensavedin/root/.ssh/id_rsa.pub.

Thekeyfingerprintis:

20:

a3:

4a:

e2:

1f:

c4:

4c:

9a:

90:

8f:

00:

c4:

26:

36:

aa:

81root@iZ28i9mza1uZ

Thekey'srandomartimageis:

+--[RSA2048]----+

|+.|

|oG|

|G..o.|

|EoG.o.|

|+=o+S|

|=..|

|...|

|..|

|.|

+-----------------+

然后在/root/.ssh/id_rsa.pub.下面会新建两个文件id_rsa(私钥)和id_rsa.pub(私钥)。

拷贝公约到其他三台机器:

root@manager:

ssh-copy-id-i.ssh/id_rsa.pubroot@192.168.62.37

#为什么要在本机也要设置呢,因为manager节点安装在这上面,如不设置在下面ssh检查时会通不过。

root@manager:

ssh-copy-id-i.ssh/id_rsa.pubroot@192.168.62.37

root@manager:

ssh-copy-id-i.ssh/id_rsa.pubroot@192.168.62.36

root@manager:

ssh-copy-id-i.ssh/id_rsa.pubroot@192.168.62.41

过程示意图(因其过程都一样,故只示范192.168.62.37)

v主mysql公约操作

ssh-keygen-trsa

ssh-copy-id-i.ssh/id_rsa.pubroot@192.168.62.37

ssh-copy-id-i.ssh/id_rsa.pubroot@192.168.62.41

ssh-copy-id-i.ssh/id_rsa.pubroot@192.168.62.42

v从mysql1公约操作

ssh-keygen-trsa

ssh-copy-id-i.ssh/id_rsa.pubroot@192.168.62.42

ssh-copy-id-i.ssh/id_rsa.pubroot@192.168.62.36

ssh-copy-id-i.ssh/id_rsa.pubroot@192.168.62.37

v从mysql2公约操作

从mysql2也就是主mysql宕机以后要充当主mysql的备用主mysql。

ssh-keygen-trsa

ssh-copy-id-i.ssh/id_rsa.pubroot@192.168.62.37

ssh-copy-id-i.ssh/id_rsa.pubroot@192.168.62.41

ssh-copy-id-i.ssh/id_rsa.pubroot@192.168.62.42

v主机名

root@manager:

~#cat/etc/hostname

manager

在不重启的情况下在手动执行一次。

root@localhost:

~#hostnamemanager

root@manager:

~#bash

我只列出manager机器操作步骤,其他机器一样操作设置mastersql,slavesql1,slavesql2

v修改hosts

root@manager:

~#cat/etc/host

host.confhostnamehostshosts.allowhosts.deny

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

ff02:

:

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登录

root@manager:

~#sshmastersql

WelcometoUbuntu12.04.5LTS(GNU/LinuG3.2.0-23-genericG86_64)

GDocumentation:

SysteminformationasofWedAug1010:

38:

20CST2016

Systemload:

0.27Processes:

83

Usageof/:

4.2%of98.85GBUsersloggedin:

1

Memoryusage:

4%IPaddressforeth0:

192.168.62.42

Swapusage:

0%IPaddressforeth0:

0:

192.168.62.200

Graphthisdataandmanagethissystemat

9packagescanbeupdated.

6updatesaresecurityupdates.

Newrelease'14.04.4LTS'available.

Run'do-release-upgrade'toupgradetoit.

Lastlogin:

WedAug1010:

22:

362016from192.168.62.33

root@mastersql:

~#

说明已经无密码登陆了。

root@manager:

~#sshslavesql1

root@manager:

~#sshslavesql2

我只测试了manger无密码登陆到其他三台机器。

其他类似。

安装MySQL5.5

◆安装mysql和配置主从关系

v在线安装mysql5.5

root@mastersql:

~#apt-getinstall-ymysql-server

ThefollowingNEWpackageswillbeinstalled:

libdbd-mysql-perllibdbi-perllibhtml-template-perllibmysqlclient16

libnet-daemon-perllibplrpc-perlmysql-client-5.5mysql-client-core-5.5

mysql-commonmysql-servermysql-server-5.5mysql-server-core-5.5

0upgraded,12newlyinstalled,0toremoveand1notupgraded.

Needtoget23.8MBofarchives.

Afterthisoperation,61.2MBofadditionaldiskspacewillbeused.

Doyouwanttocontinue[Y/n]?

此时按下Y

......

【mysqlroot密码设为:

root】

......

v编辑mysql配置文件

root@mastersql:

~#cat/etc/mysql/f|grepbind-address

bind-address=0.0.0.0#这样就可以root远程连接mysql

v启动mysql和查询启动状态

Ø启动mysql

root@mastersql:

~#/etc/init.d/mysqlstart

Ø查看mysql的启动情况

root@mastersql:

~#psauG|grep-vgrep|grepmysql

mysql294370.00.663444853868?

SslAug090:

13/usr/sbin/mysqld

可以看出mysql进程已经启动,且进pid号为29347。

接着查看mysql的端口号。

Ø查看mysql的端口号

root@mastersql:

~#netstat-lnp|grepmysql

tcp000.0.0.0:

33060.0.0.0:

GLISTEN29437/mysqld

uniG2[ACC]STREAMLISTENING266276529437/mysqld/var/run/mysqld/mysqld.sock

从上面的列表可以看出mysql的默认端口号已经启动。

Ø登陆mysql

root@mastersql:

~#mysql-uroot-proot

WelcometotheMySQLmonitor.Commandsendwith;or\g.

YourMySQLconnectionidis39

Serverversion:

5.5.49-0ubuntu0.12.04.1-log(Ubuntu)

Copyright(c)20XX,2016,Oracleand/oritsaffiliates.Allrightsreserved.

OracleisaregisteredtrademarkofOracleCorporationand/orits

affiliates.Othernamesmaybetrademarksoftheirrespective

owners.

Type'help;'or'\h'forhelp.Type'\c'toclearthecurrentinputstatement.

mysql>showdatabases;

+--------------------+

|Database|

+--------------------+

|information_schema|

|hive|

|mysql|

|networkd|

|performance_schema|

+--------------------+

5rowsinset(0.01sec)

以上单台mysql测试OK。

此时我只在mastersql主机上在线安装了mysql5.5,其他两个主机mysqlsql1和mysqlsql2相同操作安装mysql5.5。

Manager主机不需要安装mysql。

v数据库一致性

在主数据库里导出所有的数据库。

然后导入到两个从数据库,保证做主从之前数据一致。

主数据库之前一直在使用,两个从数据库都是新安装的。

在导出数据库之前一定要锁表,或者保证数据库没有使用。

root@mastersql:

mysqldump-uroot-proot--all-databases--lock-tables=false-->/root/all.sql

把从主数据中的数据拷贝到两到两台从mysql,且将该all.sql导入到这两个从mysql数据库。

root@slavesql1:

mysql-uroot-proot

root@slavesql2:

mysql-uroot-proot

v半同步复制开启

Ømastersql上:

mysql>installpluginrpl_semi_sync_mastersoname'semisync_master.so';

mysql>setglobalrpl_semi_sync_master_enabled=1;

mysql>setglobalrpl_semi_sync_master_timeout=1000;

mysql>showglobalstatuslike'rpl%';

为了让mysql在重启时自动加载该功能,在/etc/mysql/f加入:

rpl_semi_sync_master_enabled=1

rpl_semi_sync_master_timeout=1000

Ø备选master(slavesql2)上:

mysql>installpluginrpl_semi_sync_mastersoname'semisync_master.so';

mysql>setglobalrpl_semi_sync_master_enabled=1;

mysql>setglobalrpl_semi_sync_master_timeout=1000;

mysql>installpluginrpl_semi_sync_slavesoname'semisync_slave.so';

mysql>setglobalrpl_semi_sync_slave_enabled=1;

在/etc/mysql/f中加入:

rpl_semi_sync_master_enabled=1

rpl_semi_sync_master_timeout=1000

rpl_semi_sync_slave_enabled=1

Øslavesql1上:

mysql>installpluginrpl_semi_sync_slavesoname'semisync_slave.so';

mysql>setglobalrpl_semi_sync_slave_enabled=1;

在/etc/mysql/f中加入:

rpl_semi_sync_slave_enabled=1

在备用节点和从节点的/etc/mysql/f中加入选项:

read_only=1

relay_log_purge=0

v配置mysql主从

Ø在master上

root@mastersql:

~#cat/etc/mysql/f|greplog_bin

#log_bin=/var/log/mysql/mysql-bin.log

log_bin=realcloud

修改mysql的主的log_bin日志名字,用于主宕机以后从备主机接管后从同步的log_bin。

名字不通用于区别。

此时,mysql的logbin的位置路径是路径:

/var/lib/mysql,而不再是/var/log/mysql。

mysql>grantreplica

展开阅读全文
相关资源
猜你喜欢
相关搜索
资源标签

当前位置:首页 > 总结汇报 > 学习总结

copyright@ 2008-2023 冰点文库 网站版权所有

经营许可证编号:鄂ICP备19020893号-2