• mysql -mmm


    MMM(Master-Master replication manager for MvSQL,MySQL主主复制管理器)


    是一套支持双主故障切换和双主日常管理的脚本程序。MMM 使用 Perl 语言开发,主要用来监控和管理 MySQL Master-Master (双主)复制,虽然叫做双主复制,但是业务上同一时刻只允许对一个主进行写入,另一台备选主上提供部分读服务,以加速在主主切换时备选主的预热,可以说MMM这套脚本程序一方面实现了故障切换的功能,另一方面其内部附加的工具脚本也可以实现多个 Slave 的 read 负载均衡

    MMM提供了自动和手动两种方式移除一组服务器中复制延迟较高的服务器的虚拟ip,同时它还可以备份数据,实现两节点之间的数据同步等。由于MMM无法完全保证数据的一致性,所以MMM适用于对数据的一致性要求不是很高,但是又想最大程度地保证业务可用性的场景。

    MMM是一套灵活的脚本程序,基于perl实现,用来对 mysql replication 进行监控和故障迁移,并能管理 MySQL Master-Master 复制的配置。

    关于 MMM 高可用架构的说明如下:
    mmm_mon:监控进程,负责所有的监控工作,决定和处理所有节点角色活动。此脚本需要在监控主机上运行。
    mmm_agent:运行在每个MySQL服务器上的代理进程,完成监控的探针工作和执行简单的远端服务设置。此脚本需要在被监管机上运行。
    mmm_control:一个简单的脚本,提供管理 mmm_mon 进程的命令。
    mysql-mmm 的监管端会提供多个虚拟 IP(VIP),包括一个可写 VIP,多个可读 VIP,通过监管的管理,这些 IP 会绑定在可用 MySQL 之上,当某一台 MySQL 宕机时,监管会将 VIP 迁移至其他 MySQL。

    在整个监管过程中,需要在 MySQL 中添加相关授权用户,以便让 MySQL 可以支持监控主机的维护。 授权的用户包括一个 mmm_monitor 用户和一个 mmm_agent 用户。

    实验

    1. systemctl stop firewalld
    2. setenforce 0
    3. ---------------------- 搭建 MySQL 多主多从模式 ----------------------
    4. //修改 master01 配置文件
    5. vim /etc/my.cnf
    6. ......
    7. [mysqld]
    8. user = mysql
    9. basedir = /usr/local/mysql
    10. datadir = /usr/local/mysql/data
    11. port = 3306
    12. character_set_server=utf8
    13. pid-file = /usr/local/mysql/mysqld.pid
    14. socket = /usr/local/mysql/mysql.sock
    15. server-id = 1 #每台 Mysql 主机的 server-id 不能相同
    16. log-error=/usr/local/mysql/data/mysql_error.log #错误日志
    17. general_log=ON #通用查询日志
    18. general_log_file=/usr/local/mysql/data/mysql_general.log
    19. slow_query_log=ON #慢查询日志
    20. slow_query_log_file=mysql_slow_query.log
    21. long_query_time=5
    22. binlog-ignore-db=mysql,information_schema #不需要同步的库名
    23. log_bin=mysql_bin #开启二进制日志用于主从数据复制
    24. log_slave_updates=true #允许slave从master复制数据时可以写入到自己的二进制日志
    25. sync_binlog=1 #"双1设置",MySQL 在每写一次二进制日志时都会同步到磁盘中去
    26. innodb_flush_log_at_trx_commit=1 #"双1设置",每次事务提交时MySQL都会把缓存的数据写入日志文件,并且刷到磁盘中去
    27. auto_increment_increment=2 #自增字段一次递增多少
    28. auto_increment_offset=1 #自增字段的起始值
    29. //把配置文件复制到其它 3 台数据库服务器上并启动服务器,注意:配置文件中的 server_id 要修改
    30. scp /etc/my.cnf root@192.168.80.30:/etc/
    31. scp /etc/my.cnf root@192.168.80.13:/etc/
    32. scp /etc/my.cnf root@192.168.80.14:/etc/
    33. systemctl restart mysqld
    34. //配置主主复制,两台主服务器相互复制
    35. #在两台主服务器上都执行授予从的权限,从服务器上不需要执行
    36. grant replication slave on *.* to 'replication'@'192.168.80.%' identified by '123456';
    37. #在两台主服务器上查看,记录日志文件名称和同步点
    38. show master status;
    39. +-------------------+----------+--------------+------------------+
    40. | File | Position | Binlog_Do_DB | Binlog_Ignore_DB |
    41. +-------------------+----------+--------------+------------------+
    42. | master-bin.000002 | 154 | | |
    43. +-------------------+----------+--------------+------------------+
    44. #在 master01 上配置同步
    45. change master to master_host='192.168.80.30',master_user='replication',master_password='123456',master_log_file='mysql_bin.000002',master_log_pos=154;
    46. start slave;
    47. show slave status\G
    48. Slave_IO_Running: Yes
    49. Slave_SQL_Running: Yes
    50. #在 master02 上配置同步
    51. change master to master_host='192.168.80.20',master_user='replication',master_password='123456',master_log_file='mysql_bin.000002',master_log_pos=154;
    52. start slave;
    53. show slave status\G
    54. Slave_IO_Running: Yes
    55. Slave_SQL_Running: Yes
    56. //配置主从复制,在两台从服务器上做
    57. change master to master_host='192.168.80.20',master_user='replication',master_password='123456',master_log_file='mysql_bin.000002',master_log_pos=154;
    58. start slave;
    59. show slave status\G
    60. Slave_IO_Running: Yes
    61. Slave_SQL_Running: Yes
    62. //测试主主、主从 同步情况
    63. create database db_test;
    64. ---------------------- 安装配置 MySQL-MMM ----------------------
    65. //在所有服务器上安装 MySQL-MMM
    66. wget -O /etc/yum.repos.d/CentOS-Base.repo http://mirrors.aliyun.com/repo/Centos-7.repo
    67. yum -y install epel-release
    68. yum -y install mysql-mmm*
    69. //在 master01 上对 MySQL-MMM 进行配置
    70. cd /etc/mysql-mmm/
    71. vim mmm_common.conf
    72. ……
    73. cluster_interface ens33
    74. ……
    75. replication_user replication
    76. replication_password 123456
    77. agent_user mmm_agent
    78. agent_password 123456
    79. ip 192.168.80.20
    80. mode master
    81. peer db2
    82. ip 192.168.80.30
    83. mode master
    84. peer db1
    85. ip 192.168.80.13
    86. mode slave
    87. ip 192.168.80.14
    88. mode slave
    89. hosts db1, db2
    90. ips 192.168.80.188
    91. mode exclusive #只有一个 host 可以进行写操作模式
    92. hosts db3, db4
    93. ips 192.168.80.198, 192.168.80.199
    94. mode balanced #多个 slave 主机可以进行读操作模式
    95. //把配置文件复制到其它 4 台主机,所有主机该配置文件内容都是一样的
    96. scp mmm_common.conf root@192.168.80.30:/etc/mysql-mmm/
    97. scp mmm_common.conf root@192.168.80.13:/etc/mysql-mmm/
    98. scp mmm_common.conf root@192.168.80.14:/etc/mysql-mmm/
    99. scp mmm_common.conf root@192.168.80.15:/etc/mysql-mmm/
    100. //修改所有数据库服务器的代理配置文件 mmm_agent.conf
    101. vim /etc/mysql-mmm/mmm_agent.conf
    102. include mmm_common.conf
    103. this db1 #根据不同的主机分别修改为 db1,db2,db3,db4
    104. //在 monitor 监控服务器上修改监控配置文件 mmm_mon.conf
    105. vim /etc/mysql-mmm/mmm_mon.conf
    106. include mmm_common.conf
    107. .....
    108. ping_ips 192.168.80.20,192.168.80.30,192.168.80.13,192.168.80.14 #指定所有数据库服务器的 IP
    109. auto_set_online 10 #指定自动上线时间
    110. monitor_user mmm_monitor #指定 mmm_monitor 的用户名
    111. monitor_password 123456 #指定 mmm_monitor 的密码
    112. //在所有数据库上为 mmm_agent(代理进程)授权
    113. grant super, replication client, process on *.* to 'mmm_agent'@'192.168.80.%' identified by '123456';
    114. //在所有数据库上为 mmm_moniter(监控进程)授权
    115. grant replication client on *.* to 'mmm_monitor'@'192.168.80.%' identified by '123456';
    116. flush privileges;
    117. //在所有数据库服务器上启动 mysql-mmm-agent
    118. systemctl start mysql-mmm-agent.service
    119. systemctl enable mysql-mmm-agent.service
    120. //在 monitor 服务器上启动 mysql-mmm-monitor
    121. systemctl start mysql-mmm-monitor.service
    122. //在 monitor 服务器上测试群集
    123. #查看各节点的情况
    124. mmm_control show
    125. db1(192.168.80.20) master/ONLINE. Roles: writer(192.168.80.188)
    126. db2(192.168.80.30) master/ONLINE. Roles:
    127. db3(192.168.80.13) slave/ONLINE. Roles: reader(192.168.80.198)
    128. db4(192.168.80.14) slave/ONLINE. Roles: reader(192.168.80.199)
    129. #检测监控功能是否都完善,需要各种OK
    130. mmm_control checks all
    131. #指定绑定 VIP 的主机
    132. mmm_control move_role writer db2
    133. //故障测试
    134. mmm_control move_role writer db1
    135. #停止 master01 确认 VIP 是否移动到 master02 上。注意:master01 主服务器恢复服务后,不会抢占
    136. mmm_control show
    137. db1(192.168.80.20) master/HARD_OFFLINE. Roles:
    138. db2(192.168.80.30) master/ONLINE. Roles: writer(192.168.80.188)
    139. #停止一台从服务器,另一台将接管两个虚拟IP,以保证业务不停止
    140. mmm_control show
    141. //客户端测试
    142. #在 master01 服务器上为 monitor 服务器地址授权登录
    143. grant all on *.* to 'testdba'@'192.168.80.15' identified by '123456';
    144. flush privileges;
    145. #在 monitor 服务器上使用 VIP 登录
    146. yum install -y mariadb-server mariadb
    147. systemctl start mariadb.service
    148. mysql -utestdba -p -h 192.168.235.188
    149. #创建数据,测试同步情况
    150. create database testdba;

  • 相关阅读:
    Git【入门】从安装到会用(千字总结●超详细)
    基于腾讯地图实现精准定位,实现微信小程序考勤打卡功能
    linux进程管理
    可视化配置 Nginx 代理:功能完备,使用简单 | 开源日报 No.234
    学习笔记(12)js模块、网络基础
    2022第五空间WEB&MISC
    百度智能云千帆推出大模型普惠计划,0成本切换
    天玑810和天玑900哪个好 天玑810和天玑900差距
    uni-app:实现等待加载功能
    网安周报|OpenSSF 推出恶意软件包存储库
  • 原文地址:https://blog.csdn.net/2301_79410672/article/details/134436013