Centos 7.6基于MariaDB-server-10.2.32-1.el7 版本实现MHA高可用

news/2024/7/3 15:03:17

背景:
该软件由两部分组成:MHA Manager(管理节点)和 MHA Node(数据节点)。MHA Manager 可以单独部署在一台独立的机器上管理多个 master-slave 集群,也可以部署在一台 slave 节点上。MHA Node 运行在每台 MySQL 服务器上,MHA Manager 会定时探测集群中的 master 节点,当 master 出现故障时,它可以自动将最新数据的 slave 提升为新的 master,然后将所有其他的 slave 重新指向新的 master。整个故障转移过程对应用程序完全透明。
在 MHA 自动故障切换过程中,MHA 试图从宕机的主服务器上保存二进制日志,最大程度的保证数据的不丢失,但这并不总是可行的。例如,如果主服务器硬件故障或无法通过ssh访问,MHA 没法保存二进制日志,只进行故障转移而丢失了最新的数据。使用 MySQL 5.5 的半同步复制,可以大大降低数据丢失的风险。MHA 可以与半同步复制结合起来。如果只有一个 slave 已经收到了最新的二进制日志,MHA 可以将最新的二进制日志应用于其他所有的 slave 服务器上,因此可以保证所有节点的数据一致性。
目前 MHA 主要支持一主多从的架构,要搭建 MHA,要求一个复制集群中必须最少有三台数据库服务器,一主二从,即一台充当 master,一台充当备用 master,另外一台充当从库,因为至少需要三台服务器,出于机器成本的考虑,淘宝也在该基础上进行了改造,目前淘宝TMHA已经支持一主一从。

准备条件:
四台主机:
一台MHA Manager (192.168.6.129) 管理调度器
三台主从复制架构(一主多从)
Master(192.168.6.130)
Slave1 (192.168.6.131)
Slave2 (192.168.6.132)

系统:centos 7.6
数据库: MariaDB-server-10.2.32
MHA软件包:mha4mysql-manager-0.56,mha4mysql-node-0.56

实验开始:yum 仓库配置好 mariadb阿里云的epel 源

1.在三台主机下安装好mariadb 数据库 版本号要一致

[root@master ~]# yum install -y mariadb-server
[root@slave1 ~]# yum install -y mariadb-server
[root@slave2 ~]# yum install -y mariadb-server

2、准备MHA软件包,MHA Manager 主机节点需要 mha4mysql-managermha4mysql-node,其它三个节点只需要 mha4mysql-node

[root@MHAserver data]# ll
total 124
-rw-r--r-- 1 root root 87119 Aug  4 14:51 mha4mysql-manager-0.56-0.el6.noarch.rpm
-rw-r--r-- 1 root root 36326 Aug  4 14:51 mha4mysql-node-0.56-0.el6.noarch.rpm

[root@master data]# ll
total 36
-rw-r--r-- 1 root root 36326 Aug  4 14:51 mha4mysql-node-0.56-0.el6.noarch.rpm

[root@salve1 data]# ll
total 36
-rw-r--r-- 1 root root  36326 Aug  4 14:51 mha4mysql-node-0.56-0.el6.noarch.rpm

[root@slave2 data]# ll
total 36
-rw-r--r-- 1 root root  36326 Aug  4 14:51 mha4mysql-node-0.56-0.el6.noarch.rpm

3.安装MHA软件包,MHA Manager 主机节点安装 mha4mysql-manager 时需要依赖 epel 源,这里使用阿里云的epel源,要先搭建好yum 仓库

注:这里要用到光盘的依赖包,所以需要启动autofs.server 服务
这里设置成永久永久启动
systemctl start autofs.service
systemctl enable autofs.service

在MHAserver管理器上安装rpm 包
[root@MHAserver data]# ll
total 124
-rw-r--r-- 1 root root 87119 Aug  4 14:51 mha4mysql-manager-0.56-0.el6.noarch.rpm
-rw-r--r-- 1 root root 36326 Aug  4 14:51 mha4mysql-node-0.56-0.el6.noarch.rpm
[root@MHAserver data]# yum install -y mha4mysql-*

在master(192.168.6.130)主节点上安装mha4mysql-node-0.56-0.el6.noarch.rpm
[root@master data]# yum install -y mha4mysql-node-0.56-0.el6.noarch.rpm 
[root@master data]# yum install -y mha4mysql-node-0.56-0.el6.noarch.rpm

在salve1(192.168.6.131)主节点上安装mha4mysql-node-0.56-0.el6.noarch.rpm

[root@salve1 data]# yum install -y mha4mysql-node-0.56-0.el6.noarch.rpm 
-rw-r--r-- 1 root root  36326 Aug  4 14:51 mha4mysql-node-0.56-0.el6.noarch.rpm

在salve2(192.168.6.131)主节点上安装mha4mysql-node-0.56-0.el6.noarch.rpm

[root@salve2 data]# yum install -y mha4mysql-node-0.56-0.el6.noarch.rpm 
-rw-r--r-- 1 root root  36326 Aug  4 14:51 mha4mysql-node-0.56-0.el6.noarch.rpm

4.在主节点上(192.168.6.130)上配置

Vim /etc/my.cnf
[mysqld]
server-id=1
log-bin
skip_name-resolve=1

启动服务器
Systemctl start mariadb
初始化数据库
/usr/bin/mysql_secure_installation
进入数据库
mysql -uroot -p123456
show master logs;

在这里插入图片描述

授权从节点远程主机 账户和密码
grant replication slave on *.* to repluser@'192.168.6.%' identified by 'centos';
授权mha主机 账户和密码
grant all on *.* to mhauser@'192.168.6.%' identified by 'mhauser';

5.配置从节点slave1

[mysqld]
server-id=2
log-bin
read-only
relay_log_purge=0
skip_name_resolve=1

启动数据库
Systemctl start mariadb
进入数据库
Mysql -uroot -p123456

修改:
CHANGE MASTER TO     
MASTER_HOST='192.168.6.130',     
MASTER_USER='repluser',     
MASTER_PASSWORD='centos',     
MASTER_LOG_FILE='master-bin.000001',     
MASTER_LOG_POS=1408;
启动slave;
Start slave;
Show slave status\G;

在这里插入图片描述
6.配置salve2(192.168.6.132)

[mysqld]
server-id=3
log-bin
read-only
relay_log_purge=0
skip_name_resolve=1
启动mariadb  数据库
Systemctl start mariadb

进入数据库
Mysql -uroot -p123456
配置
CHANGE MASTER TO     
MASTER_HOST='192.168.6.130',     
MASTER_USER='repluser',     
MASTER_PASSWORD='centos',     
MASTER_LOG_FILE='master-bin.000001',     
MASTER_LOG_POS=1408;

启动从节点服务
Start slave;

查看从节点信息;
Show salve status\G;

在这里插入图片描述
5.配置MHA manager(192.168.6.129)主机和其他三台主机的Key验证的ssh服务,MHA是基于ssh 免登录的
在这里插入图片描述

[root@MHAserver ~]# cd .ssh/
[root@MHAserver .ssh]# ll
total 12
-rw------- 1 root root 1679 Aug  4 17:43 id_rsa
-rw-r--r-- 1 root root  408 Aug  4 17:43 id_rsa.pub
-rw-r--r-- 1 root root  175 Jul 30 18:14 known_hosts

实现免登录操作
[root@MHAServer ~]# ssh-copy-id -i /root/.ssh/id_rsa.pub root@192.168.6.129
[root@MHAServer ~]# scp -r .ssh root@192.168.6.130:/root/
[root@MHAServer ~]# scp -r .ssh root@192.168.6.131:/root/
[root@MHAServer ~]# scp -r .ssh root@192.168.6.132:/root/

6.配置MHA Manager 节点的配置文件

[root@MHAServer ~]# mkdir /etc/mha/
[root@MHAServer ~]# vim /etc/mha/mha.cnf

[server default]
user=mhauser
password=mhauser
manager_workdir=/data/mastermha/
manager_log=/data/mastermha/manager.log
remote_workdir=/data/mastermha/
ssh_user=root
repl_user=repluser
repl_password=centos
ping_interval=1

[server1]
hostname=192.168.6.130
candidate_master=1

[server2]
hostname=192.168.6.131
candidate_master=1

[server3]
hostname=192.168.6.132

7.开启MHA服务之前的验证和启动

[root@MHAserver mha]# masterha_check_ssh --conf=/etc/mha/mha.cnf  #验证ssh

在这里插入图片描述

[root@MHAserver mha]# masterha_check_repl --conf=/etc/mha/mha.cnf  #验证主从复制

在这里插入图片描述

[root@MHAserver mha]# masterha_manager --conf=/etc/mha/mha.cnf  #启动

在这里插入图片描述
8.测试当master(192.168.6.130)主机节点断开时,主从的切换

[root@master cd]# systemctl stop mariadb.service  # 停掉master(192.168.6.130)的数据库

在slave1(192.168.6.131)上查看
在这里插入图片描述
查询为空,说明已经切换为主服务点了

查看

MariaDB [(none)]> show variables like 'read_only';

在这里插入图片描述
在slave2(192.168.6.132)上查看主节点是否转为salve1(192.168.6.131)
在这里插入图片描述


http://www.niftyadmin.cn/n/2199353.html

相关文章

数据库连接池

一、数据库连接池的原理 基本原理 对于一个简单的数据库应用,由于对于数据库的访问不是很频繁。这时可以简单地在需要访问数据库时,就新创建一个连接,用完后就关闭它,这样做也不会带来什么明显的性能上的开销。但是对于一个复杂的…

腾讯云中矿机病毒 ld-linux-x86-64 处理过程

2019独角兽企业重金招聘Python工程师标准>>> 今天Wiki服务挂掉502,登录服务器查看, 双核CPU使用率几乎200% kill掉一会又重启 注意了 我的解决办法: 先杀死矿机进程 pkill -9 ld-linux 然后删除 mysql 用户 userdel -f mysql 查询没有可疑的定…

如何在 Linux 下乾坤大挪移?

2019独角兽企业重金招聘Python工程师标准>>> mv 也是 Linux 下一个使用频率非常高的命令,但除了一些基本用法,你还知道它的哪些高级用法呢? mv 也是 Linux 下一个使用频率非常高的命令,但除了一些基本用法,你还知道它…

Centos 7.6 下利用ansible自动化安装httpd服务

一、ansible简介   ansible是一款由python语言编写的一款自动化运维工具,它集合了众多运维工具(puppet、cfengine、chef、func、fabric)优点,实现了批量系统配置、批量程序部署、批量运行命令等功能。它的创始人,Mic…

[vue]div高度height:100%不生效

2019独角兽企业重金招聘Python工程师标准>>> 解决了!除了设置app为100%template里第一个div就要100%https://segmentfault.com/a/1190000015789623https://blog.csdn.net/weixin_39973810/article/details/78549526 原理 App.vue// 高度百分百 html,body…

Httpd基础之搭建httpd服务器并提供两个基于名称的虚拟主机

说明 所谓虚拟主机不外乎就是一个物理主机上存在多个虚拟站点;通常httpd的虚拟主机有三类,分别是基于ip的虚拟主机、基于端口的虚拟主机以及基于FQDN的虚拟主机;不难理解基于ip的虚拟主机就是以不同IP来区分不同的虚拟主机;基于端…

JDK中的动态代理机制

定义 代理模式:为其他对象提供一种代理以控制对这个对象的访问。 事例 小明是一个程序员,在公司负责项目的研发工作。有一天,客户打电话进来,沟通之后,原来客户是有个模块需求要变动一下。小明却没有应允,而…

Linux 搭建私有CA证书服务器之超详细版本

一、CA简介 CA是什么?CA是Certificate Authority的简写,从字面意思翻译过来是凭证管理中心,认证授权。它有点类似我们生活中的身份证颁发机构,这里的CA就相当于生活中颁发身份证的机构。不同于生活中的颁发机构,这里的…