docker下的负载均衡
前言
前面两篇文章实现了mysql的主从模式,以及将其应用到博客wordpress上。
这回想尝试一下在docker下的负载均衡实现。
也不知道能不能将这个实验作为毕设作品的候选方案之一......
拓扑
先说说这个拓扑,我为啥这样设计。
首先就是HAproxy,我对HAproxy的了解还是这几天的,一是源于【长亭安全课堂】的一篇文章《》
二是在对教育src的某个大学进行资产收集的时候,发现该校有大量的HAproxy。
所以就开始简单接触了一下这个东西。
HAproxy是一款提供高可用性、负载均衡以及基于TCP和HTTP应用的代理软件。
简单说,就是我想用它来实现负载均衡,同时上篇文章中,我把wordpress利用-p
把80端口映射暴露到外面了。
现在就想通过HAproxy,作为上层入口,在实现负载均衡的同时,避免wordpress直接暴露。
HAproxy下会存在两个wordpress,
这样可以避免在用户访问量过大的时候,一个wordpress会崩。
同时沿用了mysql的主从架构,实现数据的备份。
由于wordpress这种博客场景下,数据的储存有两种方式,
一是文章数据,文章数据会进入到mysql中进行存储与备份。
二是优化数据,例如博主更改了主题,启用了某个插件等等,这种类型的数据需要在两个wordpress间实现数据的同步以及备份。
否则用户在访问的时候,通过HAproxy负载均衡就会出现令人尴尬的场面。
一般情况,解决这个问题的办法是采用rsync\lsyncd
不过docker形式下提供了更为美妙的解决方法。
也就是中间咱画的“卷框”,docker的-v
参数。
docker的-v
实现了把宿主机的一个目录挂载到容器内,就类似在两个wordpress容器的角度下的一块共用磁盘。
这个想法还是源于我和舍友[一位爬虫大佬]的一次讨论,”怎么在公有云的场景下,实现负载均衡器内部实例间的数据同步“。
搭建
1、准备:
由于wordpress会经过安装的过程,所以在负载均衡建立前最好完成安装步骤,
所以直接利用docker的cp
命令,把上篇文章安装好的wordpress中的数据拷贝到宿主机的目录。
接着可以利用-rm
把原来的wordpress容器删除了。
docker rm -f wordpress
2、创建wordpress
docker run -d -v /root/wordpress/html:/var/www/html/ --name wordpress1 --link master:mysql wordpress
docker run -d -v /root/wordpress/html:/var/www/html/ --name wordpress2 --link master:mysql wordpress
这个过程完成了两个wordpress的创建,并且与上篇文章不同的是,这里并没有把端口映射出去,并且利用了-v
达到了两个容器共用一份数据的目的,同时也可以在宿主机直接修改博客的代码的便捷效果。
验证一下,博客是否跳过了安装的步骤。
可以看到,我创建的名称为Rj45mp
博客,数据存在于两个不同的容器,说明nice。
3、创建HAproxy
docker run -d -it -p 80:80 --name haproxy --link wordpress1:wordpress1 --link wordpress2:wordpress2 haproxy /bin/bash
将haproxy的80端口映射出来。
4、配置负载均衡
配置文件:
global
#以后台形式运行
daemon
# 最大连接数
maxconn 4096
# 工作目录
chroot /usr/local/sbin
#pid文件位置
pidfile /usr/local/sbin/haproxy.pid
defaults
log 127.0.0.1 local0 err #[err warning info debug]
mode http #默认的模式mode{ tcp|http|health }
retries 2 #两次连接失败就认为是服务器不可用,也可以通过后面设置
option redispatch #当serverId对应的服务器挂掉后,强制定向到其他健康的服务器
option abortonclose #当服务器负载很高的时候,自动结束掉当前队列处理比较久的链接
option dontlognull #日志中不记录负载均衡的心跳检测记录
maxconn 4096 #默认的最大连接数
timeout connect 5000ms #连接超时
timeout client 30000ms #客户端超时
timeout server 30000ms #服务器超时
#timeout check 2000 #=心跳检测超时
######## wordpress负载均衡配置 ###############
listen proxy-wordpress
bind 0.0.0.0:80
stats enable
stats uri /haproxy-stats
server wordpress1 wordpress1:80 check inter 2000 rise 2 fall 5
server wordpress2 wordpress2:80 check inter 2000 rise 2 fall 5
haproxy配置文件详解:
https://www.linuxidc.com/Linux/2012-07/65350.htm
进入haproxy容器,安装编辑器,然后把配置文件放置在/usr/local/sbin/haproxy.cfg
5、运行:
haproxy -f haproxy.cfg
注意:
如果修改了配置文件,可以在容器中安装psmic
,然后再killall haproxy
,最后再运行。
6、验证:
访问一下HAproxy监听的80端口,成功访问到博客即成功。
至此,三篇文章完成了docker下的数据备份同步以及负载均衡。