基于keepalived的MySQL高可用
MySQL双主模型,keepalived提供高可用服务。主服务器宕机时,VIP切至备服务器,由备服务提供主服务器的读写任务。原先的主服务器恢复后,角色切换为备服务器,提供热备功能。
架构
M1:192.168.31.140(master)
M2:192.168.31.130(backup)
VIP:192.168.31.150
MySQL MM模型
配置略去,两台MySQL都需要对允许访问的客户端用户地址进行授权
keepalived 配置
安装:两边直接使用rpm安装即可
[root@baseos-1_192.168.31.140 ~]# yum install -y keepalived
配置:
[root@baseos-1_192.168.31.140 ~]
! Configuration File for keepalived
global_defs {
notification_email {
acassen@firewall.loc
failover@firewall.loc
sysadmin@firewall.loc
}
notification_email_from Alexandre.Cassen@firewall.loc
smtp_server 192.168.200.1
smtp_connect_timeout 30
router_id LVS_DEVEL
}
vrrp_script check_mysqld {
script "/data/sh/mysqld_check.sh"
interval 1
weight 1
}
vrrp_instance VI_1 {
state BACKUP
interface eth0
virtual_router_id 10
priority 100
advert_int 1
nopreempt
authentication {
auth_type PASS
auth_pass 1111
}
track_script {
check_mysqld
}
virtual_ipaddress {
192.168.31.150/24 dev eth0
}
}
MySQL监控脚本:
[root@baseos-1_192.168.31.140 ~]
KeepAliveLog="/data/logs/keepalive_mysql_check.log"
MyAlive=$(/usr/local/mysql/bin/mysqladmin -uroot -p`cat /data/save/mysql_root` ping 2> /dev/null | grep -i -c alive)
if [ "X$MyAlive" != "X1" ] ; then
echo "[`date +%F" "%T`] Wanning,mysql is not alive." >> $KeepAliveLog
/etc/init.d/keepalived stop &> /dev/null
echo "[`date +%F" "%T`] Service keepalive has being stopd." >> $KeepAliveLog
fi
查看主服务IP地址
[root@baseos-1_192.168.31.140 ~]# ip add
1: lo: <LOOPBACK,UP,LOWER_UP> mtu 16436 qdisc noqueue state UNKNOWN
link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00
inet 127.0.0.1/8 scope host lo
inet6 ::1/128 scope host
valid_lft forever preferred_lft forever
2: eth0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast state UP qlen 1000
link/ether 00:0c:29:ef:84:a3 brd ff:ff:ff:ff:ff:ff
inet 192.168.31.140/24 brd 192.168.31.255 scope global eth0
inet 192.168.31.150/24 scope global secondary eth0
inet6 fe80::20c:29ff:feef:84a3/64 scope link
valid_lft forever preferred_lft forever
登录验证
[root@baseos-1_192.168.31.140 ~]# mysql -uroot -p4399 -h 192.168.31.150
***
(root@192.168.31.150) [(none)] show variables like '%hostname%';
+
| Variable_name | Value |
+
| hostname | baseos-1 |
+
1 row in set (0.01 sec)
主MySQL服务停止,查看从服务器IP地址,并登录验证
# 主MySQL停服
[root@baseos-1_192.168.31.140 ~]# /etc/init.d/mysqld stop
Shutting down MySQL... SUCCESS!
# 从服务查看IP地址
[root@baseos-2_192.168.31.130 ~]# ip add
1: lo: <LOOPBACK,UP,LOWER_UP> mtu 16436 qdisc noqueue state UNKNOWN
link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00
inet 127.0.0.1/8 scope host lo
inet6 ::1/128 scope host
valid_lft forever preferred_lft forever
2: eth0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast state UP qlen 1000
link/ether 00:0c:29:61:96:62 brd ff:ff:ff:ff:ff:ff
inet 192.168.31.130/24 brd 192.168.31.255 scope global eth0
inet 192.168.31.150/24 scope global secondary eth0
inet6 fe80::20c:29ff:fe61:9662/64 scope link
valid_lft forever preferred_lft forever
# 授权客户端登录验证
[root@baseos-1_192.168.31.140 ~]# mysql -uroot -p4399 -h 192.168.31.150
***
(root@192.168.31.150) [(none)] show variables like '%hostname%';
+
| Variable_name | Value |
+
| hostname | baseos-2 |
+
1 row in set (0.00 sec)
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· Linux系列:如何用heaptrack跟踪.NET程序的非托管内存泄露
· 开发者必知的日志记录最佳实践
· SQL Server 2025 AI相关能力初探
· Linux系列:如何用 C#调用 C方法造成内存泄露
· AI与.NET技术实操系列(二):开始使用ML.NET
· 没有Manus邀请码?试试免邀请码的MGX或者开源的OpenManus吧
· 无需6万激活码!GitHub神秘组织3小时极速复刻Manus,手把手教你使用OpenManus搭建本
· C#/.NET/.NET Core优秀项目和框架2025年2月简报
· DeepSeek在M芯片Mac上本地化部署
· 葡萄城 AI 搜索升级:DeepSeek 加持,客户体验更智能