赞
踩
MHA(Master HA)是一款开源的 MySQL 的高可用程序,它为 MySQL 主从复制架构提供了 automating master failover 功能。MHA 在监控到 master 节点故障时,会提升其中拥有最新数据的 slave 节点成为新的master 节点,在此期间,MHA 会通过于其它从节点获取额外信息来避免一致性方面的问题。MHA 还提供了 master 节点的在线切换功能,即按需切换 master/slave 节点。
MHA 是由日本人 yoshinorim(原就职于DeNA现就职于FaceBook)开发的比较成熟的 MySQL 高可用方案。MHA 能够在30秒内实现故障切换,并能在故障切换中,最大可能的保证数据一致性。
Manager 作为监控,不断的对master、slave1、slave2、slave3进行监控
Manger如果发现master有异常,则会将其中一个延迟较小的从库提升为主库,而且使得数据一致
准备4台Centos7虚拟机
关掉防火墙 setenforce
[root@localhost ~]# systemctl stop firewalld
[root@localhost ~]# setenforce 0
四台机器都做
[root@localhost ~]# ssh-keygen
[root@localhost ~]# ssh-copy-id root@192.168.27.136
[root@localhost ~]# ssh-copy-id root@192.168.27.137
[root@localhost ~]# ssh-copy-id root@192.168.27.138
[root@localhost ~]# ssh-copy-id root@192.168.27.139
[root@localhost ~]# yum -y install mariadb mariadb-server
[root@localhost ~]# vim /etc/my.cnf
[mysqld]
server-id = 1 #集群中的各节点的id均必须唯一
log-bin = master-log #开启二进制日志
relay-log = relay-log #开启中继日志
[root@localhost ~]# systemctl restart mariadb
slave1
[root@localhost ~]# yum -y install mariadb mariadb-server
[root@localhost ~]# vim /etc/my.cnf
[mysqld]
server-id = 2 #集群中的各节点的id均必须唯一;
relay-log = relay-log #开启中继日志
log-bin = master-log #开启二进制日志
read_only = ON #启用只读属性
relay_log_purge = 0 #是否自动清空不再需要中继日志
log_slave_updates = 1 #使得更新的数据写进二进制日志中
slave2
[root@localhost ~]# yum -y install mariadb mariadb-server
[root@localhost ~]# vim /etc/my.cnf
[mysqld]
server-id = 3 #集群中的各节点的id均必须唯一;
relay-log = relay-log #开启中继日志
log-bin = master-log #开启二进制日志
read_only = ON #启用只读属性
relay_log_purge = 0 #是否自动清空不再需要中继日志
log_slave_updates = 1 #使得更新的数据写进二进制日志中
[root@localhost ~]# systemctl restart mariadb
在主上授权用户并 查看master
MariaDB [(none)]> grant all on *.* to 'tom'@'%' identified by '123';
Query OK, 0 rows affected (0.00 sec)
MariaDB [(none)]> show master status;
+-------------------+----------+--------------+------------------+
| File | Position | Binlog_Do_DB | Binlog_Ignore_DB |
+-------------------+----------+--------------+------------------+
| master-log.000003 | 369 | | |
+-------------------+----------+--------------+------------------+
从节点
MariaDB [(none)]> change master to
-> master_host='192.168.27.137',
-> master_user='tom',
-> master_password='123',
-> master_log_file='master-log.000003',
-> master_log_pos=369;
MariaDB [(none)]> start slave;
MariaDB [(none)]> show slave status\G;
*************************** 1. row ***************************
Slave_IO_State: Waiting for master to send event
Master_Host: 192.168.27.137
Master_User: tom
Master_Port: 3306
Connect_Retry: 60
Master_Log_File: master-log.000003
Read_Master_Log_Pos: 369
Relay_Log_File: relay-log.000002
Relay_Log_Pos: 530
Relay_Master_Log_File: master-log.000003
Slave_IO_Running: Yes
Slave_SQL_Running: Yes
在master上进行授权
在所有 Mysql 节点授权拥有管理权限的用户可在本地网络中有其他节点上远程访问。
MariaDB [(none)]> grant all on *.* to 'mhaadmin'@'%' identified by '123';
MariaDB [(none)]> flush privileges;
四个节点都需安装:mha4mysql-node
[root@localhost ~]# yum -y install mha4mysql-node-0.56-0.el6.noarch.rpm
Manager 节点另需要安装:mha4mysql-manager
[root@localhost ~]# yum -y install perl-DBD-MySQL epel-release
[root@localhost ~]# yum -y install mha4mysql-manager-0.56-0.el6.noarch.rpm mha4mysql-node-0.56-0.el6.noarch.rpm
定义MHA管理配置文件
[root@localhost ~]# mkdir /etc/mha_master
[root@localhost ~]# vim /etc/mha_master/mha.cnf
[server default] //适用于server1,2,3个server的配置
user=mhaadmin //mha管理用户
password=123 //mha管理密码
manager_workdir=/etc/mha_master/app1 //mha_master自己的工作路径
manager_log=/etc/mha_master/manager.log // mha_master自己的日志文件
remote_workdir=/mydata/mha_master/app1 //每个远程主机的工作目录在何处
ssh_user=root // 基于ssh的密钥认证
repl_user=tom //数据库用户名
repl_password=123 //数据库密码
ping_interval=1 //ping间隔时长
[server1] //节点2
hostname=192.168.27.137 //master主机地址
ssh_port=22 //节点ssh端口
candidate_master=1 //将来可不可以成为master候选节点/主节点
[server2]
hostname=192.168.27.138 //slave主机地址
ssh_port=22
candidate_master=1
[server3]
hostname=192.168.27.139 //slave主机地址
ssh_port=22
candidate_master=1
对四个节点进行检测
检测各节点间 ssh 互信通信配置是否 ok 我们在 Manager 机器上输入下述命令来检测:
检查管理的MySQL复制集群的连接配置参数是否OK
[root@localhost ~]# masterha_check_repl -conf=/etc/mha_master/mha.cnf
我们发现检测失败,这可能是因为从节点上没有账号,因为这个架构,任何一个从节点, 将有可能成为主节点, 所以也需要创建账号。
因此,我们需要在master节点上再次执行以下操作:
MariaDB [(none)]> grant all on *.* to 'tom'@'%' identified by '123';
MariaDB [(none)]> flush privileges;
再次查看
[root@localhost ~]# nohup masterha_manager -conf=/etc/mha_master/mha.cnf &> /etc/mha_master/manager.log &
[1] 24349
[root@localhost ~]# masterha_check_status -conf=/etc/mha_master/mha.cnf
mha (pid:24349) is running(0:PING_OK), master:192.168.27.137
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。