700字范文,内容丰富有趣,生活中的好帮手!
700字范文 > keepalived + HAProxy + mysql高可用

keepalived + HAProxy + mysql高可用

时间:2021-01-16 00:32:18

相关推荐

keepalived + HAProxy + mysql高可用

文章目录

MySQL 高可用简介1. 环境准备2. 搭建 mysql 双主复制3. 安装 HAProxy4. 安装 keepalived4.1 修改配置文件4.2 编写脚本5. 测试5.1 确认所有服务的启动状态5.2 连接访问测试5.3 测试结论

MySQL 高可用

简介

本次搭建目的是使用 haproxy + keepalived + mysql(双主复制) 搭建 mysql 高可用集群,使用 keepalived 监控 haproxy 和 mysql 状态,如果 haproxy 服务异常则将 VIP 漂移到另外的机器上。

1. 环境准备

本次试验机器性能有限,所以只用了两台虚拟机,在上面安装 mysql 、haproxy 、keepalived

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.bakvim /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/bashMYSQLNUM=`ps -ef | grep -i mysqld | grep -vc grep`if [ $MYSQLNUM -eq 0 ]; thenservice mysql restartif [ $? -eq 0 ]; thenecho "mysql restart success"elsesystemctl stop keepalived.servicefifiHAPROXYNUM=`ps -ef | grep -i haproxy | grep -vc grep`if [ $HAPROXYNUM -eq 0 ]; thensystemctl stop keepalived.servicefi#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 greproot 11211 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.pidmysql1446 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=3306root 19161 0 20:58 ? 00:00:00 /opt/soft/haproxy/haproxy -f /usr/local/haproxy/haproxy.cfgroot 19241 0 20:59 ? 00:00:00 /usr/sbin/keepalived -Droot 1925 1924 0 20:59 ? 00:00:00 /usr/sbin/keepalived -Droot 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 转移过程中,数据库连接访问依然是正常的

本内容不代表本网观点和政治立场,如有侵犯你的权益请联系我们处理。
网友评论
网友评论仅供其表达个人看法,并不表明网站立场。