keepalived + HAProxy + mysql高可用
文章目录
- MySQL 高可用
- 简介
- 1. 环境准备
- 2. 搭建 mysql 双主复制
- 3. 安装 HAProxy
- 4. 安装 keepalived
- 4.1 修改配置文件
- 4.2 编写脚本
- 5. 测试
- 5.1 确认所有服务的启动状态
- 5.2 连接访问测试
- 5.3 测试结论
MySQL 高可用
简介
本次搭建目的是使用 haproxy + keepalived + mysql(双主复制) 搭建 mysql 高可用集群,使用 keepalived 监控 haproxy 和 mysql 状态,如果 haproxy 服务异常则将 VIP 漂移到另外的机器上。
1. 环境准备
本次试验机器性能有限,所以只用了两台虚拟机,在上面安装 mysql 、haproxy 、keepalived
IP | 主机名 | 软件版本 |
---|---|---|
192.168.169.100 | mysql01 |
系统版本:CentOS Linux release 7.9.2009 mysql 版本:mysql-5.7.38 haproxy 版本:haproxy-2.4.17 keepalived 版本:Keepalived v1.3.5 |
192.168.169.101 | mysql02 |
系统版本:CentOS Linux release 7.9.2009 mysql 版本:mysql-5.7.38 haproxy 版本:haproxy-2.4.17 keepalived 版本:Keepalived v1.3.5 |
2. 搭建 mysql 双主复制
参考:MySQL 双主复制
3. 安装 HAProxy
参考:
HAProxy 安装
HAProxy 学习
下面是本次试验使用的配置文件信息
global#日志log 127.0.0.1 local0 info#最大连接数maxconn 10240daemonpidfile /usr/local/haproxy/logs/haproxy.piddefaults#应用全局的日志配置log globalmode http#超时配置timeout connect 5000timeout client 5000timeout server 5000timeout check 2000frontend mysql-frontbind *:3307 # 这里绑定的端口就是后面使用 VIP 访问 mysql 时使用的端口mode tcpdefault_backend mysql-backupbackend mysql-backupmode tcpbalance roundrobinserver db1 192.168.169.100:3306 weight 1 check inter 2000 rise 2 fall 3server db2 192.168.169.101:3306 weight 1 check inter 2000 rise 2 fall 3listen http_front #haproxy的客户页面bind 192.168.169.101:8888 #HAProxy自己的IP地址mode httpoption httplogstats uri /haproxystats auth admin:123456 #控制面板账号密码 账号:admin stats refresh 5sstats enable
4. 安装 keepalived
这里直接使用 yum 安装
yum -y install keepalived
4.1 修改配置文件
主备基本差不多,主要注意 router_id 、state 、priority
这三个参数
# 修改 Keepalived 配置文件,将原本的 keepalived.conf 文件备份,新建 keepalived.conf 文件加入如下内容
mv /etc/keepalived/keepalived.conf /etc/keepalived/keepalived.conf.bak
vim /etc/keepalived/keepalived.conf# 注意:这个是 master(主机) 的配置文件
! Configuration File for keepalived # 这一行为注释
global_defs { router_id server01 # router_id 机器标识,通常使用 hostname,相对具有唯一性,和备机区分开,不能使用同一个标识
}vrrp_script chk_server { # 定义一个检测脚本,在global_defs之外配置script "/etc/keepalived/check_server.sh" # 自己写的监测脚本interval 2 # 每2s监测一次weight -10 # 该参数用于指定当监测失效时,该设备的优先级会减少的值,该值为负表示减少fall 2 # 尝试两次都成功才成功rise 2 # 尝试两次都失败才失败
}vrrp_instance VI_1 { # 定义一个vrrp_install实例,名称为VI_1state MASTER # 表示该实例的角色状态,有MASTER和BACKUP两种主备状态interface ens33 # 对外提供服务的网络接口,注意修改为自己的网卡名称,如 ens33,eth0,eth1virtual_router_id 51 # 虚拟路由ID标识,主备服务器配置中相同实例的ID必须一致priority 150 # priority表示实例优先级,数字越大,优先级越高。master 的优先级必须大于 backupadvert_int 1 # 设定 master 与 backup 负载均衡器之间同步检查的时间间隔,默认是秒authentication { # 权限认证配置auth_type PASS # 主要有 PASS 和 AH 两种auth_pass 1111 # 验证密码,同一个 vrrp_instance 下 MASTER 和 BACKUP 密码必须相同}virtual_ipaddress {192.168.169.99 # 虚拟IP地址;可以配置多个IP,每个IP占一行。注意,这里的IP就是在工作中访问 zabbix server 需要和域名绑定的ip}track_script { # 调用自定义的脚本chk_server}}
这里有一个问题,keepalived
能不能配置两个 vrrp_script
和两个 track_script
,我配置两个第二个脚本不执行
4.2 编写脚本
上面配置中有一个检查脚本,它会检查服务运行状态,如果服务宕机了,则选择将 VIP 漂移到另外一台机器上
因为我这个是所有的服务都装在了一台机器上,然后我这里就可以在脚本中检测很多东西。
这里主要是检查 mysql
运行状态,如果 mysql
宕机了,那么就重启 mysql
,如果重启失败,则关闭 keepalived
让 VIP 漂移到另外的机器上继续提供服务。HAProxy
也是同样的道理,不过 HAProxy
宕机之后这里直接关闭 keepalived
切换服务器提供服务了。然后下面写了一点 ssh 远程执行的命令,意思就是 VIP 漂移完成之后在重启之前机器关闭的服务和 keepalived
,当然这里也可以通过其他更好的方式去实现。
两台机器脚本基本一样,只是需要注意修改对应 IP 即可
vim check_server.sh
#!/bin/bash
MYSQLNUM=`ps -ef | grep -i mysqld | grep -vc grep`
if [ $MYSQLNUM -eq 0 ]; thenservice mysql restartif [ $? -eq 0 ]; thenecho "mysql restart success"elsesystemctl stop keepalived.servicefi
fiHAPROXYNUM=`ps -ef | grep -i haproxy | grep -vc grep`
if [ $HAPROXYNUM -eq 0 ]; thensystemctl stop keepalived.service
fi#sshpass -p 0 ssh -o StrictHostKeyChecking=no root@192.168.169.101 "sh /etc/keepalived/restart_haproxy.sh"MASTE_RHAPROXY=`sshpass -p 0 ssh -o StrictHostKeyChecking=no root@192.168.169.100 "ps -ef | grep -i haproxy | grep -vc grep"`if [ $MASTE_RHAPROXY -eq 0 ]; thensshpass -p 0 ssh -o StrictHostKeyChecking=no root@192.168.169.100 "systemctl start haproxy"
fiMASTE_KEEPALIVED=`sshpass -p 0 ssh -o StrictHostKeyChecking=no root@192.168.169.100 "ps -ef | grep -i keepalived | grep -vc grep"`if [ $MASTE_KEEPALIVED -eq 0 ]; thensshpass -p 0 ssh -o StrictHostKeyChecking=no root@192.168.169.100 "systemctl start keepalived"
fi
这里注意一个问题,就是如果这里在脚本中远程启动关闭机器的服务及 keepalived
那么可能会出现在 master
机器服务异常 VIP 漂移之后,master
机器很快又恢复了,这个时候 VIP 又会自动回到原来的机器上,因为 master
配置的权重是比 back
要高的,所以这里有个问题就是如果 master
的 keepalived
服务启动好了,但是 haproxy
服务是异常的,这里就有问题。不过本次试验暂未考虑这些。
5. 测试
5.1 确认所有服务的启动状态
[root@mysql01 ~]# ps -ef | grep -E 'mysql|keepalived|haproxy' | grep -v grep
root 1121 1 0 18:43 ? 00:00:00 /bin/sh /usr/local/mysql/bin/mysqld_safe --datadir=/usr/local/mysql/data --pid-file=/usr/local/mysql/data/mysql01.pid
mysql 1446 1121 0 18:43 ? 00:00:39 /usr/local/mysql/bin/mysqld --basedir=/usr/local/mysql --datadir=/usr/local/mysql/data --plugin-dir=/usr/local/mysql/lib/plugin --user=mysql --log-error=mysql01.err --pid-file=/usr/local/mysql/data/mysql01.pid --socket=/usr/local/mysql/data/mysql.sock --port=3306
root 1916 1 0 20:58 ? 00:00:00 /opt/soft/haproxy/haproxy -f /usr/local/haproxy/haproxy.cfg
root 1924 1 0 20:59 ? 00:00:00 /usr/sbin/keepalived -D
root 1925 1924 0 20:59 ? 00:00:00 /usr/sbin/keepalived -D
root 1926 1924 0 20:59 ? 00:00:00 /usr/sbin/keepalived -D
5.2 连接访问测试
这里使用 Navicat 连接数据库测试
这里的连接地址就是 VIP 加上在 haproxy 中配置的“端口”
- 关闭 HAProxy 测试连接
现在 VIP 是在 mysql01 这个机器上
关闭 haproxy ,此时 VIP 已经不在 mysql01 这个机器上了
查看 mysql02 机器,此时 VIP 到了 mysql02 机器上,如果 mysql01 机器后面又立刻恢复正常,那么 VIP 则会回到原来的 mysql01 机器上
5.3 测试结论
在 VIP 转移过程中,数据库连接访问依然是正常的
keepalived + HAProxy + mysql高可用相关推荐
- 用 Keepalived+HAProxy 实现高可用负载均衡的配置方法
1. 概述 软件负载均衡技术是指可以为多个后端服务器节点提供前端IP流量分发调度服务的软件技术.Keepalived和HAProxy是众多软负载技术中的两种,其中Keepalived既可以实现负载均衡 ...
- Keepalived实现mysql高可用
文章目录 0.参考资料 1.实现mysql双主高可用 1.1.高可用方案选择 1.2.双主基础上实现高可用 1.2.1.安装 1.2.2.主从配置文件 2.原理介绍(整理自网络) 0.参考资料 官方地 ...
- 基于keepalived搭建MySQL高可用集群
MySQL的高可用方案一般有如下几种: keepalived+双主,MHA,MMM,Heartbeat+DRBD,PXC,Galera Cluster 比较常用的是keepalived+双主,MHA和 ...
- RabbitMQ负载均衡(3)——Keepalived+HAProxy实现高可用的负载均衡
欢迎支持笔者新作:<深入理解Kafka:核心设计与实践原理>和<RabbitMQ实战指南>,同时欢迎关注笔者的微信公众号:朱小厮的博客. 欢迎跳转到本文的原文链接:https: ...
- MHA+keepalived实现Mysql高可用及读写分离
1.准备工作 1.准备机器(5台) keepalived+mha(2台): 10.11.13.11 keepalived master及mha管理机公用 10.11.13.12 keepalived ...
- keepalived实现mysql高可用_keepalived+MySQL实现高可用
(一)keepalived概述 Keepalived通过VRRP(虚拟路由冗余协议)协议实现虚拟IP的漂移.当master故障后,VIP会自动漂移到backup,这时通知下端主机刷新ARP表,如果业务 ...
- 简述keepalived和其工作原理,keepalived搭建mysql高可用,vip飘逸,避免单点故障@xinxin
keepalived 简介 组成部分 工作原理 环境准备 centos6两台[防火墙关闭] master上执行安装 修改配置文件 保存退出,重启,查看vip backup上执行 保存退出,重启,停掉m ...
- ubuntu lvs keepalived mysql_ubuntu下LVS + Keepalived 实现mysql高可用负载均衡实现
$ sudo vim /etc/keepalived/keepalived.conf global_defs { router_id LVS_DEVEL } vrrp_instance VI_1 { ...
- docker下用keepalived+Haproxy实现高可用负载均衡集群
启动keepalived后宿主机无法ping通用keepalived,报错: [root@localhost ~]# ping 172.18.0.15 PING 172.18.0.15 (172.18 ...
最新文章
- php中自己写的类放哪里,class类 - ThinkPHP 3.2.3,我有一个class,应该放在哪里?
- 通过几个Hello World感受.NET Core全新的开发体验
- linux命令ping
- 使用DOS命令找到占用80端口的程序,关闭该程序
- 我在美国与“狼”共舞的日子(7)
- 面试软件设计人员的方法,附面试题。我的面试注重实效
- 前端学习(2478):请求提交
- 海信空调拥抱变革 扎实技术+多样产品组合引爆市场
- linux定时器跑命令,linux下运行定时器(cron/centos/js脚本)
- POJ3982 序列【大数】
- c#中用声音提示报警
- 面试题(4)--基础篇
- Android串口调试工具ComAssistant下载
- 关于永洪BI Kerberos机制的详细介绍
- 1688接口:item_search - 按关键字搜索商品
- C++ 排列组合问题
- Unity3D纯白(Pure White)烘焙【2020】
- 2.4G无线音频双向传输技术运用
- 充分统计量 因子分解定理证明 (转自维基)
- java下载pdf_java实现文件下载..pdf
热门文章
- 从《男生传递微笑给女生的故事》想到的流程梳理与优化
- JavaScript 之 网页特效篇(offset系列、client系列、scroll系列、动画函数封装、常见网页特效)
- java 判断字符是否为数值型_java算法----判断字符串是否为数值型字符串
- geoserver的api接口_GeoServer之REST接口
- stable diffusion使用简明教程
- 教你几种方法,将mts格式快速转换为mp4!
- lambda函数的详细讲解
- element ui 表格行高设置
- 浩易南:心狠,养成每日出单的习惯
- centos卸载nvidia驱动_Linux下Nvidia显卡驱动卸载和卸载后的问题