简介:
MHA(Master High Availability)目前在MySQL高可用方面是一个相对成熟的解决方案,master节点故障后,管理节点会在slave节点里面选取一个节点提升为新master。要搭建MHA,要求一个复制集群中最少有三台数据库服务器,一主二从,即一台充当master,一台充当备用master,另外一台充当从库。管理节点程序可以安装在从服务器上也可以单独安装一台服务器作为管理节点。
管理节点程序分为Manager节点程序和Node节点程序。
Manager节点组件:
masterha_check_ssh:MHA依赖的SSH环境检测工具;
masterha_check_repl:MYSQL复制环境检测工具
masterha_manager:MHA服务主程序
masterha_check_status:MHA运行状态探测工具
masterha_master_monitor:MYSQL master节点可以性监测工具
masterha_master_switch:master节点切换工具
masterha_conf_host:添加或删除配置节点;
masterha_stop;关闭MHA服务的工具
Node节点组件:
save_binary_logs:保存和复制master的二进制日志
apply_diff_relay_logs:识别差异的中继日志事件并应用于其他slave
filter_mysqlbinlog:去除不必要的ROLLBACK事件(MHA已不再使用这个工具)
purge_relay_logs:清除中继日志(不会阻塞SQL线程)
自定义扩展;
secondary_check_script:通过多条网络路由检测master的可用性;
master_ip_failover_script:更新application使用的masterip
shutdown_script:强制关闭master节点:
report_script:发送报告
init_conf_load_script:加载初始配置参数
master_ip_online_change_script:更新master节点ip地址
基础环境:
MHA管理工具下载链接:https://pan.baidu.com/s/1pMo93Nd 密码:27i2
mha4mysql-manager-0.56-0.el6.noarch.rpm
mha4mysql-node-0.56-0.el6.noarch.rpm
配置过程:
首先将三台服务器配置为主从复制
三台服务器分别执行:yum install mairadb-server mariadb -y
[root@localhost ~]# vim /etc/my.cnf
在[mysqld]中加入如下内容:
主服务器:
innodb_file_per_table = 1
skip_name_resolve = 1
log-bin = master-bin
relay-log = relay-bin
server_id=1
从服务器1:
innodb_file_per_table = 1
skip_name_resolve = 1
log-bin = master-bin
relay-log = relay-bin
server_id = 2
read_only = 1
relay_log_purge = 0
从服务器2:
innodb_file_per_table = 1
skip_name_resolve = 1
log-bin = master-bin
relay-log = relay-bin
server_id = 3
read_only = 1
relay_log_purge = 0
主服务器上:
MariaDB [(none)]> show master status #这一步一定要先执行,查看position后再创建用户,设置从服务器时用这个position,新创建的用户才能同步到从服务上,从服务器也需要这两个账号。因为主服务器故障时从服务器会被提升为主。
-> ;
+-------------------+----------+--------------+------------------+
| File | Position | Binlog_Do_DB | Binlog_Ignore_DB |
+-------------------+----------+--------------+------------------+
| master-bin.000002 | 245 | | |
+-------------------+----------+--------------+------------------+
1 row in set (0.00 sec)
创建复制用户和管理节点用于管理的用户。
MariaDB [(none)]> grant replication slave,replication client on *.* to 'repluser'@'172.16.6.%' identified by '123456';
MariaDB [(none)]> grant all on *.* to 'admin'@'172.16.6.%' identified by 'admin';
MariaDB [(none)]> flush privileges;
从服务器1上执行:
MariaDB [(none)]> change master to master_host='172.16.6.80',master_user='repluser',master_password='123456',master_log_file='master-bin.000002',master_log_pos=245;
MariaDB [(none)]> start slave;
MariaDB [(none)]> show slave status\G;
Slave_IO_Running: Yes
Slave_SQL_Running: Yes
从服务器2上执行:
MariaDB [(none)]> change master to master_host='172.16.6.80',master_user='repluser',master_password='123456',master_log_file='master-bin.000002',master_log_pos=245;
MariaDB [(none)]> start slave;
MariaDB [(none)]> show slave status\G;
Slave_IO_Running: Yes
Slave_SQL_Running: Yes
开始配置MHA:
配置SSH互通: (注意:配置方法有多种)
在管理节点:172.16.6.79上面生成秘钥。直接拷贝私钥和公钥到三台数据库服务器上。
[root@localhost ~]# ssh-keygen -t rsa -P ''
[root@localhost ~]# cat .ssh/id_rsa.pub > .ssh/authorized_keys
[root@localhost ~]# chmod go= .ssh/authorized_keys
[root@localhost ~]# scp .ssh/id_rsa .ssh/authorized_keys 172.16.6.80:/root/.ssh
[root@localhost ~]# scp .ssh/id_rsa .ssh/authorized_keys 172.16.6.81:/root/.ssh
[root@localhost ~]# scp .ssh/id_rsa .ssh/authorized_keys 172.16.6.82:/root/.ssh
安装EPEL源:
[root@localhost ~]# wget http://dl.fedoraproject.org/pub/epel/epel-release-latest-7.noarch.rpm
[root@localhost ~]# rpm -ivh epel-release-latest-7.noarch.rpm
[root@localhost ~]# yum repolist ##检查是否已添加至源列表
安装管理节点程序:
将下载的上传到管理节点上:
[root@localhost ~]# yum install mha4mysql-*
[root@localhost ~]# scp mha4mysql-node-0.56-0.el6.noarch.rpm 172.16.6.80:/root
[root@localhost ~]# scp mha4mysql-node-0.56-0.el6.noarch.rpm 172.16.6.81:/root
[root@localhost ~]# scp mha4mysql-node-0.56-0.el6.noarch.rpm 172.16.6.82:/root
三个数据库节点分别执行:
[root@localhost ~]# yum install mha4mysql-node-0.56-0.el6.noarch.rpm -y
配置管理节点:
[root@localhost ~]# mkdir /etc/masterha
[root@localhost ~]# vi /etc/masterha/app1.cnf
[server default]
user=admin
password=amdin
manager_workdir=/data/masterha/app1
manager_log=/data/masterha/app1/manager.log
remote_workdir=/data/masterha/app1
ssh_user=root
repl_user=repluser
repl_password=123456
ping_interval=1
[server1]
hostname=172.16.6.80
#ssh_prot=22222
[server2]
hostname=172.16.6.81
#ssh_prot=22222
candidate_master=1
[server3]
hostname=172.16.6.82
#ssh_prot=22222
candidate_master=1
检测SSH互通:
[root@localhost ~]# masterha_check_ssh --conf=/etc/masterha/app1.cnf
检测复制环境:
[root@localhost ~]# masterha_check_repl --conf=/etc/masterha/app1.cnf
启动管理程序
[root@localhost ~]# masterha_manager --conf=/etc/masterha/app1.cnf