mysql数据库之主从复制+双主--MMM

mysql复制:在主数据库中,前端用户每执行一个写操作/语句,都会在二进制日志中保存一个事件,把这个事件从mysql的服务器中3306端口发送给从服务器,从服务器把这个事件接受下来,接受下来先保存在本地的中继日志文件中,而后,他再从中继日志文件中读一个事件,执行一下,然后这个操作的结果保存在存储设备中。

中继日志(relay  log):接受主数据库服务器上传过来的数据,然后在执行一遍!

半同步:在一主多从的架构中,主数据库服务器将数据同步发送给另外一个节点,但是只保证至少一个节点同步完成,其他几个节点不能保证。

        从服务器不能执行写操作,若执行了写操作,将导致与主服务器之间数据不一致!

多级复制:一个从服务器A可以在主服务器上拷贝数据,那从服务器B可以在从服务器A上复制数据。这个时候,从服务器A就需要用到二进制日志文件。

从服务器优点:分摊负载(负载均衡)               从服务器可以做备份,可以做冷备份,但是二进制文件要在主服务器上备份!

               若主服务器崩溃,那么从服务器可以立即顶替上主服务器,代替主服务器的位置,但需要做一些修复。

               异地容灾

负载均衡:主从模型,读可以在从服务器上读,写在主服务器上写!

           双主模型,无法实现负载均衡,无法减轻写操作!

mysql5.5异步配置

注意对于mysql服务器来讲,一个主服务器可以带有多个从服务器,但是一个从服务器不可以有多个主服务器!

     从mysql5.6开始引入了新机制: gtid全局事务号,使得mysql复制更加安全。

                                  多线程复制

show  slave  status\G;    查看从服务器状态

 

一、主服务器(master)如何配置?

1、启用二进制日志  log-bin-index

2、选择一个唯一的server -id

3、创建具有复制权限的用户(RELICATION  SLAVE复制权限,RELICATION  CLIENT具有连接主服务器,获取相关信息的权限)

二、从服务器(slave)如何配置

1、启用中继日志(relay-log

2、选择一个唯一的server-id

3、连接至主服务器并开始复制数据

 

mysql命令行下执行

changer   master   to       master_host= "  " ,master_port= "  "     ,master_log_file="  " ,   master_log_pos=    ,master_user=" " ,master_password="  "

   设定主服务器是什么    主服务器在哪里     主服务器的端口号  主服务器的二进制文件

 

主配置

先关防火墙

1,启用二进制日志:/etc/my.cnf开启这一项(log-bin=mysql-bin),并添加一行log-bin-index=master-bin.index

                           开启这一项binlog_format=mixed

                           添加一项:innodb_file_per_table = 1

2,启动服务并建立用户账号

grant  replication  slave   on  *.*  to  'sun'@'192.168.178.2' identified  by 'sun1021';

刷新授权表:flush    privileges

 

从配置

先关防火墙

1、关闭二进制日志文件:#log-bin=mysql-bin

   开启中继日志:relay-log = relay-log

                 relay-log-index =relay-log.index

2、改变一下server-id 

3、启动服务

4、change master to master_host='192.168.178.1',master_user='sun',master_password='sun1021',master_log_file='master-bin.000001',master_log_pos=339;

5、查看从服务器状态:show  slave   status \G;

6、最后一步,mysql>start  slave  启动从服务器

      若出现错误:Slave_IO_Running: Connecting,只有三个问题,网络连通性,pos不同,用户密码不同,防火墙

 

在主从复制架构中,主服务器必须要启动sync-binlog, 

   sync-binlog=1    是否立即同步二进制文件,在主服务器上设置,用于事务安全

   read-only * yes   在从服务器上设置,但对其管理员权限的用户不生效。

 

start  slave  sql_thread;

start  slave  io_thread;

 

从服务器中的日志保存在/数据目录/错误日志中

mysql5.5半同步配置

在主服务器上和从服务器上各自安装一个插件,实现半同步安装

  插件在mysql安装目录中的/lib/plugin文件夹中!

   semisync_master.so :主服务器上安装的插件

   semisync_slave.so :从服务器上安装的插件

1、在主服务器上安装模块:mysql>  install  plugin  rpl_semi_sync_master  soname  'semisync_master.so';

   查看模块:show  global  variables  like  '%rpl%'

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

| Variable_name                      | Value |

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

| rpl_recovery_rank                  | 0     | 

| rpl_semi_sync_master_enabled       | OFF   |  是否启用半同步复制的主节点

| rpl_semi_sync_master_timeout       | 10000 |   超时时间(毫秒)

| rpl_semi_sync_master_trace_level     | 32    |   追踪级别

| rpl_semi_sync_master_wait_no_slave  | ON    |   若没有从服务器是否等待

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

2、在从服务器上安装模块:mysql> install  plugin  rpl_semi_sync_slave  soname  'semisync_slave.so';

    查看模块:show   variables  like  '%rpl%';

3、先启动主服务器上的模块:set global  rpl_semi_sync_master_enabled=1;

4、再启动从服务器上的模块::set global rpl_semi_sync_slave_enabled=1;

5、光启动还不行,查看模块全局变量:show global status like "%rpl%";

6、只有把从服务器线程关掉再重新启动才能生效:stop   slave io_thread;

                                             start   slave io_thread;

7、再回到主服务器上查看全局变量:show global status like "%rpl%"; 第一行为1,代表成功!

mysql5.6 基于GTID及多线程的复制

数据库复制过滤(建议设置从服务器)

主服务器端:binlog-do-db   :白名单,仅将指定数据库的相关修改操作记入二进制日志

            binlog-ignore-db  :黑名单,但凡跟这个数据库相关的操作我们都不记录进二进制日志文件

从服务器端:replicate-do-db :白名单,仅将指定数据库的相关修改操作记入二进制日志

            replicate-ignore-db :黑名单,但凡跟这个数据库相关的操作我们都不记录进二进制日志文件

            replicate-do-table :白名单,在表级别指定,仅复制那张表

            replicate-ignore-table :黑名单在表级别指定,忽略复制那张表

            replicate-wild-do-table :白名单,支持通配符(%任意所有、_任意单个)

            replicate-wild-ignore-table :黑名单,支持通配符(%任意所有、_任意单个)

这些设置的条目都要写在mysql主配置文件中/etc/my.cnf中,并且重启mysql服务器!

UUID(全局唯一标识)通常对于MySQL服务器而言,他是一个128位的随机符。

GTID:它是由服务器的UUID并结合事务ID号来组合成的来表示唯一某一个事务的标识码!

       在mysql5.6的binary  log当中,在每一个事务的首部都会写上这个GTID的标识!

       在我们的二进制日志文件当中,某一个事务相关的语句记录下来的时候,在这个事件首部会把它相关联的GTID给他记录下来!

 

mysql5.6的多线程复制

  每个数据库仅能使用一个线程,复制涉及到多个数据库时多线程复制才意义!

slave-parallel-workers=线程数(尽可能等于数据库数,或者小于他,0代表禁用多线程复制)

mysql 提供了许多专门用于复制的管理工具,这些工具依赖于Python2.7及以上(不适用于红帽5

跟复制、检查、显示、HA相关的命令!

工具下载地址:https://launchpad.net/mysql-utilities

mysqlreplicate :复制的工具,实现快速启动mysql的从服务器上,能够帮助mysql服务器检查已经在本地执行了的事务。

mysqlrplcheck :检查工具,实现验证我们的部署,并实现快速故障修复,

                         实现显示binlog相关配置异常,

mysqlfailover:故障转移工具,能够快速的让你自动或者手动提升一个从服务器为主服务器。

mysqlrplshow :显示工具,发现并显示复制拓扑图,显示主机名和端口号

mysqlrpladmin:管理工具, 手动让一个从服务器上线或者下线。

配置步骤

1.1、主服务器上的主配置文件:

datadir=/mydata/data

log-bin = master-bin

server-id = 1

socket = /tmp/mysql.sock

binlog-format=ROW

log-slave-updates=true

gtid-mode=on

enforce-gtid-consistency=true

master-info-repository=TABLE

relay-log-info-repository=TABLE

sync-master-info=1

slave-parallel-workers=2

binlog-checksum=CRC32

master-verify-checksum=1

slave-sql-verify-checksum=1

binlog-rows-query-log_events=1

report-port=3306

port=3306

report-host=192.168.1.1    重启服务!

1.2、登录mysql,查看GTID show global variables  like '%gtid%';  ON为启动

2.1、配置从服务器主配置文件

datadir=/mydata/data

log-bin = master-bin

server-id = 2

socket = /tmp/mysql.sock

 

binlog-format=ROW

log-slave-updates=true

gtid-mode=on

enforce-gtid-consistency=true

master-info-repository=TABLE

relay-log-info-repository=TABLE

sync-master-info=1

slave-parallel-workers=2

binlog-checksum=CRC32

master-verify-checksum=1

slave-sql-verify-checksum=1

binlog-rows-query-log_events=1

report-port=3306

port=3306

report-host=主服务器IP地址

二进制日志文件启不启动看你是否高可用性(主服务器挂了,从服务立马顶上去)

重启服务!

3.1、在主服务器上创建用户:grant replication  slave on *.*  to  "repluser"@'从服务器IP地址' identified by 'replpass';

      然后刷新授权表:flush privileges;

3.2、让从服务器连接主服务器:change master  to  master_host='192.168.1.1',master_user='repluser',master_password='replpass',master_log_file='master-bin.000',master_log-pos=456;

4.1、查看从服务器的状态:show  slave  status\G;查看复制功能是否运行?

     Slave_IO_Running: No

     Slave_SQL_Running: No

4.2、启动两个从服务器:start  slave ;

现在基于GTID的主从复制已经完成,

可以在主服务器上查看从服务器的信息:show  slave  hosts;

 

mysql5.6的读写分离

两种方式安装:yum   编译

安装配置mysql-proxy:

 

1、下载所需要的版本,这里的系统平台为rhel6.4 32位系统,因此就以mysql-proxy-0.8.3-linux-glibc2.3-x86-32bit.tar.gz为例。

 

# tar xf mysql-proxy-0.8.3-linux-glibc2.3-x86-32bit.tar.gz -C /usr/local

# cd /usr/local

# ln -sv mysql-proxy-0.8.3-linux-glibc2.3-x86-32bit  mysql-proxy

1.1、环境:yum -y install libevent glib2 lua

2、添加代理用户

# useradd mysql-proxy

2.1、给mysql-proxy添加启动脚本:

为mysql-proxy提供SysV服务脚本,内容如下所示

#!/bin/bash

#

# mysql-proxy This script starts and stops the mysql-proxy daemon

#

# chkconfig: - 78 30

# processname: mysql-proxy

# description: mysql-proxy is a proxy daemon for mysql

 

# Source function library.

. /etc/rc.d/init.d/functions

 

prog="/usr/local/mysql-proxy/bin/mysql-proxy"

 

# Source networking configuration.

if [ -f /etc/sysconfig/network ]; then

    . /etc/sysconfig/network

fi

 

# Check that networking is up.

[ ${NETWORKING} = "no" ] && exit 0

 

# Set default mysql-proxy configuration.

ADMIN_USER="admin"

ADMIN_PASSWD="admin"

ADMIN_LUA_SCRIPT="/usr/local/mysql-proxy/share/doc/mysql-proxy/admin.lua"

PROXY_OPTIONS="--daemon"

PROXY_PID=/var/run/mysql-proxy.pid

PROXY_USER="mysql-proxy"

 

# Source mysql-proxy configuration.

if [ -f /etc/sysconfig/mysql-proxy ]; then

    . /etc/sysconfig/mysql-proxy

fi

 

RETVAL=0

 

start() {

    echo -n $"Starting $prog: "

    daemon $prog $PROXY_OPTIONS --pid-file=$PROXY_PID --proxy-address="$PROXY_ADDRESS" --user=$PROXY_USER --admin-username="$ADMIN_USER" --admin-lua-script="$ADMIN_LUA_SCRIPT" --admin-password="$ADMIN_PASSWORD"

    RETVAL=$?

    echo

    if [ $RETVAL -eq 0 ]; then

        touch /var/lock/subsys/mysql-proxy

    fi

}

 

stop() {

    echo -n $"Stopping $prog: "

    killproc -p $PROXY_PID -d 3 $prog

    RETVAL=$?

    echo

    if [ $RETVAL -eq 0 ]; then

        rm -f /var/lock/subsys/mysql-proxy

        rm -f $PROXY_PID

    fi

}

# See how we were called.

case "$1" in

    start)

        start

        ;;

    stop)

        stop

        ;;

    restart)

        stop

        start

        ;;

    condrestart|try-restart)

        if status -p $PROXY_PIDFILE $prog >&/dev/null; then

            stop

            start

        fi

        ;;

    status)

        status -p $PROXY_PID $prog

        ;;

    *)

        echo "Usage: $0 {start|stop|restart|reload|status|condrestart|try-restart}"

        RETVAL=1

        ;;

esac

 

exit $RETVAL

 

将上述内容保存为/etc/rc.d/init.d/mysql-proxy,给予执行权限,而后加入到服务列表。

# chmod +x /etc/rc.d/init.d/mysql-proxy

# chkconfig --add mysql-proxy

 

3、为服务脚本提供配置文件/etc/sysconfig/mysql-proxy,内容如下所示:

# Options for mysql-proxy

ADMIN_USER="admin"

ADMIN_PASSWORD="admin"

ADMIN_ADDRESS=""

ADMIN_LUA_SCRIPT="/usr/local/mysql-proxy/share/doc/mysql-proxy/admin.lua"

PROXY_ADDRESS=""

PROXY_USER="mysql-proxy"

PROXY_OPTIONS="--daemon --log-level=info --log-use-syslog  --plugins=proxy --plugins=admin  --proxy-backend-addresses=192.168.2.128:3306 --proxy-read-only-backend-addresses=192.168.2.141:3306  --proxy-lua-script=/usr/local/mysql-proxy/share/doc/mysql-proxy/rw-splitting.lua"

 

 

其中最后一行,需要按实际场景进行修改,例如:

PROXY_OPTIONS="--daemon --log-level=info --log-use-syslog --plugins=proxy --plugins=admin --proxy-backend-addresses=172.16.100.6:3306 --proxy-read-only-backend-addresses=172.16.100.7:3306 --proxy-lua-script=/usr/local/mysql-proxy/share/doc/mysql-proxy/rw-splitting.lua"

 

 

其中的proxy-backend-addresses选项和proxy-read-only-backend-addresses选项均可重复使用多次,以实现指定多个读写服务器或只读服务器。

 

mysql-proxy的配置选项大致可分为帮助选项、管理选项、代理选项及应用程序选项几类,下面一起去介绍它们。

 

--help

--help-admin

--help-proxy

--help-all ———— 以上四个选项均用于获取帮助信息;

 

--proxy-address=host:port ———— 代理服务监听的地址和端口;

--admin-address=host:port ———— 管理模块监听的地址和端口;

--proxy-backend-addresses=host:port ———— 后端mysql服务器的地址和端口;

--proxy-read-only-backend-addresses=host:port ———— 后端只读mysql服务器的地址和端口;

--proxy-lua-script=file_name ———— 完成mysql代理功能的Lua脚本;

--daemon ———— 以守护进程模式启动mysql-proxy

--keepalive ———— 在mysql-proxy崩溃时尝试重启之;

--log-file=/path/to/log_file_name ———— 日志文件名称;

--log-level=level ———— 日志级别;

--log-use-syslog ———— 基于syslog记录日志;

--plugins=plugin,.. ———— 在mysql-proxy启动时加载的插件;

--user=user_name ———— 运行mysql-proxy进程的用户;

--defaults-file=/path/to/conf_file_name ———— 默认使用的配置文件路径;其配置段使用[mysql-proxy]标识;

--proxy-skip-profiling ———— 禁用profile

--pid-file=/path/to/pid_file_name ———— 进程文件名;

 

4、创建:/usr/local/mysql-proxy/share/doc/mysql-proxy目录下创建admin.lua

脚本内容 如下:

function set_error(errmsg)

        proxy.response = {

                type = proxy.MYSQLD_PACKET_ERR,

                errmsg = errmsg or "error"

        }

end

 

function read_query(packet)

        if packet:byte() ~= proxy.COM_QUERY then

                set_error("[admin] we only handle text-based queries (COM_QUERY)")

                return proxy.PROXY_SEND_RESULT

        end

 

        local query = packet:sub(2)

 

        local rows = { }

        local fields = { }

 

        if query:lower() == "select * from backends" then

                fields = {

                        { name = "backend_ndx",

                          type = proxy.MYSQL_TYPE_LONG },

 

                        { name = "address",

                          type = proxy.MYSQL_TYPE_STRING },

                        { name = "state",

                          type = proxy.MYSQL_TYPE_STRING },

                        { name = "type",

                          type = proxy.MYSQL_TYPE_STRING },

                        { name = "uuid",

                          type = proxy.MYSQL_TYPE_STRING },

                        { name = "connected_clients",

                          type = proxy.MYSQL_TYPE_LONG },

                }

 

                for i = 1, #proxy.global.backends do

                        local states = {

                                "unknown",

                                "up",

                                "down"

                        }

                        local types = {

                                "unknown",

                                "rw",

                                "ro"

                        }

                        local b = proxy.global.backends[i]

 

                        rows[#rows + 1] = {

                                i,

                                b.dst.name,          -- configured backend address

                                states[b.state + 1], -- the C-id is pushed down starting at 0

                                types[b.type + 1],   -- the C-id is pushed down starting at 0

                                b.uuid,              -- the MySQL Server's UUID if it is managed

                                b.connected_clients  -- currently connected clients

                        }

                end

        elseif query:lower() == "select * from help" then

                fields = {

                        { name = "command",

                          type = proxy.MYSQL_TYPE_STRING },

                        { name = "description",

                          type = proxy.MYSQL_TYPE_STRING },

                }

                rows[#rows + 1] = { "SELECT * FROM help", "shows this help" }

                rows[#rows + 1] = { "SELECT * FROM backends", "lists the backends and their state" }

        else

                set_error("use 'SELECT * FROM help' to see the supported commands")

                return proxy.PROXY_SEND_RESULT

        end

 

        proxy.response = {

                type = proxy.MYSQLD_PACKET_OK,

                resultset = {

                        fields = fields,

                        rows = rows

                }

        }

        return proxy.PROXY_SEND_RESULT

end

5、启动服务:

mysql5.6双主双从及其高可用集群(MMM)

两台主mysql互为主从,两台mysql从服务都备份一个主服务器,然后再使用mysql-mmm套件进行读写分离。

先配置双主互备

1、首先关掉防火墙,配置IP地址。

2、在mysql配置文件中写入主从配置所需要的选项(双节点都配置,除了server-id不同)

server-id = 1     //节点表示,全局唯一

log-bin=mysql-bin      //日志文件命名格式

relay-log = mysql-relay-bin   //relay-log日志文件的命名格式

replicate-wild-ignore-table=mysql.%      //复制过滤选项,过滤数据库mysql下的所有数据

replicate-wild-ignore-table=test.%

replicate-wild-ignore-table=information_schema.%

3、创建复制用户并授权(双节点都配置,除用户名和密码不一样,IP地址一定要用%,因为不能单指一台mysql服务器)

grant  replication  slave  on  *.*  to  'sun1'@'10.10.10.%'  identified by  'sun1021!';

4、在另一台mysql服务器中将这台mysql设为主服务器 !(master_log_filemaster_log_pos这两个选项的值刚好是主服务器上的show master status查询的值!)

change master to \

    -> master_host='10.10.10.118',

    -> master_user='sun2',

    -> master_password='sun1022!',

    -> master_log_file='mysql-bin.000001',

    -> master_log_pos=327

5、启动slave服务器:start  slave;  然后使用show slave status\G;查看传输状态。

6、然后再把从服务器作为主,在从服务器上创建复制用户。然后再让主服务器连接,最后,开启复制服务,在查看一下复制状态。

然后配置双从

1、在两台剩余的mysql上都连接同一个主mysql服务器,必须是同一个主服务器!

2、都开启slave服务即可!

最后配置MMM

1、安装MMM套件(配置好centosyum)

安装服务器端:yum  -y  install  mysql-mmm*

每个mysql节点:yum  -y  install  mysql-mmm-agent

2、在所有mysql主机的配置文件中写入: read_only=1,这个参数可以对所有非临时表进行只读控制。

3、在所有mysql节点创建账号monitor user(对所有mysql服务器做健康检查),monitor agent(切换只读模式和同步Master信息)

   创建monitor user:grant  replication client  on  *.*  to  'monitor'@'10.10.10.%'  identified  by  'nihao1!';

   创建monitor agent:grant  super, replication client, process  on  *.*  to  'agent'@'10.10.10.%'  identified by 'nihao2!';

4、设置主配置文件(/etc/mysql-mmm/)

   mmm_mon.conf :仅在MMM节点上配置,用于监控一些参数

   mmm_common.conf :在所有的MMM节点配置,设置读写节点的IP地址和配置虚拟ip

   mmm_agent.conf :在所有的mysql节点上配置,设置每个节点的标识

4.1、配置mmm_common.conf配置文件

active_master_role      writer  //设置这个参数时,所有mysql节点都应该设置read-only=1

 

    cluster_interface       eth0     //配置的网络接口,不能指定子接口

    pid_path                /var/run/mysql-mmm/mmm_agentd.pid     //设置pid文件位置

    bin_path                /usr/libexec/mysql-mmm/            //指定MMM可执行文件路径

    replication_user        replicant              //设置复制的用户名

    replication_password    slave                //设置复制的密码

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

    agent_password          RepAgent          //设置更改只读操作用户的密码

 

     //设置节点的配置信息,db1会在mmm_agent.conf文件中定义

    ip      192.168.100.49       //设置db1的物理ip地址

    mode    master             //设置db1的角色

    peer    db2               //与db1对等的主机名,也就是db1db2均为Master角色

        //设置节点的配置信息,db3会在mmm_agent.conf文件中定义

    ip      192.168.100.51     //设置db3的物理ip地址

    mode    slave             //设置db3的角色

 

           //设置可写角色模式

    hosts   db1, db2      //设置可执行写操作的主机

    ips     192.168.100.250    //设置可写的虚拟ip

    mode    exclusive         //设置角色互斥,互斥角色只有一个ip,并且同一时间

 

             //设置可写角色模式

    hosts   db1, db2      //设置可执行写操作的主机

    ips     192.168.100.251, 192.168.100.252     //设置可写的虚拟ip

    mode    balanced    //设置角色为负载均衡,可以有多个IP地址,这些IP地址被均衡的动态的分配给多台mysql主机

4.2、配置mmm_agent.conf配置文件

    this  db1    //指定了mysql节点对应的主机名

4.3、配置mmm_mon.conf配置文件

include mmm_common.conf 

 

    ip                  127.0.0.1   //为了安全性,设置只在本机监听,默认监听端口9988

    pid_path            /var/run/mysql-mmm/mmm_mond.pid    //设置mmm_mond进程的PID文件位置

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

    status_path         /var/lib/mysql-mmm/mmm_mond.status      //MMM集群的状态文件

    ping_ips            192.168.100.50          //用于测试网络可用性的IP地址列表,不要写入本机的IP地址

    auto_set_online     60    //是否设置自动上线,

 

    # The kill_host_bin does not exist by default, though the monito

r 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        mmm_monitor   //monitor账号

    monitor_password    RepMonitor     //monitor密码

debug 0   //MMM管理端的运行模式,1debug模式,0为正常运行

(注意:若没有PID文件,我们要手动创建:touch  /var/run/mysql-mmm/mmm_mond.pid

5、配置mysql-mmm-agent文件,确保此文件在所有mysql节点都为ENABLED=1

6、所有的配置文件权限最好都为640

7、启动

MMM管理节点:/etc/init.d/mysql-mmm-monitor  start

mysql节点:/etc/init.d/mysql-mmm-agent   start

8、命令

mmm_control show  //查看群集运行状态

   例:  db1(10.10.10.116)           master    /   ONLINE.       Roles: reader(10.10.10.13),     writer(10.10.10.11)

         集群节点的物理IP地址    mysql角色    集群节点状态    集群中读写角色对应的虚拟IP地址(r:读,w:)

    集群节点状态:

        ONLINE :节点运行正常,处于在线状态

        ADMIN_OFFLINE :节点通过手动模式离线的

        HARD_OFFLINE :节点处于离线状态, 一般由于MMM集群脚本执行ping操作失败或检测mysql失败而切换的一种状态

        AWAITING_RECOVERY :表示等待恢复状态,如果MMM集群设置的是active运行模式,那么此状态将会自动恢复为ONLINE状态

        REPLICATION_FAIL :表示主从复制失败状态,一般由于复制主线程没有运行导致的

        REPLCATION_DELAY :表示复制日志有延时,一般由检查日志失败导致的

mmm_control mode   //查看MMM集群目前处于什么运行模式

    模式类型:

        active :表示主动模式,该模式是默认的,master节点故障另一个master顶上,继续服务。slave故障另一个slave节点顶上。

        manual :表示手动模式,该模式不会执行自动切换操作,若某一节点故障,手动切换到其他节点。

        passive :表示被动模式,在该模式下,MMM管理端不会改变集群中节点的角色,也不更新状态文件和发送任何信息给每个agent节点,在启动的节点发生冲突时,将会进入被动模式。

mmm_control checks all  //查看所有MMM集群节点的运行状态,会对每个节点执行四项检查,并确定检查是否成功。

        四项检查含义:

               ping :检测网络可用性

               mysql :检测mysql服务器是否运行正常

               rep_threads :检测mysql的复制线程是否正常运行

               rep_backlog :检测mysql的复制日志是否有挤压

    (在这四项检测中,任何一项出现问题,都对进行角色切换操作!)

9、读写分离测试

注意:登录的时候登录用mmm_control show列表中的主Master中能够写的虚拟IP地址!!!

例子:db1(10.10.10.116)           master    /   ONLINE.       Roles: reader(10.10.10.13),     writer(10.10.10.11)

                                                                                      使用这个虚拟IP登录

登录mysql服务器,向里面创建一个库或者表,然后查看其他节点有没有同步过去。

10、

转载于:https://www.cnblogs.com/linux-s/p/11290102.html

你可能感兴趣的:(mysql数据库之主从复制+双主--MMM)