一、部署环境

序号 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. 修改linux文件权限命令

    修改linux文件权限命令:chmod Linux系统中的每个文件和目录都有访问许可权限,用它来确定谁可以通过何种方式对文件和目录进行访问和操作. 文件或目录的访问权限分为只读,只写和可执行三种.以文 ...

  2. codeblocks 控制台输出乱码

    解决办法如图 如果你和我用的一样是kde环境  把Terminal to launch console programs那个选项改成 上图  konsole -e 如果你用的是gnome环境     ...

  3. ToDictionary写法

    把List集合转化成Dictionary public ActionResult Dimo() { Dictionary<string, Object> param = new Dicti ...

  4. IntelliJ IDEA实时模板变量

    返回由当前方法返回的值的类型IntelliJ IDEA 实时模板中的模板变量允许用户输入.扩展模板后,变量将作为输入字段显示在编辑器中. IntelliJ IDEA 声明实时模板变量 模板中的变量以下 ...

  5. Java的类成员变量、实例变量、类变量,成员方法、实例方法、类方法

    总是被这些相似的概念搞晕,查阅了资料后做个小总结,以变量为例,方法辨析类似. 1.多胞胎名字汇总辨析 成员变量和成员方法是范围最大的定义,提到成员变量就可以理解成你所定义在一个类体中的各类变量的统称, ...

  6. SqlSession [org.apache.ibatis.session.defaults.DefaultSqlSession@1fa5519] was not registered for synchronization because synchronization is not active

    Creating a new SqlSessionSqlSession [org.apache.ibatis.session.defaults.DefaultSqlSession@1fa5519] w ...

  7. php支付走过的坑(支付宝篇 注册 秘钥 环境等等配置)

    支付这东西,说容易也容易,说难也难 代码这玩意还比较好说 但是 如果没有demo 直接去看官方文档 十有八九一脸懵逼 今天就整理一下 支付这块走过的坑 涉及 微信h5支付 支付宝h5支付 (api文档 ...

  8. Struts_ActionWildcard_通配符配置

    使用通配符,将配置量降到最低 不过,一定要遵守“约定由于配置”的原则 struts2.xml <?xml version="1.0" encoding="UTF-8 ...

  9. 学习lucene5.5.4的笔记

    说说几个常用的类. OpenMode是一个枚举类,有三个元素,分别表示IndexWriter的打开模式. CREATE:每次打开IndexWriter时清空当前索引目录下的索引,再新建索引. APPE ...

  10. ansible使用5-Variables

    变量命名 支持数字.字母.下划线 有效:foo_port, foo5 无效:foo-port, foo port, foo.port, 12 playbook定义 - hosts: webserver ...