欢迎来到尧图网

客户服务 关于我们

您的位置:首页 > 健康 > 养生 > MySQL高可用

MySQL高可用

2025/9/22 17:44:42 来源:https://blog.csdn.net/2501_91350469/article/details/148070284  浏览:    关键词:MySQL高可用

1. 什么是 MySQL 高可用

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

优势

  • 高可用性:Keepalived 实现秒级故障切换,HAProxy健康检查确保流量仅路由到正常节点,避免单点故障。
  • 读写扩展:主主架构支持双节点并发写入,提升写入性能;HAProxy可配置读写分离,利用各节点分担读压力。
  • 灵活扩展:可横向扩展 HAProxy 或 MySQL 节点,支持动态调整负载均衡策略(如轮询、权重)。运维友好基于开源工具,无厂商锁定,社区支持丰富,适合自建数据库集群。

2. 实验步骤

此实验需要两台MySQL(双主)两台haproxy以及keepalived        一台客户机

MySQL高可用是建立于双主之间的

关闭防火墙 关闭内核

systemctl stop firewalld
setenforce 0

01修改my.cnf

[client] 
socket=/usr/local/mysql/data/mysql.sock 
[mysqld] 
socket=/usr/local/mysql/data/mysql.sock 
bind-address = 0.0.0.0 server-id=1                                
log-bin=/usr/local/mysql/data/mysql-bin
binlog-format=MIXED
log-slave-updates=1                       skip-name-resolve 
port = 3306 
basedir=/usr/local/mysql 
datadir=/usr/local/mysql/data 
max_connections=2048 
character-set-server=utf8 
default-storage-engine=INNODB 
max_allowed_packet=16M[mysqld_safe]
log-error=/usr/local/mysql/data/error.log
#pid-file=/var/run/mariadb/mariadb.pid

02修改/etc/my.cnf

[client] 
socket=/usr/local/mysql/data/mysql.sock 
[mysqld] 
socket=/usr/local/mysql/data/mysql.sock 
bind-address = 0.0.0.0 server-id=2
log-bin=/usr/local/mysql/data/mysql-bin
binlog-format=MIXED
log-slave-updates=1skip-name-resolve 
port = 3306 
basedir=/usr/local/mysql 
datadir=/usr/local/mysql/data 
max_connections=2048 
character-set-server=utf8 
default-storage-engine=INNODB 
max_allowed_packet=16M[mysqld_safe]
log-error=/usr/local/mysql/data/error.log
#pid-file=/var/run/mariadb/mariadb.pid

 01、02登录MySQL并创建用户

[root@localhost ~]# mysql -uroot -ppwd123      mysql> create user 'myslave'@'%' identified by 'pwd123';  mysql> grant replication slave on *.* to 'myslave'@'%';   mysql> alter user 'myslave'@'%' identified with mysql_native_password by 'pwd123';  mysql> flush privileges;        mysql> show master status;          
+------------------+----------+--------------+------------------+-------------------+
| File             | Position | Binlog_Do_DB | Binlog_Ignore_DB | Executed_Gtid_Set |
+------------------+----------+--------------+------------------+-------------------+
| mysql-bin.000001 |     1249 |              |                  |                   |
+------------------+----------+--------------+------------------+-------------------+
1 row in set (0.00 sec)
mysql> show master status;
+------------------+----------+--------------+------------------+-------------------+
| File             | Position | Binlog_Do_DB | Binlog_Ignore_DB | Executed_Gtid_Set |
+------------------+----------+--------------+------------------+-------------------+
| mysql-bin.000001 |     1048 |              |                  |                   |
+------------------+----------+--------------+------------------+-------------------+
1 row in set (0.00 sec)

01连接02

mysql> change master to master_host='192.168.10.102',master_user='myslave',master_password='pwd123',master_log_file='mysql-bin.000001',master_log_pos=1048;
Query OK, 0 rows affected, 8 warnings (0.01 sec)

02连接01

mysql> change master to master_host='192.168.10.101',master_user='myslave',master_password='pwd123',master_log_file='mysql-bin.000001',master_log_pos=1249;
Query OK, 0 rows affected, 8 warnings (0.01 sec)

安装haproxy以及keepalived

下载haproxy

dnf -y install haproxy

修改haproxy配置文件

vim /etc/haproxy/haproxy.cfg
defaultsmode                    tcp		#更改tcplog                     globaloption                  tcplog		#更改tcpoption                  dontlognullretries                 3timeout http-request    5stimeout queue           1mtimeout connect         5stimeout client          1mtimeout server          1mtimeout http-keep-alive 5stimeout check           5smaxconn                 3000
将frontend main模板(包括fronted)以后的全部删掉
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.102:3306 check port 3306 maxconn 300

启动haproxy

systemctl start haproxy
netstat -anpt |grep haproxy	

下载keepalived

dnf -y install keepalived

将keepalived的模板复制出来并换后缀

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

修改配置文件

vim keepalived.confnotification_email_from Alexandre.Cassen@firewall.locsmtp_server 192.168.200.1smtp_connect_timeout 30router_id LVS_01			#idvrrp_skip_check_adv_addr#vrrp_strict			vrrp_garp_interval 0vrrp_gna_interval 0vrrp_instance VI_1 {state BACKUP		nopreemptinterface ens33		virtual_router_id 51priority 100			advert_int 1authentication {auth_type PASSauth_pass 1111}virtual_ipaddress {192.168.10.100			#192.168.200.17# 192.168.200.18}
notification_email_from Alexandre.Cassen@firewall.locsmtp_server 192.168.200.1smtp_connect_timeout 30router_id LVS_02			#idvrrp_skip_check_adv_addr#vrrp_strict			vrrp_garp_interval 0vrrp_gna_interval 0vrrp_instance VI_1 {state BACKUPinterface ens33			virtual_router_id 51priority 90			advert_int 1authentication {auth_type PASSauth_pass 1111}virtual_ipaddress {192.168.10.100			#192.168.200.17# 192.168.200.18}

调用keepalived

vim keepalived.conf
vrrp_script chk_haproxy {		script "/etc/keepalived/chk.sh"interval 2
}track_script {			chk_haproxy}
chmod +x chk.sh

客户机使用haproxy代理访问MySQL

mysql -umyslave -ppwd123 -P3306 -h192.168.10.103MySQL [(none)]> show databases;		
ERROR 2013 (HY000): Lost connection to MySQL server during query
MySQL [(none)]> show databases;		
ERROR 2006 (HY000): MySQL server has gone away
No connection. Trying to reconnect...
Connection id:    18
Current database: *** NONE ***+--------------------+
| Database           |
+--------------------+
| information_schema |
| performance_schema |
+--------------------+
2 rows in set (0.006 sec)
MySQL [(none)]> 

版权声明:

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

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

热搜词