安装ipvsadm
1. 先在宿主机上安装并以root来启动ipvsadm,每次要在容器中运行ipvs都需要先在宿主机上启动ipvs。如果直接进行2步操作将报出如下错误:
Can‘t initialize ipvs: Protocol not available
Are you sure that IP Virtual Server is built in the kernel or as module?
2. 实例化一个ipvs容器:
- dockerfile:
FROM ubuntu MAINTAINER cenze <[email protected]> RUN ln -sf /usr/share/zoneinfo/Asia/Shanghai /etc/localtime ADD conf/sources.list /etc/apt/
ADD conf/rc.ipvs /etc/ RUN apt-get update && apt-get install -y gcc make vim ipvsadm iproute2 #本机的80端口已经留给其他容器使用了,所以绑定在了89端口上 EXPOSE 89 - 宿主机上运行容器ipvs:
sudo docker run -it -p 89:89 --name lvs --privileged=true cenze/lvs
- 容器ipvs中完成均衡策略配置:由于容器启动时不会自动去执行/etc/rc.local,所以需手动执行下。所有需要手动执行的命令都可写进rc.ipvs(需要可执行权限)文档:
ip addr add 172.17.100.100 broadcast 172.17.100.100 label eth0:0 dev eth0 ipvsadm -A -t 172.17.100.100:89 -s wlc ipvsadm -a -t 172.17.100.100:89 -r 172.17.0.8 -g -w 1 ipvsadm -a -t 172.17.100.100:89 -r 172.17.0.6 -g -w 1
[email protected]:/# /etc/rc.ipvs
配置Real Servers
1. 与ipvs容器一样,需要手动执行一些配置命令,将其写进/etc/rc.rs(需要可执行权限):
ip addr add 172.17.100.100 broadcast 172.17.100.100 label lo:0 dev lo echo 1 > /proc/sys/net/ipv4/conf/lo/arp_ignore echo 2 > /proc/sys/net/ipv4/conf/lo/arp_announce echo 1 > /proc/sys/net/ipv4/conf/all/arp_ignore echo 2 > /proc/sys/net/ipv4/conf/all/arp_announce
然后一次手动执行完:
[email protected]:/usr/local/pkgs/nginx-1.10.2# /etc/rc.rs
2. 为RS-172.17.0.8和RS-172.17.0.6添加不同的index.html:
<html> <head> <title>Welcome to RS-172.17.0.8!</title> </head> <body> <h1>Welcome to RS-172.17.0.8!</h1> </body> </html>
3. WEB服务器的监听端口改为89。
测试集群负载均衡效果
从多个浏览器访问172.17.100.100:89:
1)不能从同一个浏览器开启多个标签去测试,否则将得到同一台WEB服务器的响应。
2)不能通过localhost:89去访问,否则将无法与WEB服务器群建立起连接。
1. Chrome访问172.17.100.100:89:
Welcome to 172.17.0.8!
2. FireFox访问172.17.100.100:89:
Welcome to 172.17.0.6!