2019独角兽企业重金招聘Python工程师标准>>>

  1. MySQL MHA   项目的地址:https://code.google.com/p/mysql-master-ha/,这个网站需要翻墙才能打开。MySQL MHA 是目前比较成熟的高可用解决方案。
  2. 在MySQL故障切换过程中,MHA(Master High Availability)能做到在0~30秒之内自动完成数据库的故障切换操作,并且在进行故障切换过程中,MHA能在最大程度上保证数据的一致性,以达到真正意义上的高可用。
  3. 它由两部分组成:MHA Manager(管理节点)和MHA Node(数据节点)。MHA Manager可以单独部署在一台独立的机器上管理多个master-slave集群,也可以部署在一台slave上。MHA Node运行在每台MySQL服务器上,MHA Manager会定时探测集群中的master节点,当master出现故障时,它可以自动将最新数据的slave提升为新的master,然后将所有其他的slave重新指向新的master。整个故障转移过程对应用程序是完全透明的。
  4. 在MHA自动故障切换过程中,MHA试图从宕机的主服务器上保存二进制日志,最大程度地保证数据的不丢失,但这并不总是可行的。例如,如果主服务器硬件故障或无法通过ssh访问,MHA没法保存二进制日志,只进行故障转移而丢失了最新的数据。使用MySQL 5.5的半同步复制,可以大大降低数据丢失的风险。MHA可以与半同步复制结合起来。如果只有一个slave已经收到了最新的二进制日志,MHA可以将最新的二进制日志应用于其他所有的slave服务器上,因此它们彼此保持一致性。
  5. 目前MHA主要支持一主多从的架构,要搭建MHA,要求一个复制集群中必须最少有三台数据库服务器,一主二从,即一台从当master,一台从当备用master,另一台从当slave,因为至少需要三台数据库,出于机器成本考虑,淘宝也在此基础上进行了改造,目前淘宝TMHA已经支持一主一从。
  6. ##准备工作
  7. ##在虚拟机里面安装4台主机,关闭防火墙、iptables、ip6tables、并在/etc/hosts里面加入如下配置:
  8. 10.10.10.10 manager
  9. 10.10.10.11 master
  10. 10.10.10.12 slave1
  11. 10.10.10.13 slave2
  12. 1、主机部署
  13. manager:10.10.10.10
  14. master:10.10.10.11
  15. slave1:10.10.10.12(备用master)
  16. slave2:10.10.10.13
  17. 2、首先用ssh-keygen实现4台主机之间相互免密匙登陆(4台机器都执行)
  18. ssh-keygen -t rsa
  19. ssh-copy-id -i /root/.ssh/id_rsa.pub root@10.10.10.10
  20. ssh-copy-id -i /root/.ssh/id_rsa.pub root@10.10.10.11
  21. ssh-copy-id -i /root/.ssh/id_rsa.pub root@10.10.10.12
  22. ssh-copy-id -i /root/.ssh/id_rsa.pub root@10.10.10.13
  23. ##最后测试:在每个节点上测试连接。验证当您再次运行以下命令时,系统是否不提示您输入口令。
  24. ssh manager date
  25. ssh master date
  26. ssh slave1 date
  27. ssh slave2 date
  28. ##这一步一定要测试成功才能进行后面的安装!
  29. 3、安装MHA node
  30. ##MHA node 在4台机器都执行。在manager(10.10.10.10)上面也要安装MHA node。
  31. ##安装mha node之前需要先安装perl的DBD::mysql模块
  32. # yum update
  33. # yum -y install perl perl-devel cpan
  34. # yum -y install perl-DBD-MySQL ncftp
  35. # rpm -ivh mha4mysql-node-0.56-0.el6.noarch.rpm
  36. ##mha node 安装完成后会在/usr/bin 下面生成以下四个脚本:(这些工具通常由mha manger的脚本触发,无需人工操作)
  37. /usr/bin/save_binary_logs       ##保存和复制master的二进制日志
  38. /usr/bin/apply_diff_relay_logs  ##识别差异的中继日志事件并将其差异的事件应用于其他slave
  39. /usr/bin/filter_mysqlbinlog     ##去除不必要的ROLLBACK事件(MHA已经不再使用这个工具)
  40. /usr/bin/purge_relay_logs       ##清除中继日志(不会阻塞SQL线程)
  41. 4、安装MHA manager
  42. ##MHA manager 只需要在manager(10.10.10.10)上面安装。
  43. ##安装mha manager也需要先安装一些perl模块
  44. # yum update
  45. # yum -y install perl perl-devel cpan
  46. # yum -y install perl-DBD-MySQL perl-Config-Tiny perl-Log-Dispatch perl-Parallel-ForkManager perl-Time-HiRes ncftp
  47. # yum -y install perl-Config-IniFiles perl-Params-Validate perl-Test-Mock-LWP.noarch perl-LWP-Authen-Negotiate.noarch
  48. # rpm -ivh mha4mysql-manager-0.56-0.el6.noarch.rpm
  49. ##mha manager 安装完成后会在/usr/bin 下面生成一些脚本:
  50. /usr/bin/masterha_check_repl         ##检查mysql复制状况
  51. /usr/bin/masterha_check_ssh          ##检查MHA的ssh配置状况
  52. /usr/bin/masterha_check_status       ##检测当前MHA运行状态
  53. /usr/bin/masterha_conf_host          ##添加或删除配置的server信息
  54. /usr/bin/masterha_manager            ##启动MHA
  55. /usr/bin/masterha_master_monitor     ##监测master是否宕机
  56. /usr/bin/masterha_master_switch      ##控制故障转移(自动或手动)
  57. /usr/bin/masterha_secondary_check    ##也是监测master是否宕机的脚本
  58. /usr/bin/masterha_stop               ##关闭MHA
  59. 5、搭建主从复制环境
  60. ##由于我这里是在虚拟机里面刚新安装的mysql数据库,这里就没有备份、恢复的步骤了。master、slave1和slave2三台数据库的my.cnf配置一模一样,只是server-id分别为1、2、3。
  61. [client]
  62. port            = 3306
  63. socket          = /mydata/data/3306/mysql_3306.sock
  64. default-character-set=utf8
  65. [mysqld]
  66. port            = 3306
  67. socket          = /mydata/data/3306/mysql_3306.sock
  68. pid-file        = /mydata/data/3306/mysql.pid
  69. user            = mysql
  70. basedir        = /usr/local/mysql
  71. datadir        = /mydata/data/3306
  72. character_set_server=utf8
  73. character_set_client=utf8
  74. collation-server=utf8_general_ci
  75. lower_case_table_names=1
  76. log-bin=mysql-bin
  77. server-id=1
  78. relay-log=mysql-relay-bin
  79. read-only=true
  80. relay-log-purge=false
  81. ##master上操作:
  82. mysql> show master status;
  83. mysql> GRANT REPLICATION SLAVE ON *.* TO 'repl'@'%' IDENTIFIED BY '123';  ##其实这个用户应该在每台数据库中都存在,因为切换之后说不定那台数据库就成为新的master。
  84. mysql> flush privileges;
  85. mysql> install plugin rpl_semi_sync_master soname 'semisync_master.so';
  86. mysql> set global rpl_semi_sync_master_enabled=1;
  87. mysql> set global rpl_semi_sync_master_timeout=30000;
  88. ##slave1和slave2上操作:
  89. mysql> CHANGE MASTER TO
  90. MASTER_HOST='10.10.10.11',
  91. MASTER_PORT=3306,
  92. MASTER_USER='repl',
  93. MASTER_PASSWORD='123',
  94. MASTER_LOG_FILE='mysql-bin.000007',
  95. MASTER_LOG_POS=389;
  96. mysql> install plugin rpl_semi_sync_slave soname 'semisync_slave.so';
  97. mysql> set global rpl_semi_sync_slave_enabled=1;
  98. mysql> start slave;
  99. ##MySQL5.5引入了半同步复制,所以高可用架构一定要用半同步复制了。
  100. ##其实这个用户应该在每台数据库中都存在,因为切换之后说不定那台数据库就成为新的master。
  101. mysql> GRANT ALL PRIVILEGES ON *.* TO 'mha_rep'@'%' IDENTIFIED BY '123';  ##在master上创建MHA监控所需的用户,会同步到slave端。
  102. mysql> flush privileges;
  103. 6、管理机manager上配置MHA文件
  104. # mkdir -p /masterha/app1
  105. # mkdir -p /etc/masterha
  106. # vim /etc/masterha/app1.cnf
  107. [server default]
  108. manager_log=/masterha/app1/manager.log   ##设置manager的日志
  109. manager_workdir=/masterha/app1           ##设置manager的工作日志
  110. user=mha_rep    ##监控用户
  111. password=123    ##监控用户密码
  112. ping_interval=1 ##设置监控主库,发送ping包的时间间隔,默认的是每隔3秒,尝试三次没有回应的时候自动failover
  113. remote_workdir=/masterha/app1   ##设置远端mysql在发生切换时保存binlog的具体位置
  114. repl_user=repl      ##设置复制用户
  115. repl_password=123   ##设置复制用户密码
  116. ssh_user=root       ##设置ssh的登录用户名
  117. master_ip_failover_script=""         ##设置自动failover时候切换脚本
  118. master_ip_online_change_script=""    ##设置手动failover时候切换脚本
  119. shutdown_script=""                   ##设置故障发生后关闭故障主机脚本(防止发生脑裂)
  120. ##一旦MHA 到master 的监控之间网络出现问题,则将尝试从slave1 登陆到master
  121. secondary_check_script=/usr/bin/masterha_secondary_check -s slave1 -s master --user=root --master_host=master --master_ip=10.10.10.11 --master_port=3306
  122. [server1]
  123. hostname=10.10.10.11
  124. port=3306
  125. master_binlog_dir=/mydata/data/3306      ##设置master默认保存binlog的位置,以便MHA可以找到master的日志
  126. candidate_master=1  ##设置为候选master,如果设置该参数后,发生主从切换后会将此从库提升为主,即使这个库不是集群中最新的slave
  127. check_repl_delay=0  ##在默认情况下如果一个slave落后master 100M的relay logs的话,MHA将不会选择该slave作为一个新的master,此参数会忽略这个限制。
  128. [server2]
  129. hostname=10.10.10.12
  130. port=3306
  131. master_binlog_dir=/mydata/data/3306      ##设置master默认保存binlog的位置,以便MHA可以找到master的日志
  132. candidate_master=1  ##设置为候选master,如果设置该参数后,发生主从切换后会将此从库提升为主,即使这个库不是集群中最新的slave
  133. check_repl_delay=0  ##在默认情况下如果一个slave落后master 100M的relay logs的话,MHA将不会选择该slave作为一个新的master,此参数会忽略这个限制。
  134. [server3]
  135. hostname=10.10.10.13
  136. port=3306
  137. master_binlog_dir=/mydata/data/3306      ##设置master默认保存binlog的位置,以便MHA可以找到master的日志
  138. no_master=1         ##设置no_master=1使主机不能成为新master
  139. 7、验证(在manager上检查)
  140. # masterha_check_ssh --conf=/etc/masterha/app1.cnf
  141. # masterha_check_repl --conf=/etc/masterha/app1.cnf
  142. # masterha_check_status --conf=/etc/masterha/app1.cnf
  143. 8、开启MHA监控(在manager上)
  144. # nohup masterha_manager --conf=/etc/masterha/app1.cnf < /dev/null > /masterha/app1/manager.log 2>&1 &
  145. # tail -f /masterha/app1/manager.log
  146. # masterha_check_status --conf=/etc/masterha/app1.cnf
  147. 9、关闭MHA监控(在manager上,这里不执行)
  148. # masterha_stop --conf=/etc/masterha/app1.cnf
  149. 10、测试自动failover
  150. ##在master上面停掉mysql数据库,现在slave1应该变为新的master了,然后在slave1上面查看:
  151. mysql> show slave hosts;
  152. +-----------+------+------+-----------+--------------------------------------+
  153. | Server_id | Host | Port | Master_id | Slave_UUID                           |
  154. +-----------+------+------+-----------+--------------------------------------+
  155. |         3 |      | 3306 |         2 | 91012b97-aed9-11e5-81b1-2053563b5ed8 |
  156. +-----------+------+------+-----------+--------------------------------------+
  157. 1 row in set (0.00 sec)
  158. ##可以看见结果和我们预期的一样,现在在slave1上面插入一条数据,在slave2端也能看见。
  159. 11、恢复高可用架构
  160. ##failover成功之后,MHA就会停了,这时候是slave1 到slave2 的主从复制,假设10.10.10.11 数据库恢复了,那我们需要恢复高可用架构,让MHA启动。
  161. ##这是时候需要做的是,启动10.10.10.11 数据库,在manager上面执行以下命令,找到CHANGE MASTER 执行即可。
  162. ##10.10.10.10
  163. [root@manager ~]# grep -i "All other slaves should start replication from here" /masterha/app1/manager.log
  164. Thu Dec 31 00:40:47 2015 - [info]  All other slaves should start replication from here. Statement should be: CHANGE MASTER TO MASTER_HOST='10.10.10.12', MASTER_PORT=3306, MASTER_LOG_FILE='mysql-bin.000004', MASTER_LOG_POS=529, MASTER_USER='repl', MASTER_PASSWORD='xxx';
  165. ##10.10.10.11
  166. mysql> CHANGE MASTER TO
  167. -> MASTER_HOST='10.10.10.12',
  168. -> MASTER_PORT=3306,
  169. -> MASTER_LOG_FILE='mysql-bin.000004',
  170. -> MASTER_LOG_POS=529,
  171. -> MASTER_USER='repl',
  172. -> MASTER_PASSWORD='123';
  173. Query OK, 0 rows affected, 2 warnings (0.04 sec)
  174. mysql> start slave;
  175. Query OK, 0 rows affected (0.01 sec)
  176. ##10.10.10.12
  177. mysql> show slave hosts;
  178. +-----------+------+------+-----------+--------------------------------------+
  179. | Server_id | Host | Port | Master_id | Slave_UUID                           |
  180. +-----------+------+------+-----------+--------------------------------------+
  181. |         1 |      | 3306 |         2 | c29a45e7-aed8-11e5-81ac-0050562dd34d |
  182. |         3 |      | 3306 |         2 | 91012b97-aed9-11e5-81b1-2053563b5ed8 |
  183. +-----------+------+------+-----------+--------------------------------------+
  184. 2 rows in set (0.00 sec)
  185. ##10.10.10.10
  186. # rm -rf /masterha/app1/app1.failover.complete
  187. # nohup masterha_manager --conf=/etc/masterha/app1.cnf < /dev/null > /masterha/app1/manager.log 2>&1 &
  188. # masterha_check_status --conf=/etc/masterha/app1.cnf

转载于:https://my.oschina.net/u/588516/blog/1377509

MySQL MHA 高可用架构相关推荐

  1. MySQL MHA高可用架构官方文档全文翻译

    目录 MHA项目官方github地址 关于MHA 概述 主故障切换的难点 现有的解决方案和问题 MHA的架构 MHA的优势 使用案例 其他高可用解决方案和问题 纯手动解决 单主单从 一个主节点.一个备 ...

  2. mysql MHA高可用架构安装

    是什么(是一个软件) MHA(Master High Availability)是MySQL高可用性环境下故障切换和主从提升的高可用软件.在MySQL故障切换过程中,MHA能做到在0~30秒之内自动完 ...

  3. 【稳定性day10】美团MySQL的高可用架构 - 对标业内的一些解决方案

    本文来自美团蔡金龙老师的分享,介绍了最近几年美团点评MySQL数据库高可用架构的演进过程,以及我们在开源技术基础上做的一些创新.同时,也和业界其它方案进行综合对比,了解业界在高可用方面的进展,和未来我 ...

  4. MHA高可用架构部署以及配置(详细)

    目录 一.MHA概述 1.简介 2.MHA特点 3.何为高可用 4.故障切换过程 二.MHA高可用架构部署 1.架构图 2. 实验环境:需要四台Centos7服务器 3.实验部署 3.1.master ...

  5. MHA高可用架构搭建

    MHA高可用架构搭建 1.环境软件版本 2.环境架构介绍 3.MySQL主从搭建 3.1 MySQL安装(3台) 3.2 关闭防火墙 3.3 MySQL主从配置 Master节点 Slave1节点 S ...

  6. Mysql的高可用架构搭建(MHA)

    文章目录 Mysql高可用架构(MHA)简介 MySQL高可用系统 MHA技术介绍 MHA提供了如下功能 MHA工作原理 MHA的优点 MHA组件介绍 Manager工具包主要包括以下工具 Node工 ...

  7. Spring - MySql实现高可用架构之MHA

    一.简介 MHA(Master HA)是一款开源的 MySQL 的高可用程序,它为 MySQL 主从复制架构提供了 automating master failover 功能.MHA 在监控到 mas ...

  8. mysql mha配置文件详解_十四、MySQL MHA 高可用配置(一)

    MHA 高可用 1.准备三台机器 IP:10.0.0.51 主机名:db01 内存:2G IP:10.0.0.52 主机名:db02 内存:2G IP:10.0.0.53 主机名:db03 内存:2G ...

  9. ES+Redis+MySQL,高可用架构设计太牛了!(至尊典藏版)

    目录 前言 一.ES 高可用方案 1.1.ES 双中心主备集群架构 1.2.ES 流量隔离三集群架构 1.3.ES 集群深度优化提升 二.会员 Redis 缓存方案 2.1. ES 近一秒延时导致的 ...

最新文章

  1. php提交表单关闭弹出层,使用js实现关闭js弹出层的窗口
  2. css新闻列表优化-突破思维新方法更利于搜索引擎
  3. 通过 Keras 构建深度学习模型的步骤
  4. 计算机技术与软件专业技术资格(水平)考试常见问题
  5. C#中数值型数据保留N位小数方法
  6. Notification通知栏
  7. 如何设计良好的viewcontroller
  8. Tips--TensorFlow报错:tensorflow:Early stopping conditioned on metric `val_loss` which is not available
  9. SQL创建触发器以及触发器的使用实例+详解
  10. linux mysql命令不存在_mysql命令、mysqldump命令找不到解决
  11. 计算机被覆盖文件怎么恢复,如何找回被覆盖的文件?恢复被覆盖文件的方法
  12. 如何在 Mac 上更改文件夹颜色,改变 mac 文件夹颜色教程
  13. 周杰伦新专辑预售热点传播渠道分析
  14. 自定义结构体及初始化
  15. wincap问题之一(丢包)
  16. Unity材质:玻璃
  17. word 图片导入不翻转_如何在Microsoft Word中翻转图片
  18. Your branch and ‘origin/master‘ have diverged,
  19. 商场导航反向寻车方案及造价分析
  20. css文本行高是哪个属性_CSS样式----CSS属性:字体属性和文本属性(图文详解)...

热门文章

  1. python-68:BS4获取多个标签的文本
  2. proxmox 之 与openstack的比较
  3. 人工智能其实并不客观,算法会加剧刻板印象
  4. 《C语言接口与实现:创建可重用软件的技术》一2.6 扩展阅读
  5. json-lib把XML转化为json
  6. LVS nat 是否需要借助iptables 的snat实现负载均衡
  7. Check the value configured in 'zookeeper.znode.parent'
  8. 《面向模式的软件体系结构2-用于并发和网络化对象模式》读书笔记(3)--- 服务访问和配置模式...
  9. 010——VUE中使用lodash库减少watch对后台请求的压力
  10. Apache、Nginx、Tomcat、PHP的区别