一、部署环境

序号 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集群的更多相关文章

  1. Haproxy Mysql cluster 高可用Mysql集群

    -----client-----------haproxy---------mysql1----------mysql2------192.168.1.250 192.168.1.1 192.168. ...

  2. 使用Docker-compose搭建nginx-keepalived双机热备来实现高可用nginx集群

    原文转载自「刘悦的技术博客」https://v3u.cn/a_id_117 最近同学出去面试经常会被问到一个问题. 面试官:你说你们公司使用nginx反向代理tornado,部署了多少多少台机器,好像 ...

  3. 高可用mysql集群搭建

    对web系统来说,瓶颈大多在数据库和磁盘IO上面,而不是服务器的计算能力.对于系统伸缩性我们一般有2种解决方案,scale-up(纵向扩展)和scale-out(横向扩展).前者如扩内存,增加单机性能 ...

  4. 搭建高可用kubernetes集群(keepalived+haproxy)

    序 由于单master节点的kubernetes集群,存在master节点异常之后无法继续使用的缺陷.本文参考网管流程搭建一套多master节点负载均衡的kubernetes集群.官网给出了两种拓扑结 ...

  5. 移动基于Percona XTRADB Cluster的大数据解决方式

    移动基于Percona XTRADB Cluster的大数据解决方式          一.移动的去IOE之旅      近期由于"棱镜门"事件的曝光.引起了国家对信息安全问题的注 ...

  6. 使用Docker Compose部署基于Sentinel的高可用Redis集群

    使用Docker Compose部署基于Sentinel的高可用Redis集群 https://yq.aliyun.com/articles/57953 Docker系列之(五):使用Docker C ...

  7. 一寸宕机一寸血,十万容器十万兵|Win10/Mac系统下基于Kubernetes(k8s)搭建Gunicorn+Flask高可用Web集群

    原文转载自「刘悦的技术博客」https://v3u.cn/a_id_185 2021年,君不言容器技术则已,欲言容器则必称Docker,毫无疑问,它是当今最流行的容器技术之一,但是当我们面对海量的镜像 ...

  8. Keepalived+Nginx+Tomcat 实现高可用Web集群

    https://www.jianshu.com/p/bc34f9101c5e Keepalived+Nginx+Tomcat 实现高可用Web集群 0.3912018.01.08 20:28:59字数 ...

  9. Keepalived之高可用LVS集群

    前文我们聊了下keepalived的邮件通知相关配置,回顾请参考https://www.cnblogs.com/qiuhom-1874/p/13645163.html:今天我们来说说keepalive ...

随机推荐

  1. mysql时间戳

    select unix_timestamp('2013-01-01 10:10:10'); , '%Y-%m-%d %H:%i:%S' ) date_format(date,'%Y-%m-%d') - ...

  2. HDU 4578——Transformation——————【线段树区间操作、确定操作顺序】

    Transformation Time Limit: 15000/8000 MS (Java/Others)    Memory Limit: 65535/65536 K (Java/Others)T ...

  3. 【转】js弹出框、对话框、提示框、弹窗总结

    js弹出框.对话框.提示框.弹窗总结 一.js的三种最常见的对话框 //====================== JS最常用三种弹出对话框 ======================== //弹 ...

  4. 远程登陆服务器(window系统)

    1,打开命令输入框: 快捷键:win+R 2.输入命令:mstsc 3.输入你的IP地址和用户名(一般为administrator) 4.输入密码

  5. C#使用进度条,并用线程模拟真实数据 ProgressBar用法(转)

    using System; using System.Collections.Generic; using System.ComponentModel; using System.Data; usin ...

  6. SublimeText插件cssrem : px转换为rem

    步骤: 下载插件: https://github.com/flashlizi/cssrem 安装插件: 打开:Sublime Text 点击: Preferences 选择: Browse Packa ...

  7. jquery-fullpage插件

    jquery fullpage.js全屏滚动插件/jquery-easing插件 // 前端自动化工具安装插件 在页面引入: <link rel="stylesheet" h ...

  8. 快速排序c语言实现

    #include <stdio.h> void quick_sort(int* a, int n) { ) return; int i,j,tmp,k; k = a[n/]; ,j = n ...

  9. 《ArcGIS Runtime SDK for Android开发笔记》——(1)、Android Studio下载与安装

    1.前言 Android Studio 是一个Android开发环境,基于IntelliJ IDEA. 类似 Eclipse ADT,Android Studio 提供了集成的 Android 开发工 ...

  10. npm升级自身

    参考:https://github.com/felixrieseberg/npm-windows-upgrade Usage First, ensure that you can execute sc ...