欢迎来到尧图网

客户服务 关于我们

您的位置:首页 > 文旅 > 旅游 > linux——mysql高可用

linux——mysql高可用

2025/5/18 6:28:20 来源:https://blog.csdn.net/2401_88768957/article/details/148025303  浏览:    关键词:linux——mysql高可用

目录

一,了解什么是mysql高可用

1,mysql高可用的组成

2,mysql高可用的优势

二,搭建mysql高可用

2,配置主主复制

3,安装heproxy

4,安装keepalived

一,了解什么是mysql高可用

MySQL 高可用是通过技术手段确保 MySQL 数据库在面临硬件故障、软件错误、网络问题或其他异常情况时,仍能持续提供服务,减少停机时间,保证业务连续性的解决方案。其核心目标是提升数据库系统的可靠性、稳定性和容错能力。

1,mysql高可用的组成

  • MySQL 主主复制:两台 MySQL 实例互为主从,双向同步数据,均支持读写操作提供几余和扩展能力。
  • Keepalived:通过 VRRP 协议管理虚拟IP(VIP),监控 MySQL 状态,故障时自动将 VIP 漂移至存活节点,确保服务地址不变。
  • HAProxy:作为反向代理和负载均衡器,将流量分发至 MySQL 节点,支持健康检查、读写分离(可选)和故障节点自动剔除。

2,mysql高可用的优势

  1. 减少服务中断时间
  • 自动故障切换:当主数据库节点发生故障时,高可用方案(如 MySQL Cluster、MHA、Orchestrator 等)可自动检测并将服务切换到备用节点,确保业务不受影响。
  • 业务连续性:避免因数据库故障导致的网站崩溃、交易中断等问题,尤其适合电商、金融、实时通信等对连续性要求高的场景。

  • 高可用性:Keepalived 实现秒级故障切换,HAProxy健康检查确保流量仅路由到正常节点,避免单点故障。
  • 读写扩展:主主架构支持双节点并发写入,提升写入性能:HAProxy可配置读写分离,利用备节点分担读压力。
  • 灵活扩展:可横向扩展 HAProxy或 MySQL 节点,支持动态调整负载均衡策略(如轮询、权重)运维友好基于开源工具,无厂商锁定,社区支持丰富,适合自建数据库集群
  1. 提升数据可靠性
  • 数据冗余:通过主从复制、多节点数据同步等机制,将数据副本存储在多个节点,防止单节点故障导致数据丢失。
  • 容灾能力:支持异地多活或灾备中心部署,应对自然灾害、机房断电等极端情况,符合企业级数据备份与恢复策略。
  1. 支持弹性扩展
  • 读写分离:高可用架构常结合读写分离(主库写、从库读),将读请求分流到多个从库,提升系统并发处理能力,降低主库压力。
  • 水平扩展:通过分库分表或集群架构(如 MySQL InnoDB Cluster),可动态添加节点,支撑海量数据和高并发业务。
  1. 简化运维管理
  • 自动化监控与管理:高可用方案通常集成监控工具(如 Prometheus、Zabbix),实时监测节点状态、复制延迟、性能指标等,自动触发告警或故障处理流程。
  • 降低运维复杂度:减少人工干预故障恢复的成本,例如无需手动切换 IP、重新配置连接池等,提升运维效率。

二,搭建mysql高可用

 1,准备工作

实验需求:在master1,master2服务器上安装mysql数据库,模拟master故障切换,使用haproxy软件并配置复制均衡,使用keepalived软件配置故障转移。

主机操作系统IP地址服务
master1centos8192.168.10.101mysql8
master2centos8192.168.10.102mysql8
keepalived1centos8192.168.10.103keepalived,haproxy
keepalived2centos8192.168.10.104keepalived,haproxy

2,配置主主复制

  • 配置主从复制

1,准备工作

dnf -y install ntpdate          ##安装时间同步软件包
date                            ##查看时间是否同步systemctl stop firewalld        ##关闭防火墙
setenforce 0                    ##关闭linux内核##修改mysql配置文件,添加以下内容(mysqld模块中添加)
[root@localhost local]# vim /etc/my.cnf
log-bin=/usr/local/mysql/mysql-bin            ##指定二进制文件位置
server-id=1                                   ##设置mysql服务id
binlog-format=MIXED                           ##用于控制二进制日志的记录格式为混合模式systemclt restart mysqld     ##重启mysql数据库

 2,登陆mysql进行操作

create user 'myslave'@'%' identified by 'pwd123';	##创建用户grant replication slave on *.* to 'myslave'@'%';	##给复制权限
alter user 'myslave'@'%' identified with mysql_native_password by 'pwd123';   ##为myslave设置密码为pwd123.flush privileges;       ##更新用户信息mysql> show master status;            ##查看主服务区状态信息,等会要用
+------------------+----------+--------------+------------------+-------------------+
| File             | Position | Binlog_Do_DB | Binlog_Ignore_DB | Executed_Gtid_Set |
+------------------+----------+--------------+------------------+-------------------+
| mysql-bin.000001 |      342 |              |                  |                   |
+------------------+----------+--------------+------------------+-------------------+
1 row in set (0.00 sec)

3,在从设备进行操作

[root@localhost local]# vim /etc/my.cnf
server-id=2                ##在从服务器添加id(不能与主服务器重复)
systemclt restart mysqld     ##重启mysql数据库##在从服务器进行操作
change master to master_host='192.168.10.101',master_user='myslave',master_password='123456',master_log_file='mysql-bin.000003',master_log_pos=1438;start slave;              ##启动slave
show slave status\G       ##查看主从状态Slave_IO_Running: Yes                  ##找到此部分为两个yes就成功了Slave_SQL_Running: Yes
  • 配置主主复制

1,配置从服务器

##在从服务器添加
[root@bogon ~]# vim /etc/my.cnf
log-bin=/usr/local/mysql/mysql-bin
binlog-format=MIXEDsystemclt restart mysqld     ##重启mysql数据库create user 'myslave'@'%' identified by 'pwd123'; ##创建用户
grant replication slave on *.* to 'myslave'@'%';  ##修改权限
alter user 'myslave'@'%' identified with mysql_native_password by 'pwd123';  ##该密码
flush privileges;    ##刷新show master status;	      ##查看状态信息
+------------------+----------+--------------+------------------+-------------------+
| File             | Position | Binlog_Do_DB | Binlog_Ignore_DB | Executed_Gtid_Set |
+------------------+----------+--------------+------------------+-------------------+
| mysql-bin.000001 |     1149 |              |                  |                   |
+------------------+----------+--------------+------------------+-------------------+
1 row in set (0.00 sec)stop slave;	                ##一定要关闭slave

2,配置双主连接

##在101操作
change master to master_host='192.168.10.102',master_user='myslave',master_ppassword='pwd123',master_log_file='mysql-bin.000001',master_log_pos=1149;	##查看102的状态
mysql> show master status;
+------------------+----------+--------------+------------------+-------------------+
| File             | Position | Binlog_Do_DB | Binlog_Ignore_DB | Executed_Gtid_Set |
+------------------+----------+--------------+------------------+-------------------+
| mysql-bin.000001 |     1149 |              |                  |                   |
+------------------+----------+--------------+------------------+-------------------+
1 row in set (0.00 sec)##在102操作
change master to master_host='192.168.10.101',master_user='myslave',master_password='pwd123',master_log_file='mysql-bin.000001',master_log_pos=342;	##查看101的状态
mysql> show master status;
+------------------+----------+--------------+------------------+-------------------+
| File             | Position | Binlog_Do_DB | Binlog_Ignore_DB | Executed_Gtid_Set |
+------------------+----------+--------------+------------------+-------------------+
| mysql-bin.000001 |      342 |              |                  |                   |
+------------------+----------+--------------+------------------+-------------------+
1 row in set (0.00 sec)

3,安装heproxy

  • 在103,104都要操作
systemctl stop firewalld   ##不要忘记关闭防火墙和内核
setenforce 0dnf -y install haproxy          ##安装haproxy
vim /etc/haproxy/haproxy.cfg     ##编辑haproxy配置文件mode                    tcp       ##修改这两行option                  tcplog ##defaults模块后面的内容全部删掉
##后面添加当前内容
listen mysql
bind 0.0.0.0:3306              ##显示指定监听地址和端口
balance leastconn              ##复制均衡算法
server mysql1 192.168.10.101:3306 check port 3306 maxconn 300   ##这两和为mysql服务器的ip地址
server mysql2 192.168.10.102:3306 check port 3306 maxconn 300##启动haproxy服务
haproxy -c -f /etc/haproxy/haproxy.cfg       ##检查haproxy配置文件是否有问题
systemctl restart haproxy                   ##启动haproxy

4,安装keepalived

  • 103服务器进行操作
 dnf -y install keepalived                 ##安装keepalivedcp /etc/keepalived/keepalived.conf.sample /etc/keepalived/keepalived.conf   ##将配置文件复制过来并重命名vim /etc/keepalived/keepalived.conf        ##编辑配置文件
global_defs {                      ##此模块内容全部删掉添加此行router_id r1}router_id LVS_01            ##修改id不能和104重复#vrrp_strict                ##注释掉此行vrrp_instance VI_1 {state BACKUP            ##改为BACKUPnopreempt               ##添加此命令,不抢占interface ens160        ##为自己的网卡名virtual_router_id 51priority 100advert_int 1authentication {auth_type PASSauth_pass 1111}virtual_ipaddress {192.168.10.100       ##这是vip}
}
  • 在104服务器进行操作
 dnf -y install keepalived                 ##安装keepalivedcp /etc/keepalived/keepalived.conf.sample /etc/keepalived/keepalived.conf   ##将配置文件复制过来并重命名vim /etc/keepalived/keepalived.conf        ##编辑配置文件
global_defs {                      ##此模块内容全部删掉添加此行router_id r2}router_id LVS_02            ##修改id不能和104重复#vrrp_strict                ##注释掉此行vrrp_instance VI_1 {state BACKUP            ##改为BACKUPinterface ens160        ##为自己的网卡名virtual_router_id 51priority 90advert_int 1authentication {auth_type PASSauth_pass 1111}virtual_ipaddress {192.168.10.100       ##这是vip}
}
  • 103,104编写启动脚本
vim /etc/keepalived/chk.sh
chmod +x /etc/keepalived/chk.sh    ##授予执行权限#!/bin/bash
if [ $(ps -C haproxy --no-header | wc -l ) -eq 0 ];then/etc/init.d/keepalived stop
fisystemctl start keepalived   ##启动服务
  • 进行验证
ip add  ##在103查看vip情况,192.168.10.100为vip2: ens160: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc mq state UP group default qlelink/ether 00:0c:29:1b:2a:2f brd ff:ff:ff:ff:ff:ffinet 192.168.10.103/24 brd 192.168.10.255 scope global noprefixroute ens160valid_lft forever preferred_lft foreverinet 192.168.10.100/32 scope global ens160##在105客户机进行验证
[root@localhost ~]# mysql -umyslave -p123456 -P3306 -h192.168.10.100    ##可以登陆
mysql> ##关机mysql1服务器再次进行登陆
[root@localhost ~]# mysql -umyslave -p123456 -P3306 -h192.168.10.100    ##可以登陆
mysql> ##关闭103keepalived在次进行登陆
[root@localhost ~]# mysql -umyslave -p123456 -P3306 -h192.168.10.100    ##可以登陆
mysql> 

版权声明:

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

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

热搜词