一、mysql-mmm集群介绍
https://github.com/seuis398/mysql-m3
mysql-m3是mysql-mmm的fork产品。
mysql-mmm在mysql replication结构下,当mysql发生故障时,会自动更改vip截断和replication结构。
mysql-mmm项目自2009年以来一直没有更新,mysql-m3包含mysql-mmm的功能增强、错误修补等。
要求
Redhat系列Linux(RHEL、CentOS、Oracle Linux)
Perl 5.10、5.16、5.26(Redhat系列Linux 6-8的默认Perl版本,如果版本不同,请参阅下文)
仅显示器服务器(推荐)
GTID Replication(建议)
设置
1)安装显示器
$ make install_monitor PREFIX=/path/you/want
如果未指定PREFIX,将以/usr/local/mysql-mmm路径安装。
如果管理多个群集,则监视器只安装第一次。
2)代理安装(mysql服务器)
$ make install_agent PREFIX=/path/you/want
如果未指定PREFIX,将以/usr/local/mysql-mmm路径安装。
3)创建MMM连接数据库帐户
监视器服务器和每个代理(mysql服务器)的IP都必须可用。
SQL 5.7以下
CREATE USER{MMM_USER}@{连接IP}IDENTIFIED BY'xxxx';
GRANT PROCESS,SUPER,REPLICATION CLIENT ON*.*TO{MMM_USER}@{连接IP};
SQL 8.0或更高版本
CREATE USER{MMM_USER}@{连接IP}IDENTIFIED WITH mysql_native_password BY'xxxx';
GRANT PROCESS、REPLICATION SLAVE、REPLICATION CLIENT ON*.*TO{MMM_USER}@{连接IP};
GRANT CONNECTION_ADMIN、REPLICATION_SLAVE_ADMIN、SYSTEM_VARIABLES_ADMIN ON*.*TO{MMM_USER}@{连接IP};
4)显示器设置(添加)
创建安装路径/conf/mmm_mon_{Cluster}.conf文件。(请参见mmm_mon_example.conf)
Cluster值用作监视器守护程序的port,因此必须考虑port range来决定。
exclusive属性的一个角色(writer)是必需的,balanced属性的角色(reader)是可选的。
VIP使用与实际mysql服务器的IP相同的subnet IP。
使用multi source replication的DB节点必须指定监视目标channel的名称。
5)代理设置
创建安装路径/conf/mmm_agent.conf文件。(请参见mmm_agent_example.conf)
使用multi source replication的DB节点必须指定Failover目标channel名称。
配置数据库复制
需要在具有Writer角色的两个数据库之间配置双向复制。
此外,DB将最初的writer角色配置为要分配的DB的slave。
配置示例
1) Single Master + N Slave
配置主节点和备用主节点之间的双向复制,但写入始终只发生在一个节点上。
# Example
db1 (192.168.56.101/writer + 192.168.56.105/reader) <──> db2 (192.168.56.102/reader)
│
┣─> db3 (192.168.56.103/reader)
│
└─> db4 (192.168.56.104/reader)
# Config
<role writer>
hosts db1, db2
ips 192.168.56.101
mode exclusive
</role>
<role reader>
hosts db1, db2, db3, db4
ips 192.168.56.102, 192.168.56.103, 192.168.56.104, 192.168.56.105
mode balanced
</role>
2) Dual Active Master + N Slave
如果双Active Master环境中存在Slave节点,则GTID复制环境是必需的。
需要区分不同的Writer VIP访问的数据。(例如,使用writer#1:schema_A,使用writer#2:schema_B)
# Example
db1 (192.168.56.101/writer) <──> db2 (192.168.56.102/writer)
│
└─> db3 (192.168.56.103/reader)
# Config
<role writer>
hosts db1, db2
ips 192.168.56.101, 192.168.56.102
mode balanced
</role>
<role reader>
hosts db1, db2, db3
ips 192.168.56.103
mode balanced
</role>
守护程序驱动
1)启动显示器守护程序
$ /etc/init.d/mysql-mmm-monitor start {Cluster}
or
$ systemctl start mysql-mmm-monitor@{Cluster}.service
2)代理守护进程驱动
$ /etc/init.d/mysql-mmm-agent start
or
$ systemctl start mysql-mmm-agent.service
群集管理
$ mmm_control @{Cluster} command
Valid commands are:
help - show this message
ping - ping monitor
show [more] - 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>
其他
1) MMM Tools
mysql-m3不保证mysql-mmm提供的mmm工具的行为(LVM Snapshot等)。
2)Perl版本不同
单独安装以下Perl模块。(使用CPAN)
Algorithm::Diff
Class:Singleton
DBI and DBD::mysql
Data::Dumper
Date::Format
Date::Language
Date::Parse
ExtUtils::CBuilder
File::Basename
File::stat
File::Temp
Log::Dispatch
Log::Log4perl
Mail::Send
Module::Build
Net::ARP
Net::Ping
Params::Validate
Proc::Daemon
Thread::Queue
Time::HiRes
3) mysql-mmm manual
默认行为类似于mysql-mmm,您可以参考mysql-mmm中的manual。
http://mysql-mmm.org/_media/:mmm2:mysql-mmm-2.2.1.pdf
https://codeload.github.com/seuis398/mysql-m3/tar.gz/refs/tags/v3.0.3
[root@localhost tmp]# tar -zxf mysql-m3-3.0.3.tar.gz
[root@localhost tmp]# cd mysql-m3-3.0.3
二、安装步骤
1)安装monitor
$ make install_monitor PREFIX=/usr/local/mysql-mmm
[root@localhost mysql-m3-3.0.3]# make install_monitor PREFIX=/usr/local/mysql-mmm
mkdir -p /usr/local/mysql-mmm/lib/MMM /usr/local/mysql-mmm/bin /usr/local/mysql-mmm/log /usr/local/mysql-mmm/conf /usr/local/mysql-mmm/etc/init.d /usr/local/mysql-mmm/tmp
cp -r lib/* /usr/local/mysql-mmm/lib/MMM/
cp -r bin/* /usr/local/mysql-mmm/bin/
cp -r sbin/* /usr/local/mysql-mmm/bin/
cp -r etc/init.d/* /usr/local/mysql-mmm/etc/init.d/
chmod -R u+x /usr/local/mysql-mmm/bin
chmod u+x /usr/local/mysql-mmm/etc/init.d/*
find /usr/local/mysql-mmm/etc/init.d/ /usr/local/mysql-mmm/lib/MMM/ -type f -exec sed -i 's#%PREFIX%#/usr/local/mysql-mmm#g' {} \;
find /usr/local/mysql-mmm/bin/ -type f -exec sed -i '/^#!\/usr\/bin\/env perl$/ a BEGIN { unshift @INC,"/usr/local/mysql-mmm/lib"; }' {} \;
find /usr/local/mysql-mmm/bin/mmm_* -exec vi -c "%s/2.2.1/3.0.3 (mysql-m3)/g" -c "wq" "{}" \;
if [ -f lib/perl_libs_5.16_x86_64.tar.gz ]; \
then tar xfz lib/perl_libs_5.16_x86_64.tar.gz --directory=/usr/local/mysql-mmm/lib; \
fi
echo /usr/local/mysql-mmm/lib > /etc/ld.so.conf.d/mysql-mmm.conf
/sbin/ldconfig
ln -sf /usr/local/mysql-mmm/etc/init.d/mysql-mmm-monitor /etc/init.d/mysql-mmm-monitor
cp -r etc/mysql-mmm/mmm_mon.conf /usr/local/mysql-mmm/conf/mmm_mon_example.conf
chmod 600 /usr/local/mysql-mmm/conf/mmm_mon_example.conf
cp -f etc/systemd/[email protected] /usr/lib/systemd/system/
find /usr/local/mysql-mmm/conf/ -type f -name "*mmm*" -exec sed -i 's#%PREFIX%#/usr/local/mysql-mmm#g' {} \;
sed -i 's#%PREFIX%#/usr/local/mysql-mmm#g' /usr/lib/systemd/system/[email protected]
systemctl daemon-reload
如果未指定PREFIX,将以/usr/local/mysql-mmm路径安装。
如果管理多个群集,则监视器只安装第一次。
2)代理安装(mysql服务器)
$ make install_agent PREFIX=/usr/local/mysql-mmm
[root@localhost mysql-m3-3.0.3]# make install_agent PREFIX=/usr/local/mysql-mmm
mkdir -p /usr/local/mysql-mmm/lib/MMM /usr/local/mysql-mmm/bin /usr/local/mysql-mmm/log /usr/local/mysql-mmm/conf /usr/local/mysql-mmm/etc/init.d /usr/local/mysql-mmm/tmp
cp -r lib/* /usr/local/mysql-mmm/lib/MMM/
cp -r bin/* /usr/local/mysql-mmm/bin/
cp -r sbin/* /usr/local/mysql-mmm/bin/
cp -r etc/init.d/* /usr/local/mysql-mmm/etc/init.d/
chmod -R u+x /usr/local/mysql-mmm/bin
chmod u+x /usr/local/mysql-mmm/etc/init.d/*
find /usr/local/mysql-mmm/etc/init.d/ /usr/local/mysql-mmm/lib/MMM/ -type f -exec sed -i 's#%PREFIX%#/usr/local/mysql-mmm#g' {} \;
find /usr/local/mysql-mmm/bin/ -type f -exec sed -i '/^#!\/usr\/bin\/env perl$/ a BEGIN { unshift @INC,"/usr/local/mysql-mmm/lib"; }' {} \;
find /usr/local/mysql-mmm/bin/mmm_* -exec vi -c "%s/2.2.1/3.0.3 (mysql-m3)/g" -c "wq" "{}" \;
if [ -f lib/perl_libs_5.16_x86_64.tar.gz ]; \
then tar xfz lib/perl_libs_5.16_x86_64.tar.gz --directory=/usr/local/mysql-mmm/lib; \
fi
echo /usr/local/mysql-mmm/lib > /etc/ld.so.conf.d/mysql-mmm.conf
/sbin/ldconfig
ln -sf /usr/local/mysql-mmm/etc/init.d/mysql-mmm-agent /etc/init.d/mysql-mmm-agent
cp -f etc/mysql-mmm/mmm_agent.conf /usr/local/mysql-mmm/conf/mmm_agent_example.conf
chmod 600 /usr/local/mysql-mmm/conf/mmm_agent_example.conf
cp -f etc/systemd/mysql-mmm-agent.service /usr/lib/systemd/system/
find /usr/local/mysql-mmm/conf/ -type f -name "*mmm*" -exec sed -i 's#%PREFIX%#/usr/local/mysql-mmm#g' {} \;
sed -i 's#%PREFIX%#/usr/local/mysql-mmm#g' /usr/lib/systemd/system/mysql-mmm-agent.service
find /usr/local/mysql-mmm/lib/MMM/Agent/Agent.pm -exec vi -c "%s/2.2.1/3.0.3 (mysql-m3)/g" -c "wq" "{}" \;
systemctl daemon-reload
如果未指定PREFIX,将以/usr/local/mysql-mmm路径安装。
3)创建MMM连接数据库帐户
监视器服务器和每个代理(mysql服务器)的IP都必须可用。
MSQL 5.7以下
CREATE USER{MMM_USER}@{连接IP}IDENTIFIED BY'xxxx';
GRANT PROCESS,SUPER,REPLICATION CLIENT ON*.*TO{MMM_USER}@{连接IP};
这里是5.7版本:
mysql> GRANT SUPER,REPLICATION CLIENT,PROCESS ON *.* TO 'mmm_user'@'%' IDENTIFIED BY 'qwe-123';
Query OK, 0 rows affected, 1 warning (0.01 sec)
repl_user
GRANT REPLICATION SLAVE ON *.* TO 'repl_user'@'%' IDENTIFIED BY 'abc-123';
mysql> GRANT REPLICATION SLAVE ON *.* TO 'repl_user'@'%' IDENTIFIED BY 'abc-123';
Query OK, 0 rows affected, 1 warning (0.00 sec)
SQL 8.0或更高版本
CREATE USER{MMM_USER}@{连接IP}IDENTIFIED WITH mysql_native_password BY'xxxx';
GRANT PROCESS、REPLICATION SLAVE、REPLICATION CLIENT ON*.*TO{MMM_USER}@{连接IP};
GRANT CONNECTION_ADMIN、REPLICATION_SLAVE_ADMIN、SYSTEM_VARIABLES_ADMIN ON*.*TO{MMM_USER}@{连接IP};
4)显示器设置(添加)
创建安装路径/conf/mmm_mon_{Cluster}.conf文件。(请参见mmm_mon_example.conf)
Cluster值用作监视器守护程序的port,因此必须考虑port range来决定。
exclusive属性的一个角色(writer)是必需的,balanced属性的角色(reader)是可选的。
VIP使用与实际mysql服务器的IP相同的subnet IP。
使用multi source replication的DB节点必须指定监视目标channel的名称。
[root@localhost mysql-mmm]# cp /usr/local/mysql-mmm/conf/mmm_mon_example.conf /usr/local/mysql-mmm/conf/mmm_mon_cluster.conf
[root@localhost mysql-mmm]# vim /usr/local/mysql-mmm/conf/mmm_mon.conf
debug 0
active_master_role writer
<monitor>
ip 127.0.0.1
port 10001
bin_path /usr/local/mysql-mmm/bin
pid_path /usr/local/mysql-mmm/tmp/cluster.pid
status_path /usr/local/mysql-mmm/tmp/cluster.status
ping_interval 1
ping_ips 192.168.88.128, 192.168.88.130
&