测试环境如下
192.168.124.177 | 192.168.124.178 | 192.168.124.179 | 192.168.124.182 |
---|---|---|---|
mysql master | mysql slave | mysql slave | mha |
在177,178,179上都安装好mariadb
yum -y install mariadb mariadb-server
在配置mariadb的配置文件177
vim /etc/my.cnf
[mysqld]
datadir=/var/lib/mysql
socket=/var/lib/mysql/mysql.sock
# Disabling symbolic-links is recommended to prevent assorted security risks
symbolic-links=0
# Settings user and group are ignored when systemd is used.
# If you need to run mysqld under a different user or group,
# customize your systemd unit file for mariadb according to the
# instructions in http://fedoraproject.org/wiki/Systemd
server-id=1
log_bin=mysql-bin
relay_log=mysql-relay
[mysqld_safe]
log-error=/var/log/mariadb/mariadb.log
pid-file=/var/run/mariadb/mariadb.pid
#
# include all files from the config directory
#
!includedir /etc/my.cnf.d
保存退出后启动
systemctl start mariadb
登录mariadb
mysql
MariaDB [(none)]> grant replication slave on *.* to 'tom'@'%' identified by'123';
MariaDB [(none)]> show master status;
+------------------+----------+--------------+------------------+
| File | Position | Binlog_Do_DB | Binlog_Ignore_DB |
+------------------+----------+--------------+------------------+
| mysql-bin.000003 | 382 | | |
+------------------+----------+--------------+------------------+
1 row in set (0.00 sec)
然后配置从178的主机mariadb配置文件
11 server-id=2
12 log_bin=mysql-bin
13 relay_log=mysql-relay
14 #是否自动清空不再需要中继日志
15 relay_log_purge = 0
16 #使得更新的数据写进二进制日志中
17 log_slave_updates = 1
18 #启用只读属性
19 read_only = ON
同样保存退出开起mariadb
systemctl start mariadb
mysql
登录后开始配置连接
grant replication slave on *.* to 'tom'@'%' identified by'123';
MariaDB [(none)]> change master to master_user='tom',master_password='123',master_host='192.168.124.177',master_log_file='mysql-bin.000003',master_log_pos=382;
开起从
start slave;
查看状态
show slave status \G;
看到双yes证明成功了
178和179的从配置文件添加11至19行
11 server-id=3
12 log_bin=mysql-bin
13 relay_log=mysql-relay
14 #是否自动清空不再需要中继日志
15 relay_log_purge = 0
16 #使得更新的数据写进二进制日志中
17 log_slave_updates = 1
18 #启用只读属性
19 read_only = ON
保存退出后启动
systemctl start mariadb
mysql
然后执行
grant replication slave on *.* to 'tom'@'%' identified by'123';
change master to master_user='tom',master_password='123',master_host='192.168.124.177',master_log_file='mysql-bin.000003',master_log_pos=382;
启动从
start slave;
查看
这样一主多从配置完毕了
然后开始部署mha的前提条件设置免密
177主机执行
ssh-keygen -t rsa
ssh-copy-id -i .ssh/id_rsa.pub root@192.168.124.178
ssh-copy-id -i .ssh/id_rsa.pub root@192.168.124.179
ssh-copy-id -i .ssh/id_rsa.pub root@192.168.124.182
178主机
ssh-keygen -t rsa
ssh-copy-id -i .ssh/id_rsa.pub root@192.168.124.177
ssh-copy-id -i .ssh/id_rsa.pub root@192.168.124.179
ssh-copy-id -i .ssh/id_rsa.pub root@192.168.124.182
然后179主机
ssh-keygen -t rsa
ssh-copy-id -i .ssh/id_rsa.pub root@192.168.124.177
ssh-copy-id -i .ssh/id_rsa.pub root@192.168.124.178
ssh-copy-id -i .ssh/id_rsa.pub root@192.168.124.182
182的主机
ssh-keygen -t rsa
ssh-copy-id -i .ssh/id_rsa.pub root@192.168.124.177
ssh-copy-id -i .ssh/id_rsa.pub root@192.168.124.178
ssh-copy-id -i .ssh/id_rsa.pub root@192.168.124.179
ssh 的 -t是指定一种类型
完事后可以互相登录测试一下是不是免密我这本机是182主机
在主mariadb 上授权一个mha用的账户这个用户注意不要写错不然会连不上
MariaDB [(none)]> grant all on *.* to 'mhaadmin'@'%' identified by'123';
然后安装mha,mha有两个包分别是node和manager。
node每个主机都装manager只在mha上装
rpm -ivh mha4mysql-node-0.56-0.el6.noarch.rpm
当mha主机装的时候会少依赖,安装依赖
yum install perl-DBD-mysql perl-DBI
rpm -ivh mha4mysql-node-0.56-0.el6.noarch.rpm
然后安装managerar安装前也要安装依赖
yum -y install https://dl.fedoraproject.org/pub/epel/epel-release-latest-7.noarch.rpm
yum -y install perl-ExtUtils-CBuilder perl-ExtUtils-MakeMaker perl-Config-Tiny perl-Log-Dispatch-* perl-Parallel-ForkManager
然后安装
rpm -ivh mha4mysql-manager-0.56-0.el6.noarch.rpm
然后配置mha的管理节点
mkdir /etc/mha_master
vim /etc/mha_master/mha.cnf
配置如下
[server default]
user=mhaadmin
password=123
manager_workdir=/etc/mha_master/app1
manager_log=/etc/mha_master/manager.log
remote_workdir=/mydata/mha_master/app1
ssh_user=root
repl_user=tom
repl_password=123
ping_interval=1
[server1]
hostname=192.168.124.177
ssh_port=22
candidate_master=1
[server2]
hostname=192.168.124.178
ssh_port=22
candidate_master=1
[server3]
hostname=192.168.124.179
ssh_port=22
candidate_master=1
讲解
然后在管理节点检测ssh连通性
masterha_check_ssh -conf=/etc/mha_master/mha.cnf
正常结果为
检测MySQL replication是否正常
masterha_check_repl --conf=/etc/mha_master/mha.cnf
启动mha
nohup masterha_manager --conf=/etc/mha_master/mha.cnf &> /etc/mha_master/manager.log &
检查master节点状态
masterha_check_status --conf=/etc/mha_master/mha.cnf
mha的关闭命令
masterha_stop -conf=/etc/mha_master/mha.cnf
测试关掉master
systemctl stop mariadb
查看主变成了178
这个时候mha是就停止了再起启用需要吧down掉的主库启动改为从库操作如下。
先在主库查看
MariaDB [(none)]> show master status;
+------------------+----------+--------------+------------------+
| File | Position | Binlog_Do_DB | Binlog_Ignore_DB |
+------------------+----------+--------------+------------------+
| mysql-bin.000004 | 245 | | |
+------------------+----------+--------------+------------------+
1 row in set (0.00 sec)
在启动down掉的数据库吧它变成从在开启
systemctl start mariadb
mysql
MariaDB [(none)]> change master to
-> master_user='tom',
-> master_password='123',
-> master_host='192.168.124.178',
-> master_log_file='mysql-bin.000004',
-> master_log_pos=245;
Query OK, 0 rows affected (0.05 sec)
MariaDB [(none)]> start slave;
Query OK, 0 rows affected (0.00 sec)
查看从的状态
MariaDB [(none)]> show slave status \G;;
*************************** 1. row ***************************
Slave_IO_State: Waiting for master to send event
Master_Host: 192.168.124.178
Master_User: tom
Master_Port: 3306
Connect_Retry: 60
Master_Log_File: mysql-bin.000004
Read_Master_Log_Pos: 245
Relay_Log_File: mysql-relay.000002
Relay_Log_Pos: 529
Relay_Master_Log_File: mysql-bin.000004
Slave_IO_Running: Yes
Slave_SQL_Running: Yes
在启动mha
nohup masterha_manager --conf=/etc/mha_master/mha.cnf &> /etc/mha_master/manager.log &
查看
[root@localhost ~]# masterha_check_status --conf=/etc/mha_master/mha.cnf
mha (pid:92258) is running(0:PING_OK), master:192.168.124.178
删除无用节点的启动,–remove_dead_master_conf表示发生主从切换后,老的master服务器配置检查配置文件中删除
masterha_manager --conf=/etc/masterha/mha.cnf --remove_dead_masrer_conf
如果要第二次用的话要除了手动吧down掉的主改为从之外还要删除这个文件
rm -rf /etc/mha_master/app1/mha.failover.complete