扫二维码与项目经理沟通
我们在微信上24小时期待你的声音
解答本文疑问/技术咨询/运营咨询/技术建议/互联网交流
接上期,MySQL主从同步我们已经部署完成,接下来,我们开始部署本期的核心---MMM高可用集群
网站设计制作、网站建设介绍好的网站是理念、设计和技术的结合。成都创新互联拥有的网站设计理念、多方位的设计风格、经验丰富的设计团队。提供PC端+手机端网站建设,用营销思维进行网站设计、采用先进技术开源代码、注重用户体验与SEO基础,将技术与创意整合到网站之中,以契合客户的方式做到创意性的视觉化效果。
四、MMM高可用集群部署
1、安装依赖包
由于mmm 是用perl语言写的脚本程序,因此需要在5台服务器中分别安装 perl 和 perl-CPAN
[root@cluster-mysqlb ~]# yum -y install perl perl-CPAN
2、yum 安装 mmm
a、在4台 MySQL 服务器中安装 mysql-mmm-agent
[root@cluster-mysqla ~]# yum -y install gcc gcc-c++ mysql-mmm-agent
b、在 monitor 服务器中安装 mysql-mmm-monitor
[root@cluster-proxy ~]# yum -y install gcc gcc-c++ mysql-mmm-monitor
3、配置 mmm
mysql-mmm 的配置文件在 /etc/mysql-mmm目录下,进入该目录
mysql-mmm-agent 配置文件
mysql-mmm-monitor 配置文件
如图,mysql-mmm-agent 的配置文件只有2个,mmm_agent.conf 和 mmm_common.conf,而 mysql-mmm-monitor 的配置文件有4个,原本是3个,因为我这里安装了 mysql-mmm-tools ,因此多了一个mmm_tools.conf
a、修改公共配置文件 mmm_common.conf
[root@cluster-mysqla mysql-mmm]# vim mmm_common.conf
如图:
(1)、字段解释
active_master_role writer #主动的master角色标示,所有数据库服务器都需要开启 read_only 参数,而对于 Write 服务器,监控服务器会自动将 read_only 属性关闭,也就是将其值设为1 cluster_interface eth0 #集群网络接口 pid_path /run/mysql-mmm-agent.pid #mmm-agent进程pid文件路径 bin_path /usr/libexec/mysql-mmm/ #可执行文件路径 replication_user slaveuser #复制用户 replication_password 123456 #复制用户的密码 agent_user mmmagent #代理用户 agent_password 123456 #代理用户的密码 ip 192.168.20.134 #mastera 的 IP 地址 mode master #角色模式:master 表示主库 peer masterb #与 mastera 同等的主库的主机名称,也就是说向 mastera 同步数据的数据库的主机的名称,因此为 masterb ip 192.168.20.128 mode master peer mastera ip 192.168.20.129 #从库的 IP 地址 mode slave #角色模式:该主机为 masterb 的从数据库,因此为 slave mode slave hosts mastera, masterb #具有写操作的主机名称,这里的配置可以写单个,也可以写多个,写单个的时候,可以避免在网络延迟过大时切换Write,但是当master出现故障时,就无法进行write了,只能对外提供read操作了 ips 192.168.20.254 #对外提供写操作的虚拟 IP 地址 mode exclusive #模式,exclusive 表示只允许存在一个主数据库,也就是只能写 一个虚拟 IP 地址 hosts slavea, slaveb #对外提供 read 操作的服务器的主机的名称,这里也可以写master进来,写进来时,master也对外提供 read 操作 ips 192.168.20.253, 192.168.20.252 #对外提供 read 操作的虚拟 IP 地址,为了实现负载均衡,这里的虚拟 IP 地址至少应该和 read 数据库服务器数量相同 mode balanced #模式,balanced 表示负载均衡 |
(2)、mmm_common.conf配置文件修改
如果在服务器中有多张网卡,则需要在 cluster_interface 字段中指定网卡名称
按照上面的格式修改公共配置文件,修改完后复制到其他4台服务器中
scp /etc/mysql-mmm/mmm_common.conf root@192.168.20.128:/etc/mysql-mmm
scp /etc/mysql-mmm/mmm_common.conf root@192.168.20.129:/etc/mysql-mmm
scp /etc/mysql-mmm/mmm_common.conf root@192.168.20.130:/etc/mysql-mmm
scp /etc/mysql-mmm/mmm_common.conf root@192.168.20.131:/etc/mysql-mmm
(3)、mmm_agent.conf配置文件修改
[root@cluster-mysqla mysql-mmm]# vim mmm_agent.conf
如图,改配置文件只需要修改图中标示部分,因此,如果服务器是 mastera ,就改为 this mastera ,如果服务器是 masterb ,就改为 this masterb ,以此类推
(4)、修改 mysql-mmm-monitor 的配置文件 mmm_mon.conf
[root@cluster-proxy mysql-mmm]# vim mmm_mon.conf
如上图,字段解释
include mmm_common.conf #调用 mmm_common.conf 配置文件 ip 192.168.20.131 #监控主机 IP 地址 pid_path /run/mysql-mmm-monitor.pid #监控进程 pid 文件目录 bin_path /usr/libexec/mysql-mmm #可执行文件目录 status_path /var/lib/mysql-mmm/mmm_mond.status ping_ips 192.168.20.134, 192.168.20.128, 192.168.20.129, 192.168.20.130 #这里写4台数据库服务器的 IP 地址 auto_set_online 60 # 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_user monitor #监控用户 monitor_password 123456 #监控用户密码 debug 0 |
按照上面的格式,配置好 mmm_mond.conf
b、启动 mmm 服务
在4台 MySQL 服务器中启动 mysql-mmm-agent 服务
[root@cluster-mysqla mysql-mmm]# mmm_agentd start
在监控服务器中驱动 mysql-mmm-monitor 服务
[root@cluster-proxy mysql-mmm]# mmm_mond start
c、在 monitor 服务器查看其他4台服务器的状态
[root@cluster-proxy mysql-mmm]# mmm_control show
如上图,表示4台数据库服务器配置 mmm 配置 OK。
d、测试虚拟 IP 地址是否能够 ping 通
如果能够 ping 通,说明 mysql-mmm 部署成功,如果无法 ping 通,则说明在主机上虚拟 IP 地址没有设置成功,这时候,我们需要在 5 台数据库服务器上执行以下命令
[root@cluster-mysqla mysql-mmm]# perl -MCPAN -e shell
如图:
cpan[1]> install Net::ARP
如果在执行 perl -MCPAN -e shell 该命令时报错 Can't locate CPAN.pm in @INC (@INC contains: /usr/local/lib/perl5 /usr/local/share/perl5 /usr/lib/perl5/vendor_perl /usr/share/perl5/vendor_perl /usr/lib/perl5 /usr/share/perl5 .).
说明,我们没有安装 perl-CPAN,用 yum 安装即可
执行完上述命令之后,在分别在4台服务器中执行下列命令
mastera
[root@cluster-mysqla mysql-mmm]# /usr/libexec/mysql-mmm/agent/configure_ip /etc/mysql-mmm/mmm_common.conf ens33 192.168.20.254
masterb
[root@cluster-mysqlb mysql-mmm]# /usr/libexec/mysql-mmm/agent/configure_ip /etc/mysql-mmm/mmm_common.conf ens33 192.168.20.254
slavea
[root@cluster-mysqlc mysql-mmm]# /usr/libexec/mysql-mmm/agent/configure_ip /etc/mysql-mmm/mmm_common.conf ens33 192.168.20.253
slaveb
[root@cluster-mysqld mysql-mmm]# /usr/libexec/mysql-mmm/agent/configure_ip /etc/mysql-mmm/mmm_common.conf ens33 192.168.20.252
执行上面命令之后,在 ping 虚拟 IP 地址,ping 测试 OK,能够 ping 通
最后,在查看4台数据库服务器的状态
[root@cluster-proxy mysql-mmm]# mmm_control checks all
如图:
如果全是 OK ,说明我们的 mysql-mmm 服务部署成功
上面的地2列的意思分别是:
ping:ping 测试,可以 ping 通时 OK,否则,请按照上述操作检查
mysql:mysql server 在线时 OK,否则,请检查 mysql server 是否有停止
rep_threadh:复制线程正在运行时 OK,否则请排查复制线程未运行的原因,常见可能原因为:1、监控和复制所用的用户名、密码错误;2、主从同步出现故障
rep_backlog:复制挤压的日志很少时 OK,否则可能是服务器处理速度太慢或者数据量太大
e、mmm_control 名词解释
如图:
check:查看指定 host 或者所有主机的指定状态或者所有状态
show:查看当前集群状态
set_online:把 host 的状态由AWAITING_RECOVERY或者ADMIN_OFFLINE恢复到ONLINE
set_offline:把 host 的状态手动设置为ADMIN_OFFLINE,并且会停止mysql复制
mode:打印当前monitor的运行模式
set_active:切换monitor进程为主动模式
set_passive:切换monitor进程为被动模式
set_manual:切换monitor进程为手动模式
move_role:将write角色切换到其他主机
f、测试mysql-mmm在服务故障情况下是否能够自动切换,这里值提供方法
测试方法为:
停止 mastera 的 mysql 服务,查看 writer(192.168.20.254) 是否能够切换到 masterb,随后开启 mastera 的 mysql 服务,在手动停止 masterb 的 mysql 服务,查看 writer(192.168.20.254) 是否能够切换到 mastera ,如果都能,则说明,我们的mysql-mmm集群部署时OK的,如果不能,请检查mmm_common.conf配置文件是否有错。当然还有其他测试思路,这里就不一一列举了。
五、连接MMM集群
部署完 mysql-mmm 集群,这时候我们就迫不及待的想要用我们现有的应用服务去连接
首先,我们在mastera新建一个MySQL账号game
mysql> grant all privileges on *.* to game@"%" identified by "123456";
mysql> flush privileges;
然后,我们在我们的应用服务器上连接虚拟 IP(192.168.20.254、192.168.20.253、192.168.20.252)
a、连接192.168.20.254创建一个数据库
[root@weba ~]# mysql -h292.168.20.254 -ugame -p123456
MySQL [(none)]> create database web;
b、连接192.168.20.253、192.168.20.252查看刚才创建的数据库是否存在
[root@webb ~]# mysql -h292.168.20.253 -ugame -p123456
[root@webb ~]# mysql -h292.168.20.252 -ugame -p123456
有图可见,我们连接192.168.20.254创建的数据库,在连接192.168.20.253和192.168.20.252后也能看得到,说明一切OK
注意:连接192.168.20.254时,最好能够切换 mastera 和 masterb 进行连接建库测试,在这期间有可能会出现以下报错:
1209 - The MySQL server is running with the --read-only option so it cannot execute this statement
出现这个错误原因是,mmm 将主数据库设置成了只读模式,我们只需要执行 set global read_only=0; 即可
到此为止,我们的MySQL主从同步+MMM高可用集群部署完成,我们也列举了一些在部署过程中可能会踩到的坑,但是,在线上部署中,需要具体问题具体分析,所以,在以后的生活中,小弟还会和大佬们共同成长。
对于以上部署过程,若有疑问,可参照 官方安装文档 。
本节完。
我们在微信上24小时期待你的声音
解答本文疑问/技术咨询/运营咨询/技术建议/互联网交流