SUSE12 MySQL高可用架构 MHA环境 部署

一、MHA介绍

      MHA(Master HA)是一款开源的 MySQL 的高可用程序,它为 MySQL 主从复制架构提供了 automating master failover 功能。MHA 在监控到 master 节点故障时,会提升其中拥有最新数据的 slave 节点成为新的master 节点,在此期间,MHA 会通过于其它从节点获取额外信息来避免一致性方面的问题。MHA 还提供了 master 节点的在线切换功能,即按需切换 master/slave 节点。MHA 能够在30秒内实现故障切换,并能在故障切换中,最大可能的保证数据一致性。

      MHA由两部分组成:MHA Manager(管理节点)和MHA Node(数据节点)。管理节点可以单独部署在一台独立的机器上来管理多个master-slave集群,也可以部署在一台slave节点上。数据节点运行在每台mysql服务器上。Manager会定期检查master,若出现故障时,会自动将最新数据的slave提升为新的master,然后将其他的slave指向新的master。整个故障转移程序完全透明。

      目前MHA主要支持一主多从的架构。要搭建MHA,要求一个复制集群中必须最少有三台数据库服务器,一主二从,即一台充当master,一台充当备用master,另外一台充当从库。

二、MHA工作架构说明

展示了如何通过MHA Manager管理多组主从复制。可以将MHA工作原理总结为如下:


相较于其它HA软件,MHA的目的在于维持MySQL Replication中Master库的高可用性,其最大特点是可以修复多个Slave之间的差异日志,最终使所有Slave保持数据一致,然后从中选择一个充当新的Master,并将其它Slave指向它。工作流程主要如下:

1)从宕机崩溃的master保存二进制日志事件(binlog events);

2)识别含有最新更新的slave;

3)应用差异的中继日志(relay log)到其他的slave;

4)应用从master保存的二进制日志事件(binlog events);

5)提升一个slave为新的master;

6)使其他的slave连接新的master进行复制;

2.1      MHA工作原理

1 从宕机崩溃的master保存二进制日志事件(binlog events)

 2识别含有最新更新的slave

 3应用差异的中继日志(relay log)到其他的slave

 4应用从master保存的二进制日志事件(binlog events)

 5提升一个slave为新的master

 6使其他的slave连接新的master进行复制

2.2     MHAManager工具包

  1. masterha_check_ssh:检查MHA的SSH配置状况

  2. masterha_check_repl:检查MySQL的复制状况

  3. masterha_manager:启动MHA

  4. masterha_check_status:检测当前MHA运行状态

  5. masterha_master_monitor:检测master是否宕机

  6. masterha_master_switch:控制故障转移(自动或手动)

  7. masterha_conf_host:添加或删除配置的server信息

  8. masterha_stop:关闭MHA

Node工具包(这些工具通常由MHAManager的脚本触发,无需人为操作)主要包括以下几个工具:

save_binary_logs(保存二进制日志)             保存和复制master的二进制日志

apply_diff_relay_logs(应用差异中继日志)     识别差异的中继日志事件并将其差异的事件应用于其他的slave

filter_mysqlbinlog                          去除不必要的ROLLBACK事件(MHA已不再使用这个工具)

purge_relay_logs(清理中继日志)               清除中继日志(不会阻塞SQL线程)

MHA如何保持数据的一致性呢?主要通过MHA node的以下几个工具实现,但是这些工具由mha manager触发:

save_binary_logs         如果master的二进制日志可以存取的话,保存复制master的二进制日志,最大程度保证数据不丢失

apply_diff_relay_logs    相对于最新的slave,生成差异的中继日志并将所有差异事件应用到其他所有的slave

注意:

对比的是relay log,relay log越新就越接近于master,才能保证数据是最新的。

purge_relay_logs删除中继日志而不阻塞sql线程

2.3 MHA处理过程

====== monitor node 监控节点======

(1) 监控所有节点,重点是master

(2) 监控到master宕机(实例(ssh能),主机(ssh不能连))

(3) 监控主从状态

====== failover 故障转移======

(3) 对比各节点的GTID号码。

(3) 数据补偿1:如果ssh能连,从节点立即保存自己缺失部分的二进制日志

(4) 选主:对比各节点的GTID号码即可,选一个最接近于主库数据的从节点,恢复缺失的日志,并将从库切换为主库stop slave  reset slave all

(5) 数据补偿2:如果ssh不能连,计算两个从库的relaylog的差异,恢复到数据少的从库中.

(6) 2号从库change master to 到新主,开启新的主从关系

====== 应用透明=====

(7) 使用vip机制实现应用透明

====== 补充功能======

(8) 自动修复主库(加入集群)待开发...

(9) 二次数据补偿的问题(binlog server)

(10) 提醒功能(send_report)

(11) 权重的问题

2.4      MHA的优势

1)故障切换快

在主从复制集群中,只要从库在复制上没有延迟,MHA通常可以在数秒内实现故障切换。9-10秒内检查到master故障,可以选择在7-10秒关闭master以避免出现裂脑,几秒钟内,将差异中继日志(relay log)应用到新的master上,因此总的宕机时间通常为10-30秒。恢复新的master后,MHA并行的恢复其余的slave。即使在有数万台slave,也不会影响master的恢复时间。DeNA在超过150个MySQL(主要5.0/5.1版本)主从环境下使用了MHA。当mater故障后,MHA在4秒内就完成了故障切换。在传统的主动/被动集群解决方案中,4秒内完成故障切换是不可能的。

2)master故障不会导致数据不一致

当目前的master出现故障时,MHA自动识别slave之间中继日志(relay log)的不同,并应用到所有的slave中。这样所有的salve能够保持同步,只要所有的slave处于存活状态。和Semi-Synchronous Replication一起使用,(几乎)可以保证没有数据丢失。

3)无需修改当前的MySQL设置

MHA的设计的重要原则之一就是尽可能地简单易用。MHA工作在传统的MySQL版本5.0和之后版本的主从复制环境中。和其它高可用解决方法比,MHA并不需要改变MySQL的部署环境。MHA适用于异步和半同步的主从复制。启动/停止/升级/降级/安装/卸载MHA不需要改变(包扩启动/停止)MySQL复制。当需要升级MHA到新的版本,不需要停止MySQL,仅仅替换到新版本的MHA,然后重启MHA Manager就好了。

MHA运行在MySQL 5.0开始的原生版本上。一些其它的MySQL高可用解决方案需要特定的版本(比如MySQL集群、带全局事务ID的MySQL等等),但并不仅仅为了master的高可用才迁移应用的。在大多数情况下,已经部署了比较旧MySQL应用,并且不想仅仅为了实现Master的高可用,花太多的时间迁移到不同的存储引擎或更新的前沿发行版。MHA工作的包括5.0/5.1/5.5的原生版本的MySQL上,所以并不需要迁移。

4)无需增加大量的服务器

MHA由MHA Manager和MHA Node组成。MHA Node运行在需要故障切换/恢复的MySQL服务器上,因此并不需要额外增加服务器。MHA Manager运行在特定的服务器上,因此需要增加一台(实现高可用需要2台),但是MHA Manager可以监控大量(甚至上百台)单独的master,因此,并不需要增加大量的服务器。即使在一台slave上运行MHA Manager也是可以的。综上,实现MHA并没用额外增加大量的服务。

5)无性能下降

MHA适用与异步或半同步的MySQL复制。监控master时,MHA仅仅是每隔几秒(默认是3秒)发送一个ping包,并不发送重查询。可以得到像原生MySQL复制一样快的性能。

6)适用于任何存储引擎

MHA可以运行在只要MySQL复制运行的存储引擎上,并不仅限制于InnoDB,即使在不易迁移的传统的MyISAM引擎环境,一样可以使用MHA。

三、安装Mysql

使用root创建用户

useradd -m mysql

修改密码

passwd mysql

下载https://cdn.mysql.com/archives/mysql-8.0/mysql-8.0.13-1.sles12.x86_64.rpm-bundle.tar

解压

tar xvf mysql-8.0.13-1.sles12.x86_64.rpm-bundle.tar

mysql-community-server-8.0.13-1.sles12.x86_64.rpm

mysql-community-devel-8.0.13-1.sles12.x86_64.rpm

mysql-community-libs-8.0.13-1.sles12.x86_64.rpm

mysql-community-client-8.0.13-1.sles12.x86_64.rpm

mysql-community-common-8.0.13-1.sles12.x86_64.rpm

mysql-community-test-8.0.13-1.sles12.x86_64.rpm

3.1      安装

先查询是否安装mysql

rpm -qa | grep -i mysql


如未安装则跳过执行安装命令。

利用rpm卸载mysql

rpm -e --nodepsmysql-community-client-5.7.28-1.el7.x86_64

rpm -e --nodepsmysql-community-devel-5.7.28-1.el7.x86_64

rpm -e --nodeps mysql-community-libs-5.7.28-1.el7.x86_64

rpm -e --nodepsmysql-community-common-5.7.28-1.el7.x86_64

rpm -e --nodepsmysql-community-server-5.7.28-1.el7.x86_64

下面就利用安装命令来安装MySQL8.0x:

rpm -ivh mysql-community-common-8.0.13-1.sles12.x86_64.rpm

rpm -ivh mysql-community-libs-8.0.13-1.sles12.x86_64.rpm

rpm -ivh mysql-community-client-8.0.13-1.sles12.x86_64.rpm

rpm -ivh mysql-community-server-8.0.13-1.sles12.x86_64.rpm

rpm -ivh mysql-community-devel-8.0.13-1.sles12.x86_64.rpm

下面就利用安装命令来安装MySQL5.7x:

rpm -ivh mysql-community-common-5.7.28-1.el7.x86_64.rpm

rpm -ivh mysql-community-libs-5.7.28-1.el7.x86_64.rpm

rpm -ivh mysql-community-client-5.7.28-1.el7.x86_64.rpm

rpm -ivh mysql-community-server-5.7.28-1.el7.x86_64.rpm --force --nodeps

rpm -ivh mysql-community-devel-5.7.28-1.el7.x86_64.rpm

3.2      创建用户组和用户

创建用户组:groupadd mysql

创建用户:useradd -r -g mysql mysql

注:由于SUSE采用的是rpm安装,所以此系统已经创建好了,可以跳过次步骤。如果无则使用上诉命令进行创建

给mysql用户指定专用用户组和用户

首先创建data文件夹。(注:mysql的表文件都在这个目录下)

这个data文件夹得根据硬盘的位置来

df -h


由于是本地虚拟机环境,生产环境可安装实际硬盘目录来创建data目录。

mkdir -p /home/mysql/data

指定用户和用户组

cd /usr/local/

mkdir -p mysql

chown -R mysql mysql/

chgrp -R mysql mysql/

随便也设置一下data的,注mysql目录根据自己实际硬盘的要求更改目录

cd /home/mysql

chgrp -R mysql tmp/

chown -R mysql tmp/

chown -R mysqlmysql/

chgrp-R mysql mysql/

3.3      初始化用户

vim /etc/my.cnf 内容如下

# For advice on how to change settings please see

# http://dev.mysql.com/doc/refman/8.0/en/server-configuration-defaults.html

[mysqld]

#

# Remove leading # and set to the amount of RAM for the most important data

# cache in MySQL. Start at 70% of total RAM for dedicated server, else 10%.

# innodb_buffer_pool_size = 128M

#

# Remove the leading "# " to disable binary logging

# Binary logging captures changes between backups and is enabled by

# default. It's default setting is log_bin=binlog

# disable_log_bin

#

# Remove leading # to set options mainly useful for reporting servers.

# The server defaults are faster for transactions and fast SELECTs.

# Adjust sizes as needed, experiment to find the optimal values.

# join_buffer_size = 128M

# sort_buffer_size = 2M

# read_rnd_buffer_size = 2M

#

# Remove leading # to revert to previous value for default_authentication_plugin,

# this will increase compatibility with older clients. For background, see:

# https://dev.mysql.com/doc/refman/8.0/en/server-system-variables.html#sysvar_default_authentication_plugin

# default-authentication-plugin=mysql_native_password

#设置数据存放位置

#basedir=/var/lib/mysql

datadir=/home/mysql/data

tmpdir=/home/mysql/tmp

socket=/var/lib/mysql/mysql.sock

pid-file=/var/run/mysql/mysqld.pid

port=3306

default_storage_engine=InnoDB

lower_case_table_names=1

innodb_buffer_pool_size = 1G

#事务日志文件大小,循环写的方式,把数据文件的随机IO转为几乎顺序的IO,默认是两个5M的文件,

#对于生产环境来说至少要几百甚至上G的大小(需要重启)

innodb_log_file_size = 512M

#内存日志缓冲区,在缓冲满/事务提交/1秒钟Innodb会刷写缓冲区内容到日志文件

innodb_log_buffer_size=16M

character-set-server = utf8mb4

collation-server = utf8mb4_bin

############## binlog ################

server-id = 130

log_bin = mysql-bin

binlog_format = row

sync_binlog = 1

expire_logs_days =7

#最大连接数,默认是100,生产可设置500~5000,取决于服务器的负载能力,一般来说1000足够

max_connections=1000

#mysql在服务端的线程缓存池存放的最大线程数,并不是越大越好,通常并发在100-120可设置为20,

#并发在500-700,可设置200,256的上限值是个不错的估值

thread_cache_size=256

#socket=/var/lib/mysql/mysql.sock

log-error=/var/log/mysql/mysqld.log

#pid-file=/var/run/mysql/mysqld.pid

[client]

socket=/var/lib/mysql/mysql.sock

port=3306

执行初始化命令:

sudo mysqld --initialize --user=mysql --datadir=/home/mysql/data/ --lc_messages=en_US


初始化成功,查看初始密码

cat /var/log/mysql/mysqld.log | grep password


这个是密码root@localhost: 9.sF=eBDO,k*

依次查看

启动MySQL服务

systemctl start mysql

停止MySQL服务

systemctl stop mysql

配置为开机启动

systemctl enable mysql

使用初始密码登录MySQL

mysql -u root -p


验证登录成功了,接下来修改root密码

Mysql5.7x版本执行以上命令:

修改密码:set password=password("root");

登录授权:grant all privileges on *.* to 'root'@'%' identified by 'root';

授权生效:flush privileges;

Mysql8.0x版本执行以上命令:

第一次需要修改密码

ALTER USER 'root'@'localhost' IDENTIFIEDWITH mysql_native_password BY 'root';

修改密码:create user 'root'@'%' identified with mysql_native_password by'root';

登录授权:grant all privileges on *.* to 'root'@'%' with grant option;

授权生效:flush privileges;

关闭防火墙

不同的MySQL直接要互相访问,需要关闭Linux的防火墙

suse12下操作为:

关闭防火墙

systemctl stopSuSEfirewall2.service

取消开机启动防火墙

systemctl disableSuSEfirewall2.service

开启防火墙

systemctl enableSuSEfirewall2.service

开机启动防火墙

systemctl startSuSEfirewall2.service

四、主从配置

4.1      Master节点

查看server_id

show variables like 'server_id';

修改Master配置文件

vim /etc/my.cnf

[mysqld]

log_bin=mysql-bin

server-id=130

sync-binlog=1 # 每次写入都同步到binlog

binlog-ignore-db=performance_schema # 忽略不同步

binlog-ignore-db=information_schema

binlog-ignore-db=mysql

binlog-ignore-db=sys

# binlog-do-db=test  #需要主从复制的数据库

# 为每个session分配的内存,在事务过程中用来存储二进制日志的缓存

binlog_cache_size=1M

# 主从复制的格式(mixed,statement,row,默认格式是statement。建议是设置为row,主从复制时数据更加能够统一)

binlog_format=row

# 设置二进制日志自动删除/过期的天数,避免占用磁盘空间。默认值为0,表示不自动删除。

expire_logs_days=7

重启服务

systemctl restart mysql

主库给从库授权

Mysql8.0x执行以下命令

create user 'canal_repl_user'@'%' identified with mysql_native_password by '123456';

GRANT REPLICATION SLAVE ON *.* TO 'canal_repl_user'@'%';

flush privileges;

Mysql5.7x执行以下命令

create user canal_repl_user;

grant replication slave on *.*  to canal_repl_user identified by '111111';

flush privileges;

show master status;

4.2      Slave节点

修改Slave配置文件,设置为134

vim /etc/my.cnf

[mysqld]

log_bin=mysql-bin

server-id=134

sync-binlog=1 # 每次写入都同步到binlog

binlog-ignore-db=performance_schema # 忽略不同步

binlog-ignore-db=information_schema

binlog-ignore-db=sys

binlog-ignore-db=mysql

binlog_cache_size=1M

binlog_format=row

expire_logs_days=7

relay_log=mysql-relay-bin  #中继日志名字

relay_log_purge=0

read_only=2

manager-slave节点

修改manager-slave配置文件, server-id设置为160

vim /etc/my.cnf

[mysqld]

log_bin=mysql-bin

server-id=160

sync-binlog=1 # 每次写入都同步到binlog

binlog-ignore-db=performance_schema # 忽略不同步

binlog-ignore-db=information_schema

binlog-ignore-db=sys

binlog-ignore-db=mysql

binlog_cache_size=1M

binlog_format=row

expire_logs_days=7

relay_log=mysql-relay-bin  #中继日志名字

relay_log_purge=0

read_only=2

分别重启节点Slave和节点manager-slave

systemctl restart mysql

注:三台机器的配置可根据实际要求进行修改,网上一搜一大堆,这里不做过多的解释,如有疑问请留言。

4.3      开启同步

在Slave节点的MySQL命令行执行如下命令:

change master to master_host='192.168.142.133',master_port=3306,master_user='canal_repl_user',master_password='123456',master_log_file='mysql-bin.000001',master_log_pos=1072;

start slave;  // 开启同步

查看主从复制信息

SHOW SLAVE STATUS\G;

create database syj_test defaultcharacter set utf8mb4 collate utf8mb4_bin;

create user 'syj_test'@'%' identified withmysql_native_password by 'syj_test';

grant all privileges on syj_test.* to'syj_test'@'%' with grant option;

flush privileges;

4.4 半同步复制

1)半同步复制配置参数说明

主库半同步复制可配置的参数较少,可通过“show global variables like '%semi%';”查看

注意MySQL5.7的增强半同步较MySQL5.6多了如下两参数:

rpl_semi_sync_master_wait_for_slave_count: 至少有N个slave接收到日志,Default 1.

rpl_semi_sync_master_wait_point: AFTER_SYNC(5.7的默认值,写入relaylog后,master commit), AFTER_COMMIT 等同于5.6的半同步。

2)主库半同步复制状态说明

主库半同步复制状态的参数较多,可通过“show global status like '%semi%';”查看。

3)主库半同步复制状态说明

登录MySQL主库,安装半同步插件。

[if !supportLists]1.     [endif]链接Mysql数据库,安装插件rpl_remi_sync_master install plugin rpl_semi_sync_master soname'semisynv_mster.so';

[if !supportLists]2.     [endif]查看插件是否安装show plugins;

[if !supportLists]3.     [endif]启用插件 set global rpl_semi_sync_master_enabled = ON; # 注意= 与字符和数字之间有空格,否则会报

[if !supportLists]4.     [endif]安装完成后,查看插件的状态

半同步配置文件

#master

#my.cnf

[mysqld]

rpl_semi_sync_master_enabled = ON

rpl_semi_sync_master_timeout = 1000

安装半同步插件

#master

install plugin rpl_semi_sync_master soname'semisync_master.so';

set global rpl_semi_sync_master_enabled =ON;

检查是否生效:

select * from mysql.plugin;

show global status like '%semi%';    ---查看主库半同步复制的状态参数

show global variables like '%semi%';   ---查看主库半同步复制的相关参数设置

配置从库

进入数据库,安装并启用插件rpl_semi_sync_slave,相关的操作可以参考配置主服务器的1&2

mysql> install pluginrpl_semi_sync_slave soname 'semisync_slave.so';

mysql> SET GLOBALrpl_semi_sync_slave_enabled = ON;

需要注意,在Master中使用的是master 模块,在从服务器中使用的是slave模块.

查看semi插件的状态

show global status like '%semi%';  

半同步配置文件:

#my.cnf

[mysqld]

rpl_semi_sync_slave_enabled = ON


如果在一个正在运行的Slave上开启半同步复制的功能,那么在配置半同步以后,需要重启停止Slave的I/O线程:

从库上执行:

#从库上执行

mysql> stop slave io_thread;   ---停止IO线程

mysql> start slave io_thread;   ---启动IO线程

mysql> show slave status\G;


主库上查看半同步状态

查看主库上面的半同步插件是否开启,输出如下,注意第一个参数clients的值变为1了(之前是0),表示主从半同步复制连接成功。

show global status like '%Rpl_semi_sync_master_clients%';

半同步测试

写入数据之后在查看

#主库

show global status like '%semi%';


测试半同步复制超时

stop slave io_thread;

#半同步失败退化了异步

在主库更新

insert into 表

show global status like '%semi%';

测试可知,从库停止IO线程复制之后,第一次执行insert操作时等待了10秒之后才提交完事务,但是第二次insert的操作就很快了。因为第一次等待从库超时之后,半同步复制状态自动转换为异步了,所以第二次及以后都会很快了。

开启从库的IO线程复制状态

start slave io_thread;

再次查看主库的半同步状态

show global status like '%semi%';

4.5 MHA半同步复制说明

为了尽可能的减少主库硬件损坏宕机造成的数据丢失,因此在配置MHA的同时建议配置成mysql的半同步复制。

注:mysql半同步插件是由google提供,具体位置/usr/local/mysql/lib/plugin下,一个是master用的semisync_master.so,一个是slave用的semisync_slave.so,下面我们就来具体配置一下。如果不清楚Plugin的目录,用如下查找:

mysql>show variables like'%have_dynamic%';

SUSE系统异于常人,根据实际情况来操作

分别在主从节点上安装相关的插件(master,slave1,slave2)在mysql上安装插件需要数据库支持动态载入。检查是否支持,用如下检测:

show variables like '%have_dynamic%';

所有mysql数据库服务器,安装半同步插件(semisync_master.so,semisync_slave.so):

mysql> install plugin rpl_semi_sync_master soname 'semisync_master.so';

Query OK, 0 rows affected (0.30 sec)

mysql> install plugin rpl_semi_sync_slave soname 'semisync_slave.so';

Query OK, 0 rows affected (0.00 sec)

其他mysql主机采用同样的方法安装。

#确保每台mysql主机都正确安装plugin:

mysql> show plugins;

#查看半同步相关信息:

show variables like '%rpl_semi_sync%';

注:若主mysql服务器已经存在,只是后期才搭建从mysql服务器,在配置数据同步前应先将主mysql服务器的要同步的数据库拷贝到从mysql服务器上(如先在主mysql上备份数据库,再用备份在从mysql服务器上恢复)

这里配置可根据实际情况进行删减

master mysql主机:

[root@master ~]# vim /etc/my.cnf

添加内容如下:

server-id=130

log-bin=mysql-bin

binlog_format=row

log-bin-index=mysql-bin.index

rpl_semi_sync_master_enabled=1

rpl_semi_sync_master_timeout=10000

rpl_semi_sync_slave_enabled=1

relay_log_purge=0

relay-log=relay-bin

relay-log-index=slave-relay-bin.index

注: rpl_semi_sync_master_enabled=1 1表是启用,0表示关闭 ,

rpl_semi_sync_master_timeout=10000

:毫秒单位 ,该参数主服务器等待确认消息10秒后,不再等待,变为异步方式。

注:relay_log_purge=0,禁止sql线程在执行完一个relay log后自动将其删除,对于MHA场景下,对于某些滞后从库的恢复依赖于其他从库的relay log,因此采取禁用自动删除功能。

systemctl restart mysql

Slave1主机:

server-id=135

log-bin=mysql-bin

binlog_format=row

log-bin-index=mysql-bin.index

relay_log_purge=0

relay-log=relay-bin

relay-log-index=slave-relay-bin.index

rpl_semi_sync_master_enabled=1

rpl_semi_sync_master_timeout=10000

rpl_semi_sync_slave_enabled=1

systemctl restart mysql

Slave2主机:

server-id=136

log-bin=mysql-bin

relay-log=relay-bin

relay-log-index=slave-relay-bin.index

read_only = 1

rpl_semi_sync_slave_enabled = 1

systemctl restart mysql

关于半同步参数说明值得关注

Rpl_semi_sync_master_status :显示主服务是异步复制模式还是半同步复制模式

Rpl_semi_sync_master_clients:显示有多少个从服务器配置为半同步复制模式

Rpl_semi_sync_master_yes_tx:显示从服务器确认成功提交的数量

Rpl_semi_sync_master_no_tx:显示从服务器确认不成功提交的数量

Rpl_semi_sync_master_tx_avg_wait_time:事务因开启semi_sync,平均需要额外等待的时间

Rpl_semi_sync_master_net_avg_wait_time:事务进入等待队列后,到网络平均等待时间。

#查看半同步相关信息

mysql> show variables like'%rpl_semi_sync%';

mysql> show status like'%rpl_semi_sync%';

创建主从复制的账号

create user 'canal_repl_user'@'%'identified with mysql_native_password by '123456';

GRANT REPLICATION SLAVE ON *.* TO'canal_repl_user'@'%';

flush privileges;

mysql> show master status;

在两台从机执行以下命令:

change master to master_host='192.168.142.133',master_port=3306,master_user='canal_repl_user',master_password='123456',master_log_file='mysql-bin.000003',master_log_pos=841;

start slave;

查看Candicate

masterslave2两个从服务器的状态

SHOW SLAVE STATUS\G;

说明运行正常

#查看master服务器的半同步状态

show status like '%rpl_semi_sync%';

五、MHA高可用环境部署记录

5.1      机器环境

目前MHA主要支持一主多从的架构,要搭建MHA,要求一个复制集群中必须最少有三台数据库服务器,一主二从,即一台充当master,一台充当备用master,另外一台充当从库,因为至少需要三台服务器。

| 机器名称 | IP | 角色 |

| ---- | ---- | ---- |

| SUSE12-MySQL-Master | 192.168.142.133-Master | 主库,写入,数据节点 |

| SUSE12-MySQL-Slave | 192.168.142.135-Slave |  从库读,数据节点,备选Master(candicate master)|

| SUSE12-MySQL-Slave-Manager | 192.168.142.136-Manager | 从库,管理机读,数据节点,也作为Manager server(即也作为manager节点) |

你可能感兴趣的:(SUSE12 MySQL高可用架构 MHA环境 部署)