您的位置:首页 > 运维架构 > Docker

Docker笔记三:基于LVS DR模式构建WEB服务集群

2017-12-18 18:09 936 查看


http://www.cnblogs.com/XiongMaoMengNan/p/8056211.html

安装ipvsadm
1. 先在宿主机上安装并以root来启动ipvsadm,每次要在容器中运行ipvs都需要先在宿主机上启动ipvsadm。如果直接进行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 <272666745@qq.com>

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


宿主机上 build 镜像和 run 容器:

sudo docker build -t cenze/ipvs -f Dockerfile-IPVS .
sudo docker run -it -p 89:89 --name ipvs --privileged=true cenze/ipvs


容器ipvs中完成均衡策略配置:由于容器启动时不会自动去执行/etc/rc.local,所以需手动执行下。所有需要手动执行的命令都可写进rc.ipvs(需要可执行权限)文档:

#!/bin/bash

VIP=172.17.100.100
VPORT=89
RPORT=89
RS=("172.17.0.8" "172.17.0.6")
RSW=("1" "1")
TYPE=g

addrs() {
ipvsadm -a -t $VIP:$VPORT -r $1:$RPORT -$TYPE -w $2
[ $? -eq 0 ] && return 0 || return 1
}

ip addr add $VIP broadcast $VIP label eth0:0 dev eth0
ipvsadm -A -t $VIP:$VPORT -s wlc

COUNT=0
for I in ${RS[*]}; do
addrs $I ${RSW[$COUNT]}
let COUNT++
done


然后一次手动执行完,执行完后不能退出容器,窗口不能关闭;否则ipvsadm也将退出,上述配置信息将失效:

root@7a375abcd343:/# /etc/rc.ipvs


 

配置RS-172.17.0.6和RS-172.17.0.8
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


172.17.100.100被称为VIP,需要在Director(ipvs容器)和Real Server(RS-172.17.0.6和RS-172.17.0.8)上同时部署(也就是绑定到一张网卡上,新建一张虚拟网卡出来)。上述关于arp的设置不明白的,可去看这篇文章 Linux内核参数之arp_ignore和arp_announce。一次手动执行完:

root@203ffab2138f:/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(6)!</title>
</head>
<body>
<h1>Welcome to RS-172.17.0.8(6)!</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!

内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  linux