使用MHA搭建一个MySQL高可用架构集群环境

2 篇文章 0 订阅
1 篇文章 0 订阅

目录

寄首语

环境准备

1 环境说明

2 软件版本说明

3 集群中各节点的作用

4 安装虚拟机centos7

4.1 新建虚拟机

4.2 安装客户机操作系统

4.3 简易安装信息

4.4  命名虚拟机

4.5  指定磁盘容量

4.6  自定义硬件

4.7 虚拟机安装

5 安装mysql

5.1  上传相关软件至虚拟机

5.2  mysql解压

5.3  卸载mariadb

5.4 安装mysql-common

5.5 安装mysql-libs

5.6 安装mysql-libs-compact

5.7 安装mysql-clients

5.8 安装mysql-server

5.9 安装mysql-devel

5.11 mysql 初始化

5.12 关闭防火墙

5.13  复制虚拟机3份

6 mysql 主机配置

6.1  主机配置

6.2 从库配置

6.3  配置半同步复制

7 安装MHA

7.1 配置免密登录

7.2 安装配置MHA

7.3 为mha授权

7.4 mha配置文件

7.5  验证ssh互通

7.6  检查mysql主从复制

7.7  启动MHA管理程序

8 测试IP漂移

问题汇总

1 虚拟机安装完成后,没有ip

2 tar: Unexpected EOF in archive

3 主从配置失效

4 log event entry exceeded max_allowed_packet

5 yum install perl-Parallel-ForkManager  出现No package perl-Parallel-ForkManager available.

6   MHA  Last failover was done at 2020/08/14 01:14:10. Current time is too early to do failover again


寄首语

在拉勾业务中职位表相当于电商系统的商品表,投递表相当于电商系统的订单表。职位表我们采用垂直拆分方法分为position(职位描述表)和 position_detail(职位详情表),表结构结构如下:

position:id(int)、name(varchar)、salary(varchar)、city(varchar)

position_detail:id(int)、pid(int)、description(text)

  1. 首先实现一主两从的同步复制功能(采用半同步复制机制)

  2. 然后采用MHA实现主机出故障,从库能自动切换功能

  3. MHA高可用搭建后,在主库新建商品表进行效果测试

环境准备

1 环境说明

根据作业要求我们需要4台主机,乞丐版推荐虚拟机,皇帝版推荐云服务器(注意选择同一局域网内的),也可以使用docker快速搭建。本文采用虚拟机安装方式

2 软件版本说明

linux            centos7
mysql            5.7.28
MHA-node         0.58
MHA-manager      0.58

3 集群中各节点的作用

ip                     主机名         作用                    安装软件
192.168.126.128         master2       mysql主                 mysql,mha_node
192.168.126.129         slave1        mysql从                 mysql,mha_node
192.168.126.130         slave2        mysql从                 mysql,mha_node
192.168.126.131         mha           mha manager             mha_manager,mha_node

4 安装虚拟机centos7

4.1 新建虚拟机

文件,选择新建虚拟机,选择典型即可,点击下一步

4.2 安装客户机操作系统

我们选择通过磁盘镜像安装,选择硬盘中的centos镜像。点击下一步

4.3 简易安装信息

此步骤我们需要给我们的虚拟机起名字和输入密码(包括root密码),填写完成点击下一步。

4.4  命名虚拟机

此步骤我们需要给我们的虚拟机命名,和更改虚拟机文件的存放位置,默认位置为C盘,大佬随意,我们更改为G盘

4.5  指定磁盘容量

测试环境,我们选择默认大小20G即可,后期不够可扩容。存储方式也选择默认,将虚拟磁盘拆分成多个文件,点击下一步

4.6  自定义硬件

此步骤用于定义虚拟机的硬件,诸如网卡、声卡、打印机等硬件,我们直接选择默认即可。点击完成

4.7 虚拟机安装

此过程取决于电脑硬件配置,大约20-30分钟;

5 安装mysql

5.1  上传相关软件至虚拟机

此步骤可借助xshell ,来实现,过程略

5.2  mysql解压

tar -vxf mysql-5.7.28-1.el7.x86_64.rpm-bundle.tar

5.3  卸载mariadb

# rpm  查找 mariadb
rpm -qa|grep mariadb
# 卸载maridb
rpm -e mariadb-libs-5.5.41-2.el7_0.x86_64 --nodeps

5.4 安装mysql-common

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

5.5 安装mysql-libs

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

5.6 安装mysql-libs-compact

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

5.7 安装mysql-clients

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

5.8 安装mysql-server

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

5.9 安装mysql-devel

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

5.11 mysql 初始化

生成mysql的临时密码

mysqld --initialize --user=mysql

临时密码可通过下面命令查看

cat /var/log/mysqld.log

启动mysql服务

systemctl start mysqld.service

登录mysql,更改默认密码

set password =password('root')

5.12 关闭防火墙

#关闭防火墙
systemctl stop firewalld
#取消防火墙开机启动
systemctl disable firewalld

5.13  复制虚拟机3份

经过以上操作,虚拟机中mysql 已经安装完成,下面为了避免重复造轮子,我们将虚拟机复制3份。分别为slave1,slave2,mha

各虚拟机ip如下

master2        192.168.133.128
slave1         192.168.133.129
slave2         192.168.133.130
mha            192.168.133.131

确保各主机之间网络互通

6 mysql 主机配置

6.1  主机配置

配置mysql的配置文件my.cnf

vim /etc/my.cnf

#开启binglog
log_bin=log-bin
server-id=1
sync-binlog=1
binlog-ignore-db=performance_schema
binlog-ignore-db=information_schema
binlog-ignore-db=sys

配置完成后,重启mysql服务

systemctl restart mysqld.service

登录mysql ,授予root远程登录的权限

#开启复制功能
grant replication slave on *.* to 'root'@'%' identified by 'root';
#开启远程登录功能
grant all privileges on *.* to 'root'@'%' identified by 'root';

#刷新权限
flush privileges;

6.2 从库配置

配置mysql的配置文件my.cnf

vim /etc/my.cnf


#log-bin
server-id=2
relay_log=mysql_relay-bin
read_only=1

重启mysql服务

systemctl restart mysqld.service

将从库的master地址 指向 master

change master to master_host='192.168.133.128',master_port=3306,master_user='root',master_password='root',master_log_file='log-bin.000001',master_log_pos=869;

6.3  配置半同步复制

半同步复制功能需要动态加载,查看是否支持动态加载插件

select @@have_dynamic_loading;

查看半同步插件是否已安装,

show plugins;

master 端安装rpl_semi_sync_master

install plugin rpl_semi_sync_master soname 'semisync_master.so';

安装完成后,将semi相关的配置放入my.cnf,然后进行重启

vim /etc/my.cnf
#半同步semi配置
rpl_semi_sync_master_timeout=1000
rpl_semi_sync_master_enabled=1

#重启
systemctl restart mysqld.service

master 端安装rpl_semi_sync_slave

install plugin rpl_semi_sync_slave soname 'semisync_slave.so';




vim  /etc/my.cnf
#semi配置
rpl_semi_sync_slave_enabled=1
systemctl restart mysqld.service

7 安装MHA

7.1 配置免密登录

我们首先为4台机器分别设置DNS域名解析

192.168.133.128 master2
192.168.133.129 slave1
192.168.133.130 slave2
192.168.133.130 mha

每台虚拟机上生成ssh公钥秘钥,用于免密登录访问

mha上

#生成秘钥
ssh-keygen -t rsa
#此过程会让输入密码,输入即可
ssh-copy-id 192.168.133.128
ssh-copy-id 192.168.133.129
ssh-copy-id 192.168.133.130

master2上

#生成秘钥
ssh-keygen -t rsa
#此过程会让输入密码,输入即可
ssh-copy-id 192.168.133.129
ssh-copy-id 192.168.133.130
ssh-copy-id 192.168.133.131

slave1上

#生成秘钥
ssh-keygen -t rsa
#此过程会让输入密码,输入即可
ssh-copy-id 192.168.133.128
ssh-copy-id 192.168.133.131
ssh-copy-id 192.168.133.130

slave2上

#生成秘钥
ssh-keygen -t rsa
#此过程会让输入密码,输入即可
ssh-copy-id 192.168.133.128
ssh-copy-id 192.168.133.129
ssh-copy-id 192.168.133.131

7.2 安装配置MHA

集群中各节点mha 安装部署如下

节点名称安装软件
mhamha node,mha manager
master2mha node
slave1mha node
slave2mha node

mha上安装manager和node

安装manager需要使用到perl模块,具体详情可参见github

On RHEL/CentOS distribution, you can install MHA Manager rpm package as below.

## Install dependent Perl modules
# yum install perl-DBD-MySQL
# yum install perl-Config-Tiny
# yum install perl-Log-Dispatch
# yum install perl-Parallel-ForkManager

## Install MHA Node, since MHA Manager uses some modules provided by MHA Node.
# rpm -ivh mha4mysql-node-X.Y-0.noarch.rpm

## Finally you can install MHA Manager
# rpm -ivh mha4mysql-manager-X.Y-0.noarch.rpm

https://github.com/yoshinorim/mha4mysql-manager/wiki/Installation#installing-mha-manager

# 安装node
yum localinstall -y mha4mysql-node-0.58-0.el7.centos.noarch.rpm 
# 安装manager
yum install -y mha4mysql-manager-0.58-0.el7.centos.noarch.rpm

master2 、slave1 和slave2 安装node

# 安装node
yum localinstall -y mha4mysql-node-0.58-0.el7.centos.noarch.rpm 

7.3 为mha授权

在master2、slave1和slave2授权,开启数据的远程访问,为测试方便此处不设任何限制,生产环境应该设置固定ip;

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

7.4 mha配置文件

在mha虚拟机上为mha开辟一个工作目录

mkdir /mha

编辑mha配置文件

vim /etc/masterha_default.cnf
内容如下
[server default] 		

user=root 		

password=root

manager_workdir=/mha 

manager_log=/mha/manager.log 

remote_workdir=/mha	

ssh_user=root 		

repl_user=root			

repl_password=root

ping_interval=1 	

[server1] 	

hostname=192.168.133.128 

ssh_port=22 		

candidate_master=1 

[server2]
hostname=192.168.133.129
ssh_port=22
candidate_master=1
[server3]
hostname=192.168.133.130
ssh_port=22
candidate_master=1

 

 

 

7.5  验证ssh互通

 masterha_check_ssh --conf=/etc/masterha_default.cnf

7.6  检查mysql主从复制

masterha_check_repl -conf=/etc/masterha_default.cnf

7.7  启动MHA管理程序

masterha_manager --conf=/etc/masterha_default.cnf &

8 测试IP漂移

我们将主库master2关闭,查看mha的日志

#将master2上的主库关闭
systemctl stop mysqld.service

#查看mha日志
tail -f /mha.manager.log

ip漂移至129备用主库

查看mha状态已停止

masterha_check_status -conf=/etc/masterha_default.cnf

 

 

问题汇总

1 虚拟机安装完成后,没有ip

解决办法,修改网卡配置,将ONBOOT修改为yes

vim /etc/sysconfig/network-scripts/ifcfg-eno16777736

 

修改改完成后,重启网关

systemctl restart network.service

2 tar: Unexpected EOF in archive

解压失败,将压缩包删除,重新上传解压

3 主从配置失效

The slave I/O thread stops because master and slave have equal MySQL server UUIDs; these UUIDs must be different for replication to work

此问题是由于我的mysql是通过虚拟机复制得到,导致UUID一样,我们将auto.cnf删除,此文件会重新生成。

或者手动将uuid进行更改;

vim /var/lib/mysql/auto.cnf

4 log event entry exceeded max_allowed_packet

当主库运行较长时间,进行过大量DDL操作,从库从二进制较早地址开始复制,超过一个数据包的大小,我们将数据包改大即可。

set @@global.max_allowed_packet=32*1024*1024;


select @@global.max_allowed_packet/1024/1024 MB;

5 yum install perl-Parallel-ForkManager  出现No package perl-Parallel-ForkManager available.

我们通过安装企业版 Linux 附加软件包(EPEL)解决

#centos  7适用
yum install https://dl.fedoraproject.org/pub/epel/epel-release-latest-7.noarch.rpm

https://fedoraproject.org/wiki/EPEL/zh-cn#.E5.A6.82.E4.BD.95.E8.8E.B7.E5.8F.96_EPEL_.E7.9A.84.E8.BD.AF.E4.BB.B6.E5.8C.85.EF.BC.9F

6   MHA  Last failover was done at 2020/08/14 01:14:10. Current time is too early to do failover again

 rm -rf /etc/mha/manager/mha.failover.complete 

7  There are 2 non-slave servers! MHA manages at most one non-slave server. Check configurations

此问题是由主库奔溃后,备用主从库,转正升级为主库,当主库再次启动时,就会造成多主模式,故报错。我们将备用主从库重新指向主库即可。

#取消主库
reset master;
#指向主库
change master to master_host='192.168.126.128',master_port=3306,master_user='root',master_password='root',master_log_file='log-bin.000011',master_log_pos=154;
#开启从库功能
start slave;

 

  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值