docker swarm使用keepalived+haproxy搭建基于percona-xtradb-cluster方案的高可用mysql集群
一、部署环境
| 序号 | 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下面了。
当然还可以配置服务器检查策略。
docker swarm使用keepalived+haproxy搭建基于percona-xtradb-cluster方案的高可用mysql集群的更多相关文章
- Haproxy Mysql cluster 高可用Mysql集群
-----client-----------haproxy---------mysql1----------mysql2------192.168.1.250 192.168.1.1 192.168. ...
- 使用Docker-compose搭建nginx-keepalived双机热备来实现高可用nginx集群
原文转载自「刘悦的技术博客」https://v3u.cn/a_id_117 最近同学出去面试经常会被问到一个问题. 面试官:你说你们公司使用nginx反向代理tornado,部署了多少多少台机器,好像 ...
- 高可用mysql集群搭建
对web系统来说,瓶颈大多在数据库和磁盘IO上面,而不是服务器的计算能力.对于系统伸缩性我们一般有2种解决方案,scale-up(纵向扩展)和scale-out(横向扩展).前者如扩内存,增加单机性能 ...
- 搭建高可用kubernetes集群(keepalived+haproxy)
序 由于单master节点的kubernetes集群,存在master节点异常之后无法继续使用的缺陷.本文参考网管流程搭建一套多master节点负载均衡的kubernetes集群.官网给出了两种拓扑结 ...
- 移动基于Percona XTRADB Cluster的大数据解决方式
移动基于Percona XTRADB Cluster的大数据解决方式 一.移动的去IOE之旅 近期由于"棱镜门"事件的曝光.引起了国家对信息安全问题的注 ...
- 使用Docker Compose部署基于Sentinel的高可用Redis集群
使用Docker Compose部署基于Sentinel的高可用Redis集群 https://yq.aliyun.com/articles/57953 Docker系列之(五):使用Docker C ...
- 一寸宕机一寸血,十万容器十万兵|Win10/Mac系统下基于Kubernetes(k8s)搭建Gunicorn+Flask高可用Web集群
原文转载自「刘悦的技术博客」https://v3u.cn/a_id_185 2021年,君不言容器技术则已,欲言容器则必称Docker,毫无疑问,它是当今最流行的容器技术之一,但是当我们面对海量的镜像 ...
- Keepalived+Nginx+Tomcat 实现高可用Web集群
https://www.jianshu.com/p/bc34f9101c5e Keepalived+Nginx+Tomcat 实现高可用Web集群 0.3912018.01.08 20:28:59字数 ...
- Keepalived之高可用LVS集群
前文我们聊了下keepalived的邮件通知相关配置,回顾请参考https://www.cnblogs.com/qiuhom-1874/p/13645163.html:今天我们来说说keepalive ...
随机推荐
- WebGL 踩坑系列-1
WebGL 中的一些选项WebGL 中开启颜色混合(透明效果) gl.enable(gl.BLEND); gl.blendFunc(gl.SRC_ALPHA, gl.ONE_MINUS_SRC_ALP ...
- webgl学习总结画线面及场景和物体动
WebGL是在浏览器中实现三维效果的一套规范.是浏览器中的3D引擎,是利用js代码来实现加载3D模型,渲染.输出等功能,从而实现在浏览器和微信中浏览三维文件的效果. three.js是基于WebGL的 ...
- 1像素border
1像素border 利用伪类和媒体查询: 伪类: border-1px($color) position:relative &:after display: block position: a ...
- Android自定义控件 -- 带边框的TextView
使用xml实现边框 原来使用带边框的TextView时一般都是用XML定义来完成,在drawable目录中定义如下所示的xml文件: <?xml version="1.0" ...
- DOM对象和js对象以及jQuery对象的区别
DOM对象和js对象以及jQuery对象的区别 DOM对象和js对象以及jQuery对象的区别 一.DOM对象 文档对象模型简称DOM,是W3C组织推荐的处理可扩展置标语言的标准编程接口. DOM实际 ...
- Python基础学习之序列(2)
通用序列操作 所有序列类型都可以进行某些特定的操作.这些操作包括:索引(indexing).分片(sliceing).加(adding).乖(multiplying)以及检查某个元素是否属于序列的成员 ...
- vue项目里的日期格式化(摘录)
export function formatDate (date, fmt) { if (/(y+)/.test(fmt)) { fmt = fmt.replace(RegExp.$1, (date. ...
- 关于vim、nvim的折腾
1 from a view of enc ·nvim必须set enc=utf8,很多基于python的插件也默认了此,这对于中文这些并不友好,然而,vim支持多字节就好的多. 因为很多项目,大家可能 ...
- spring-mabatis整合的配置文件
1.spring.xml <?xml version="1.0" encoding="UTF-8"?> <beans xmlns=" ...
- css样式设置高度不定文本垂直居中
使用css实现文本垂直居中,对于支持display: table的浏览器来说,是比较容易实现的,只需要对外层div设置为table,内层div设置为table-cell,并设置文本垂直居中即可.但对于 ...