【博客568】mysql主备 + keepalived vip的高可用架构

news/2024/11/17 4:59:16/

mysql主备 + vip的高可用架构

适用场景

初始化mysql集群主备,双库均为空库

mysql基本配置

# 准备目录
mkdir -p /data/mysql/conf.d
mkdir -p /data/mysql/data# 准备配置文件
/data/mysql/conf.d/my.cnf# 主库:
[mysqld]
## 设置server_id,一般设置为IP,同一局域网内注意要唯一
server_id=100  
## 复制过滤:也就是指定哪个数据库不用同步(mysql库一般不同步)
binlog-ignore-db=mysql  
## 开启二进制日志功能
log-bin=edu-mysql-bin  
## 为每个session 分配的内存,在事务过程中用来存储二进制日志的缓存
binlog_cache_size=1M  
## 主从复制的格式(mixed,statement,row,默认格式是statement)
binlog_format=mixed  
## 二进制日志自动删除/过期的秒数。
binlog_expire_logs_seconds=604800
## 跳过主从复制中遇到的所有错误或指定类型的错误,避免slave端复制中断。
## 如:1062错误是指一些主键重复,1032错误是因为主从数据库数据不一致
replica_skip_errors=1062
max_connections=50000# 备库:
[mysqld]
server_id=101  
## 复制过滤:也就是指定哪个数据库不用同步(mysql库一般不同步)
binlog-ignore-db=mysql  
## 开启二进制日志功能,以备Slave作为其它Slave的Master时使用
log-bin=edu-mysql-slave1-bin  
# 为每个session 分配的内存,在事务过程中用来存储二进制日志的缓存
binlog_cache_size=1M  
## 主从复制的格式(mixed,statement,row,默认格式是statement)
binlog_format=mixed  
## 二进制日志自动删除/过期的秒数。
binlog_expire_logs_seconds=604800
## 跳过主从复制中遇到的所有错误或指定类型的错误,避免slave端复制中断。
## 如:1062错误是指一些主键重复,1032错误是因为主从数据库数据不一致
replica_skip_errors=1062  
## relay_log配置中继日志
relay_log=edu-mysql-relay-bin  
## log_slave_updates表示slave将复制事件写进自己的二进制日志
log_replica_updates=1  
## 防止改变数据(除了特殊的线程)
read_only=1
super_read_only=1
max_connections=50000

docker启动mysql

docker run --privileged -u 0 -d --name mysql --network host --restart always  -v /data/mysql/conf.d:/etc/mysql/conf.d -v /data/mysql/data:/var/lib/mysql -e MYSQL_ROOT_PASSWORD=xxxx -e TZ=Asia/Shanghai mysql:8.0.28

mysql主备配置

主库配置:

CREATE USER 'slave'@'%' IDENTIFIED BY 'lulu2022';
GRANT REPLICATION SLAVE, REPLICATION CLIENT ON *.* TO 'slave'@'%';   
flush privileges;

主库上获取master状态,部分信息用于下面初始化从库:

show master status;
| File                   | Position | Binlog_Do_DB | Binlog_Ignore_DB | Executed_Gtid_Set |
|------------------------|----------|--------------|------------------|-------------------|
| 'edu-mysql-bin.000004' | '704'    | ''           | 'mysql'          | ''                |

从库配置:这里master_log_file和master_log_pos就是从上面读的:

设置主库信息:
change master to master_host='master-ip', master_user='slave', master_password='lulu2022', master_port=3306, master_log_file='edu-mysql-bin.000004', master_log_pos=704, master_connect_retry=30, GET_MASTER_PUBLIC_KEY=1 ;  启动主备:
start slave;

验证从库是否正常:show slave status \G;

*************************** 1. row ***************************
Slave_IO_State: Waiting for master to send event
Master_Host: 192.168.131.141
Master_User: root
Master_Port: 3306
Connect_Retry: 60
Master_Log_File: master-a-bin.000002
Read_Master_Log_Pos: 1545
Relay_Log_File: linux001-relay-bin.000010
Relay_Log_Pos: 320
Relay_Master_Log_File: master-a-bin.000002
Slave_IO_Running: Yes
Slave_SQL_Running: Yes
Replicate_Do_DB:
Replicate_Ignore_DB:
Replicate_Do_Table:
Replicate_Ignore_Table:
Replicate_Wild_Do_Table:
Replicate_Wild_Ignore_Table:
Last_Errno: 0
Last_Error:
Skip_Counter: 0
Exec_Master_Log_Pos: 1545
Relay_Log_Space: 696
Until_Condition: None
Until_Log_File:
Until_Log_Pos: 0
Master_SSL_Allowed: No
Master_SSL_CA_File:
Master_SSL_CA_Path:
Master_SSL_Cert:
Master_SSL_Cipher:
Master_SSL_Key:
Seconds_Behind_Master: 0
Master_SSL_Verify_Server_Cert: No
Last_IO_Errno: 0
Last_IO_Error:
Last_SQL_Errno: 0
Last_SQL_Error:
Replicate_Ignore_Server_Ids:
Master_Server_Id: 1
Master_UUID: bc1e2413-b8d5-11ec-a822-000c299e074d
Master_Info_File: /var/lib/mysql/master.info
SQL_Delay: 0
SQL_Remaining_Delay: NULL
Slave_SQL_Running_State: Slave has read all relay log; waiting for more updates
Master_Retry_Count: 86400
Master_Bind:
Last_IO_Error_Timestamp:
Last_SQL_Error_Timestamp:
Master_SSL_Crl:
Master_SSL_Crlpath:
Retrieved_Gtid_Set:
Executed_Gtid_Set:
Auto_Position: 0
Replicate_Rewrite_DB:
Channel_Name:
Master_TLS_Version:
1 row in set (0.00 sec)ERROR:
No query specified1、看slave是否正常进行:
Slave_IO_Running: Yes
Slave_SQL_Running: Yes
Seconds_Behind_Master: 02、看salve内容是否正确
Master_Log_File: master-a-bin.000002
Read_Master_Log_Pos: 1545
Relay_Log_File: linux001-relay-bin.000010

keepalived vip配置

check脚本: /etc/keepalived/check.sh,master和node都一样

#!/bin/sh
if [ $(ps -C mysqld --no-header | wc -l) -eq 0 ]; thenecho mysql stopedexit 1
elseexit 0
fi

主库keepalived配置:

! Configuration File for keepalivedglobal_defs {router_id LVS_DEVELscript_user rootenable_script_security}vrrp_script chk_mysql {script "/etc/keepalived/check.sh"weight -10interval 2fall 3rise 2
}vrrp_instance VI_1 {state MASTERinterface eth0virtual_router_id 111priority 101advert_int 1mcast_src_ip main-node-ipauthentication {auth_type PASSauth_pass 1111}virtual_ipaddress {mysql-sluster-vip}track_script {chk_mysql}}

备库keepalived配置:

! Configuration File for keepalivedglobal_defs {router_id LVS_DEVELscript_user rootenable_script_security}vrrp_script chk_mysql {script "/etc/keepalived/check.sh"weight -10interval 2fall 3rise 2}vrrp_instance VI_1 {state BACKUPinterface eth0virtual_router_id 111priority 100advert_int 1mcast_src_ip slave-node-ipauthentication {auth_type PASSauth_pass 1111}track_script {chk_mysql}virtual_ipaddress {mysql-sluster-vip}}

实现效果

  • 1、主从均正常时,访问vip可以直接到达主库进行处理

  • 2、当主库异常时,此时vip飘到备库节点,依旧可以访问,但只读不可写

  • 3、当主库恢复时,此时vip飘回主库,读写均恢复


http://www.ppmy.cn/news/8446.html

相关文章

Flink系列Table API和SQL之:创建表环境和创建表

Flink系列Table API和SQL之:创建表环境和创建表一、快速上手Table API和SQL二、创建表环境三、创建表1.连接器表(Connector Tables)2.虚拟表(Virtual Tables)一、快速上手Table API和SQL 创建表环境 TableEnvironment tableEnv ...;创建输入表,连接外…

(二十四)大白话RAID锂电池充放电导致的MySQL数据库性能抖动的优化

案例实战:RAID锂电池充放电导致的MySQL数据库性能抖动的优化 文章目录 1、磁盘故障怎么保障数据不丢失?2、线上MySQL数据库的性能定期抖动的原因1、磁盘故障怎么保障数据不丢失? 前面经过了几天的生产经验的一些铺垫,包括MySQL磁盘读写的机制,Linux存储系统的原理,RAID磁…

Verilog初级模块代练

实例1 二选一多路选择器 module muxtwo(out a,b,sl);input a,b,sl;output reg out;always@(sl or a or b)if(!sl) out=a;else out=b

【python游戏】新的一年快来变身兔兔战士打败獾守护兔兔吧~

前言 大家早好、午好、晚好吖 ❤ ~ 一只快乐兔, 来到快乐山,喝了快乐泉, 又到快乐殿,吃了快乐莲,遇到快乐仙, 听了快乐言:快乐很简单,快乐在身边,快乐无极限&#xff…

迎接2023,用JAVA演奏“新年”

😊你好,我是小航,一个正在变秃、变强的文艺倾年。 🔔2023年快要到来啦,再此祝大家诸事顺遂,所见所盼皆如愿。 🔔本文讲解如何使用Java演奏一首歌曲,一起卷起来叭! 众所周…

CSS 奇技淫巧Box-shadow实现圆环进度条

CSS 奇技淫巧Box-shadow实现圆环进度条 文章目录CSS 奇技淫巧Box-shadow实现圆环进度条一、Box-shadow圆环进度条二、效果预览三、原理刨析四、实际应用五、总结六、参考资料💘七、推荐博文🍗一、Box-shadow圆环进度条 实现圆环进度条的方法用很多种&am…

【Mongoose笔记】Websocket 服务器

【Mongoose笔记】Websocket 服务器 简介 Mongoose 笔记系列用于记录学习 Mongoose 的一些内容。 Mongoose 是一个 C/C 的网络库。它为 TCP、UDP、HTTP、WebSocket、MQTT 实现了事件驱动的、非阻塞的 API。 项目地址: https://github.com/cesanta/mongoose学习 …

shell第五天作业——函数与数组

题目 一、编写函数,实现打印绿色OK和红色FAILED 二、编写函数,实现判断是否有位置参数,如无参数,提示错误 三、编写函数实现两个数字做为参数,返回最大值 四、编写函数,实现两个整数为参数,…