mysql双主高可用集群部署方案

一、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
&

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值