主从搭建
需要进行主从搭建,请参考主从搭建
数据备份
- 主库备份
# 数据导出
mysqldump --master-data=2 --single-transaction -R --triggers -A -p > all.sql
# 复制到从库
scp all.sql root@192.168.3.103:/root
- 从库同步
# 数据导入
mysql -p < all.sql
- 主从同步
# 停止
stop slave
# 指定
change
# 开启
start slave;
基本连通
- 秘钥生成
# 生成秘钥,一直enter即可
ssh-keygen -t rsa
- 秘钥透传
# 将密钥传送到目标机器
ssh-copy-id -i ~/.ssh/id_rsa.pub user@IP
当前机器配置以后,就可以免密登录指定机器。
对于
mha
的master
节点,需要能够登录到其他的节点机器,需要全部进行配置。
环境安装
yum
源更换
yum install -y epel-release
顺便注释
/etc/yum.repos.d/epel.repo
下的mirrorlist
或者metalink
,将baseurl
的注释放开。如果不采用
epel
的yum
源,也可以如去http://rpm.pbone.net/慢慢搜索。但是版本兼容问题和依赖引申更多问题,我就是死在这的。
- 资源下载
role | resource |
---|---|
master | https://github.com/yoshinorim/mha4mysql-manager/releases/download/v0.58/mha4mysql-manager-0.58-0.el7.centos.noarch.rpm |
slave | https://github.com/yoshinorim/mha4mysql-node/releases/download/v0.58/mha4mysql-node-0.58-0.el7.centos.noarch.rpm |
- 安装依赖
yum install yum install perl-DBD-MySQL perl-Config-Tiny perl-Log-Dispatch perl-Parallel-ForkManager -y
- 安装管理包
# master
rpm -ivh mha4mysql-manager-0.58-0.el7.centos.noarch.rpm
# slave
rpm -ivh mha4mysql-node-0.58-0.el7.centos.noarch.rpm
- 脚本安装
这里给一个安装脚本,方便快捷
#!/bin/bash
yum install wget -y
wget https://github.com/yoshinorim/mha4mysql-manager/releases/download/v0.58/mha4mysql-manager-0.58-0.el7.centos.noarch.rpm
wget https://github.com/yoshinorim/mha4mysql-node/releases/download/v0.58/mha4mysql-node-0.58-0.el7.centos.noarch.rpm
yum install epel-release -y
sed -i "s/#baseurl=/baseurl=/g" /etc/yum.repos.d/epel.repo
sed -i "s/metalink=/#metalink=/g" /etc/yum.repos.d/epel.repo
yum install yum install perl-DBD-MySQL perl-Config-Tiny perl-Log-Dispatch perl-Parallel-ForkManager -y
rpm -ivh mha4mysql-node-0.58-0.el7.centos.noarch.rpm
rpm -ivh mha4mysql-manager-0.58-0.el7.centos.noarch.rpm
rm -rf mha4mysql-*
可以修改一下以符合自己的需求
mha
配置
- 默认配置
# /etc/masterha_default.cnf
[server default]
#用户名
user=root
#密码
password=godme
#ssh登录账号
ssh_user=root
#主从复制账号
repl_user=root
#主从复制密码
repl_password=godme
#ping次数
ping_interval=1
#二次检查的主机
secondary_check_script=masterha_secondary_check -s 192.168.3.101 -s 192.168.3.102 -s 192.168.3.103
- 管理配置
# /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.3.101
candidate_master=1
master_binlog_dir="/var/lib/mysq"
[server2]
hostname=192.168.3.102
candidate_master=1
master_binlog_dir="/var/lib/mysql"
[server3]
hostname=192.168.3.103
candidate_master=1
master_binlog_dir="/var/lib/mysql"
mha
管理
- 环境监测
# 连通性测试
masterha_check_ssh --conf=/etc/mha/app1.cnf
# 指定配置文件
masterha_check_repl --conf=/etc/mha/app1.cnf
- 管理启动
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 &
- 状态查看
masterha_check_status --conf=/etc/mha/app1.cnf
- 日志记录
tail -f /var/log/mha/app1/manager.log
故障模拟
- 主库停机
systemctl stop mysqld
- 主库重启
systemctl start mysqld
- 重新挂载
change master to
master_host='192.168.3.101',
master_port=3306,master_user='root',
master_password='godme',
master_log_file='mysql-bin',
master_log_pos=1154;
start slave;
- 配置添加
如果启动时添加了--remove_dead_master_conf
配置,当master
宕机的时候,会自动从配置当中删除dead_master
的配置信息,需要重新添加。
- 切换主库
masterha_master_switch --conf=/etc/mha/app1.cnf \
--master_state=alive \
--new_master_host=192.168.3.101 \
--new_master_port=3306 \
--orig_master_is_new_slave \
--running_updates_limit=10000
疑问
- 数据丢失
如果为集群添加新节点,需要先对当前集群的master
进行数据同步操作,否则会丢失添加前的更新。
如果old_master
重新挂载,也需要进行该操作,否则,在old_master
宕机恢复期间新增的数据会丢失。