8. mysql-mmm 架构 ( 一 ) 主主复制 MMM monitor Mysql Master A Mysql Master B 应用程序 real ip real ip virtual ip virtual ip
9. mysql-mmm 架构 ( 二 ) 主主复制 MMM monitor Mysql Master A Mysql Master B 应用程序 Mysql Slave C virtual ip virtual ip virtual ip real ip real ip
10. mysql-mmm 运行机制 MMM_MONITOR Listen:tcp9988 Mysql Master A Agent Mysql Master B Agent Mysql slave C Agent Listen:tcp9989 Listen:tcp9989 Listen:tcp9989 mmm_monitor 进程用监控的数据和读取配置文件中的信息,通过 tcp9988 和 9989 与客户端通信,完成各种对客户端的设置操作,比如虚拟 IP 的添加和删除…… mmm_monitor 进程读取配置文件中的信息连接到 agent 的 mysql 端口,检查 mysql 的的相关状态 。
12. mysql-mmm 安装需求 ( 一 ) Server n+1 N 台安装 mysql 的机器和 1 台安装 mmm monitor 的机器。 2*(n+1)Ips 每个主机一个固定 ip 、一个虚拟 IP(reader role), 全局一个 writer role IP Monitor User 一个可以在 mmm monitor 机器上使用的并且拥有 REPLICATION CLIENT 权限的 mysql 用户 Agent User 一个可以在 mmm agent 机器上使用的并且拥有 super , replication client , process 权限的 mysql 用户 Replication user 一个 slaves 主机上可以使用的并且有用 replication slave 权限的用户 Tools user 一个 mmm tools 主机可以使用的,并且有用 super , replication client , reload 权限的 mysql 用户
17. mysql-mmm 下载安装 在数据库里面创建 mysql mmm 相关的用户和分配对应的权限 mysql> grant replication slave on *.* to 'slave'@'192.168.199.%' identified by 'slave'; mysql> grant replication client,process,super on *.* to 'mmm_agent'@'192.168.199.%' identified by 'mmm_agent'; mysql> grant replication client on *.* to 'mmm_monitor'@'192.168.199.%' identified by 'mmm_monitor'; mysql> grant replication client,reload,super on *.* to 'mmm_tools'@'192.168.199.%' identified by 'mmm_tools'; 下载 mysql-mmm http://mysql-mmm.org/_media/:mmm2:mysql-mmm-2.2.1.tar.gz 在 mysql-mmm 架构中的所有机器上安装 mysql-mmm 软件 # wget http://mysql-mmm.org/_media/:mmm2:mysql-mmm-2.2.1.tar.gz # mv :mmm2:mysql-mmm-2.2.1.tar.gz mysql-mmm-2.2.1.tar.gz # tar -zxvf mysql-mmm-2.2.1.tar.gz # cd mysql-mmm-2.2.1 # make install
26. mysql-mmm 管理工具 # mmm_control help Valid commands are: help - show this message ping - ping monitor show - show status checks [<host>|all [<check>|all]] - show checks status set_online <host> - set host <host> online set_offline <host> - set host <host> offline mode - print current mode. set_active - switch into active mode. set_manual - switch into manual mode. set_passive - switch into passive mode. move_role [--force] <role> <host> - move exclusive role <role> to host <host> (Only use --force if you know what you are doing!) set_ip <ip> <host> - set role with ip <ip> to host <host>
27. mysql-mmm 运行状态分析 # mmm_control show // 查看当前虚拟 IP 的分布状况 db1(192.168.199.128) master/ONLINE. Roles: reader(192.168.199.201), writer(192.168.199.200) db2(192.168.199.129) master/ONLINE. Roles: reader(192.168.199.203) db3(192.168.199.130) slave/ONLINE. Roles: reader(192.168.199.202) # mmm_control checks all // 对所有节点进行所有检查 db2 ping [last change: 2011/12/07 19:03:05] OK db2 mysql [last change: 2011/12/07 19:03:05] OK db2 rep_threads [last change: 2011/12/07 19:03:05] OK db2 rep_backlog [last change: 2011/12/07 19:03:05] OK: Backlog is null db3 ping [last change: 2011/12/07 18:17:41] OK db3 mysql [last change: 2011/12/07 18:58:28] OK db3 rep_threads [last change: 2011/12/07 19:16:29] OK db3 rep_backlog [last change: 2011/12/07 18:17:41] OK: Backlog is null db1 ping [last change: 2011/12/07 16:40:10] OK db1 mysql [last change: 2011/12/07 16:40:10] OK db1 rep_threads [last change: 2011/12/07 16:40:10] OK db1 rep_backlog [last change: 2011/12/07 16:40:10] OK: Backlog is null # mmm_control mode // 查看 mmm 当前运行的模式 ACTIVE
28. mysql-mmm 故障处理机制 MMM_MONITOR Listen:tcp9988 Mysql Master A Agent Mysql Master B Agent Mysql slave C Agent Listen:tcp9989 Listen:tcp9989 Listen:tcp9989 monitor 检查 agent 的以下几个状态 1 、 agent 进程 2 、 ping 3 、 mysql 4 、 rep_threads 、 5 、 rep_backlog ping 检查默认是 1s ,通过 ping_interval 配置 mysql 相关的检查默认是 5s ,通过 check_period 配置, trap_period 表示一个节点检测不成功持续的时间,默认为 10 秒,如果超过这个时间就认为这个节点失败了。 如果活动的 master 检测到失败,那么 writer role 将从原来的主机上移除。 active master : 1 、 mysql 设置为 read_only 模式 2 、删除活动的连接 3 、删除虚拟 IP slave : 1 、完成原来主机上的复制工作 2 、切换 master 到新的主机上 new active master : 1 、 mysql 设置为可写模式 2 、配置虚拟 ip
29. mysql-mmm 故障模拟 ( 一 ) 备份 master 故障演示 通过 iptables 来模拟 mysql 故障 on db2 : # iptables -A INPUT -p tcp --dport 9188 -j DROP && date 大概 15 秒 mmm 完成了故障切换 # mmm_control show db1(192.168.199.128) master/ONLINE. Roles: reader(192.168.199.201), writer(192.168.199.200) db2(192.168.199.129) master/HARD_OFFLINE. Roles: db3(192.168.199.130) slave/ONLINE. Roles: reader(192.168.199.202), reader(192.168.199.203) #mmm_control checks all db2 ping [last change: 2011/12/07 23:32:12] OK db2 mysql [last change: 2011/12/07 23:36:06] ERROR: Connect error (host = 192.168.199.129:9188, user = mmm_monitor)! Can't connect to MySQL server on '192.168.199.129' (4) 故障修复后,大概 5 秒完成了 恢复。
30. mysql-mmm 故障模拟 ( 二 ) 活动的 master 故障演示 on db1 # iptables -A INPUT -p tcp --dport 9188 -j DROP && date 大概 15 秒 mmm 完成了故障切换 # mmm_control show db1(192.168.199.128) master/HARD_OFFLINE. Roles: db2(192.168.199.129) master/ONLINE. Roles: reader(192.168.199.202), writer(192.168.199.200) db3(192.168.199.130) slave/ONLINE. Roles: reader(192.168.199.201), reader(192.168.199.203) # mmm_control checks all db1 mysql [last change: 2011/12/07 23:48:39] ERROR: Connect error (host = 192.168.199.128:9188, user = mmm_monitor)! Can't connect to MySQL server on '192.168.199.128' (4) db1 rep_threads [last change: 2011/12/07 23:35:05] OK db1 rep_backlog [last change: 2011/12/07 23:32:12] OK: Backlog is null 故障切换完成以后,检查 DB3 slave 的复制情况,发现已经自动调整到 masterB 了。 故障修复后,大概 5 秒完成了恢复。
47. mmm_restore 介绍 还原也分三种拷贝模式, scp 和 ssh-gz 差不多, rdiff 属于增量备份,可以选择还原的版本号。这里我们就只演示 scp 和 rdiff 两种还原。 用法: Usage: /usr/sbin/mmm_restore [--config <config file>] [--mode <mode>] [--version <version | list>] [--src-dir <dir>] [--dest-dir <dir>] [--dry-run] Where: src-dir : directory where backup resides dest-dir: directory where backup should be restored to mode : data-only, single-single, slave-single, master-single, master-slave, slave-slave version : when run with 'list' parameter, displays available versions of incremental backups if version is specified, tries to restore backup for specified version dry-run : check everything and exit without any changes 从上面可以看出, mmm_restore 使用的 — src-dir 和 — dest-dir ,而不是 — host 。