MHA架构搭建方案

软件环境

软件 版本
centos 7
mysql 5.7
mha4mysql-node-0.58-0.el7.centos.noarch.rpm 0.58-0.el7
mha4mysql-manager-0.58-0.el7.centos.noarch.rpm 0.58-0.el7

搭建MHA之前的一些说明:

1.搭建请尽量参考githug上的文档:https://github.com/yoshinorim/mha4mysql-manager/wiki
2.mha4mysql-node和mha4mysql-manager尽量在githug上下载,因为这两个软件的安装,和操作系统的版本得对应,否则将会出现各种各样奇怪的问题。下载地址:https://code.google.com/archive/p/mysql-master-ha/downloads
3.目前mha4mysql-node和mha4mysql-manager在2中的下载地址中,是不支持centos7的,最高支持centos6。而0.58-0.el7版本是支持centos7的,无法获取0.58-0.el7版本的软件,建议降低centos版本到6或以下进行搭建。
4.MHA架构,mysql集群中,至少存在1主两从,即至少需要台mysql,其中一台为master,另外两台为slave。
5.集群中各机器要能够互信。

搭建的主要步骤:

1.搭建一主两从的mysql集群
2.进行互信的设置
3.进行mha4mysql-node和mha4mysql-manager的安装
4.在安装了mha4mysql-manager的机器验证环境是否配置正确,并启动manage
5.执行故障转移验证

准备四台机器:

名称 IP 用途
master 192.168.93.138 安装mysql,并设置为主库;还需要安装 mha4mysql-node
mha 192.168.93.139 安装mha4mysql-manager;还需要安装 mha4mysql-node
slave1 192.168.93.140 安装mysql,并设置为从库;还需要安装 mha4mysql-node
slave2 192.168.93.141 安装mysql,并设置为从库;还需要安装 mha4mysql-node

步骤一:搭建mysql一主两从集群

主库的搭建

首先在192.168.93.138的机器上安装mysql
1.下载mysql安装包:mysql-5.7.28-1.el7.x86_64.rpm-bundle.tar
2.解压:tar -xvf mysql-5.7.28-1.el7.x86_64.rpm-bundle.tar
3.解压后将显示众多rpm包,如下:
mysql-community-embedded-5.7.28-1.el7.x86_64.rpm
mysql-community-libs-compat-5.7.28-1.el7.x86_64.rpm
mysql-community-devel-5.7.28-1.el7.x86_64.rpm
mysql-community-embedded-compat-5.7.28-1.el7.x86_64.rpm
mysql-community-libs-5.7.28-1.el7.x86_64.rpm
mysql-community-test-5.7.28-1.el7.x86_64.rpm
mysql-community-common-5.7.28-1.el7.x86_64.rpm
mysql-community-embedded-devel-5.7.28-1.el7.x86_64.rpm
mysql-community-client-5.7.28-1.el7.x86_64.rpm
mysql-community-server-5.7.28-1.el7.x86_64.rpm
4.centos默认会安装mariadb,为了不造成冲突,先检查是的有安装,并删除
rpm -qa|grep mariadb
mariadb-libs-5.5.56-2.el7.x86_64
发现存在mariadb-libs-5.5.56-2.el7.x86_64
执行删除:rpm -e mariadb-libs-5.5.56-2.el7.x86_64 --nodeps
5.解压的mysql rpm包存在依赖关系,按照以下安装顺序执行即可:
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-libs-compat-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

6.安装完毕,初始化mysql:
mysqld --initialize --user=mysql

7.查看日志,获取初始化后的密码:
cat /var/log/mysqld.log
记录密码:ONwg._uVm9Yi
8.设置mysql开机自启动:
systemctl start mysqld.service
9.登录mysql,并设置自己的密码:
mysql -uroot -p
然后输入ONwg._uVm9Yi
10.设置自己的密码:
mysql>set password=password('admin');

11.关闭防火墙:
systemctl stop iptables
systemctl stop firewalld
systemctl status iptables
systemctl disable firewalld.service

12.将当前mysql设置为master主库
修改/etc/my.cnf
vi /etc/my.cnf
在[mysqld]下添加如下配置:
log_bin=mysql-bin #开启binlog
server-id=1 #保持唯一不冲突即可
sync-binlog=1 #bin-log刷盘配置。设置为1,表示每执行一次,就刷盘一次,安全性高,但是性能稍差

重启mysql
systemctl restart mysqld

授权:

grant replication slave on . to 'root'@'%' identified by 'admin';

grant all privileges on . to 'root'@'%' identified by 'admin';

flush privileges;

查看当前主库的状态:
show master status;

+------------------+----------+--------------+------------------+-------------------+
| File | Position | Binlog_Do_DB | Binlog_Ignore_DB | Executed_Gtid_Set |
+------------------+----------+--------------+------------------+-------------------+
| mysql-bin.000001 | 869 | | | |
+------------------+----------+--------------+------------------+-------------------+

记录下bin-log文件名:mysql-bin.000001
记录下当前位置:869
这两个参数,后续从库均要用到

从库slave1的搭建

在192.168.93.140的机器上安装mysql
1.安装步骤和master的安装步骤一致
2.mha搭建,从库的配置请参考:https://github.com/yoshinorim/mha4mysql-manager/wiki/Requirements

3.将当前mysql设置为从库,并且同步master库
修改配置:/etc/my.cnf
[mysqld]
server-id=2 #设置server-id
relay_log=mysql-relay-bin #开启中继日志
read_only=1 #设置为只读,这个必须设置,mha的从库必须为只读
log_bin=mysql-bin #mha中,从库必须开启bin-log,用于slave升级为master时会用到
relay_log_purge=0 #mha中,从库必须关闭
4.重启mysql:
systemctl restart mysqld.service
5.登录mysql,并设置复制master

mysql>show slave status;

mysql>change master to master_host='192.168.93.138' ,master_port=3306,master_user='root',master_password='admin',master_log_file='mysql-bin.000001',master_log_pos=869;

mysql>start slave;

6.至此从库slave1搭建完成;

从库slave2的搭建

在192.168.93.141的机器上安装mysql
1.slave2的搭建和slave1一样,不同的是my.cnf配置中server-id需要设置为3,必须保持所有mysql的server-id的唯一性。其他的配置和slave1保持一致。
2.slave2开启复制master
和slave1的开启一致,不再详细说。

步骤二:各机器进行互信设置

1.设置192.168.93.138(master)和其他三台机器互信(即192.168.93.139,192.168.93.140和192.168.93.141)
步骤1:修改192.168.93.138的sshd配置:
vi /etc/ssh/sshd_config
添加以下三项配置:
PubkeyAuthentication yes
RSAAuthentication yes
AuthorizedKeysFile .ssh/authorized_keys
步骤二:重启sshd:
systemctl restart sshd
步骤三:生成公钥:
ssh-keygen -t rsa
步骤四:执行:
ssh-copy-id -i /root/.ssh/id_rsa.pub 192.168.93.139
ssh-copy-id -i /root/.ssh/id_rsa.pub 192.168.93.140
ssh-copy-id -i /root/.ssh/id_rsa.pub 192.168.93.141
步骤五:验证无需需要密码即可登录进192.168.93.139
ssh 192.168.93.139
步骤五:互信设置结束。

2.设置192.168.93.139和其他三台机器互信(即192.168.93.138,192.168.93.140和192.168.93.141)
步骤1:修改192.168.93.139的sshd配置:
vi /etc/ssh/sshd_config
添加以下三项配置:
PubkeyAuthentication yes
RSAAuthentication yes
AuthorizedKeysFile .ssh/authorized_keys
步骤二:重启sshd:
systemctl restart sshd
步骤三:生成公钥:
ssh-keygen -t rsa
步骤四:执行:
ssh-copy-id -i /root/.ssh/id_rsa.pub 192.168.93.138
ssh-copy-id -i /root/.ssh/id_rsa.pub 192.168.93.140
ssh-copy-id -i /root/.ssh/id_rsa.pub 192.168.93.141
步骤五:验证无需需要密码即可登录进192.168.93.140
ssh 192.168.93.140
步骤五:互信设置结束。

3.设置192.168.93.140和其他三台机器互信(即192.168.93.138,192.168.93.139和192.168.93.141),互信步骤和以上类似,请参考以上两个例子。

4.设置192.168.93.141和其他三台机器互信(即192.168.93.138,192.168.93.140和192.168.93.139),互信步骤和以上类似,请参考以上两个例子。

步骤三:安装mha4mysql-node和mha4mysql-manager

安装的步骤请参考:https://github.com/yoshinorim/mha4mysql-manager/wiki/Installation

1.在192.168.93.139的机器安装mha4mysql-node和mha4mysql-manager
步骤一:安装mha4mysql-node

   yum install perl-DBD-MySQL

   rpm -ivh mha4mysql-node-0.58-0.el7.centos.noarch.rpm

步骤二:安装mha4mysql-manager

   yum install perl-DBD-MySQL
   yum install perl-Config-Tiny
   yum install perl-Log-Dispatch
   yum install perl-Parallel-ForkManager

   rpm -ivh mha4mysql-manager-0.58-0.el7.centos.noarch.rpm

如果出现以下错误:Requires: perl(:MODULE_COMPAT_5.10.1)
那是因为epel7软件库不是最新的,执行以下操作即可:
yum install epel-release -y
yum clean all
yum makecache //这步更新缓存很重要

步骤三:至此在192.168.93.139的机器安装mha4mysql-manage结束,manage依赖于mha4mysql-node,所以必须先安装mha4mysql-node。

步骤四:配置manage
新建文件:vi /etc/mha/app1.cnf
添加一下内容:
user=root
password=admin
manager_log=/var/log/mha/app1/mha.log
manager_workdir=/var/log/mha/app1
master_binlog_dir=/var/lib/mysql
[server1]
hostname=192.168.93.138
port=3306
[server2]
hostname=192.168.93.140
port=3306
[server3]
hostname=192.168.93.141
port=3306

步骤四:结束

2.在192.168.93.138的机器安装mha4mysql-node
步骤一:安装mha4mysql-node
yum install perl-DBD-MySQL
rpm -ivh mha4mysql-node-0.58-0.el7.centos.noarch.rpm
步骤二:安装mha4mysql-node结束

3.在192.168.93.140的机器安装mha4mysql-node
步骤一:安装mha4mysql-node
yum install perl-DBD-MySQL
rpm -ivh mha4mysql-node-0.58-0.el7.centos.noarch.rpm
步骤二:安装mha4mysql-node结束

4.在192.168.93.141的机器安装mha4mysql-node
步骤一:安装mha4mysql-node
yum install perl-DBD-MySQL
rpm -ivh mha4mysql-node-0.58-0.el7.centos.noarch.rpm
步骤二:安装mha4mysql-node结束

步骤四:在安装了mha4mysql-manager的机器验证环境是否配置正确,并启动manage

1.进行192.169.93.139
2.执行互信验证:
masterha_check_ssh --conf=/etc/mha/app1.cnf
3.检查mysql集群主从复制是否正常:
masterha_check_repl --conf=/etc/mha/app1.cnf
4.启动manager
masterha_manager --conf=/etc/mha/app1.cnf

步骤五:执行故障转移验证

1.关闭master(192.168.93.138)
systemctl stop mysqld
2.查看manage(192.168.93.139)的日志
tail /var/log/mha/app1/mha.log
该日志会告知,master库宕机了,重新选举了哪台从库升级为主库
本次实验,选择了slave1,升级为主库了
3.验证slave1是否已经升级为主库
1.登录slave1的mysql
2.执行:show slave status;
Empty set (0.00 sec)
显示slave1已经关闭了slave功能
3.show master status;
+------------------+----------+--------------+------------------+-------------------+
| File | Position | Binlog_Do_DB | Binlog_Ignore_DB | Executed_Gtid_Set |
+------------------+----------+--------------+------------------+-------------------+
| mysql-bin.000002 | 154 | | | |
+------------------+----------+--------------+------------------+-------------------+
1 row in set (0.00 sec)
显示该库已经升级为主库了

4.验证成功!

©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。