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 ...
随机推荐
- mysql时间戳
select unix_timestamp('2013-01-01 10:10:10'); , '%Y-%m-%d %H:%i:%S' ) date_format(date,'%Y-%m-%d') - ...
- HDU 4578——Transformation——————【线段树区间操作、确定操作顺序】
Transformation Time Limit: 15000/8000 MS (Java/Others) Memory Limit: 65535/65536 K (Java/Others)T ...
- 【转】js弹出框、对话框、提示框、弹窗总结
js弹出框.对话框.提示框.弹窗总结 一.js的三种最常见的对话框 //====================== JS最常用三种弹出对话框 ======================== //弹 ...
- 远程登陆服务器(window系统)
1,打开命令输入框: 快捷键:win+R 2.输入命令:mstsc 3.输入你的IP地址和用户名(一般为administrator) 4.输入密码
- C#使用进度条,并用线程模拟真实数据 ProgressBar用法(转)
using System; using System.Collections.Generic; using System.ComponentModel; using System.Data; usin ...
- SublimeText插件cssrem : px转换为rem
步骤: 下载插件: https://github.com/flashlizi/cssrem 安装插件: 打开:Sublime Text 点击: Preferences 选择: Browse Packa ...
- jquery-fullpage插件
jquery fullpage.js全屏滚动插件/jquery-easing插件 // 前端自动化工具安装插件 在页面引入: <link rel="stylesheet" h ...
- 快速排序c语言实现
#include <stdio.h> void quick_sort(int* a, int n) { ) return; int i,j,tmp,k; k = a[n/]; ,j = n ...
- 《ArcGIS Runtime SDK for Android开发笔记》——(1)、Android Studio下载与安装
1.前言 Android Studio 是一个Android开发环境,基于IntelliJ IDEA. 类似 Eclipse ADT,Android Studio 提供了集成的 Android 开发工 ...
- npm升级自身
参考:https://github.com/felixrieseberg/npm-windows-upgrade Usage First, ensure that you can execute sc ...