Mysql主从模式以及MHA高可用架构搭建

  • 一、环境软件版本
  • 二、环境架构介绍
  • 三、MySQL安装(一主两从)
  • 1. 下载mysql5.7.78
  • 2. 移除linux自带的mariadb,避免安装时会产生冲突
  • 3. 安装mysql
  • 4. 初始化用户并查看密码
  • 5. 启动mysql并设置开机启动
  • 6. 登录mysql并修改密码
  • 7.登录Mysql,授权其他机器访问
  • 四、主从同步配置
  • 1.主库配置
  • 2.从库配置
  • 3.主从同步优化:半同步复制配置
  • 3.1 主库配置
  • 3.2 从库配置
  • 3.3 查看主库日志验证
  • 五、MHA搭建高可用
  • 1. 实现ssh免密互通
  • 2. MHA node安装
  • 3. MHA manager安装
  • 4. MHA 配置文件
  • 4.1 初始化配置目录
  • 4.2 配置监控全局配置文件
  • 4.3 配置监控实例配置文件
  • 4.4 MHA 配置检测
  • 4.5 MHA Manager启动
  • 4.6 查看监控日志命令


一、环境软件版本

环境&软件

版本

虚拟机&VMware Fusion

12.1

服务器&CentOS

7.8

数据库&Mysql

5.7.28

远程连接&SSH Shell

16.03

二、环境架构介绍

机器名称

IP

角色

Mysql_Master

192.168.91.134

可读写、主库

Mysql_Slave1

192.168.91.135

只读、从库

Mysql_Slave2

192.168.91.136

只读、从库

Mysql_MHA

192.168.91.133

高可用监控

三、MySQL安装(一主两从)

1. 下载mysql5.7.78

可以通过wget下载:
wget https://cdn.mysql.com/archives/mysql-5.7/mysql-5.7.28-1.el7.x86_64.rpm-bundle.tar
已下载可通过scp传输:
scp -r mysql-5.7.28-1.el7.x86_64.rpm-bundle.tar root@192.168.91.135:/usr/local/software

2. 移除linux自带的mariadb,避免安装时会产生冲突

rpm -qa|grep mariadb
rpm -e mariadb-libs-5.5.68-1.el7.x86_64 --nodeps

3. 安装mysql

tar xvf mysql-5.7.28-1.el7.x86_64.rpm-bundle.tar 
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 --nodeps 
rpm -ivh mysql-community-devel-5.7.28-1.el7.x86_64.rpm

4. 初始化用户并查看密码

mysqld --initialize --user=mysql
cat /var/log/mysqld.log | grep password

5. 启动mysql并设置开机启动

systemctl start mysqld
systemctl enable mysqld

6. 登录mysql并修改密码

mysql -uroot -p{cat查看的初始密码}
set password for root@localhost = password('123456');

7.登录Mysql,授权其他机器访问

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

四、主从同步配置

1.主库配置

1. 修改配置文件
vim /etc/my.cnf

-----------------------------------追加配置内容:
#bin_log配置
log_bin=mysql-bin
server-id=1
sync-binlog=1
# 忽略database库设置
binlog-ignore-db=information_schema
binlog-ignore-db=mysql
binlog-ignore-db=performance_schema
binlog-ignore-db=sys
#relay_log配置
relay_log=mysql-relay-bin
log_slave_updates=1
relay_log_purge=0
#gtid配置
#开启gtid
#gtid_mode=on
#enforce_gtid_consistency=1
-----------------------------------配置文件完成

2. 重启mysql
systemctl restart mysqld 

3. 授权同步
grant replication slave on *.* to 'root'@'%' identified by 'root';
flush privileges;

4. 查看主库状态
show master status;
+------------------+----------+--------------+-------------------------------------------------+-------------------+
| File             | Position | Binlog_Do_DB | Binlog_Ignore_DB                                | Executed_Gtid_Set |
+------------------+----------+--------------+-------------------------------------------------+-------------------+
| mysql-bin.000001 |     1398 |              | information_schema,mysql,performance_schema,sys |                   |
+------------------+----------+--------------+-------------------------------------------------+-------------------+

2.从库配置

1. 修改配置文件:
vim /etc/my.cnf

-----------------------------------追加配置内容:
#bin_log配置
log_bin=mysql-bin
#服务器ID,从库1是2,从库2是3server-id=2
server-id=2

sync-binlog=1
# 忽略database库设置
binlog-ignore-db=information_schema
binlog-ignore-db=mysql
binlog-ignore-db=performance_schema
binlog-ignore-db=sys

#relay_log配置
relay_log=mysql-relay-bin
log_slave_updates=1
relay_log_purge=0
read_only=1

#gtid配置
#开启gtid
#gtid_mode=on
#enforce_gtid_consistency=1
-----------------------------------配置文件完成

2. 重启mysql:systemctl restart mysqld 

3. 设置连接的主库信息并开启slave

change master to master_host='192.168.91.134',master_port=3306,master_user='root',master_password='123456'
,master_log_file='mysql-bin.000001',master_log_pos=1398;

start slave;

此时主从复制已完成,主库的增删改可以同步到从库

3.主从同步优化:半同步复制配置

3.1 主库配置

// 是否有动态加载 yes可以动态安装插件
select @@have_dynamic_loading ;
//查看插件
show plugins;
// 安装半同步插件并起别名为semisync_master.so
install plugin rpl_semi_sync_master soname 'semisync_master.so';
// 查看半同步参数
show variables like'%semi%';

| 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    |

// 设置开启以及超时时间为1s
set global rpl_semi_sync_master_enabled=1;
set global rpl_semi_sync_master_timeout=1000;

3.2 从库配置

install plugin rpl_semi_sync_slave soname 'semisync_slave.so';
show variables like'%semi%';
+---------------------------------+-------+
| Variable_name                   | Value |
+---------------------------------+-------+
| rpl_semi_sync_slave_enabled     | OFF   |
| rpl_semi_sync_slave_trace_level | 32    |
+---------------------------------+-------+

set global rpl_semi_sync_slave_enabled=1;

// 设置完后重启
stop slave;
start slave;

3.3 查看主库日志验证

cat /var/log/mysqld.log 

可以看到日志打印:
Start semi-sync binlog_dump to slave (server_id: 2), pos(mysql-bin.000001, 1398)

五、MHA搭建高可用

1. 实现ssh免密互通

1. 每台生成公钥和私钥,换行回车采用默认值
ssh-keygen -t rsa
2. Mysql服务器将公钥拷到MHA Manager服务器上
ssh-copy-id 192.168.91.133
3. 在MHAManager服务器向其他服务器分发公钥信息
scp /root/.ssh/authorized_keys 192.168.91.134:$PWD
scp /root/.ssh/authorized_keys 192.168.91.135:$PWD
scp /root/.ssh/authorized_keys 192.168.91.136:$PWD
4. 验证服务器之间是否实现了免密登录,在MHAManager服务器运行
ssh 192.168.91.134

2. MHA node安装

// 在四台服务器上安装mha4mysql-node。
// MHA的Node依赖于perl-DBD-MySQL,所以要先安装perl-DBD-MySQL。 
yum install perl-DBD-MySQL -y
// 下载node
wget https://github.com/yoshinorim/mha4mysql-node/releases/download/v0.58/mha4mysql-node-0.58-0.el7.centos.noarch.rpm
// 安装
rpm -ivh mha4mysql-node-0.58-0.el7.centos.noarch.rpm

3. MHA manager安装

// MHA的manager又依赖了perl-Config-Tiny、perl-Log-Dispatch、perl-Parallel-ForkManager,也分别进行安装。
wget http://dl.fedoraproject.org/pub/epel/epel-release-latest-7.noarch.rpm
rpm -ivh epel-release-latest-7.noarch.rpm
yum install perl-DBD-MySQL perl-Config-Tiny perl-Log-Dispatch perl-Parallel-ForkManager -y

// 安装MHA-manager
wget https://github.com/yoshinorim/mha4mysql-manager/releases/download/v0.58/mha4mysql-manager-0.58-0.el7.centos.noarch.rpm
rpm -ivh mha4mysql-manager-0.58-0.el7.centos.noarch.rpm

4. MHA 配置文件

MHA Manager服务器需要为每个监控的 Master/Slave 集群提供一个专用的配置文件,而所有的Master/Slave 集群也可共享全局配置。

4.1 初始化配置目录

#目录说明 
#/var/log (CentOS目录) 
# 		/mha (MHA监控根目录) 
# 			/app1 (MHA监控实例根目录) 
# 				/manager.log (MHA监控实例日志文件) 
mkdir -p /var/log/mha/app1 
touch /var/log/mha/app1/manager.log

4.2 配置监控全局配置文件

vim /etc/masterha_default.cnf

[server default]
#用户名
user=root
#密码
password=123456
#ssh登录账号
ssh_user=root
#主从复制账号
repl_user=root
#主从复制密码
repl_password=123456
#ping次数
ping_interval=1
#二次检查的主机
secondary_check_script=masterha_secondary_check -s 192.168.91.134 -s 192.168.91.135 -s 192.168.91.136

4.3 配置监控实例配置文件

vim /etc/mha/app1.cnf

[server default]
#MHA监控实例根目录
manager_workdir=/var/log/mha/app1
#MHA监控实例日志文件
manager_log=/var/log/mha/app1/manager.log
#[serverx] 服务器编号
#hostname 主机名
#candidate_master 可以做主库
#master_binlog_dir binlog日志文件目录
[server1]
hostname=192.168.91.129
candidate_master=1
master_binlog_dir="/var/lib/mysql"
[server2]
hostname=192.168.91.131
candidate_master=1
master_binlog_dir="/var/lib/mysql"
[server3]
hostname=192.168.91.132
candidate_master=1
master_binlog_dir="/var/lib/mysql"

4.4 MHA 配置检测

// 执行ssh通信检测
masterha_check_ssh --conf=/etc/mha/app1.cnf
// 检测MySQL主从复制
masterha_check_repl --conf=/etc/mha/app1.cnf

检查完毕出现“MySQL Replication Health is OK.”证明MySQL复制集群没有问题。

4.5 MHA Manager启动

nohup masterha_manager --conf=/etc/mha/app1.cnf --remove_dead_master_conf --ignore_last_failover < /dev/null > /var/log/mha/app1/manager.log 2>&1 &

4.6 查看监控日志命令

此时Mysql主从模式以及MHA高可用架构搭建已完成,可以验证部署效果,模拟主库宕机并查看MHA监控日志。

tail -f /var/log/mha/app1/manager.log