文章目录

  • 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 要高的,所以这里有个问题就是如果 masterkeepalived 服务启动好了,但是 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高可用相关推荐

  1. 用 Keepalived+HAProxy 实现高可用负载均衡的配置方法

    1. 概述 软件负载均衡技术是指可以为多个后端服务器节点提供前端IP流量分发调度服务的软件技术.Keepalived和HAProxy是众多软负载技术中的两种,其中Keepalived既可以实现负载均衡 ...

  2. Keepalived实现mysql高可用

    文章目录 0.参考资料 1.实现mysql双主高可用 1.1.高可用方案选择 1.2.双主基础上实现高可用 1.2.1.安装 1.2.2.主从配置文件 2.原理介绍(整理自网络) 0.参考资料 官方地 ...

  3. 基于keepalived搭建MySQL高可用集群

    MySQL的高可用方案一般有如下几种: keepalived+双主,MHA,MMM,Heartbeat+DRBD,PXC,Galera Cluster 比较常用的是keepalived+双主,MHA和 ...

  4. RabbitMQ负载均衡(3)——Keepalived+HAProxy实现高可用的负载均衡

    欢迎支持笔者新作:<深入理解Kafka:核心设计与实践原理>和<RabbitMQ实战指南>,同时欢迎关注笔者的微信公众号:朱小厮的博客. 欢迎跳转到本文的原文链接:https: ...

  5. MHA+keepalived实现Mysql高可用及读写分离

    1.准备工作 1.准备机器(5台) keepalived+mha(2台): 10.11.13.11 keepalived master及mha管理机公用 10.11.13.12 keepalived ...

  6. keepalived实现mysql高可用_keepalived+MySQL实现高可用

    (一)keepalived概述 Keepalived通过VRRP(虚拟路由冗余协议)协议实现虚拟IP的漂移.当master故障后,VIP会自动漂移到backup,这时通知下端主机刷新ARP表,如果业务 ...

  7. 简述keepalived和其工作原理,keepalived搭建mysql高可用,vip飘逸,避免单点故障@xinxin

    keepalived 简介 组成部分 工作原理 环境准备 centos6两台[防火墙关闭] master上执行安装 修改配置文件 保存退出,重启,查看vip backup上执行 保存退出,重启,停掉m ...

  8. ubuntu lvs keepalived mysql_ubuntu下LVS + Keepalived 实现mysql高可用负载均衡实现

    $ sudo vim /etc/keepalived/keepalived.conf global_defs { router_id LVS_DEVEL } vrrp_instance VI_1 { ...

  9. docker下用keepalived+Haproxy实现高可用负载均衡集群

    启动keepalived后宿主机无法ping通用keepalived,报错: [root@localhost ~]# ping 172.18.0.15 PING 172.18.0.15 (172.18 ...

最新文章

  1. php中自己写的类放哪里,class类 - ThinkPHP 3.2.3,我有一个class,应该放在哪里?
  2. 通过几个Hello World感受.NET Core全新的开发体验
  3. linux命令ping
  4. 使用DOS命令找到占用80端口的程序,关闭该程序
  5. 我在美国与“狼”共舞的日子(7)
  6. 面试软件设计人员的方法,附面试题。我的面试注重实效
  7. 前端学习(2478):请求提交
  8. 海信空调拥抱变革 扎实技术+多样产品组合引爆市场
  9. linux定时器跑命令,linux下运行定时器(cron/centos/js脚本)
  10. POJ3982 序列【大数】
  11. c#中用声音提示报警
  12. 面试题(4)--基础篇
  13. Android串口调试工具ComAssistant下载
  14. 关于永洪BI Kerberos机制的详细介绍
  15. 1688接口:item_search - 按关键字搜索商品
  16. C++ 排列组合问题
  17. Unity3D纯白(Pure White)烘焙【2020】
  18. 2.4G无线音频双向传输技术运用
  19. 充分统计量 因子分解定理证明 (转自维基)
  20. java下载pdf_java实现文件下载..pdf

热门文章

  1. 从《男生传递微笑给女生的故事》想到的流程梳理与优化
  2. JavaScript 之 网页特效篇(offset系列、client系列、scroll系列、动画函数封装、常见网页特效)
  3. java 判断字符是否为数值型_java算法----判断字符串是否为数值型字符串
  4. geoserver的api接口_GeoServer之REST接口
  5. stable diffusion使用简明教程
  6. 教你几种方法,将mts格式快速转换为mp4!
  7. lambda函数的详细讲解
  8. element ui 表格行高设置
  9. 浩易南:心狠,养成每日出单的习惯
  10. centos卸载nvidia驱动_Linux下Nvidia显卡驱动卸载和卸载后的问题