3 台已安装mysql实例的服务器 IP:192.168.255.129 192.168.255.134 192.168.255.135(135作为监控服务器)
1 所有mysql实例必须开启 bin_log 二进制文件
2 设置三个不同的 server_id server_id = 1 server_id = 2 server_id = 3 (注:如果你克隆的虚拟机,三台mysql的uuid 手动修改不能一样)
开启三台数据库 gtid_mode = on enforce_gtid_consistency = on
3 从服务器需要开启 relay_log = mysql-relay-bin read_only = on (可选:建议开启)
4 创建repl用户并给与replication slave 权限
create user repl@'192.168.255.%' identified by '123456';
grant replication slave on *.* to repl@'192.168.255.%';
5 同步初始化数据库
重启主数据库: service mysqld restart
主数据库执行:mysqldump --single-transaction --master-data=2 --triggers --routines --all-databases -uroot -p > all.sql
把文件拷贝到从服务器:scp all.sql root@192.168.255.130:/root
6 启动复制链路(mha只启动两台从数据库的复制链路,master_host都指向主服务器IP)
导入主数据库sql文件:mysql -u root -p < all.sql
进入从数据库:mysql -u root -p
配置复制链路:change master to master_host='192.168.255.129',
-> master_user='repl',
-> master_password='123456',
-> master_auto_position=1;
启动复制链路:start slave;
show slave status \G; 查看是否启动成功,然后主数据库执行insert sql语句测试从数据库是否数据同步;
7 配置三台主机的ssh免认证登陆
方法一(没有方法二简单,方法二在下面)
生成密钥
ssh-keygen -t rsa -P ''
把公钥scp到从服务器 如果root目录下没有.ssh文件夹 执行:ssh localhost 生成
cd /root/.ssh/
cp id_rsa.pub authorized_keys
scp authorized_keys root@192.168.255.130:/root/.ssh/
scp authorized_keys root@192.168.255.131:/root/.ssh/
然后生成从服务器的公钥和私钥
授权:chmod 600 authorized_keys
ssh-keygen -t rsa -P ''
然后把从服务器的公钥内容复制到authorized_keys文件
第三台从服务和第二太服务器同样操作,然后把 公钥追加到 authorized_keys 文件,最后同步到三台服务器的 /root/.ssh/ 目录下
如下截图验证ssh免密登陆成功
方法二
ssh-keygen (一路回车)
ssh-copy-id -i ~/.ssh/id_rsa -p 22 root@192.168.255.134
ssh-copy-id -i ~/.ssh/id_rsa -p 22 root@192.168.255.135
其它两太服务同理
8 配置MHA架构
三台服务器都必须安装node软件包(安装前先配置yum源,安装node软件包所需要的依赖)
配置yum源
wget http://dl.fedoraproject.org/pub/epel/epel-release-latest-7.noarch.rpm
rpm -ivh epel-release-latest-7.noarch.rpm
安装依赖包
yum install -y perl-DBD-MySQL ncftp perl-DBI.x86_64
安装node软件包
wget https://qiniu.wsfnk.com/mha4mysql-node-0.58-0.el7.centos.noarch.rpm
rpm -ivh mha4mysql-node-0.58-0.el7.centos.noarch.rpm
监控服务器(除了安装node软件包还得安装manger软件包)
安装manger软件包所需依赖包
yum install -y perl-DBD-MySQL perl-Config-Tiny perl-Log-Dispatch perl-Parallel-ForkManager
安装manger软件包
wget https://qiniu.wsfnk.com/mha4mysql-manager-0.58-0.el7.centos.noarch.rpm
rpm -ivh mha4mysql-manager-0.58-0.el7.centos.noarch.rpm
如果有这个错误:软件包:perl-Log-Dispatch-2.27-1.el6.noarch (epel) 需要:perl(:MODULE_COMPAT_5.10.1)
是yum源配置错误,我就是centos7却配置的6的yum源导致的错误,我直接初始化三台服务器重新装了一遍
安装完成
创建监控服务器创建mha配置文件存放目录 mkdir -p /etc/mha
创建mha二进制文件存放目录 mkdir -p /home/mysql_mha
主节点数据库创建mha用户
grant all privileges on *.* to mha@'192.168.255.%' identified by '123456';
vi /etc/mha/mysql_mha.cnf (编辑mha配置文件)
[server default]
user=mha
password=123456
manager_workdir=/home/mysql_mha
manager_log=/home/mysql_mha/manager.log
remote_workdir=/home/mysql_mha
ssh_user=root
repl_user=repl
repl_password=123456
ping_interval=1
master_binlog_dir=/home/mysql/data
master_ip_failover_script=/usr/bin/master_ip_failover
secondary_check_script=/usr/bin/masterha_secondary_check -s 192.168.255.129 -s 192.168.255.130 -s 192.168.255.131
[server1]
hostname=192.168.255.129
candidate_master=1
[server2]
hostname=192.168.255.130
candidate_master=1
[server3]
hostname=192.168.255.131
no_master=1
9 检测MHA架构的 ssh 免认证登陆 和 repl 配置是否正常 (这一步错误最多)
检测ssh免认证登陆
masterha_check_ssh --conf=/etc/mha/mysql_mha.cnf
报错:/usr/share/perl5/vendor_perl/MHA/SSHCheck.pm, ln63
解决方法
两台服务都执行
cd ~/.ssh
cat id_rsa.pub >> authorized_keys
检测repl
masterha_check_repl --conf=/etc/mha/mysql_mha.cnf
下面截图错误卡了一下午,百度都说是bin-log没有开启,忽略了第一个箭头 db2 dead servers 状态,说明监控服务链接不上db2,我是开启得防火墙导致得。(我开放了3306端口,可能是没有重启防火墙,不关闭防火墙开启3306端口也可以)
启动:masterha_manager --conf=/etc/mha/mysql_mha.cnf
后台启动:nohup masterha_manager --conf=/etc/mha/mysql_mha.cnf &
查看是否启动成功
ps -ef | grep masterha_manage
写IP是在 master_ip_failover 文件配置 注意 还有网络接口
主服务器配置写IP
启动成功后需要手动开启主服务器的 写IP eno16777736 是网络接口
ifconfig eno16777736:1 192.168.255.90/24
查看: ip addr
测试 主服务 挂掉 写IP会不会偏移到134
service mysqld stop;
135 复制链路成功迁移到 134,134成为主DB
写IP也成功迁移到 134
不迁移的原因排查
查看 /home/mysql_mha/manager.log 文件 这里有详细的 迁移日志。仔细看,会发现问题,一一解决。
不是专业运维,文章写的也不精致,主要给自己以后配置做参考。