部署
1.修改hosts
在所有的服务器中执行相同的操作。
vim /etc/hosts
192.168.137.10 master192.168.137.20 backup192.168.137.30 slave192.168.137.40 monitor2.添加mysql用户
GRANT REPLICATION CLIENT ON *.* TO "mmm_monitor"@"192.168.137.%" IDENTIFIED BY "mmm_monitor"; GRANT SUPER,REPLICATION CLIENT, PROCESS ON *.* TO "mmm_agent"@"192.168.137.%" IDENTIFIED BY "mmm_agent";flush privileges;
注意:repl用户在搭建主从服务的时候已经创建好了。
3.安装监控软件
注意:监控端全部安装,但是监控端只需要用到mysql-mmm-monitor,mysql-mmm-agent不需要启动。
数据库端只需要安装mysql-mmm-agent
1.在监控服务器执行
wget http://mirrors.ustc.edu.cn/fedora/epel/6/x86_64/epel-release-6-8.noarch.rpmrpm –ivh epel-release-6-8.noarch.rpmyum –y install mysql-mmm*2.在数据库服务器上执行,每个数据库服务器上都要执行
wget http://mirrors.ustc.edu.cn/fedora/epel/6/x86_64/epel-release-6-8.noarch.rpmrpm –ivh epel-release-6-8.noarch.rpmyum -y install mysql-mmm-agent路径说明:
4.配置文件
db服务器配置文件:mmm_agent.conf,mmm_common.conf
监控服务器的配置文件:mmm_mon.conf,mmm_common.conf
(该文件所有服务器一样)
配置db服务器
1.修改master服务器
vim /etc/mysql-mmm/mmm_common.conf
active_master_rolewriter###积极的master角色的标示,所有的db服务器都需要开启read_only参数,对于writer服务器监控代理会自动将read_only属性关闭。<host default> cluster_interfaceeth0#####群集的网络接口 pid_path/var/run/mysql-mmm/mmm_agentd.pid ####pid路径 bin_path/usr/libexec/mysql-mmm/#####可执行文件路径replication_userrepl #######复制用户 replication_password repl #######复制用户密码 agent_usermmm_agent#######代理用户,用于更改只读操作 agent_password mmm_agent#######代理用户密码</host><host master> ##########master1的host名 ip192.168.137.10 #####master1的ip mode master########角色属性,master代表是主 peer backup########与master1对等的服务器的host名,也就是master2的服务器host名</host><host backup>####和master的概念一样 ip192.168.137.20 mode master peer master</host><host slave>#####从库的host名,如果存在多个从库可以重复一样的配置 ip192.168.137.30 ####从的ip mode slave #####slave的角色属性代表当前host是从</host><role writer> ####writer角色配置 hosts master,backup ####能进行写操作的服务器的host名,如果不想切换写操作这里可以只配置master,这样也可以避免因为网络延时而进行write的切换,但是一旦master出现故障那么当前的MMM就没有writer了只有对外的read操作。 ips192.168.137.100 #####对外提供的写操作的虚拟IP mode exclusive #####exclusive代表只允许存在一个主,也就是只能提供一个写的IP</role><role reader> #####read角色配置 hosts backup,slave ######对外提供读操作的服务器的host名,当然这里也可以把master加进来 ips192.168.137.120,192.168.137.130,192.168.137.140 ###对外提供读操作的虚拟ip,这两个ip和host不是一一对应的,并且ips也hosts的数目也可以不相同,如果这样配置的话其中一个hosts会分配两个ip mode balanced ###balanced代表负载均衡</role>同时将这个文件拷贝到其它的服务器包括监控服务器,配置不变
scp /etc/mysql-mmm/mmm_common.conf slave:/etc/mysql-mmm/scp /etc/mysql-mmm/mmm_common.conf backup:/etc/mysql-mmm/scp /etc/mysql-mmm/mmm_common.conf monitor:/etc/mysql-mmm/2.代理文件配置
注意:这个配置只配置db服务器,监控服务器不需要配置,this后面的host名改成当前服务器的host命令,master2和slave也改成对应的服务器的host名。
3.启动代理进程
chkconfig mysql-mmm-agent on
service mysql-mmm-agent start每台db服务器上都需要启动
vim /etc/mysql-mmm/mmm_mon.conf
include mmm_common.conf<monitor> ip 127.0.0.1 pid_path /var/run/mysql-mmm/mmm_mond.pid bin_path /usr/libexec/mysql-mmm status_path /var/lib/mysql-mmm/mmm_mond.status #####群集的状态文件,也就是执行mmm_control show操作的显示来源。 ping_ips 192.168.137.10,192.168.137.20,192.168.137.30 ######被监控的db服务器的ip地址 auto_set_online0 ####设置自动online的时间,默认是超过60s就将它设置为online,默认是60s,这里将其设为0就是立即online # The kill_host_bin does not exist by default, though the monitor will # throw a warning about it missing. See the section 5.10 "Kill Host # Functionality" in the PDF documentation. # # kill_host_bin/usr/libexec/mysql-mmm/monitor/kill_host #</monitor><host default> monitor_usermmm_monitor ####监控db服务器的用户 monitor_password mmm_monitor ####监控db服务器的密码</host>debug 0#######debug 0正常模式,1为debug模式注意:配置文件中的注释是为了便于理解,在部署的时候最好把注释去掉以免因为注释造成的潜在影响。
chkconfig mysql-mmm- monitor onservice mysql-mmm-monitor start注意:无论是在db端还是在监控端如果有对配置文件进行修改操作都需要重启代理进程和监控进程。
:/var/log/mysql-mmm/mmm_agentd.log
:/var/log/mysql-mmm/mmm_mond.log
Valid commands are: help- show this message ###帮助信息 ping- ping monitor ###ping当前的群集是否正常 show- show status ####群集在线状态检查 checks [<host>|all [<check>|all]] - show checks status #####执行监控检查操作 set_online <host> - set host <host> online ####将host设置为online set_offline <host>- set host <host> offline ###将host设置为offline mode- print current mode. ####打印输出当前的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> ####移除writer服务器为指定的host服务器(Only use --force if you know what you are doing!) set_ip <ip> <host>- set role with ip <ip> to host <host>1.检查所有的db服务器群集状态
[root@monitor mysql-mmm]# mmm_control checks allmaster ping [last change: 2016/06/07 16:31:24] OKmaster mysql[last change: 2016/06/07 16:31:24] OKmaster rep_threads [last change: 2016/06/07 16:31:24] OKmaster rep_backlog [last change: 2016/06/07 16:31:24] OK: Backlog is nullslave ping [last change: 2016/06/07 16:31:24] OKslave mysql[last change: 2016/06/07 16:31:24] OKslave rep_threads [last change: 2016/06/07 16:31:24] OKslave rep_backlog [last change: 2016/06/07 16:31:24] OK: Backlog is nullbackup ping [last change: 2016/06/07 16:31:24] OKbackup mysql[last change: 2016/06/07 16:31:24] OKbackup rep_threads [last change: 2016/06/07 16:31:24] OKbackup rep_backlog [last change: 2016/06/07 16:31:24] OK: Backlog is null检查项包括:ping、mysql是否正常运行、复制线程是否正常等
[root@monitor mysql-mmm]# mmm_control show backup(192.168.137.20) master/ONLINE. Roles: reader(192.168.137.120) master(192.168.137.10) master/ONLINE. Roles: writer(192.168.137.100) slave(192.168.137.30) slave/ONLINE. Roles: reader(192.168.137.130)3.对指定的host执行offline操作
[root@monitor mysql-mmm]# mmm_control set_offline backupOK: State of "backup" changed to ADMIN_OFFLINE. Now you can wait some time and check all roles![root@monitor mysql-mmm]# mmm_control show backup(192.168.137.20) master/ADMIN_OFFLINE. Roles:master(192.168.137.10) master/ONLINE. Roles: writer(192.168.137.100) slave(192.168.137.30) slave/ONLINE. Roles: reader(192.168.137.120), reader(192.168.137.130)4.对指定的host执行onine操作
[root@monitor mysql-mmm]# mmm_control set_online backupOK: State of "backup" changed to ONLINE. Now you can wait some time and check its new roles![root@monitor mysql-mmm]# mmm_control show backup(192.168.137.20) master/REPLICATION_FAIL. Roles:master(192.168.137.10) master/ONLINE. Roles: writer(192.168.137.100) slave(192.168.137.30) slave/ONLINE. Roles: reader(192.168.137.120), reader(192.168.137.130)[root@monitor mysql-mmm]# mmm_control show backup(192.168.137.20) master/ONLINE. Roles: reader(192.168.137.120) master(192.168.137.10) master/ONLINE. Roles: writer(192.168.137.100) slave(192.168.137.30) slave/ONLINE. Roles: reader(192.168.137.130)5.执行write切换
[root@slave ~]# mysql -uroot -proot -e "show slave status G;"Warning: Using a password on the command line interface can be insecure.*************************** 1. row ***************************Slave_IO_State: Waiting for master to send event Master_Host: 192.168.137.10 Master_User: repl Master_Port: 3306Connect_Retry: 60Master_Log_File: mysql-bin.000073 Read_Master_Log_Pos: 1461Relay_Log_File: mysql-relay-bin.000006Relay_Log_Pos: 283Relay_Master_Log_File: mysql-bin.000073Slave_IO_Running: Yes Slave_SQL_Running: Yes2.writer切换,要确保mmm_common.conf文件中的writer属性有配置对应的host,否则无法切换
[root@monitor mysql-mmm]# mmm_control move_role writer backupOK: Role "writer" has been moved from "master" to "backup". Now you can wait some time and check new roles info![root@monitor mysql-mmm]# mmm_control show backup(192.168.137.20) master/ONLINE. Roles: reader(192.168.137.120), writer(192.168.137.100) master(192.168.137.10) master/ONLINE. Roles:slave(192.168.137.30) slave/ONLINE. Roles: reader(192.168.137.130)3.save从库自动切换到了新的master
[root@slave ~]# mysql -uroot -proot -e "show slave status G;"Warning: Using a password on the command line interface can be insecure.*************************** 1. row ***************************Slave_IO_State: Waiting for master to send event Master_Host: 192.168.137.20 Master_User: repl Master_Port: 3306Connect_Retry: 60Master_Log_File: mysql-bin.000039 Read_Master_Log_Pos: 120Relay_Log_File: mysql-relay-bin.000002Relay_Log_Pos: 283Relay_Master_Log_File: mysql-bin.000039Slave_IO_Running: Yes Slave_SQL_Running: Yes其它处理问题
etc/mysql-mmm/mmm_common.conf
时,去掉<role write>中的backup<role writer> ####writer角色配置 hosts master ###这里只配置一个Hosts ips192.168.137.100 #####对外提供的写操作的虚拟IP mode exclusive #####exclusive代表只允许存在一个主,也就是只能提供一个写的IP</role>这样的话当master出现故障了writer写操作不会切换到backup服务器,并且slave也不会指向新的master,此时当前的MMM之前对外提供写服务。