赞
踩
MHA(MasterHigh Availability)是一套优秀的MySQL高可用环境下故障切换和主从复制的软件。
MHA 的出现就是解决MySQL 单点故障的问题。
MySQL故障切换过程中,MHA能做到0-30秒内自动完成故障切换操作。
MHA能在故障切换的过程中最大程度上保证数据的一致性,以达到真正意义上的高可用。
1)MHA Node(数据节点)
2)MHA Manager(管理节点)
节点服务器 系统 主机名 IP地址 安装工具及服务
MHA manager 服务器 CentOS7.4(64 位) manager 192.168.52.100 MHA node 和 manager 组件
Master 服务器 CentOS7.4(64 位) mysql1 192.168.52.140 MHA node 组件
Slave1 服务器 CentOS7.4(64 位) mysql2 192.168.52.130 MHA node 组件
Slave2 服务器 CentOS7.4(64 位) mysql3 192.168.52.120 MHA node 组件
- systemctl stop firewalld
- systemctl disable firewalld
- setenforce 0
- #Master 节点
- hostnamectl set-hostname mysql1
- su
- #Slave1节点
- hostnamectl set-hostname mysql2
- su
- #Slave2节点
- hostnamectl set-hostname mysql3
- su
- #三台添加同样的配置
- vim /etc/hosts
- 192.168.92.7 mysql1
- 192.168.92.6 mysql2
- 192.168.92.9 mysql3
Master节点,开启二进制日志。
Slave1、Slave2 节点,开启二进制日志和中继日志。
- #Master 节点
- vim /etc/my.cnf
- [mysqld]
- server-id = 1
- log_bin = master-bin #开启二进制日志
- log-slave-updates = true #允许slave从master复制数据时可以写入到自己的二进制日志
- --------------------------------------------
- systemctl restart mysqld #重启mysql
-
- #Slave1节点
- vim /etc/my.cnf
- [mysqld]
- server-id = 2 #三台服务器的 server-id 不能相同
- log_bin = master-bin #开启中继日志
- relay-log = relay-log-bin
- relay-log-index = slave-relay-bin.index
- -----------------------------------------------------
- systemctl restart mysqld
-
- #Slave2节点
- vim /etc/my.cnf
- [mysqld]
- server-id = 3 #三台服务器的 server-id 不能相同
- log_bin = master-bin #开启中继日志
- relay-log = relay-log-bin #添加定义中继日志文件位置与名称一般与二进制文件在同一目录
- relay-log-index = slave-relay-bin.index
- ------------------------------------------------
- systemctl restart mysqld #重启mysql
- ln -s /usr/local/mysql/bin/mysql /usr/sbin/
- ln -s /usr/local/mysql/bin/mysqlbinlog /usr/sbin/
- ls /usr/sbin/mysql* #查看软链接
所有数据库节点mysql主从同步的授权
- grant replication slave on *.* to 'myslave'@'192.168.92.%' identified by '123123';
- #从服务器同步使用
所有数据库节点,授权给manager服务器
- #所有数据库节点进行manager授权
- grant all privileges on *.* to 'my'@'192.168.92.%' identified by 'abc123';
- #为了防止因主机名导致的连接不上问题,再次对登录地址进行授权
- grant all privileges on *.* to 'my'@'mysql1' identified by 'abc123';
- grant all privileges on *.* to 'my'@'mysql2' identified by 'abc123';
- grant all privileges on *.* to 'my'@'mysql3' identified by 'abc123';
- flush privileges; #刷新权限
在 Master 节点查看二进制文件和同步点
- #在 Master 节点查看二进制文件和同步点(即偏移量)
- show master status;
在 Slave1、Slave2 节点执行同步操作:
- #在 Slave1、Slave2 节点执行同步操作
- change master to
- master_host='192.168.92.7',
- master_user='myslave',
- master_password='123123',
- master_log_file='master-bin.000001',
- master_log_pos=1893;
- ------------------------------------------------
- start slave; #开启同步,如有报错执行 reset slave;
- ------------------------------------
- #在 Slave1、Slave2 查看节点状态
- show slave status\G
- #确保 IO 和 SQL 线程都是 Yes,代表同步正常。
- Slave_IO_Running: Yes
- Slave_SQL_Running: Yes
一般Slave_IO_Running:No的可能性
两个从库设置为只读模式
- #两个从库必须设置为只读模式
- set global read_only=1;
在Master主库插入数据
- #在Master主库插入数据,测试数据库同步##
- create database my;
- use my;
- create table city(id int);
- insert into city values (1);
从数据库中验证数据同步
- #从数据库中验证是否同步成功
- show databases;
- use my;
- show tables;
- select * from city;
所有服务器上都安装MHA依赖的环境,首先安装 epel 源
- #安装epel源
- yum install epel-release --nogpgcheck -y
-
- #安装 MHA依赖环境
- yum install -y perl-DBD-MySQL \
- perl-Config-Tiny \
- perl-Log-Dispatch \
- perl-Parallel-ForkManager \
- perl-ExtUtils-CBuilder \
- perl-ExtUtils-MakeMaker \
- perl-CPAN
所有服务器上首先安装epel源
所有服务器安装MHA依赖的环境
安装 MHA 软件包,必须先在所有服务器上安装 node 组件
在所有服务器上安装 node 组件
- #将安装包上传到/opt/目录中,解压安装node组件
- cd /opt/
- tar zxvf mha4mysql-node-0.57.tar.gz
- cd mha4mysql-node-0.57
- perl Makefile.PL
- make && make install
最后在 MHA manager 节点上安装 manager 组件
- 在 MHA manager 节点上安装 manager 组件##(manager组件依赖node 组件)
- cd /opt/
- tar zxvf mha4mysql-manager-0.57.tar.gz
- cd mha4mysql-manager-0.57
- perl Makefile.PL
- make && make install
manager 组件安装后在/usr/local/bin 下面会生成几个工具,主要包括以下几个
- masterha_check_ssh #检查 MHA 的 SSH 配置状况
- masterha_check_repl #检查 MySQL 复制状况
- masterha_manger #启动 manager的脚本
- masterha_check_status #检测当前 MHA 运行状态
- masterha_master_monitor #检测 master 是否宕机
- masterha_master_switch #控制故障转移(自动或者手动)
- masterha_conf_host #添加或删除配置的 server 信息
- masterha_stop #关闭manager
node 组件安装后也会在/usr/local/bin/ 下面会生成几个脚本(这些工具通常由 MHAManager 的脚本触发,无需人为操作)主要如下
- save_binary_logs #保存和复制 master 的二进制日志
- apply_diff_relay_logs #识别差异的中继日志事件并将其差异的事件应用于其他的slave
- filter_mysqlbinlog #去除不必要的 ROLLBACK 事件(MHA 已不再使用这个工具)
- purge_relay_logs #清除中继日志(不会阻塞 SQL 线程)
在 manager 节点上配置到所有数据库节点的无密码认证
- ssh-keygen -t rsa #一路按回车键,生成密钥。"-t rsa"指定密钥的类型。
- ssh-copy-id 192.168.92.7 #将公钥传给所有数据库节点,形成免密码连接登录
- ssh-copy-id 192.168.92.6
- ssh-copy-id 192.168.92.9
在 manager 节点上配置到所有数据库节点的无密码认证
在 mysql1主节点服务器上配置到数据库节点 mysql2 和 mysql3 的无密码认证
- ssh-keygen -t rsa
- #将公钥传给两个从节点,形成免密码连接登录
- ssh-copy-id 192.168.92.6
- ssh-copy-id 192.168.92.9
在 mysql2即slave1 上配置到数据库节点 mysql1 和 mysql3 的无密码认证
- ssh-keygen -t rsa
- ssh-copy-id 192.168.52.140 #master服务器
- ssh-copy-id 192.168.52.120 #slave2服务器
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。