docker swarm使用keepalived+haproxy搭建基于percona-xtradb-cluster方案的高可用mysql集群
2024-09-01 19:51:02
一、部署环境
序号 | hostname | ip | 备注 |
1 | manager107 | 10.0.3.107 | centos7;3.10.0-957.1.3.el7.x86_64 |
2 | worker68 | 10.0.3.68 | centos7;3.10.0-957.1.3.el7.x86_64 |
3 | worker80 | 10.0.3.80 | centos7;3.10.0-957.1.3.el7.x86_64 |
docker版本
docker version
Client:
Version: 18.09.
API version: 1.39
Go version: go1.10.4
Git commit: 4d60db4
Built: Wed Nov ::
OS/Arch: linux/amd64
Experimental: false Server: Docker Engine - Community
Engine:
Version: 18.09.
API version: 1.39 (minimum version 1.12)
Go version: go1.10.4
Git commit: 4d60db4
Built: Wed Nov ::
OS/Arch: linux/amd64
Experimental: false
二、首先搭建基于swarm的percona-xtradb-cluster集群,参见上一篇
三、三台服务器安装haproxy
1、编写haproxy-Dockerfile
cd /home/workspace/haproxy
vim haproxy-Dockerfile
haproxy-Dockerfile内容:
FROM haproxy
COPY ./haproxy.cfg /usr/local/etc/haproxy/
EXPOSE
CMD ["/usr/local/sbin/haproxy", "-db", "-f", "/usr/local/etc/haproxy/haproxy.cfg"]
2、编辑haproxy配置文件
vim haproxy.cfg
输入haproxy.cfg内容:
global
#工作目录
chroot /usr/local/etc/haproxy
#日志文件,使用rsyslog服务中local5日志设备(/var/log/local5),等级info
log 127.0.0.1 local5 info
#守护进程运行
daemon defaults
log global
mode http
#日志格式
option httplog
#日志中不记录负载均衡的心跳检测记录
option dontlognull
#连接超时(毫秒)
timeout connect
#客户端超时(毫秒)
timeout client
#服务器超时(毫秒)
timeout server #监控界面
listen admin_stats
#监控界面的访问的IP和端口
bind 0.0.0.0:
#访问协议
mode http
#URI相对地址
stats uri /haproxy
#统计报告格式
stats realm Global\ statistics
#登陆帐户信息
stats auth admin:abc123456
#数据库负载均衡
listen proxy-mysql
#访问的IP和端口(前面ip=0代表任何ip都可访问)
bind 0.0.0.0:
#网络协议
mode tcp
#负载均衡算法(轮询算法)
#轮询算法:roundrobin
#权重算法:static-rr
#最少连接算法:leastconn
#请求源IP算法:source
balance roundrobin
#日志格式
option tcplog
#在MySQL中创建一个没有权限的haproxy用户,密码为空。Haproxy使用这个账户对MySQL数据库心跳检测
option mysql-check user haproxy
server node1 node1: check weight maxconn
server node2 node2: check weight maxconn
server node3 node3: check weight maxconn
#使用keepalive检测死链
option tcpka
注:node1、node2、node3分别为三台服务器上的pxc集群的容器名字。
3、构建haproxy镜像
docker build -t haproxy01 .
4、三台服务器启动haproxy容器服务
docker run -it -d -p : -p : --name c_haproxy01 --net=pxc-net --privileged haproxy01
docker run -it -d -p : -p : --name c_haproxy02 --net=pxc-net --privileged haproxy01
docker run -it -d -p : -p : --name c_haproxy03 --net=pxc-net --privileged haproxy01
这时访问http://10.0.3.107:7010/haproxy,应该可以看到统计页面了。
四、三台服务器安装keepalived
1、三台服务器yum安装keepalived
2、选择107作为master,两外两台作为backup
在107配置keepalived:
cd /etc/keepalived/
vim keepalived.conf
keepalived.conf内容:
! Configuration File for keepalived vrrp_instance VI_1 {
state MASTER
interface enp0s31f6
virtual_router_id
priority
advert_int
authentication {
auth_type PASS
auth_pass
}
virtual_ipaddress {
10.0.3.63
}
} virtual_server 10.0.3.63 {
delay_loop
lb_algo rr
lb_kind NAT
persistence_timeout
protocol TCP real_server 10.0.3.107 {
weight
} real_server 10.0.3.68 {
weight
} real_server 10.0.3.80 {
weight
} } virtual_server 10.0.3.63 {
delay_loop
lb_algo rr
lb_kind NAT
persistence_timeout
protocol TCP real_server 10.0.3.107 {
weight
} real_server 10.0.3.68 {
weight
} real_server 10.0.3.80 {
weight
} }
启动keepalived
systemctl start keepalived
同样,在68和80上配置keepalived:
! Configuration File for keepalived vrrp_instance VI_1 {
state BACKUP
interface enp3s0
virtual_router_id
priority
advert_int
authentication {
auth_type PASS
auth_pass
}
virtual_ipaddress {
10.0.3.63
}
} virtual_server 10.0.3.63 {
delay_loop
lb_algo rr
lb_kind NAT
persistence_timeout
protocol TCP real_server 10.0.3.107 {
weight
} real_server 10.0.3.68 {
weight
} real_server 10.0.3.80 {
weight
} } virtual_server 10.0.3.63 {
delay_loop
lb_algo rr
lb_kind NAT
persistence_timeout
protocol TCP real_server 10.0.3.107 {
weight
} real_server 10.0.3.68 {
weight
} real_server 10.0.3.80 {
weight
} }
同样启动keepalived。
五、测试
现在可以用vip来访问统计页面(http://10.0.3.63:7010/haproxy)和连接数据库集群(10.0.3.63:3106)了。
模拟keepalived挂掉:
ip a
可以看到现在63正挂在107下面,现在在107上停掉keepalived
systemctl stop keepalived
可以看到63已经漂移到了68下面了。
当然还可以配置服务器检查策略。
最新文章
- ASP.NET MVC - 定制属于你自己的ViewEngine
- R语言练习(二)
- PostgreSQL中数据库,表,等对象的oid与对象名的对应关系
- grub2的使用
- linux ----虚拟机无法与本地机通信
- curl断点续载
- 错 &;#39;Cannot run program &;quot;/home/uv/IDE/adt/sdk/platform-tools/adb&;quot;: error=2, No such file or directory
- spring boot 入门操作(二)
- 自定义流程gooflow2.0+自定义表单
- 学习rollup.js模块文件打包
- Selenide UI 自动化测试
- centos7环境下mysql5.7的安装与配置
- jupyter notebook快捷键使用指南
- php trait使用
- Vue小问题汇总
- 『流畅的Python』第13章:正确重载运算符
- PHP基本的语法的小结
- windows 下mongodb 副本建创建
- 绕过disable_functions执行命令实验
- 剖析ASP.NET Core(Part 3)- UseMvc(译)
热门文章
- LeetCode 303.区域检索-数组不可变(accumulate()和for循环差异分析)
- HDU 5418——Victor and World——————【状态压缩+floyd】
- 用户“Michael-PC\Michael”不具有所需的权限。请验证授予了足够的权限并且解决了 Windows 用户帐户控制(UAC)限制问题。
- Net-SNMP(V3协议)安装配置笔记(CentOS 5.2)(转)
- oracle 递归查询(来源于网络)
- 转:用AutoCAD 系统变量编程
- 算法练习-字符串转换成整数(实现atoi函数)
- VS2015卸载方法
- Uva 11572 唯一的雪花
- 【转】Android BroadcastReceiver介绍