vlambda博客
学习文章列表

docker下的负载均衡

前言

前面两篇文章实现了mysql的主从模式,以及将其应用到博客wordpress上。

这回想尝试一下在docker下的负载均衡实现。

也不知道能不能将这个实验作为毕设作品的候选方案之一......

拓扑

先说说这个拓扑,我为啥这样设计。

首先就是HAproxy,我对HAproxy的了解还是这几天的,一是源于【长亭安全课堂】的一篇文章《

docker下的负载均衡

二是在对教育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容器的角度下的一块共用磁盘。

这个想法还是源于我和舍友[一位爬虫大佬]的一次讨论,”怎么在公有云的场景下,实现负载均衡器内部实例间的数据同步“。

docker下的负载均衡

搭建

1、准备:

由于wordpress会经过安装的过程,所以在负载均衡建立前最好完成安装步骤,

所以直接利用docker的cp命令,把上篇文章安装好的wordpress中的数据拷贝到宿主机的目录。

docker下的负载均衡

接着可以利用-rm把原来的wordpress容器删除了。

docker rm -f wordpress


2、创建wordpress

docker run -d -v /root/wordpress/html:/var/www/html/ --name wordpress1 --link master:mysql wordpressdocker run -d -v /root/wordpress/html:/var/www/html/ --name wordpress2 --link master:mysql wordpress

这个过程完成了两个wordpress的创建,并且与上篇文章不同的是,这里并没有把端口映射出去,并且利用了-v达到了两个容器共用一份数据的目的,同时也可以在宿主机直接修改博客的代码的便捷效果。docker下的负载均衡


验证一下,博客是否跳过了安装的步骤。

docker下的负载均衡

可以看到,我创建的名称为Rj45mp博客,数据存在于两个不同的容器,说明nice。


3、创建HAproxy

docker run -d -it -p 80:80 --name haproxy --link wordpress1:wordpress1 --link wordpress2:wordpress2 haproxy /bin/bash

将haproxy的80端口映射出来。

docker下的负载均衡

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下的数据备份同步以及负载均衡。