当前位置: 首页 > news >正文

MySQL的MHA高可用集群解决方案应用实战(上)

高可用MySQL的整体解决方案、体系化原理和指导思路https://coffeemilk.blog.csdn.net/article/details/152078348?spm=1001.2014.3001.5502

一、MHA集群架构说明

 1.1、MHA简介

MHA简介

MHA(Master High Availability)目前在MySQL高可用方面是一个相对成熟的解决方案,是作为MySQL高可用性环境下故障切换和主从同步的一套优秀高可用软件,采用 Perl 语言开发。

        MHA能在MySQL故障切换过程中,做到在0~30秒之内自动完成数据库的故障切换操作,并且在进行故障切换的过程中,MHA能在最大程度上保证数据的一致性,以达到真正意义上的高可用。

序号说明
1

MHA由两部分组成【MHA Manager(管理节点)】【MHA Node(数据节点)】:

《1》MHA Manager可以单独部署在一台独立的机器上管理多个master-slave集群,也可以部署在一台slave节点上。

《2》MHA Node运行在每台MySQL服务器上;

《3》MHA Manager会定时探测集群中的master节点,当master出现故障时,它可以自动将最新数据的slave提升为新的master,然后将所有其他的slave重新指向新的master。整个故障转移过程对应用程序完全透明。

2

在MHA自动故障切换过程中,MHA试图从宕机的主服务器上保存二进制日志,最大程度的保证数据的不丢失,但这并不总是可行的。(如:如果主服务器硬件故障或无法通过ssh访问,MHA没法保存二进制日志,只进行故障转移而丢失了最新的数据)。

        使用MySQL的半同步复制,可以大大降低数据丢失的风险;MHA可以与半同步复制结合起来(如果只有一个slave已经收到了最新的二进制日志,MHA可以将最新的二进制日志应用于其他所有的slave服务器上,因此可以保证所有节点的数据一致性)。

3目前MHA主要支持一主多从的架构,要搭建MHA,要求一个复制集群中必须最少有三台数据库服务器,一主二从,即一台充当master,一台充当备用master,另外一台充当从库。
MHA官网

 1.2、MHA架构

 1.3、MHA的组成

MHA的组成
MHA由两部分组成【MHA Manager(管理节点)】【MHA Node(数据节点)】
MHA Manager(管理节点)工具包内容
序号MHA Manager工具包内容说明
1masterha_check_ssh检查MHA的SSH配置状况
2masterha_check_repl检查MySQL复制状况
3masterha_manger启动MHA
4masterha_check_status检测当前MHA运行状态
5masterha_master_monitor检测master是否宕机
6masterha_master_switch控制故障转移(自动或者手动)
7masterha_conf_host添加或删除配置的server信息
MHA Node(数据节点)工具包内容(通常由MHA Manager的脚本触发,无需人为操作)
序号MHA Node工具包内容说明
1save_binary_logs保存和复制master的二进制日志
2apply_diff_relay_logs识别差异的中继日志事件并将其差异的事件应用于其他的slave
3purge_relay_logs 清除中继日志(不会阻塞SQL线程)

 1.4、MHA基础集群架构

        MHA集群架构中Master对外提供写服务,备选master(实际的Slave,主机名41server)提供读服务,42server也提供相关的读服务,一旦Master宕机,MHA将会把备选Master提升为新的Master,Slave节点42server也会自动修改复制地址为新的Master地址。

 1.5、MySQL的MHA高可用集群环境

MySQL的MHA高可用集群环境

《1》采用四台物理机或虚拟机,都使用OpenEuler2203LTS或(RHEL9/Almalinux9.1)及其更高系统。

《2》采用MySQL版本为:8.0.43。。

《3》MHA的版本为:0.58及其更高版本。

角色IP规划主机名称Server_id类型
Master192.168.1.4040server1写入
Slave/备选Master192.168.1.4141server2
Slave192.168.1.4242server3
MHAManager192.168.1.1010server监控复制组

Linux的全新网络管理命令行工具——nmcli-CSDN博客https://coffeemilk.blog.csdn.net/article/details/148851886

#修改Linux主机名称命令【hostnamectl set-hostname 需修改为的主机名称】#1-修改192.168.1.10服务器主机名称为10server
hostnamectl set-hostname 10server
host
reboot

二、MySQL的MHA高可用集群实操流程

 2.1、实现MySQL服务器的ssh无密码登录

实现Linux的ssh免密登录实操保姆级教程https://blog.csdn.net/xiaochenXIHUA/article/details/152375722?spm=1001.2014.3001.5501

《1》在安装MySQL服务器上配置的免密登录流程

#实现安装MySQL服务器的ssh免密码登录实操步骤#1-在任意一台服务器上生成密钥对(其中ck@163.com是邮箱地址,可根据自己需要自定义内容,这有助于标识密钥的用途或拥有者)
ssh-keygen -t ed25519 -C "ck@163.com"
cd /root/.ssh#2-将生成的公有密钥【/root/.ssh/id_ed25519.pub】生成到需免密登录的服务器上(包括生成密钥对的服务器也要生成)
ssh-copy-id -i /root/.ssh/id_ed25519.pub -p 22222 root@192.168.1.40
ssh-copy-id -i /root/.ssh/id_ed25519.pub -p 22222 root@192.168.1.41
ssh-copy-id -i /root/.ssh/id_ed25519.pub -p 22222 root@192.168.1.42#3-验证ssh免密登录是否成功
ssh -p 22222 192.168.1.40
ssh -p 22222 192.168.1.41
ssh -p 22222 192.168.1.42#4-#登录到服务器后查看当前是哪个用户及其当前服务器的信息
whoami
hostnamectl
exit

        需要这三台MySQL的Linux服务器上都执行ssh免密登录的操作;可实现在每台服务器上都可以免密登录其他的服务器。

《2》在Manager节点服务器执行的免密登录操作

        主要实现【MHA Manager】节点服务器可以免密码登录到所有MySQL的服务器,详细操作如下:

#实现安装【MHA Manager】节点服务器(192.168.1.10)的ssh免密码登录实操步骤#1-在安装【MHA Manager】服务器上生成密钥对(其中ck@163.com是邮箱地址,可根据自己需要自定义内容,这有助于标识密钥的用途或拥有者)
ssh-keygen -t ed25519 -C "ck@163.com"
cd /root/.ssh#2-将生成的公有密钥【/root/.ssh/id_ed25519.pub】生成到需免密登录的服务器上(包括生成密钥对的服务器也要生成)
ssh-copy-id -i /root/.ssh/id_ed25519.pub -p 22222 root@192.168.1.40
ssh-copy-id -i /root/.ssh/id_ed25519.pub -p 22222 root@192.168.1.41
ssh-copy-id -i /root/.ssh/id_ed25519.pub -p 22222 root@192.168.1.42#3-验证ssh免密登录是否成功
ssh -p 22222 192.168.1.40
ssh -p 22222 192.168.1.41
ssh -p 22222 192.168.1.42#4-#登录到服务器后查看当前是哪个用户及其当前服务器的信息
whoami
hostnamectl
exit

 2.2、安装MySQL8.0.43及主从复制环境配置

  2.2.1、安装MySQL8.0.43数据库

全网最全的关系型数据库MySQL解析及其安装部署的保姆级教程https://coffeemilk.blog.csdn.net/article/details/151891095

 进入Mysql的社区版(Community Server)下载界面选择对应的版本-->【Linux Generic】-->【选择CPU架构(如:x86)】后即可选择第一个Mysql压缩过的二进制包下载。

#使用MySQL二进制包安装的详细实操流程#1-下载MySQL二进制安装包并解压
wget https://dev.mysql.com/get/Downloads/MySQL-8.0/mysql-8.0.43-linux-glibc2.28-x86_64.tar.xz -c 0 -P /data
mkdir -p /usr/local/mysql
cd /data
tar -xvf mysql-8.0.43-linux-glibc2.28-x86_64.tar.xz -C /usr/local/mysql/#2-进入mysql的安装目录修改名称
cd /usr/local/mysql/
mv mysql-8.0.43-linux-glibc2.28-x86_64 mysql-8.0.43#3-创建mysql用户且给mysql二进制文件所在目录【/usr/local/mysql/mysql-8.0.43/】创建data、etc、logs文件夹
useradd mysql
id mysql
cd mysql-8.0.43/
mkdir -p /usr/local/mysql/mysql-8.0.43/{data,etc,logs}
cd etc#4-进入【/usr/local/mysql/mysql-8.0.43/etc】下创建并编辑mysql的配置文件my.cnf及其配置里面的内容
cd /usr/local/mysql/mysql-8.0.43/etc
vi my.cnf[mysqld]
#指定mysql的数据存放路径
datadir=/usr/local/mysql/mysql-8.0.43/data
socket=/tmp/mysql.sock
#指定mysql的报错日志文件
log-error=/usr/local/mysql/mysql-8.0.43/logs/mysqld-error.log
pid-file=/usr/local/mysql/mysql-8.0.43/logs/mysqld.pid
port=13336
user=mysql
character-set-server=utf8mb4
collation-server=utf8mb4_general_ci
#默认时区(东八区)
default-time-zone='+8:00'
#数据库日志时间匹配系统时区
log_timestamps=system
#表名和字段名不区分大小写
lower_case_table_names=1#5-将mysql文件夹及其内容都授权给mysql用户并初始化(注意:初始化后没有任何信息提示表示初始化成功,否则就是有问题的)
chown -R mysql:mysql /usr/local/mysql
/usr/local/mysql/mysql-8.0.43/bin/mysqld  --defaults-file=/usr/local/mysql/mysql-8.0.43/etc/my.cnf --initialize --user=mysql#6-查看日志文件获取临时密码(复制一份临时密码用于登录和修改密码)
cd /usr/local/mysql/mysql-8.0.43/logs/
tail -f mysqld-error.log#7-手动启用mysql服务测试(如可以指定默认的配置文件【 --defaults-file=/usr/local/mysql/mysql-8.0.43/etc/my.cnf】)【查看mysql的进程、网络端口内容(查看到对应的mysql进程与网络端口与我们配置的一致表示正常;然后使用临时密码登录到mysql服务器中修改root用户密码;最后确认正常后即可杀死该进程)】
/usr/local/mysql/mysql-8.0.43/bin/mysqld_safe --defaults-file=/usr/local/mysql/mysql-8.0.43/etc/my.cnf
ps -ef | grep mysql
netstat -antlp | grep mysql
/usr/local/mysql/mysql-8.0.43/bin/mysql -uroot -p'临时密码'
alter user 'root'@'localhost' identified by 'abc123456';
flush privileges;#8-配置mysql的服务
vi /etc/systemd/system/mysqld.service[Unit]
Description=MySQL Server 8.0.43
After=network.target[Service]
User=mysql
Group=mysql
ExecStart=/usr/local/mysql/mysql-8.0.43/bin/mysqld_safe --defaults-file=/usr/local/mysql/mysql-8.0.43/etc/my.cnf
ExecReload=/bin/kill -HUP $MAINPID
ExecStop=/bin/kill -TERM $MAINPID
Restart=on-failure[Install]
WantedBy=multi-user.target#9-启动mysql服务并设置开机自启
#9.1-重载所有服务
systemctl daemon-reload#9.2-启动mysql服务
systemctl start mysqld.service#9.3-查看mysql服务状态
systemctl status mysqld.service#9.4-设置mysql服务开机自启
systemctl enable mysqld.service #9.5-停止mysql服务
systemctl stop mysqld.service#10-可以重启Linux后查看mysql服务状态看它是否开机重启
reboot now
systemctl status mysqld.service

  2.2.2、MySQL的主从复制环境配置

关系数据库MySQL的常用基础命令详解实战https://coffeemilk.blog.csdn.net/article/details/151959864

#一、在3个MySQL的配置文件【my.cnf】中添加如下内容(注意:Master节点的【server-id=1】、备用Master节点的【server-id=2】另外一个Slave节点的【server-id=3】)#1.1-进入MySQL的配置文件路径
cd /usr/local/mysql/mysql-8.0.43/etc/#1.2-编辑MySQL的配置文件【my.cnf】
vi my.cnf#如下是MHA架构的MySQL多节点主从架构配置参数【注意:每个MySQL节点上的server_id必须唯一,不能相同,其余内容保持不变】
gtid_mode=ON
enforce_gtid_consistency=ON
server-id = 1
read-only=1
log-bin=mysql-bin
relay-log = mysql-relay-bin
replicate-wild-ignore-table=mysql.%
replicate-wild-ignore-table=test.%
replicate-wild-ignore-table=information_schema.%#1.3-分别重启3个Mysql
systemctl restart mysqld.service
systemctl status mysqld.service#二、分别在3个MySQL节点做授权配置【Mysql-8.0.X版本执行的命令】
#2.1-分别登录3个MySQL创建主从复制用户和授权
/usr/local/mysql/mysql-8.0.43/bin/mysql -uroot -pcreate user 'repl_user'@'192.168.1.%' identified by 'repl_passwd';GRANT REPLICATION SLAVE, REPLICATION CLIENT ON *.* TO 'repl_user'@'192.168.1.%';update mysql.user set host='192.168.1.%' where user='root' and host='localhost';FLUSH PRIVILEGES;select user,host from mysql.user;exit;#2.2-重新登录3个MySQL并开启主从同步【首先查看MySQL的Master节点状态】【然后在其他的slave节点执行同步操作】
/usr/local/mysql/mysql-8.0.43/bin/mysql -h 192.168.1.40 -P 13336 -uroot -p#2.3-首先查看MySQL的Master节点状态(192.168.1.40)并且将master节点对应的binlog日志文件名和编号,并记录下来(如:我们这里是【mysql-bin.000016】【237】)
show master status;#2.4-在另外两个slave节点(192.168.1.41、192.168.1.42)执行如下命令进行同步操作【最终只有(Replica_IO_Running与Replica_SQL_Running的值都是Yes才表示主从同步成功,否则就是失败的,需要根据具体的报错信息进行排查)】:
change replication source to source_host='192.168.1.40',source_port=13336,source_user='repl_user',source_password='repl_passwd',source_log_file='mysql-bin.000016',source_log_pos=237,get_source_public_key=1;start replica;
show replica status\G;#2.4.1-在【Mysql5.X版本】执行的命令如下:
grant replication slave  on *.* to 'repl_user'@'192.168.1.%' identified by 'repl_passwd';
grant all on *.* to 'root'@'192.168.1.%' identified by 'abc123456'; show master status;change master to master_host='192.168.1.40',master_port=13336,master_user='repl_user',master_password='repl_passwd',master_log_file='mysql-bin.000016',master_log_pos=237,get_source_public_key=1;start slave;
show slave status\G;三、若MySQL是安装在【/usr/local/mysql/mysql-8.0.43】路径下,还需要设置软链接为全局可用(每台MySQL服务器上都需要设置)
ln -s /usr/local/mysql/mysql-8.0.43/bin/* /usr/bin/
ll /usr/bin/mysql*

        注意:若在slave节点上执行【start replica】命令后报错“ERROR 1872 (HY000): Replica failed to initialize applier metadata structure from the repository”;则需要重置一下replica(即执行【reset replica】命令即可)。

三、MHA的安装

mha4mysql-managerhttps://github.com/yoshinorim/mha4mysql-managermha4mysql-nodehttps://github.com/yoshinorim/mha4mysql-node

MHA的安装流程
序号MHA的安装流程说明
1在三个MySQL节点服务器上都安装【mha4mysql-node】
2只在MHA的Manager节点上安装【mha4mysql-manager】
#使用rpm包的方式安装MHA的0.58版本实操流程#1-在三个MySQL节点服务器上都安装【mha4mysql-node】
wget https://github.com/yoshinorim/mha4mysql-node/releases/download/v0.58/mha4mysql-node-0.58-0.el7.centos.noarch.rpm -c 0 -P /datacd /datayum install perl-DBD-mysql -yrpm -ivh mha4mysql-node-0.58-0.el7.centos.noarch.rpm #2-只在MHA的Manager节点上安装【mha4mysql-manager】
wget https://github.com/yoshinorim/mha4mysql-node/releases/download/v0.58/mha4mysql-node-0.58-0.el7.centos.noarch.rpm -c 0 -P /datawget https://github.com/yoshinorim/mha4mysql-manager/releases/download/v0.58/mha4mysql-manager-0.58-0.el7.centos.noarch.rpm -c 0 -P /datacd /datayum install perl-DBD-MySQL perl-Config-Tiny perl-Log-Dispatch perl-Parallel-ForkManager perl-Config-IniFiles perl-Time-HiRes -y --nogpgcheck

《1》在三个MySQL节点服务器(192.168.1.40、192.168.1.41、192.168.1.42)上都安装【mha4mysql-node】详细操作如下图所示:

《2》在MHA的Manager节点上安装【mha4mysql-manager】详细操作如下图所示:

解决OpenEuler服务器上安装mha4mysql-manager所需依赖包报错问题https://coffeemilk.blog.csdn.net/article/details/152452918?spm=1001.2014.3001.5502

http://www.dtcms.com/a/438172.html

相关文章:

  • 廊坊专业网站网站网站的制作建站人
  • list 实现链表封装节点的底层逻辑:如何克服不连续无法正常访问挑战
  • flash网站模板福州网络推广专员
  • tcpxtract安装教程
  • 1.3 前端框架:加速 LLM 应用开发
  • 从0死磕全栈之Next.js Server Actions 入门实战:在服务端安全执行逻辑,告别 API 路由!
  • 从传输层协议到 UDP:轻量高效的传输选择
  • C++ 11和20中的位域使用说明-2
  • 【数据结构】二叉树的高频热门面试题大全
  • 营口房产建设信息网站网站开发类合同范本
  • 石家庄哪里做网站没有网站怎么做seo
  • Akamai CDN 和 CloudFlare CDN 有什么具体区别?
  • Bash 中的 shopt -s globstar:递归 Glob 模式详解
  • LED驱动芯片FP7208选型指南:参数、应用场景与设计要点(宽压2.5-24V,恒流0.2V)
  • K8s学习----StorageClass:实现存储资源的动态管理
  • JUC 并发编程之无锁模型详解:CAS 原理、原子类应用与 Unsafe 底层实现
  • 网站建设的销售渠道数据库网站 建设方案
  • Python学习之day03学习(文件和异常)
  • 线性代数 · SVD | 导数
  • 免费网页设计成品网站工程建设云
  • wordpress火车头自动分类绍兴百度推广优化排名
  • hadoop-mapreduce编程模型
  • 黄页网站推广公司百度答主招募入口官网
  • AutoOps:简化自管理 Elasticsearch 的旅程
  • python如何批量下载图片
  • PDF中表格的处理 (OCR)
  • 怎样查网站空间地址代理公司注册的价格
  • LangChain源码分析(一)- LLM大语言模型
  • Android setContentView源码与原理分析
  • dlink nas建设网站有什么免费推广项目的好软件