欢迎来到尧图网

客户服务 关于我们

您的位置:首页 > 新闻 > 国际 > MySQL高可用

MySQL高可用

2025/5/19 11:11:29 来源:https://blog.csdn.net/lml4856/article/details/148003337  浏览:    关键词:MySQL高可用

1.什么是mysql高可用

指通过冗余设计,确保数据库服务在单节点故障、网络中断或硬件损坏等异常情况下,仍能持续对外提供服务,同时保证数据一致性。其核心目标是实现“零停机、数据零丢失”的业务连续性

2.方案组成:MySQL主主复制+Keepalived+HAProxy

MySQL主主复制:两台MySQL实例互为主从,双向同步数据,均支持读写操作。提供冗余和扩展能力

Keepalived:通过VRRP协议管理虚拟IP(VIP),监控MySQL状态,故障时自动将VIP漂移至存活节点,确保服务地址不变

HAProxy:作为反向代理和负载均衡器,将流量分发至MySQL节点,支持健康检查、读写分离(可选)和故障节点自动剔除

3.优势

高可用性:Keepalived实现秒级故障切换,HAProxy健康检查确保流量仅路由到正常节点,避免单点故障

读写扩展:主主架构支持双节点并发写入,提升写入性能;HAProxy可配置读写分离,利用备节点分担读压力灵活

灵活扩展:可横向扩展HAProxy或MySQL节点,支持动态调整负载均衡策略(如轮询、权重)运维友好基于开源工具,无厂商锁定,社区支持丰富,适合自建数据库集群

实验过程

1.安装MySQL数据库

数据库创建完成后登录上,创建测试用户,后续用来验证实验(master1、master2)

mysql  -uroot  -ppwd123

create  user  'test'@'192.168.10.%'  identified  by  '123456';

grant  all  on  *.*  to  'test'@'192.168.10.%';

alter  user  'test'@'192.168.10.%'  identified  with  mysql_native_password  by  '123456';

flush  privileges;

2.配置mysql主主复制

(1)master1中:

vim  /etc/my.cnf

log-bin=/usr/local/mysql/data/mysql-bin

binlog_format=MIXED

server-id=1

log-slave-updates=1

(2)master2中:

vim  /etc/my.cnf

log-bin=/usr/local/mysql/data/mysql-bin

binlog_format=MIXED

server-id=2

log-slave-updates=1

(3)重启mysql服务,两台都执行

systemctl  restart  mysqld

(4)登录mysql程序,给从服务器授权,两台都执行

mysql  -u  root  -ppwd123

create  user  'myslave'@'192.168.10.%'  identified  by  '123456';

grant  replication  slave  on  *.*  to  'myslave'@'192.168.10.%';

alter  user  'myslave'@'192.168.10.%'  identified  with  mysql_native_password  by  '123456';

flush  privileges;

(5)登录mysql,配置同步,两台都执行

master1:

change  master  to master_host='192.168.10.102',master_user='myslave',master_password='123456',master_log_file='mysql-bin.000001',master_log_pos=157;

start  slave;

master2:

change  master  to master_host='192.168.10.101',master_user='myslave',master_password='123456',master_log_file='mysql-bin.000001',master_log_pos=157;

start  slave;

3.安装haproxy

HAProxy是一个开源的高性能负载均衡和代理工具,支持TCP/HTTP应用的流量分发,具备健康检查、SSL终止、会话保持等功能,广泛应用于Web服务器集群、数据库读写分离及API网关场景,以高效稳定的特性提升系统的可用性和扩展能力

以下,两台keepalived都要执行

(1)关闭SELinux和防火墙

sed  -i  's/SELINUX=enforcing/SELINUX=disabled/  /etc/selinux/config'

setenforce  0

systemctl  disable  firewalld

systemcrl  stop  firewalld

(2)安装haproxy

dnf  install  haproxy

(3)编辑haproxy配置文件

更改部分红色标注,两台配置相同

defaults            tcp

option               tcplog

listen  mysql

      bind 0.0.0.0:3306                  (显示指定监听地址和端口)

      balance  leastconn                 (负载均衡算法)

      server  mysql1  192.168.10.101:3306  check  port  3306  maxconn  300

      server  mysql2  192.168.10.101:3306  check  port  3306  maxconn  30

注释:

mode  tcp:表示tcp代理

listen  mysql 0.0.0.0:3306表示创建一个名为mysql的监听服务

bind 0.0.0..0:3306绑定到所有网卡的3306端口(mysql)默认端口,作为流量入口

balance leastconn指定使用  最少连接算法 分配请求,将新连接导向当前活跃连接最少的后端服务器,避免单点过载

Server声明两个mysql服务器节点mysql1和mysql2分别指向192.168.10.101:3306和192.168.10.102:3306

check port 3306表示通过检查节点的3306端口是否响应,判断其存活状态

maxconn 300限制每个后端节点的最大并发连接数为300,防止节点被压垮

(4)检测配置文件并启动服务

haproxy -c -f /etc/haproxy/haproxy.cfg

systemctl restart haproxy

(5)测试

使用测试用户test,访问haproxy的代理端口登录mysql

mysql  -utest  -p123456  -h192.168.10.103  -p3306

4.安装keepalived

Keepalived 是一个用于实现系统高可用性和负载均衡的工具,通过 VRRP(Virtual Router Redundancy Protocol)等协议管理虚拟 IP 地址,持续监测服务器健康状态,当主节点故障时自动将流量切换至备用节点,确保服务不中断。常用于数据库、Web 服务等集群环境,提升系统可靠性并简化故障恢复流程。

以下过程两台keepalived都要执行

(1)关闭SELinux和防火墙

 sed -i 's/SELINUX=enforcing/SELINUX=disabled'  / root/selinux/config

setenforce 0

 systemctl disable firewalld

systemctl stop firewalld

(2)安装keepalived

dnf  install keepalived

(3)编辑haproxy配置文件

第一台keepalived1配置,红色标注为两台不同之处

cp  /etc/keepalived/keepalived.conf.sample  /etc/keepalived/keepalived.conf

vim  /etc/keepalived/keepalived.conf

global_defs {

           router_id  r1

}

vrrp_instance  VI_1 {

      state  BACKUP

      nopreempt

      interface  ens33

      priority   100

启用nopreempt作用:

节点A(优先级100,配置nopreempt)故障,节点B成为Master

节点A恢复,不触发抢占,节点B继续作为Master,VIP不切换

仅当节点B故障时,节点A才会重新成为Master

添加监控脚本并启动keepalived

vim  /etc/keepalived/chk.sh

#!/bin/bash

#

if [  $(ps  -C  haproxy  --no-header  |  wc  -l)  -eq  0  ];  then

                /etc/init.d/keepalived   stop

fi

chmod  +x  /etc/keepalived/chk.sh

systemctl  start  keepalived

配置keepalived2,红色标注为两台不同之处

cp  /etc/keepalived/keepalived.conf.sample  /etc/keepalived/keepalived.conf

vim  /etc/keepalived/keepalived.conf

global_defs {

           router_id  r2

}

vrrp_instance  VI_1 {

      state  BACKUP

       interface  ens33

      priority   99

添加监控脚本并启动keepalived

vim  /etc/keepalived/chk.sh

#!/bin/bash

#

if [  $(ps  -C  haproxy  --no-header  |  wc  -l)  -eq  0  ];  then

                /etc/init.d/keepalived   stop

fi

chmod  +x  /etc/keepalived/chk.sh

systemctl  start  keepalived

此处两台主机均配置为BACKUP,因此哪台先运行keepalived,VIP就在哪台上

在keepalived测试查看VIP(查看VIP只能使用ip命令,ifconfig不显示)

命令:ip  -a

(4)编测试使用VIP连接mysql

mysql  -utest -p123456  -h192.168.10.100

5.测试故障转移

1.关闭 master1 主机,测试使用 vip 能否正常访问 mysql 数据库关闭 master1后,因为master1、master2 通过 haproxy 负载均衡,masterl关闭后,haproxy 检测其状态异常,会从负载中移除,不进行流量转发,依然可以通过 vip 访问 mysql,实现 mysq1 的高可用

 ping 192.168.10.101 #ping masterl 发现已离线

mysql -utest -p123456 -h192.168.10.100

2.接着关闭 keepalivedl,测试使用 vip 能否正常访问 mysql 数据库关闭keepalived1后,keepalived 检测到主节点离线,VIP 192.168.10.100会漂移至 keepalived2 节点,mysql 依然可以访问

 ip a         #vip 192.168.10.100 漂移至 keepalived

mysql -utest -p123456 -h192.168.10.100

版权声明:

本网仅为发布的内容提供存储空间,不对发表、转载的内容提供任何形式的保证。凡本网注明“来源:XXX网络”的作品,均转载自其它媒体,著作权归作者所有,商业转载请联系作者获得授权,非商业转载请注明出处。

我们尊重并感谢每一位作者,均已注明文章来源和作者。如因作品内容、版权或其它问题,请及时与我们联系,联系邮箱:809451989@qq.com,投稿邮箱:809451989@qq.com

热搜词