一、概述
是一套优秀的作为MySQL高可用性环境下故障切换和主从提升的高可用软件
二、端口号
22
三、高可用MHA简述
目前在mysql高可用方面是一个成熟的方案,是一套优秀的高可用环境下故障切换和主从提升的高可用软件
四、原理
组成
MHA Manager(管理节点)
MHA Node(数据节点)
在MHA自动故障切换过程中,MHA试图从宕机的主服务器上保存二进制日志,最大程度的保证数据的不丢失,但这并不总是可行的。例如,如果主服务器硬件故障或无法通过ssh访问,MHA没法保存二进制日志,只进行故障转移而丢失了最新的数据。使用MySQL 5.5的半同步复制,可以大大降低数据丢失的风险。MHA可以与半同步复制结合起来。如果只有一个slave已经收到了最新的二进制日志,MHA可以将最新的二进制日志应用于其他所有的slave服务器上,因此可以保证所有节点的数据一致性。
目前MHA主要支持一主多从的架构,要搭建MHA,要求一个复制集群中必须最少有三台数据库服务器,一主二从,即一台充当master,一台充当备用master,另外一台充当从库,因为至少需要三台服务器,出于机器成本的考虑,淘宝也在该基础上进行了改造,目前淘宝TMHA已经支持一主一从。MHA 适合任何存储引擎, 只要能主从复制的存储引擎它都支持,不限于支持事物的 innodb 引擎。
我们自己使用其实也可以使用一主一从,但是master主机宕机后无法切换,以及无法补全二进制日志。master的mysqld进程crash(停止工作)后,还是可以切换成功,以及补全二进制日志
五、简述流程
1、先找服务器
至少四台
安装系统centos5.7版
2、数据库安装
3、免密设置
(1)生成密钥
ssh-keygen -t rsa
(2)复制密钥
ssh-copy-id -i
(3)粘贴
scp
4、主从复制
5、测试
六、架构图
七、安装部署
1、安装
(1)环境
centos7.5.1804
准备四台机器
角色 节点 ip 说明
manager node1 192.168.174.130 管理
master node2 192.168.174.131 主
slave1 node3 192.168.174.132 从
slave2 node4 192.168.174.133 从
(2)yum安装
epel-release
mariadb mariadb-server
rpm -ivh mha4mysql-node-0.56-0.el6.noarch.rpm
(3)修改配置文件
vim /etc/my.cnf
(4)重启服务
systemctl restart mysqld
(5)授权给从用户
grant ...
(6)查看状态
(7)配置从服务器
授权manager
(8)创建manager配置文件
/etc/mha_master
/etc/mha_master/mha.cnf
(9)对各个节点进行检测
(10)检查mysql复制集群的连接配置参数是否ok
2、部署
1、主机名设置
临时修改主机名
hostname 主机名
永久修改主机名
hostnamectl set-hostname 主机名
2、hosts文件修改
指定客户端用户跟IP
[root@localhost ~]# vim /etc/hosts
127.0.0.1 localhost localhost.localdomain localhost4 localhost4.localdomain4
::1 localhost localhost.localdomain localhost6 localhost6.localdomain6
192.168.174.130 node1
192.168.174.131 node2
192.168.174.132 node3
192.168.174.133 node4
3、关闭防火墙
四台全关
4、生成密钥
[root@node1 ~]# ssh-keygen -t rsa
[root@node2 ~]# ssh-keygen -t rsa
[root@node3 ~]# ssh-keygen -t rsa
[root@node4 ~]# ssh-keygen -t rsa
5、复制密钥到代理服务器node1
[root@node1 ~]# ssh-copy-id -i .ssh/id_rsa.pub root@node1
[root@node2 ~]# ssh-copy-id -i .ssh/id_rsa.pub root@node1
[root@node3 ~]# ssh-copy-id -i .ssh/id_rsa.pub root@node1
[root@node4 ~]# ssh-copy-id -i .ssh/id_rsa.pub root@node1
6、在node1查看是否已复制过来
[root@node1 ~]# cat /root/.ssh/authorized_keysau
7、将authorized_keysau密钥文件发送给node2/3/4
[root@node1 ~]# scp .ssh/authorized_keys root@node2:.ssh/
[root@node1 ~]# scp .ssh/authorized_keys root@node3:.ssh/
[root@node1 ~]# scp .ssh/authorized_keys root@node4:.ssh/
8、测试免密登录
[root@node1 ~]# ssh node2
[root@node1 ~]# ssh node3
[root@node1 ~]# ssh node4
9、master主服务器配置
[root@node2 ~]# yum -y install epel-release
[root@node2 ~]# yum -y install mariadb mariadb-server
[root@node2 ~]# rpm -ivh mha4mysql-node-0.56-0.el6.noarch.rpm
修改配置文件
[root@node2 ~]# vim /etc/my.cnf
server-id = 1
log-bin = master-log
relay-log = relay-log
skip_name_resolve
[root@node2 ~]# systemctl restart mariadb #重启mysql
10、master主服务器操作
[root@node2 ~]# mysql #登录
#授权用户给从库使用
MariaDB [(none)]> grant replication slave on *.* to ‘slave’@'%' identified by '123';
Query OK, 0 rows affected (0.04 sec)
#授权用户给manager管理master使用
MariaDB [(none)]> grant all on *.* to ‘mha’@'%' 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 | 529 | | |
+-------------------+----------+--------------+------------------+
1 row in set (0.00 sec)
11、slave1从服务器操作
[root@node2 ~]# mysql #登录
#授权用户给从库使用
MariaDB [(none)]> grant replication slave on *.* to ‘slave’@'%' identified by '123';
Query OK, 0 rows affected (0.04 sec)
#授权用户给manager管理master使用
MariaDB [(none)]> grant all on *.* to ‘mha’@'%' 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 | 529 | | |
+-------------------+----------+--------------+------------------+
1 row in set (0.00 sec)
12、slave2从服务器操作
[root@node4 ~]# yum -y install mariadb mariadb-server epel-release
[root@node4 ~]# rpm -ivh mha4mysql-node-0.56-0.el6.noarch.rpm
[root@node3 ~]# vim /etc/my.cnf #配置一下参数
server-id = 3
relay-log = relay-log
log-bin = master-log
read_only = ON
relay_log_purge = 0
skip_name_resolve
log_slave_updates = 1
[root@node3 ~]# mysql #登录
MariaDB [(none)]> change master to master_host='192.168.174.131',master_user='slave',master_password='123',master_log_file='master-log.000003',master_log_pos=529; #授权指定主服务器数据库
Query OK, 0 rows affected (0.01 sec)
MariaDB [(none)]> start slave; #开启从服务
Query OK, 0 rows affected (0.01 sec)
MariaDB [(none)]> show slave status \G; #查看从数据库连接状态
#授权用户给manager管理slave使用
MariaDB [(none)]> grant all on *.* to ‘slave’@'%' identified by '123';
Query OK, 0 rows affected (0.00 sec) #创建slave用户供管理服务器使用,与slave1用户一致
13、manager管理服务器操作
[root@node4 ~]# yum -y install mariadb mariadb-server epel-release
[root@node4 ~]# rpm -ivh mha4mysql-node-0.56-0.el6.noarch.rpm
[root@node3 ~]# vim /etc/my.cnf #配置一下参数
server-id = 3
relay-log = relay-log
log-bin = master-log
read_only = ON
relay_log_purge = 0
skip_name_resolve
log_slave_updates = 1
[root@node3 ~]# mysql #登录
MariaDB [(none)]> change master to master_host='192.168.174.131',master_user='slave',master_password='123',master_log_file='master-log.000003',master_log_pos=529; #授权指定主服务器数据库
Query OK, 0 rows affected (0.01 sec)
MariaDB [(none)]> start slave; #开启从服务
Query OK, 0 rows affected (0.01 sec)
MariaDB [(none)]> show slave status \G; #查看从数据库连接状态
#授权用户给manager管理slave使用
MariaDB [(none)]> grant all on *.* to ‘slave’@'%' identified by '123';
Query OK, 0 rows affected (0.00 sec) #创建slave用户供管理服务器使用,与slave1用户一致
14、对各个节点进行检测
[root@node1 ~]# masterha_check_ssh --conf=/etc/mha_master/mha.cnf
[root@node1 ~]# masterha_check_ssh --conf=/etc/mha_master/mha.cnf