之前搭建MHA集群架构,此处稍作整理,之后会将一些工作中遇到的小坑与对应的解决方案分享给大家。
服务器导图
主机名 | ip地址 | 功能 |
master15 | 192.168.1.15 | 主 |
master16 | 192.168.1.16 | 主备 |
master17 | 192.168.1.17 | 主备 |
master18 | 192.168.1.18 | 从 |
manager | 192.168.1.20 | MHA管理机 |
一、MySQL主从半同步配置
1.主配置
查看 mysql 插件
show plugins;
安装半同步插件
install plugin rpl_semi_sync_master soname 'semisync_master.so';
开启半同步
set global rpl_semi_sync_master_enabled=1;
等待超时时间
设置此参数值(ms),为了防止半同步复制在没有收到确认的情况下发生堵塞,如果Master在超时
之前没有收到任何确认,将恢复到正常的异步复制,并继续执行没有半同步的复制操作。
set global rpl_semi_sync_master_timeout=1000;
查看状态
show global variables like '%rpl_semi%';
show global status like '%rpl_semi%';
2.主备配置
查看 mysql 插件
show plugins;
安装半同步插件
install plugin rpl_semi_sync_slave soname 'semisync_slave.so';
开启半同步
set global rpl_semi_sync_slave_enabled=1;
查看状态
show global variables like '%rpl_semi%';
重启 IO 线程
stop slave io_thread;
start slave io_thread;
3.在配置文件中修改,永久生效
vim /etc/my.cnf
plugin-load = "rpl_semi_sync_master=semisync_master.so"
plugin-load = "rpl_semi_sync_slave=semisync_slave.so"
rpl_semi_sync_slave_enabled = 1
rpl_semi_sync_master_enabled = 1
rpl_semi_sync_master_timeout = 3000
二、安装MHA node节点
1.安装 mha node 节点包
yum install gcc pcre-devel pkgconfig autoconf automake perl-ExtUtils-MakeMaker perl-CPAN perl-DBI perl-DBD-MySQL
2.安装 mha4mysql-node
perl Makefile.PL
make
make install
三、安装MHA manager节点
1.安装 mha node 节点包
yum install -y gcc pcre-devel pkgconfig autoconf automake perl-ExtUtils-MakeMaker perl-CPAN perl-DBI perl-DBD-MySQL
安装 mha4mysql-node
perl Makefile.PL
make
make install
2.安装 mha manager 节点
安装依赖软件包
yum install -y perl-Config-Tiny perl-Log-Dispatch perl-Parallel-ForkManager perl-Time-HiRes
安装 mha 管理节点
perl Makefile.PL
[Core Features]
- DBI ...loaded. (1.627)
- DBD::mysql ...loaded. (4.023)
- Time::HiRes ...loaded. (1.9725)
- Config::Tiny ...loaded. (2.14)
- Log::Dispatch ...loaded. (2.41)
- Parallel::ForkManager ...loaded. (1.18)
- MHA::NodeConst ...loaded. (0.56)
*** Module::AutoInstall configuration finished.
Checking if your kit is complete...
Looks good
make
make install
三、MHA条件配置
mha 是依靠 ssh 远程配置管理 mysql 服务器的,所以要求管理节点机器到所有 mysql
MySQL集群之间服务器也可以互相无密登录
1.生成秘钥和公钥
ssh-keygen -t rsa -b 2048 -N '' -f id_rsa
for i in mysql{15..18};do
ssh-copy-id -i id_rsa.pub ${i}
done
2.把私钥 id_rsa 拷贝给所有 mysql 主机
for i in mysql{15..18};do
scp id_rsa ${i}:.ssh/id_rsa
done
3.mha 切换 vip 是靠脚本实现,vim 编辑脚本 master_ip_failover 设置 vip
my $vip = '192.168.1.10/24'; # Virtual IP
cp master_ip_failover /usr/local/bin/
chmod 755 /usr/local/bin/master_ip_failover
4.添加 默认配置文件 /etc/masterha_default.cnf 和 /etc/mha.cnf 配置文件
touch /etc/masterha_default.cnf
5./etc/mha.cnf
[server default]
manager_log=/var/log/mha.log
manager_workdir=/var/lib/mha
user=root
password=steve123456
repl_user=repluser
repl_password=steve123456
ssh_user=root
ping_interval=1
remote_workdir=/var/lib/mha
master_ip_failover_script=/usr/local/bin/master_ip_failover
[server15]
candidate_master=1
hostname=mysql15
[server16]
candidate_master=1
hostname=mysql16
[server17]
hostname=mysql17
candidate_master=1
[server18]
hostname=mysql18
no_master=1
6.在当前的 master 上手工绑定 vip 执行检查测试
ifconfig eth0:1 192.168.1.10/24
7.检查 ssh 免密码登录
masterha_check_ssh --conf=/etc/mha.cnf
8.检查 mysql 主从配置
masterha_check_repl --conf=/etc/mha.cnf
9.排除所有错误,添加 root 用户远程登录权限
create user 'root'@'%' IDENTIFIED BY 'steve123456';
grant ALL ON *.* to root@'%'
10.添加参数 relay_log_purge=0
四、MHA启动检验
启动 mha
masterha_manager --conf=/etc/mha.cnf --ignore_last_failover
验证测试
将当前主停掉,看看vip会不会漂移到指定的新主上,如果可以,表示成功,否则,慢慢排错吧。