Mysql双主+MMM高可用

1. MMM双主应用架构图,架构角色,IP及功能如下:

 

角色

物理IP

server_id

虚拟IP地址

IP角色

功能

Master1

(mysql)

10.10.10.104

(RHEL7.3)

1

10.10.10.100

writer IP

写入VIP,单点写入

10.10.10.101

reader IP

读查询VIP,每个节点一个读VIP,可通过负载均衡软件对读负载均衡

Master2

(mysql)

10.10.10.105

(RHEL7.3)

2

10.10.10.102

Monitor

10.10.10.103

(RHEL7.3)

 

 

 

Mysql的监控节点,以及数据库备份节点

2. 配置前准备(每台节点都要设置):

关闭防火墙:systemctl stop firewalld 

关闭selinux:

setenforce 0(临时生效)

sed -i ‘s/enforcing/disabled/g’ /etc/selinux/config(写入配置文件,永久生效)

时间同步:ntpdate ntp1.aliyum.com

安装并初始化mariadb数据库

yum -y install mariadb mariadb-server(yum安装,需配置好yum源)

systemctl start mariadb && systemctl enable mariadb(启动mariadb数据库,并设置开启自启动)

mysql_secure_installation(初始化数据库,我这里设置了root密码为123)

3. Monitor节点安装所有的MMM组件

yum -y install mysql-mmm mysql-mmm-agent mysql-mmm-monitor mysql-mmm-tools

4. Master1和Master2节点安装mysql-mmm-agent

yum -y install mysql-mmm-agent

5. Master1和Master2主主配置

Master1节点配置如下:

[root@master1 ~]# vim /etc/my.cnf #在[mysqld]中添加如下

server-id=1 #本机数据库ID 标示

log-bin=mysql-bin-master1 #启用二进制日志

binlog-do-db=HA #可以被从服务器复制的库(默认同步所有库)

binlog-ignore-db=mysql #不可以被从服务器复制的库(可不写)

read_only=1 #MMM对数据需严格的读写控制

#此参数不影响replication;root用户依然可写。

[root@master1 ~]# systemctl restart mariadb(重启mariadb数据库

登陆数据库,并授权账号,用于从节点(Master2)来本机进行复制

     

注意:下面步骤必须等Master2主机开启binlog日志和配置好授权账号再来执行

停止slave,指定master主机,以及复制账号信息,开启slave。

    

查看slave状态信息,如下Slave_IO_Running和Slave_SQL_Running必须都为Yes

    

Master2节点配置如下:

[root@master2 ~]# vim /etc/my.cnf #在[mysqld]中添加如下内容:

server-id=2 #本机数据库ID 标示

log-bin=mysql-bin-master2 #启用二进制日志

binlog-do-db=HA #可以被从服务器复制的库。(默认同步所有库)

binlog-ignore-db=mysql #不可以被从服务器复制的库(可不写)

read_only=1 #MMM对数据需严格的读写控制

#此参数不影响replication;root用户依然可写

systemctl restart mariadb(重启mariadb数据库)

登入数据库,并授权账号,用于从节点(Master1)来本机进行复制

停止slave,指定master主机,以及复制账号信息,开启slave。

查看slave状态信息,如下Slave_IO_Running和Slave_SQL_Running必须为Yes

到此,主主配置完成!

 

6. MySQL节点配置

所有MySQL节点创建monitor user(健康检测)和monitor agent(切换只读模式和同步Master信息)帐号(仅在mysql写入主节点,其他节点会自动复制,我们这里主主2台都做

 

 

7. 所有MMM节点配置mmm_common.conf 

vim /etc/mysql-mmm/mmm_common.conf

active_master_role      writer

#当设置此参数,所有mysql节点都设置为"read_only=1",MMM会根据Mysql角色来决定是否执行"set global read_only=0".

<host default>

    cluster_interface       ens32 #设置网络接口

    pid_path /run/mysql-mmm-agent.pid #设置PID文件位置

    bin_path /usr/libexec/mysql-mmm/#设置MMM可执行文件路径

    replication_user        repl #设置复制的用户名

    replication_password    123 #设置复制用户密码

    agent_user              mmm_agent #设置更改只读操作用户

    agent_password          123 #设置更改只读操作用户密码

</host>

<host db1> #DB1配置信息

    ip      10.10.10.64

    mode    master

    peer    db2 #与DB1对等主机

</host>

<host db2>

    ip      10.10.10.65

    mode    master

    peer    db1

</host>

#<host db3>

#    ip      10.10.10.66

#    mode    slave

#</host>

<role writer> #设置可写角色模式

    hosts   db1, db2 #DB1和DB2都可写

    ips     10.10.10.10 #设置可写的VIP

    mode    exclusive  #设置角色互斥模式,互斥角色只有一个IP,同一时间只能分配给一个用户

</role>

<role reader> #设置可读角色模式

    hosts   db1, db2 #设置可执行主机

    ips     10.10.10.11, 10.10.10.12 #设置可读的VIP

    mode    balanced #设置角色模式为负载均衡,这些IP动态分配多个MySQL主机

</role>

8. 仅在MMM管理节点(Monitor)配置mmm_mom.conf

[root@monitor ~]# vim /etc/mysql-mmm/mmm_mon.conf

include mmm_common.conf

<monitor>

    ip                  127.0.0.1 #安全起见,只在本机监听,默认端口9988

    pid_path            /run/mysql-mmm-monitor.pid

    bin_path            /usr/libexec/mysql-mmm  

status_path         /var/lib/mysql-mmm/mmm_mond.status

#测试网络连通性,只要一个正常则网络正常

    ping_ips            10.10.10.64, 10.10.10.65

    flap_duration 3600 #抖动时间范围

    flap_count 3 #在抖动时间范围内最大抖动次数

    auto_set_online     8 #是否自动上线,如果大于0,抖动的主机在抖动时间范围过后,则设置自动上线

    # 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_user        mmm_monitor

    monitor_password    123

</host>

debug 0 #MMM管理端运行模式: 0 正常模式,1 debug模式

9. 所有Mysql节点设置mmm_agent.conf

[root@master1 ~]# cat /etc/mysql-mmm/mmm_agent.conf

include mmm_common.conf

 

# The 'this' variable refers to this server.  Proper operation requires

# that 'this' server (db1 by default), as well as all other servers, have the

# proper IP addresses set in mmm_common.conf.

this db1

[root@master2 ~]# cat /etc/mysql-mmm/mmm_agent.conf

include mmm_common.conf

# The 'this' variable refers to this server.  Proper operation requires

# that 'this' server (db1 by default), as well as all other servers, have the

# proper IP addresses set in mmm_common.conf.

this db2

10. 启动MMM服务,并设置开机自启动

MMM管理端:

[root@monitor ~]# systemctl start mysql-mmm-monitor && systemctl enable mysql-mmm-monitor

[root@monitor ~]# ss -lnt #查看端口监听情况

State      Recv-Q Send-Q  Local Address:Port                 Peer Address:Port              

LISTEN     0      128                 *:22                              *:*                  

LISTEN     0      100         127.0.0.1:25                              *:*                  

LISTEN     0      10          127.0.0.1:9988                            *:*                  

LISTEN     0      128                :::22                             :::*                  

LISTEN     0      100               ::1:25                             :::*

Mysql节点:(2台master节点都要启动)

[root@master1 ~]# systemctl start mysql-mmm-agent && systemctl enable mysql-mmm-agent

[root@master1 ~]# ss -lnt #查看端口监听情况

State      Recv-Q Send-Q  Local Address:Port  Peer Address:Port              

LISTEN     0      50 *:3306 *:*                  

LISTEN     0      128 *:22 *:*                  

LISTEN     0      100 127.0.0.1:25 *:*                  

LISTEN 0 10 10.10.10.64:9989 *:*                  

LISTEN 0 128 :::22 :::*                  

LISTEN     0 100 ::1:25 :::*

MMM管理端基本管理命令:

mmm_control show (查看mmm连接状态)

mmm_control set_online db1 (如果一直显示等待,可手动设置)

mmm_control checks all (查看各个节点运行状态)

11. 读写分离测试

[root@monitor ~]# mmm_control show #查看vip分布情况

  db1(10.10.10.64) master/ONLINE. Roles: reader(10.10.10.11), writer(10.10.10.10)

  db2(10.10.10.65) master/ONLINE. Roles: reader(10.10.10.12)

使用vip登陆mariadb数据,创建HA数据库(因为前面配置文件里面只指定了HA数据库同步),创建test表,然后插入测试数据

[root@monitor ~]# mysql -uroot -p123 -h 10.10.10.10  #写vip登陆数据库

Welcome to the MariaDB monitor.  Commands end with ; or \g.

Your MariaDB connection id is 524

Server version: 5.5.56-MariaDB MariaDB Server

 

Copyright (c) 2000, 2017, Oracle, MariaDB Corporation Ab and others.

 

Type 'help;' or '\h' for help. Type '\c' to clear the current input statement.

 

MariaDB [(none)]> create database HA;#创建HA数据库

Query OK, 1 row affected (0.01 sec)

 

MariaDB [(none)]> use HA; #进入HA数据库

Database changed

MariaDB [HA]> create table test(id int ,name varchar(20)); #进入test表

Query OK, 0 rows affected (0.04 sec)

 

MariaDB [HA]> insert into test values(1,'wyq'); #插入测试数据

Query OK, 1 row affected (0.04 sec)

[root@monitor ~]# mysql -uroot -p123 -h 10.10.10.12 -e 'select * from HA.test'

#使用vip登陆数据库,执行查询

+------+------+

| id   | name |

+------+------+

|    1 | wyq  |#查询结果就是刚才插入的数据

+------+------+

12. 故障测试

[root@monitor ~]# mmm_control show

  db1(10.10.10.64) master/ONLINE. Roles: reader(10.10.10.11), writer(10.10.10.10)

  db2(10.10.10.65) master/ONLINE. Roles: reader(10.10.10.12)

[root@master1 ~]# systemctl stop mariadb #Master1停止数据库服务

[root@monitor ~]# mmm_control show

  db1(10.10.10.64) master/HARD_OFFLINE. Roles:  #Master1节点已停止服务

  db2(10.10.10.65) master/ONLINE. Roles: reader(10.10.10.11), reader(10.10.10.12), writer(10.10.10.10)  #此时读VIP已经漂到Master2节点上了

[root@master1 ~]# systemctl start mariadb  #重新启动Master1节点数据库服务

[root@monitor ~]# mmm_control show

  db1(10.10.10.64) master/ONLINE. Roles: reader(10.10.10.12)#Master1节点已恢复

  db2(10.10.10.65) master/ONLINE. Roles: reader(10.10.10.11), writer(10.10.10.10)

#注意虽然DB1复活,但写VIP仍然在DB2不变

猜你喜欢

转载自blog.csdn.net/yan7895566/article/details/79157607