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

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

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

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

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

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

文件版本:

文件编号:

R&D0008

发布日期:

2016-08-10

编制:

xxx

审批:

MySQLMHA文档总结

xxx版权所有

 

修订记录

版本号

发布日期

拟制人

修订描述

2016-08-10

xxx

首次发布

 

 

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无法保留二进制日记,只进行故障转移而丢失了最新的数据。

利用MySQL的半同步复制,能够大大降低数据丢失的风险。

MHA能够与半同步复制结合起来。

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

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

官方介绍:

注意:

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

将hosts文件内容拷贝到C:

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

◆操作流程步骤

1.第一要保证虚拟性能够上网,那个地址我利用公司电信云平台的四台vmware的虚拟机

2.关闭selinux和配置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的同时建议配置成MySQL的半同步复制。

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

(不是必需)

◆实验环境

利用电信云主机。

详细情形:

一、操作系统版本

UbuntuLTS\n\l

二、操作系统位数

x86_64,64位操作系统

3、操作系统内核

Linuxmastersql#36-UbuntuSMPTueApr1020:

39:

51UTC2012x86_64x86_64x86_64GNU/Linux

4、云主机情形

角色

Ip地址

主机名

Server_id

类型

Monitorhost

监控复制组

Master

写入

Candicatemaster

Slave

其中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/.

Thekeyfingerprintis:

20:

a3:

4a:

e2:

1f:

c4:

4c:

9a:

90:

8f:

00:

c4:

26:

36:

aa:

81root@iZ28i9mza1uZ

Thekey'srandomartimageis:

+--[RSA2048]----+

|+.|

|o*|

|X..o.|

|Eo*.o.|

|+=o+S|

|=..|

|...|

|..|

|.|

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

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

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

root@manager:

ssh-copy-id-i.ssh/ 

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

root@manager:

ssh-copy-id-i.ssh/ 

root@manager:

ssh-copy-id-i.ssh/ 

root@manager:

ssh-copy-id-i.ssh/ 

进程示用意(因其进程都一样,故只示范)

v主mysql公约操作

ssh-keygen-trsa

ssh-copy-id-i.ssh/

ssh-copy-id-i.ssh/

ssh-copy-id-i.ssh/

v从mysql1公约操作

ssh-keygen-trsa

ssh-copy-id-i.ssh/

ssh-copy-id-i.ssh/

ssh-copy-id-i.ssh/

v从mysql2公约操作

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

ssh-keygen-trsa

ssh-copy-id-i.ssh/

ssh-copy-id-i.ssh/

ssh-copy-id-i.ssh/

v主机名

root@manager:

~#cat/etc/hostname

manager

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

root@localhost:

~#hostnamemanager

root@manager:

~#bash

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

v修改hosts

root@manager:

~#cat/etc/host

hostnamehosts

root@slavesql1:

~#cat/etc/hosts

localhost

ubuntu1

#ThefollowinglinesaredesirableforIPv6capablehosts

:

:

1ip6-localhostip6-loopback

fe00:

:

0ip6-localnet

ff00:

:

0ip6-mcastprefix

ff02:

:

1ip6-allnodes

ff02:

:

2ip6-allrouters

mastersql

slavesql1

slavesql2

manager

添加到hosts文件中,对应各自的ip和主机名

我只列出了manager的主机hosts文件,其他三台机械相同操作修改hosts。

v测试ssh登录

root@manager:

~#sshmastersql

WelcometoUbuntuLTS(GNU/Linuxx86_64)

*Documentation:

SysteminformationasofWedAug1010:

38:

20CST2016

Systemload:

Processes:

83

Usageof/:

%ofUsersloggedin:

1

Memoryusage:

4%IPaddressforeth0:

Swapusage:

0%IPaddressforeth0:

0:

Graphthisdataandmanagethissystematpackagescanbeupdated.

6updatesaresecurityupdates.

Newrelease'LTS'available.

Run'do-release-upgrade'toupgradetoit.

Lastlogin:

WedAug1010:

22:

362016from说明已经无密码登岸了。

root@manager:

~#sshslavesql1

root@manager:

~#sshslavesql2

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

其他类似。

 

安装

◆安装mysql和配置主从关系

v在线安装

root@mastersql:

~#apt-getinstall-ymysql-server

ThefollowingNEWpackageswillbeinstalled:

libdbd-mysql-perllibdbi-perllibhtml-template-perllibmysqlclient16

libnet-daemon-perllibplrpc-perl

mysql-commonmysql-server

0upgraded,12newlyinstalled,0toremoveand1notupgraded.

NeedtogetMBofarchives.

Afterthisoperation,MBofadditionaldiskspacewillbeused.

Doyouwanttocontinue[Y/n]?

 现在按下Y

......

【mysqlroot密码设为:

root】

......

v编辑mysql配置文件

root@mastersql:

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

bind-address=#如此就能够够root远程连接mysql

v启动mysql和查询启动状态

Ø启动mysql

root@mastersql:

~#/etc/mysqlstart

Ø查看mysql的启动情形

root@mastersql:

~#psaux|grep-vgrep|grepmysql

mysql2943763444853868?

SslAug090:

13/usr/sbin/mysqld

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

接着查看mysql的端口号。

Ø查看mysql的端口号

root@mastersql:

~#netstat-lnp|grepmysql

tcp00LISTEN29437/mysqld

unix2[ACC]STREAMLISTENING266276529437/mysqld/var/run/mysqld/

从上面的列表能够看出mysql的默许端口号已经启动。

Ø登岸mysql

root@mastersql:

~#mysql-uroot-proot

WelcometotheMySQLmonitor.Commandsendwith;or\g.

YourMySQLconnectionidis39

Serverversion:

(Ubuntu)

Copyright(c)2000,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|

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

5rowsinsetsec)

以上单台mysql测试OK。

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

Manager主机不需要安装mysql。

v数据库一致性

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

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

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

在导出数据库之前必然要锁表,或保证数据库没有利用。

root@mastersql:

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

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

root@slavesql1:

mysql-uroot-proot

root@slavesql2:

mysql-uroot-proot

v半同步复制开启

Ømastersql上:

mysql>installpluginrpl_semi_sync_mastersoname'';

mysql>setglobalrpl_semi_sync_master_enabled=1;

mysql>setglobalrpl_semi_sync_master_timeout=1000;

mysql>showglobalstatuslike'rpl%';

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

rpl_semi_sync_master_enabled=1

rpl_semi_sync_master_timeout=1000

Ø备选master(slavesql2)上:

mysql>installpluginrpl_semi_sync_mastersoname'';

mysql>setglobalrpl_semi_sync_master_enabled=1;

mysql>setglobalrpl_semi_sync_master_timeout=1000;

mysql>installpluginrpl_semi_sync_slavesoname'';

mysql>setglobalrpl_semi_sync_slave_enabled=1;

在/etc/mysql/中加入:

rpl_semi_sync_master_enabled=1

rpl_semi_sync_master_timeout=1000

rpl_semi_sync_slave_enabled=1

Øslavesql1上:

mysql>installpluginrpl_semi_sync_slavesoname'';

mysql>setglobalrpl_semi_sync_slave_enabled=1;

在/etc/mysql/中加入:

rpl_semi_sync_slave_enabled=1

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

read_only=1

relay_log_purge=0

v配置mysql主从

Ø在master上

root@mastersql:

~#cat/etc/mysql/|greplog_bin

#log_bin=/var/log/mysql/

log_bin=realcloud

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

名字不通用于区别。

现在,mysql的logbin的位置路径是路径:

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

mysql>grantreplicationslaveon*.*torealcloud@''identifiedby'realcloud';

mysql>showmasterstatus;

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

|File|Position|Binlog_Do_DB|Binlog_Ignore_DB|

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

||107|||

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

1rowinsetsec)

记录下“File”和“Position”即当前主库利用的二进制日记名称和位置。

Ø在备选master(mysqlsql2)和slave(mysqlsql1)上

mysql>slavestop;

mysql>changemastertomaster_host="",master_user="realcloud",master_password="realcloud",master_log_file="",master_log_pos=107;

master_log_file和master_log_pos是上面记下的东西。

Ø在备选master(slavesql2)上,授权其网段内其他机械登岸的账号和密码

mysql>grantreplicationslaveon*.*torepl@''identifiedbyrepl;

Ø然后在备选master(slavesql2)和slave(slavesql1)上

mysql>slavestart;

mysql>showslavestatus\G'|egrep'Slave_IO|Slave_SQL'

Slave_IO_State:

Waitingformastertosendevent

Slave_IO_Running:

Yes

Slave_SQL_Running:

Yes

#若是Slave_IO_Running:

Yes和Slave_SQL_Running:

Yes则说明主从配置成功

#还能够到master上执行Mysql>showglobalstatuslike"rpl%";

mysql>showglobalstatuslike"rpl%";

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

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

当前位置:首页 > 法律文书 > 调解书

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

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