博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
Mysql实战之高可用HMA
阅读量:5136 次
发布时间:2019-06-13

本文共 6527 字,大约阅读时间需要 21 分钟。

author:JevonWei

版权声明:原创作品


主节点高可用

MHA是一款开源的MySQL的高可用程序,他为MySQL主从复制架构提供了automating master failover功能。MHA在监控到master节点故障时,会提升

其中拥有最新数据的slave节点成为新的master节点。在此期间,MHA会通过其他从节点获取额外信息来避免一致性方面的额问题。MHA还提供了master
节点切换功能,即按需切master/slave节点

MHA服务有两种角色,MHA Manager(管理节点)和HMA Node(数据节点)

MHA Manager:通常部署在一台独立机器上管理多个master/slave集群,每个master/slave集群称作一个application;MHA node:运行在每台MySQL服务器上(master/slave/manager),他通过监控具备解析和清理logs功能的脚本来加快故障转移。

MHA组件

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线程)    自定义扩展    -sccondary_check_script:通过多条网络路由检测master的可用性    -master_ip_failover_script:更新application使用的masterrip    -shutdown_script:强制关闭master节点    -report_script:发送报告    -init_conf_load_script:加载初始化配置参数    -master_ip_online_change_script:更新master节点ip地址

构建高可用HMA架构

节点角色

mysql-master 172.16.252.82mysql-slave1 172.16.252.92mysql-slave2 172.16.252.100manager      172.16.252.67

配置各节点之间可以通过主机名通信

[root@manager  ~]# vim /etc/hosts172.16.252.82 mysql-master172.16.252.92 mysql-slave1172.16.252.100 mysql-slave2172.16.252.67 manager 其他各主机依次配置主机名解析文件

mysql-master

[root@mysql-master ~]# vim /etc/my.cnf.d/server.cnf[mysqld]server_id = 1relay-log = relay-loglog-bin = master-logskip_name_resolve = ONinnodb_file_per_table = ON[root@mysql-master ~]# systemctl start mariadb[root@mysql-master ~]# mysql授权一个有权限做主从复制的用户MariaDB [(none)]> GRANT REPLICATION CLIENT,REPLICATION SLAVE ON *.* TO 'repluser'@'172.16.%.%' IDENTIFIED BY 'replpass';MariaDB [(none)]> FLUSH PRIVILEGES;查看master节点的状态,记录二进制文件的位置信息,用于从节点的复制起点MariaDB [(none)]> SHOW MASTER STATUS;+-------------------+----------+--------------+------------------+| File              | Position | Binlog_Do_DB | Binlog_Ignore_DB |+-------------------+----------+--------------+------------------+| master-log.000001 |      501 |              |                  |+-------------------+----------+--------------+------------------+

mysql-slave1

[root@mysql-slave1 ~]# vim /etc/my.cnf.d/server.cnf[mysqld]server_id = 2relay-log = relay-loglog-bin = master-logskip_name_resolve = ONinnodb_file_per_table = ONread_only = ONrelay_log_purge = OFF[root@mysql-slave1 ~]# systemctl start mariadb   [root@mysql-slave ~]# mysqlMariaDB [mydb]> SHOW GLOBAL VARIABLES LIKE 'read_only';  \\查看数据库为只读+---------------+-------+| Variable_name | Value |+---------------+-------+| read_only     | ON   |+---------------+-------+连接主节点数据库MariaDB [(none)]> CHANGE MASTER TO MASTER_HOST='192.168.198.139',MASTER_USER='repluser',MASTER_PASSWORD='replpass',MASTER_LOG_FILE='master-log.000001',MASTER_LOG_POS=501;启动从节点复制进程MariaDB [(none)]> START SLAVE;查看SLAVE节点的状态MariaDB [(none)]> SHOW SLAVE STATUS\G;连接manager的用户MariaDB [(none)]> GRANT REPLICATION CLIENT,REPLICATION SLAVE ON *.* TO 'repluser'@'172.16.%.%' IDENTIFIED BY 'replpass';

mysql-slave2

root@mysql-slave2 ~]# vim /etc/my.cnf.d/server.cnf [mysqld]server_id = 3relay-log = relay-loglog-bin = master-logskip_name_resolve = ONinnodb_file_per_table = ONread_only = ONrelay_log_purge = OFF[root@mysql-slave2 ~]# systemctl start mariadb  [root@mysql-slave ~]# mysqlMariaDB [mydb]> SHOW GLOBAL VARIABLES LIKE 'read_only';  \\查看数据库为只读+---------------+-------+| Variable_name | Value |+---------------+-------+| read_only     | ON   |+---------------+-------+连接主节点数据库MariaDB [(none)]> CHANGE MASTER TO MASTER_HOST='192.168.198.139',MASTER_USER='repluser',MASTER_PASSWORD='replpass',MASTER_LOG_FILE='master-log.000001',MASTER_LOG_POS=501;启动从节点复制进程MariaDB [(none)]> START SLAVE;查看SLAVE节点的状态MariaDB [(none)]> SHOW SLAVE STATUS\G;连接manager的用户MariaDB [(none)]> GRANT REPLICATION CLIENT,REPLICATION SLAVE ON *.* TO 'repluser'@'172.16.%.%' IDENTIFIED BY 'replpass';

mysql-master(master/slave上都需有此用户权限来连接manager)

MariaDB [(none)]> GRANT ALL ON *.* TO 'mha'@'172.16.%.%' IDENTIFIED BY 'mhapass';MariaDB [(none)]> GRANT REPLICATION CLIENT,REPLICATION SLAVE ON *.* TO 'repluser'@'172.16.%.%' IDENTIFIED BY 'replpass';

MHA安装

github官网下载manager到本地[root@manager ~]# ls mha4mysql-node-0.56-0.el6.noarch.rpm mha4mysql-manager-0.56-0.el6.noarch.rpm mha4mysql-manager-0.56-0.el6.noarch.rpm  mha4mysql-node-0.56-0.el6.noarch.rpm[root@manager ~]# yum install ./mha4mysql-*   安装MHA程序包复制mha4mysql-node-0.56-0.el6.noarch.rpm程序包到各节点上[root@manager ~]# scp mha4mysql-node-0.56-0.el6.noarch.rpm mysql-master:/root[root@manager ~]# scp mha4mysql-node-0.56-0.el6.noarch.rpm mysql-slave1:/root[root@manager ~]# scp mha4mysql-node-0.56-0.el6.noarch.rpm mysql-slave2:/rootmysql-master、mysql-slave1和mysql-slave2节点依次安装mha4mysql-node-0.56-0.el6.noarch.rpm程序包[root@mysql-master ~]# yum -y install ./mha4mysql-node-0.56-0.el6.noarch.rpm [root@mysql-slave1 ~]# yum -y install ./mha4mysql-node-0.56-0.el6.noarch.rpm[root@mysql-slave2 ~]# yum -y install ./mha4mysql-node-0.56-0.el6.noarch.rpm

配置各节点之间SSH互信的通信环境

HMA

[root@manager ~]# ssh-keygen -t rsa -P ''  生成ssh秘钥文件[root@manager ~]# ssh-copy-id -i .ssh/id_rsa.pub root@manager[root@manager ~]# scp -p .ssh/id_rsa .ssh/authorized_leys root@mysql-master:/root/.ssh[root@manager ~]# scp -p .ssh/id_rsa .ssh/authorized_leys root@mysql-slave1:/root/.ssh[root@manager ~]# scp -p .ssh/id_rsa .ssh/authorized_leys root@mysql-slave2:/root/.ssh[root@mysql-master ~]# ssh -o StrictHostKeyChecking=no mysql-slave1 直接连接mysql-slave主机,无询问,无提示

初始化HMA

manager    [root@manager ~]# mkdir /data/masterha    [root@manager ~]# mkdir /data/masterha/app    [root@manager ~]# mkdir /etc/masterha    [root@manager ~]# vim /etc/masterha/app.cnf    [server default]    user=mha    password=mhapass  \\node节点连接manager的用户    manager_workdir=/data/masterha/app    manager_log=/data/masterha/app/manager.log    remote_workdir=/data/masterha/app    ssh_user=root    repl_user=repluser    repl_password=replpass    ping_interval=1    [server1]    hostname=172.16.252.82    candidate_master=1    [server2]    hostname=172.16.252.92    candidate_master=1    [server3]    hostname=172.16.252.100    candidate_master=1

测试后端主机的集群

[root@manager ~]# masterha_check_repl --conf=/etc/masterha/app.cnf

测试运行HMA程序

[root@manager ~]# masterha_manager --conf=/etc/masterha/app.cnf

查看HMA集群的状态

[root@manager ~]# masterha_check_status

转载于:https://www.cnblogs.com/JevonWei/p/7525924.html

你可能感兴趣的文章
网易味央第二座猪场落户江西 面积超过3300亩
查看>>
面试时被问到的问题
查看>>
spring 事务管理
查看>>
VS2008 去掉msvcr90的依赖
查看>>
当前记录已被另一个用户锁定
查看>>
Bootstrap
查看>>
Node.js 连接 MySQL
查看>>
ACM-ICPC 2018 world final A题 Catch the Plane
查看>>
那些年,那些书
查看>>
面向对象六大基本原则的理解
查看>>
注解小结
查看>>
java代码编译与C/C++代码编译的区别
查看>>
Bitmap 算法
查看>>
转载 C#文件中GetCommandLineArgs()
查看>>
list control控件的一些操作
查看>>
精读《useEffect 完全指南》
查看>>
SNF快速开发平台MVC-EasyQuery-拖拽生成SQL脚本
查看>>
DrawerLayout实现双向侧滑
查看>>
MySQL入门很简单-触发器
查看>>
LVM快照(snapshot)备份
查看>>