1.准备MHA集群环境
准备6台虚拟机,并按照本节规划配置好IP参数
在这些虚拟机之间实现SSH免密登录
在相应节点上安装好MHA相关的软件包
使用6台RHEL 7虚拟机,如图-1所示。准备集群环境,安装依赖包,授权用户,配置ssh密钥对认证登陆,所有节点之间互相以root秘钥对认证登录,管理主机以root密钥对认证登录所有数据节点主机,配置mha集群。
1.1 修改主机名,配置IP
msyql{50..57}
192.168.4.{50..57}
1.2 安装包(51-55)
]# mkdir mha-soft-student
]# tar -xvf mha.tar.gz -C mha-soft-student
]# cd mha-soft-student
]# yum -y install perl-*.rpm
1.3 在管理主机上安装mha_node 和 mha-manager包(56操作)
mha-soft-student]# yum -y install perl-DBD-mysql perl-DBI
mha-soft-student]# rpm -ivh mha4mysql-node-0.56-0.el6.noarch.rpm
1.4 配置ssh密钥对认证登陆
所有节点之间可以互相以ssh密钥对方式认证登陆(以51为例)
]# ssh-keygen
]# for i in {50..57}
> do
> ssh-copy-id 192.168.4.$i
> done
2. 配置MHA集群环境
配置主节点 master51
配置两个备用主节点 master52、master53
配置两个从节点 slave54、slave55
配置管理节点 mgm56
2.1 配置mha集群环境
2.1.1 安装数据库(51-55同样操作,以51为例)
]# mkdir mysql
]# tar -xvf mysql-5.7.17.tar -C mysql
]# cd mysql/
]# yum -y install perl-JSON
]# rpm -Uvh mysql-community-*.rpm
]# rpm -qa | grep -i mysql
]# systemctl start mysqld
]# grep 'temporary password' /var/log/mysqld.log
]# mysql -uroot -p''
mysql> alter user user() identified by "123456"; //修改登陆密码
2.1.2 master51 数据库服务器配置文件
]# vim /etc/my.cnf(52.53都配置,修改id)
relay_log_purge=off(不自动删除本机的中继日志文件)
plugin-load = "rpl_semi_sync_master=semisync_master.so;rpl_semi_sync_slave=semisync_slave.so"
rpl-semi-sync-master-enabled = 1
rpl-semi-sync-slave-enabled = 1
server_id=51
log-bin=master51
binlog-format="mixed"
validate_password_policy=0
validate_password_length=6
添加主从同步授权用户(51)
mysql> grant replication slave on *.* to repluser@"%" identified by "123456";
mysql> RESET MASTER;
mysql> show master status;
mysql> SHOW MASTER STATUS\G
*************************** 1. row ***************************
File: master51.000001
Position: 154
Binlog_Do_DB:
Binlog_Ignore_DB:
Executed_Gtid_Set:
2.1.3 master52数据库服务器配置文件(53同样配置)
mysql> RESET MASTER;
mysql> CHANGE MASTER TO
-> MASTER_HOST='192.168.4.51',
-> MASTER_USER='repluser',
-> MASTER_PASSWORD='123456',
-> MASTER_LOG_FILE='master51.000001',
-> MASTER_LOG_POS=154;
mysql> START SLAVE;
mysql> SHOW SLAVE STATUS\G
...
Slave_IO_Running: Yes
Slave_SQL_Running: Yes
...
2.1.4 slave54 数据库服务器配置文件(55一样)
]# vim /etc/my.cnf
[mysqld]
server_id=54
log-bin=mysql54
binlog-format="mixed"
validate_password_policy=0
validate_password_length=6
mysql> RESET MASTER;
mysql> CHANGE MASTER TO
-> MASTER_HOST='192.168.4.51',
-> MASTER_USER='repluser',
-> MASTER_PASSWORD='123456',
-> MASTER_LOG_FILE='master51.000001',
-> MASTER_LOG_POS=154;
mysql> START SLAVE;
mysql> SHOW SLAVE STATUS\G
...
Slave_IO_Running: Yes
Slave_SQL_Running: Yes
...
2.2 配置管理主机4.56
# yum -y install perl*(root下)
]# cd mha-soft-student/
]# yum -y install *.rpm
]# tar -xvf mha4mysql-manager-0.56.tar.gz
]# cd mha4mysql-manager-0.56/
]# prel Makefile.PL
]# make && make install
]# cd mha-soft-student/mha4mysql-manager-0.56/
]# cp bin/* /usr/local/bin/
创建工作目录
]# mkdir /etc/mha_manager
建立样板文件
]# cp samples/conf/app1.cnf /etc/mha_manager/
]# vim /etc/mha_manager/app1.cnf
//编辑主配置文件app1.cnf
[server default]
manager_workdir=/etc/mha_manager
manager_log=/etc/mha_manager/manager.log
master_ip_failover_script=/usr/local/bin/master_ip_failover
ssh_user=root
ssh_port=22
repl_user=repluser
repl_password=123456
user=root
password=123456
[server1]
hostname=192.168.4.51
port=3306
[server2]
hostname=192.168.4.52
port=3306
candidate_master=1
[server3]
hostname=192.168.4.53
port=3306
candidate_master=1
[server4]
hostname=192.168.4.54
no_master=1
[server5]
hostname=192.168.4.55
no_master=1
创建故障切换的脚本
]# vim samples/scripts/master_ip_failover
35 my $vip='192.168.4.100/24';
36 my $key='1';
37 my $ssh_start_vip = '/sbin/ifconfig eth0:$key $vip';
38 my $ssh_stop_vip = '/sbin/ifconfig eth0:$key down';
39
40 GetOptions(在这上面添加上面几行)
]# cp samples/scripts/master_ip_failover /usr/local/bin/
]# chmod +x /usr/local/bin/master_ip_failover
51上部署eth0
51 ~]# ifconfig eth0:1 192.168.4.100/24
]# ifconfig eth0:1
eth0:1: flags=4163<UP,BROADCAST,RUNNING,MULTICAST> mtu 1500
inet 192.168.4.100 netmask 255.255.255.0 broadcast 192.168.4.255
ether 52:54:00:d6:46:46 txqueuelen 1000 (Ethernet)
3.测试MHA集群
查看MHA集群状态
测试节点之间的SSH登录
测试集群VIP的故障切换功能
3.1 验证配置
检查配置环境,在主机 52-55 检查是否有同步数据的用户repluser
mysql> select user,host from mysql.user where user="repluser";
mysql> show grants for repluser@"%";
在51的主机上做root的授权,其他的会同步(如果不做,在验证数据节点的主从同步配置时会出错)
mysql> grant all on *.* to root@"%" identified by "123456";
(50-55查看)
mysql> select user,host from mysql.user where user="root";
+------+-----------+
| user | host |
+------+-----------+
| root | % |
| root | localhost |
+------+-----------+
验证ssh 免密登陆数据节点主机(56)
-0.56]# cd /usr/local/bin/
bin]# masterha_check_ssh --conf=/etc/mha_manager/app1.cnf
...
MySQL Replication Health is OK!
3.2 启动管理服务MHA_Manager
--remove_dead_master_conf //删除宕机主库配置
--ignore_last_failover //忽略xxx.health文件
bin]# masterha_manager --conf=/etc/mha_manager/app1.cnf \
--remove_dead_master_conf --ignore_last_failover
查看状态(另开一个终端)
]# masterha_check_status --conf=/etc/mha_manager/app1.cnf
停止服务
]# masterha_stop --conf=/etc/mha_manager/app1.cnf
3.3 测试故障转移
启动服务
bin]# masterha_manager --conf=/etc/mha_manager/app1.cnf \
--remove_dead_master_conf --ignore_last_failover
查看状态
]# masterha_check_status --conf=/etc/mha_manager/app1.cnf
...master:192.168.4.52
验证数据节点的主从同步配置
bin]# masterha_check_repl --conf=/etc/mha_manager/app1.cnf
- SpringCloud微服务实战——搭建企业级开发框架(三十六):使用Spring Cloud Stream实现可灵活配置消息中间件的功能
在以往消息队列的使用中,我们通常使用集成消息中间件开源包来实现对应功能,而消息中间件的实现又有多种,比如目前比较主流的ActiveMQ.RocketMQ.RabbitMQ.Kafka,Stream ...
- 第三十六个知识点:Index Calculus算法
第三十六个知识点:Index Calculus算法 我们这篇博客继续描述一种数学攻击,这种数学攻击被叫做Index Calculus(IC)算法. 注意这里Index Calculus算法没有找到合适 ...
- 剑指Offer(三十六):两个链表的第一个公共结点
剑指Offer(三十六):两个链表的第一个公共结点 搜索微信公众号:'AI-ming3526'或者'计算机视觉这件小事' 获取更多算法.机器学习干货 csdn:https://blog.csdn.ne ...
- 程序员编程艺术第三十六~三十七章、搜索智能提示suggestion,附近点搜索
第三十六~三十七章.搜索智能提示suggestion,附近地点搜索 作者:July.致谢:caopengcs.胡果果.时间:二零一三年九月七日. 题记 写博的近三年,整理了太多太多的笔试面试题,如微软 ...
- NeHe OpenGL教程 第三十六课:从渲染到纹理
转自[翻译]NeHe OpenGL 教程 前言 声明,此 NeHe OpenGL教程系列文章由51博客yarin翻译(2010-08-19),本博客为转载并稍加整理与修改.对NeHe的OpenGL管线 ...
- Java进阶(三十六)深入理解Java的接口和抽象类
Java进阶(三十六)深入理解Java的接口和抽象类 前言 对于面向对象编程来说,抽象是它的一大特征之一.在Java中,可以通过两种形式来体现OOP的抽象:接口和抽象类.这两者有太多相似的地方,又有太 ...
- Gradle 1.12用户指南翻译——第三十六章. Sonar Runner 插件
本文由CSDN博客万一博主翻译,其他章节的翻译请参见: http://blog.csdn.net/column/details/gradle-translation.html 翻译项目请关注Githu ...
- 第三百三十六节,web爬虫讲解2—urllib库中使用xpath表达式—BeautifulSoup基础
第三百三十六节,web爬虫讲解2—urllib库中使用xpath表达式—BeautifulSoup基础 在urllib中,我们一样可以使用xpath表达式进行信息提取,此时,你需要首先安装lxml模块 ...
- centos shell脚本编程2 if 判断 case判断 shell脚本中的循环 for while shell中的函数 break continue test 命令 第三十六节课
centos shell脚本编程2 if 判断 case判断 shell脚本中的循环 for while shell中的函数 break continue test 命令 ...
- “全栈2019”Java第三十六章:类
难度 初级 学习时间 10分钟 适合人群 零基础 开发语言 Java 开发环境 JDK v11 IntelliJ IDEA v2018.3 文章原文链接 "全栈2019"Java第 ...
随机推荐
- Python后台执行不启用缓存
1.运行时加-u参数,如 # python3 -u test.py >> test.log & 用man查看python的-u参数,说明如下: Force stdin, stdou ...
- Composer简介
Composer 是 PHP 的一个依赖管理工具.它允许你申明项目所依赖的代码库,它会在你的项目中为你安装他们. 依赖管理 Composer 不是一个包管理器.是的,它涉及 "package ...
- vue 写一个瀑布流插件
效果如图所示: 采用了预先加载图片,再计算高度的办法..网络差的情况下,可能有点卡 新建 vue-water-easy.vue 组件文件 <template> <div class ...
- GXOI/GZOI2019部分题解
D1T1:与或和 对每位处理,问题变成所有内部不包含0/1的矩阵的个数,单调栈维护即可. #include<cstdio> #include<algorithm> #inclu ...
- JNI创建共享内存导致JVM terminated的问题解决(segfault,shared memory,内存越界,内存泄漏,共享内存)
此问题研究了将近一个月,最终发现由于JNI不支持C中创建共享内存而导致虚拟机无法识别这块共享内存,造成内存冲突,最终虚拟机崩溃. 注意:JNI的C部分所使用的内存也是由JVM创建并管理的,所以C创建了 ...
- idea .gitignore模板
IDEA 创建的项目,需要搞个.gitignore文件,文件内容可以参考插件的. # Created by .ignore support plugin (hsz.mobi) ### JetBrain ...
- shell 学习笔记1-什么是shell,shell变量
一.介绍 1.什么是shell Shell 既是一种命令语言,又是一种程序设计语言,他在操作系统得最外层,负责直接与用户对话,把用户得输入解释个OS,并处理各类操作系统得输出结果,输出到屏幕返回个i用 ...
- LeetCode每日一练(1-3)
题目导航 1. 两数之和 2. 两数相加 3. 无重复字符的最长子串 1. 两数之和 给定一个整数数组 nums 和一个目标值 target,请你在该数组中找出和为目标值的那 两个 整数,并返回他们的 ...
- axios 内部原理学习记录
前提:一次面试被问到了,axios有什么特点,对比一下ajax.答的很不满意. axios是一个基于Promise的http请求库,可用于浏览器和 Node.可以说是目前最为常用的http库,有必要了 ...
- TensorFlow实现自编码器及多层感知机
1 自动编码机简介 传统机器学习任务在很大程度上依赖于好的特征工程,比如对数值型,日期时间型,种类型等特征的提取.特征工程往往是非常耗时耗力的,在图像,语音和视频中提取到有效的特征就更难 ...