MHA +MYSQL 高可用主从搭建方案
一、环境及软件版本
-
服务器:centos 7 4台
-
mysql 版本: mysql-5.7.29
-
MHA-manager: mha4mysql-manager-0.58-0.el7
-
MHA-node: mha4mysql-node-0.58-0.el7
二、部署架构图

三、环境搭建
mysql主从架构搭建
1、 mysql 安装步骤
1) 下载mysql tar 包
wget https://cdn.mysql.com/archives/mysql-5.7/mysql-5.7.29-el7-x86_64.tar.gz
tar -zxvf mysql-5.7.29-el7-x86_64.tar.gz
2) 编辑 /etc/profile 配置mysql 环境
#MYSQL CONFIGURATION
MYSQL_HOME=/usr/local/mysql5.7.29
PATH=$PATH:$MYSQL_HOME/bin:$MYSQL_HOME/sbin
export HADOOP_HOME PATH
3) 实例化 mysql db
cd /usr/local/mysql5.7.29/bin/
./mysqld --initialize --user=mysql --datadir=/usr/local/mysql5.7.29/data --basedir=/usr/local/mysql5.7.29
4) 编辑/etc/my.cnf 文件
======================== 主 - master 配置 start =======================
[mysqld]
lower_case_table_names=1
#binlog enable
log_bin=mybinlog
sync-binlog=1
#config ignore binlog record db
binlog-ignore-db=information_schema
binlog-ignore-db=performance_schema
binlog-ignore-db=sys
binlog_format = ROW
log-error=/var/log/mysqld.log
pid-file=/usr/local/mysql5.7.29/data/mysqld.pid
#These are commonly set, remove the # and set as required.
basedir = /usr/local/mysql5.7.29
datadir = /usr/local/mysql5.7.29/data
user=mysql
#port = .....
server_id = 100000
#socket = .....
#Semi-synchronous replication
rpl_semi_sync_master_enabled=1
rpl_semi_sync_master_timeout=1000`
======================== 主 - master 配置 ending =======================
从 - slave 配置
======================== 从 - slave配置 start=======================
[mysqld]
lower_case_table_names=1
#enable binlog
log_bin=mybinlog
sync-binlog=1
#binlog record ignore datasources config
binlog-ignore-db=information_schema
binlog-ignore-db=performance_schema
binlog-ignore-db=sys
binlog_format = ROW
log-error=/var/log/mysqld.log
pid-file=/usr/local/mysql5.7.29/data/mysqld.pid
#These are commonly set, remove the # and set as required.
basedir = /usr/local/mysql5.7.29
datadir = /usr/local/mysql5.7.29/data
user=mysql
#port = .....
server_id = 200001
relay_log=myrelaylog
read_only=1
relay_log_recovery=1
#Semi-synchronous replication enable
rpl_semi_sync_slave_enabled=1
relay_log_purge=0
======================== 从 - slave配置 ending=======================
<u>注意: server_id 不可重复</u>
5、启动mysql 服务
`1)创建软连接`
ln -s /usr/local/mysql5.7.29/support-files/mysql.server /etc/init.d/mysql
`2) 启动服务`
service mysql start
2 、主从mysql服务搭建
1、 master 设置
#授予slave 权限
GRANT ALL ON *.* TO 'root'@'%' IDENTIFIED BY 'admin';
grant REPLICATION CLIENT,REPLICATION SLAVE on *.* to root@'slave01' identified by 'admin';
grant REPLICATION CLIENT,REPLICATION SLAVE on *.* to root@'slave02' identified by 'admin';
flush privileges;
2、 slave 配置部分
GRANT ALL ON *.* TO 'root'@'%' IDENTIFIED BY 'admin';
flush privileges;
#设置要同步的master 信息
change master to master_host='192.168.1.106', MASTER_PORT=3306 ,master_user='root',master_password='admin', master_log_file='mybinlog.000012',master_log_pos=154;
#启动slave
start slave;
半同步复制机制配置
1、 主库设置部分
是否支持插件动态安装
select @@have_dynamic_loading;
显示已经安装的插件
show plugins;
安装rpl_semi_sync_master 插件
install plugin rpl_semi_sync_master soname 'semisync_master.so';
查看半同步相关参数
show variables like '%semi%';
设置相关参数 启用和超时时间设置
set global rpl_semi_sync_master_enabled=1;
set global rpl_semi_sync_master_timeout=1000;
2、从库设置部分
安装插件
install plugin rpl_semi_sync_slave soname 'semisync_slave.so';
查看变量并修改
show variables like '%semi%'
set global rpl_semi_sync_slave_enabled=1;
重启slave
stop slave;
start slave;
MHA manager 和 node 服务搭建
1、mha manager 节点安装配置细节
1) 下载最新的epel 源
wget http://download-ib01.fedoraproject.org/pub/epel/7/x86_64/Packages/e/epel-release-7-12.noarch.rpm
rpm -ivh epel-release-7-12.noarch.rpm
2) 下载mha manager 和node 依赖包
wget https://qiniu.wsfnk.com/mha4mysql-manager-0.58-0.el7.centos.noarch.rpm
wget https://qiniu.wsfnk.com/mha4mysql-node-0.58-0.el7.centos.noarch.rpm
3) 安装 node 和 manager, 及相关依赖包
yum install -y perl-DBD-MySQL perl-Config-Tiny perl-Log-Dispatch perl-Parallel-ForkManager
rpm -ivh mha4mysql-node-0.58-0.el7.centos.noarch.rpm
rpm -ivh mha4mysql-manager-0.58-0.el7.centos.noarch.rpm
4) 配置节点ssh 互信
ssh-keygen -t rsa
ssh-copy-id -i ~/.ssh/id_rsa.pub master
ssh-copy-id -i ~/.ssh/id_rsa.pub slave01
ssh-copy-id -i ~/.ssh/id_rsa.pub slave02
5) 创建masterha 目录
mkdir /usr/local/masterha /usr/local/masterha/app1
mkdir /etc/masterha
6) 创建masterha 配置文件 app1.cnf, 路径 /etc/masterha/app1.cnf
[server default]
# mysql 访问用户名密码
user=root
password=admin
# ssh免密钥登录的帐号名
ssh_user=root
# mysql复制帐号 密码
repl_user=root
repl_password=admin
# ping间隔,用来检测master是否正常,默认是3秒,尝试三次没有回应的时候自动进行failover
ping_interval=1
# 数据目录
manager_workdir=/usr/local/masterha/app1
# 日志文件
manager_log=/usr/local/masterha/manager.log
# 另外2台机子在运行时候需要创建的目录,注意ssh-keygen帐号的权限问题
remote_workdir=/usr/local/masterha/app1
# binlog目录,不指定会报错
master_binlog_dir=/usr/local/mysql5.7.29/data
master_ip_failover_script=/usr/local/masterha/scripts/master_ip_failover
master_ip_online_change_script=/usr/local/masterha/scripts/master_ip_online_change
#shutdown_script=/usr/local/masterha/scripts/power_manager 192.168.1.105
[server1]
# master机宕掉后,优先启用这台作为新master
hostname=192.168.1.102
candidate_master=1
# 默认情况下如果一个slave落后master 100M的relay logs的话,MHA将不会选择该slave作为 一个新的master,因为对于这个slave的恢复需要花费很长时间,通过设置check_repl_delay=0,MHA触发切换在选择一个>新的master的时候将会忽略复制延时,这个参数对于设置了candidate_master=1的主机非常有用,因为这个候选主在切换的过程中一定是新的master
check_repl_delay=0
[server2]
hostname=192.168.1.104
candidate_master=1
# 一定不会选这个机器为master,根据情况设置
#no_master=1
# port默认是3306,如果是其他的,需要在这里指定,否则会报错
# port=3306
[server3]
hostname=192.168.1.106
candidate_master=1
7) 检查ssh 通信是否正常
masterha_check_ssh --conf=/etc/masterha/app1.cnf

8) 主从复制健康检查
masterha_check_repl --conf=/etc/masterha/app1.cnf

9 ) 出现的问题
问题1: Can't exec "mysqlbinlog": 没有那个文件或目录 at /usr/share/perl5/vendor_perl/MHA/BinlogManager.pm line 106.
解决: ln -s /usr/local/mysql5.7.29/bin/mysqlbinlog /usr/sbin/
问题2: mysql command failed with rc 127:0!
解决:ln -s /usr/local/mysql5.7.29/bin/mysql /usr/sbin/
2、mha node 节点 (master , slave01 , slave02 都为node 节点) 配置安装细节
1)安装依赖包
yum install perl-DBD-MySQL
2) 安装node
rpm -ivh mha4mysql-node-0.58-0.el7.centos.noarch.rpm
网友评论