mysql5.7主从复制高可用架构---MHA

什么是MHA?

MHA(Master High Availability)是现在解决mysql高可用的一个相对成熟的方案

它是由两部分组成,管理端(master manager)和节点端(node manager),管理端可以单独布置在一台机器上,整个mysql主从集群就是它的各个节点,

管理端对所有节点进行监控,当master宕机之后,管理端会根据自己配置文件里的设定,将某一个从节点升为主节点,(如果没有设置,它会自己比 对,将最新数据的节点升为主节点),然后将其他节点自动指向提升上来的新的主节点,在提升的过程中,所有结点之间必须可以无密码ssh连接,管理端可以对 所有的节点ssh无密码连接.

在MHA自动故障切换的过程中,如果宕掉的 master 无法ssh连接上,则无法同步最新的二进制日志,也就无法获得最新的数据,造成数据丢失,因此,为了避免这中情况发生,MHA一般配合半同步复制.可以最大程度的保存数据.

为了避免在更换主节点时同步日志出错(pos模式下更换节点,日志同步会出错),我们开启GTID模式

目前MHA支持一主多从,整个MHA架构最少有三个节点,一台master 一台slave做备用master 一台slave只做同步,当然,为了充分利用资源,集群可以做读写分离(master做写操作,slave做读操作)
实验环境:
server1 172.25.88.1 master-manager
Server2 172.25.88.2 master
Server3 172.25.88.3 slave
Server4 172.25.88.4 slave

在server2,3,4上安装mysql5.7,配置半同步复制数据库环境环境,由于slave在master宕机之后也有可能成为master所以,三个节点的所有配置几乎一样,在文件/etc/my.cnf文件中只有server-id不一样,其他配置均相同。

Server1上安装mha4mysql-manager-0.56-0.el6.noarch.rpm。其他节点上安装
mha4mysql-node-0.56-0.el6.noarch.rpm
安装之前先安装依赖性
perl-Config-Tiny-2.12-7.1.el6.noarch.rpm       perl-Parallel-ForkManager-0.7.9-1.el6.noarch.rpm
perl-Email-Date-Format-1.002-5.el6.noarch.rpm
perl-Log-Dispatch-2.27-1.el6.noarch.rpm
perl-Mail-Sender-0.8.16-3.el6.noarch.rpm
perl-Mail-Sendmail-0.79-12.el6.noarch.rp
perl-MIME-Lite-3.027-2.el6.noarch.rpm
perl-MIME-Types-1.28-2.el6.noarch.rpm
Mysql配置文件中的参数;
Vim /etc/my.cnf

server-id=1   # 所有的slave节点都有可能在宕机之后成为master,所以除id外均相同。
log-bin=mysql-bin
binlog-do-db=test
binlog-ignore-db=mysql

gtid-mode=ON
enforce-gtid-consistency=true

rpl_semi_sync_master_enabled=ON
rpl_semi_sync_slave_enabled=ON

slave-parallel-type=LOGICAL_CLOCK
slave-parallel-workers=16
master-info_repository=TABLE
relay_log_info_repository=TABLE
relay_log_recovery=ON

设置主从复制模式

在每个节点上设置监控用户(这里我们在master设置,其他节点利用主从复制)
server2上进行用户授权

mysql> grant replication slave on *.* to mha@'172.25.88.%' identified by 'WN123*westos';
mysql> grant all on *.* to mha@'172.25.88.%' identified by 'WN123*westos.';

在其他节点也分别当一个节点为master,其他两个节点为slave

Server3,4查看slave状态,
change master to master_host='172.25.75.2',master_user='mha',master_password='WN123*westos.',MASTER_AUTO_POSITION = 1;
start slave
show slave status\G;


Slave_IO_Running: Yes
Slave_SQL_Running: Yes两个线程均正常开启。
**开启master节点123都做**
 mysql> INSTALL PLUGIN rpl_semi_sync_master SONAME 'semisync_master.so';
 mysql> SET GLOBAL rpl_semi_sync_master_enabled = 1;
 mysql> show status like 'Rpl_semi_sync_master_status';                     ###查询主是否开启成功
 +-----------------------------+-------+
 | Variable_name
 | Value |
 +-----------------------------+-------+
 | Rpl_semi_sync_master_status | ON
 |
 +-----------------------------+-------+
 开启slave,三个节点都做
 mysql> INSTALL PLUGIN rpl_semi_sync_slave SONAME 'semisync_slave.so';
 mysql> SET GLOBAL rpl_semi_sync_slave_enabled = 1;
 mysql> STOP SLAVE IO_THREAD;
 mysql> START SLAVE IO_THREAD;
 mysql> show status like 'Rpl_semi_sync_slave_status';                    ###查询从是否开启成功
 +----------------------------+-------+
 | Variable_name
 | Value |
 +----------------------------+-------+
 | Rpl_semi_sync_slave_status | ON
 |
 +----------------------------+-------+

这里写图片描述
这里写图片描述

配置MHA管理

第一步:配置MHA启动的配置文件

配置启动文件
Vim /etc/mha.conf
[server default]
manager_log=/usr/local/mha/mha.log
manager_workdir=/usr/local/mha
master_binlog_dir=/var/lib/mysql
password=WN123*westos
ping_interval=1
remote_workdir=/tmp
repl_password=WN123*westos
repl_user=lily
ssh_user=root
user=root

[server2]
hostname=172.25.88.2
port=3306

[server3]
candidate_master=1
check_repl_delay=0
hostname=172.25.88.3
port=3306

[server4]
candidate_master=1
check_repl_delay=0
hostname=172.25.88.4
port=3306

masterha_check_mha –conf=/etc/mha/mha.conf 检测配置

第二步:配置ssh:

MHA manager 通过 SSH 访问所有的 node 节点,各个 node 节点也同样需要通过 SSH 来相互发送不同的 relay log文件,所以有必要在每一个node和manager上配置SSH无密码登陆。MHAmanager可通过 masterha_check_ssh 脚本检测 SSH 连接是否配置正常。
管理server1上做

ssh-keygen
将manager的公钥和私钥发送给从节点
ssh-copy-id -i /root/.ssh/id_rsa.pub root@172.25.88.1/2/3/4:/root/.ssh
保证每两个之间都可以进行无密连接。
masterha_check_ssh --conf=/etc/mha/mha.conf 检测ssh状态
masterha_check_mha --conf=/etc/mha/mha.conf 检测mysal状

第三步:测试

开启监控:
 [root@server1 server4]# nohup masterha_manager --conf=/etc/mha/mha.conf --remove_dead_master_conf --ignore_last_failover < /dev/null > /use/local/mha/mha.log 2>&1 &
 [1] 1628
 [root@server1 server4]# masterha_check_status --conf=/etc/mha/mha.conf
 server4 (pid:1628)  isrunning(0:PING_OK), master:server1

高可用检测,当宕掉server2时,server3,由原来的slave转为master,接替server2.
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值