4、lvs nat和dr类型演示

实战操作

LVS-NAT  (应用场景:VIP是公网地址,DIP和RIP一般使用私网地址,NAT的主要目的是为了隐藏服务器)

核心要点:

1、DIP与各real server的RIP必须在同一个网段中;

2、各real server的RIP网关要指向DIP;

3、支持端口映射;

4、请求和相应报文都必须经由director

环境:

三台centos主机,一台是director(外网即VIP:192.168.184.140;内网DIP:172.16.100.9),其他两台做real server(172.16.100.15和16)

步骤

首先配置director

1、首先为director设置两块网卡,

2、为director配置新添加的网卡2,激活网卡

#cd /etc/sysconfig/network-scripts

#ls  //此时这个目录下只有网卡1的配置文件,ifcfg-eht0,如果需要修改网卡1配置文件,就可以立即修改

#vim ifcfg-eth0  //这里已经配置好了静态地址,无需修改

TYPE="Ethernet"
PROXY_METHOD="none"
BROWSER_ONLY="no"
BOOTPROTO="none"
DEFROUTE="yes"
IPV4_FAILURE_FATAL="no"
NAME="eth0"
UUID="6b859423-01ef-4743-b550-100d6fd1c4e0"
DEVICE="eth0"
BOOTPROTO="static"
ONBOOT="yes"
IPADDR="192.168.184.140"
DNS1="8.8.8.8"
NETMASK="255.255.255.0"
PREFIX="24"
GATEWAY="192.168.184.2"
IPV6_PRIVACY="no"
HWADDR="00:0c:29:ce:f8:04"

#ifconfig -a  //使用此命令可以直接查看所有网卡信息,ens37就是新添加的第二块网卡名称,这里已经配置好了

ens37: flags=4163<UP,BROADCAST,RUNNING,MULTICAST> mtu 1500
inet 172.16.100.9 netmask 255.255.255.0 broadcast 172.16.100.255
inet6 fe80::20c:29ff:fece:f80e prefixlen 64 scopeid 0x20<link>
ether 00:0c:29:ce:f8:0e txqueuelen 1000 (Ethernet)
RX packets 479 bytes 31308 (30.5 KiB)
RX errors 0 dropped 0 overruns 0 frame 0
TX packets 153 bytes 10941 (10.6 KiB)
TX errors 0 dropped 0 overruns 0 carrier 0 collisions 0

eth0: flags=4163<UP,BROADCAST,RUNNING,MULTICAST> mtu 1500
inet 192.168.184.140 netmask 255.255.255.0 broadcast 192.168.184.255
inet6 fe80::20c:29ff:fece:f804 prefixlen 64 scopeid 0x20<link>
ether 00:0c:29:ce:f8:04 txqueuelen 1000 (Ethernet)
RX packets 3156 bytes 299607 (292.5 KiB)
RX errors 0 dropped 0 overruns 0 frame 0
TX packets 1237 bytes 170229 (166.2 KiB)
TX errors 0 dropped 0 overruns 0 carrier 0 collisions 0

3、假如/etc/sysconfig/network-scripts没有网卡2的配置文件,配置过程如下:

#cp ifcfg-eth0 ifcfg-ens37  //复制网卡1的配置文件并改名为网卡2的配置文件,并进行修改

#vim ifcfg-ens37  //需要删除UUID,内网网络不需要网关

TYPE="Ethernet"
PROXY_METHOD="none"
BROWSER_ONLY="no"
BOOTPROTO="none"
DEFROUTE="yes"
IPV4_FAILURE_FATAL="no"
NAME="ens37"    //注意修改设备名称
DEVICE="ens37"  //注意修改设备名称
BOOTPROTO="static" //配置静态类型
ONBOOT="yes"
IPADDR="172.16.100.9"   //这里是DIP的IP
#DNS1="8.8.8.8"
NETMASK="255.255.255.0"
PREFIX="24"
#HWADDR="00:0c:29:ce:f8:04"

4、在虚拟机控制台重启网络

#systemctl restart network

#ifconfig   //就可以看到两块配置好的网卡了

5、为director配置ipvsadm软件(从网上下载的二进制软件包ipvsadm-1.27-7.el7.x86_64)

#rpm -ivh ipvsadm-1.27-7.el7.x86_64.rpm    //直接使用rpm命令进行安装

此时director配置暂告一段落,下面配置real server 

配置real server(同样是两台centos7,这里只展示一台的配置情况)

1、修改网卡连接类型

2、对网卡配置文件进行修改

#cd /etc/sysconfig/network-scripts

#vim ifcfg-eth0   //这里有没有域名解析都可以

#systemctl restart network

#ping 172.16.100.9   //查看是否可以与DIP相连接

#ping 172.16.100.15/16

以上网卡配置完成,下面在两台real server上提供web服务 

3、在RS1/RS2上安装apache/nginx都可以

#yum install httpd

#vim /var/www/html/index.html

<h1>Test Page on RS1:172.16.100.15</h1>

<h1>Test Page on RS2:172.16.100.16</h1>

4、验证director是否可以访问两天real server的web服务器

# curl http://172.16.100.15  //此时证明这是没有问题的
<h1> Test Page on RS1 172.16.100.15</h1>

# curl http://172.16.100.16
<h1>Test Page on RS2:172.16.100.16</h1>

以上两台real server准备完毕

配置director

1、确保director主机上的iptables必须是关闭的,且所有规则一定要清空,iptables和ipvs很难共存

# iptables -L -n

# iptables -L -n -t nat

# iptables -L -n -t mangle

2、确定ip转发要打开

# cat /proc/sys/net/ipv4/ip_forward
   0   //为0是不转发

# vim /etc/sysctl.conf   //配置IP转发   这里很重要,DR模型中如果DIP和VIP不在同一网络,可以利用虚拟机充当路由器,此时就需要打开IP转发

net.ipv4.ip_forward = 1  

# sysctl -p  //
   net.ipv4.ip_forward = 1 

sysctl命令被用于在内核运行时动态地修改内核的运行参数,可用的内核参数在目录/proc/sys中。它包含一些TCP/ip堆栈和虚拟内存系统的高级选项

-n:打印值时不打印关键字;

-e:忽略未知关键字错误;

-N:仅打印名称;

-w:当改变sysctl设置时使用此项;

-p:从配置文件"/etc/sysctl.conf"加载内核参数设置;

-a:打印当前所有可用的内核参数变量和值;

-A:以表格方式打印当前所有可用的内核参数变量和值。

3、定义规则(在集群服务上)

# ipvsadm -A -t 172.16.100.9:80    //此处是集群管理 -t表示是tcp连接 -s指明调度算法,如果不指明,默认是wlc

# ipvsadm -L -n    //-L表示列出规则,-n表示步反解

IP Virtual Server version 1.2.1 (size=4096)
Prot LocalAddress:Port Scheduler Flags
-> RemoteAddress:Port Forward Weight ActiveConn InActConn
TCP 192.168.184.140:80 rr

# ipvsadm -L    //没有-n则把ip地址反解为域名

IP Virtual Server version 1.2.1 (size=4096)
Prot LocalAddress:Port Scheduler Flags
-> RemoteAddress:Port Forward Weight ActiveConn InActConn
TCP node1:http rr

# ipvsadm -D -t 192.168.184.140:80   //删除规则

4、添加real server

# ipvsadm -a -t 192.168.184.140:80 -r 172.16.100.15 -m   //-r表示指明real server的ip地址,-m指明LVS的类型

# ipvsadm -a -t 192.168.184.140:80 -r 172.16.100.16 -m

# ipvsadm -L -n     //Forward表示转发方式   

IP Virtual Server version 1.2.1 (size=4096)
Prot LocalAddress:Port Scheduler Flags
-> RemoteAddress:Port      Forward  Weight  ActiveConn  InActConn
TCP 192.168.184.140:80 rr
   -> 172.16.100.15:80      Masq      1         0           0
   -> 172.16.100.16:80      Masq      1         0           0

5、验证

在浏览器中输入外网地址即director的VIP的地址即可

# ipvsadm -L -n   

IP Virtual Server version 1.2.1 (size=4096)
Prot LocalAddress:Port Scheduler Flags
-> RemoteAddress:Port       Forward Weight ActiveConn InActConn
TCP 192.168.184.140:80 rr
   -> 172.16.100.15:80       Masq     1        0          6   //因为默认情况下http支持的是短链接,所以请求结束后就断开了
   -> 172.16.100.16:80       Masq     1        0          5

6、ipvsadm的规则保存与删除

# ipvsadm -S > /etc/sysconfig/ipvsadm   //如果想让ipvsadm规则长久生效,保存即可  

# cat /etc/sysconfig/ipvsadm

-A -t node1:http -s rr
-a -t node1:http -r 172.16.100.15:http -m -w 1
-a -t node1:http -r 172.16.100.16:http -m -w 1

 

# ipvsadm -C   //清空规则
# ipvsadm -L -n   //查看时已经没有规则了

IP Virtual Server version 1.2.1 (size=4096)
Prot LocalAddress:Port Scheduler Flags
-> RemoteAddress:Port Forward Weight ActiveConn InActConn

 

# ipvsadm -R < /etc/sysconfig/ipvsadm   //使用输入重定向的方式重新读取存放规则的文件即可恢复规则
# ipvsadm -L -n

IP Virtual Server version 1.2.1 (size=4096)
Prot LocalAddress:Port Scheduler Flags
-> RemoteAddress:Port  Forward Weight ActiveConn InActConn
TCP 127.0.0.1:80 rr   //注意此处的IP地址,是保留地址,重定向读取后可能会出错
-> 172.16.100.15:80      Masq    1        0         0
-> 172.16.100.16:80      Masq    1        0         0

 

由此就是nat的负载均衡

软件安装包路径

# rpm -ql ipvsadm

/etc/sysconfig/ipvsadm-config   //ipvsadm的配置文件
/usr/lib/systemd/system/ipvsadm.service   //规则保存文件
/usr/sbin/ipvsadm
/usr/sbin/ipvsadm-restore
/usr/sbin/ipvsadm-save
/usr/share/doc/ipvsadm-1.27
/usr/share/doc/ipvsadm-1.27/README
/usr/share/man/man8/ipvsadm-restore.8.gz
/usr/share/man/man8/ipvsadm-save.8.gz
/usr/share/man/man8/ipvsadm.8.gz

规则编辑:修改删除等操作

1、修改调度算法为sh(在director上修改)

# ipvsadm -E -t 192.168.184.140:80 -s sh 

# ipvsadm -L -n

IP Virtual Server version 1.2.1 (size=4096)
Prot LocalAddress:Port Scheduler Flags
-> RemoteAddress:Port    Forward Weight ActiveConn InActConn
TCP 192.168.184.140:80 sh    //这里调度算法已经改变
   -> 172.16.100.15:80    Masq     1        0          1
   -> 172.16.100.16:80    Masq     1        0          0

2、修改端口映射(在RS1/RS2两个节点上修改)

#vim /etc/httpd/conf/httpd.conf

  //监听8080端口,这里也可以把80端口改为8080

# sed -i '/^Listen/a Listen 8080' /etc/httpd/conf/httpd.conf

#systemctl restart httpd

 

3、在director上修改端口

# ipvsadm -e -t 192.168.184.140:80 -r 172.16.100.15:8080 -m  //修改端口号
      Memory allocation problem   //如果碰到这种问题,可以修改ipvsadm —S保存到文件中的规则即可

# ipvsadm -L -n

IP Virtual Server version 1.2.1 (size=4096)
Prot LocalAddress:Port Scheduler Flags
-> RemoteAddress:Port Forward Weight ActiveConn InActConn
TCP 192.168.184.140:80 rr
 -> 172.16.100.15:8080 Masq 1 0 0
 -> 172.16.100.16:8080 Masq 1 0 0

4、注意一般大写字母(-A/D/E)是对集群服务做操作,

   而小写字母(-a/d/e)是对集群服务中的RS做操作 

# ipvsadm -d -t 192.168.184.140:80 -r 172.16.100.15:8080   //删除一个RS

# ipvsadm -D -t 192.168.184.140:80   //删除集群服务,即删除集群中所有的RS

 

作业:

nat模型实现http和https两种负载均衡集群:

ssl:

RS:都要提供同一个私钥和同一个证书:

LVS-DR模型演练

前端是一个路由设备A,客户端通过层层路由到达路由设备。在dr模型中,director只负责请求报文,对于响应报文是不参与的。交换机B连接多个主机C-->director、D-->RS1、E-->RS2,real server应该配置RIP和VIP,director应该配置VIP和DIP。所有用户请求到达时,希望只能是director的VIP响应,但是每个real server也要配置VIP,因为RIP要直接响应客户端的请求,所以要把real server上的VIP当作源地址IP。

DR模型的客户端请求到响应用户请求完成整个过程:

第一个问题:如何只让director响应来自客户端的请求报文?

所有客户端请求首先到达前端路由器,请求的报文目标地址是VIP地址,这个请求报文必须给director,不然就无法利用LVS进行负载均衡。但由于其他real server上也有VIP,所以必须让非director(即RS的VIP)不能对前端路由器在arp广播地址请求时做响应,或者说配置路由器时就知道VIP的MAC地址。

简单且易用的方案:Linux内核中有一种法则,把每个real server的VIP地址配置在lo接口(local的简写,一般指本地环回接口)的别名上,而不是物理网卡的别名上,还可以在内核中配置内核参数,使得如果real server接收到arp地址请求,即便目标地址是VIP,real server上的这个IP也不会响应。

请求报文到达director后,director实现转发至各real server时,是通过修改MAC地址实现的,也就意味着请求报文从路由器到director时,源MAC是路由器接口的MAC,目标MAC是director上VIP所在物理网卡的MAC地址。然后director要挑选一个real server对请求报文进行响应,但是ipvsadm配置real server时,给的是IP地址,而不是MAC地址,所以这时候director就要广播解析请求获得每一个real server上RIP所对应的MAC地址(因为配置ipvsadm规则时给的是real server的RIP地址),才能在调度real server时直接修改目标IP的MAC地址。

假如调度时,挑选的是RS1,转发时源MAC是DIP所在网络接口的MAC地址(注意:director只有一个网卡,通常DIP配置在网络接口上,而VIP配置在这个网络接口别名上,所以DIP的MAC地址仍然是物理网卡的MAC地址),目标MAC是挑选出的real server的RIP所在的物理网卡接口的MAC地址。这个转发过程中要经过交换机,即director把请求报文的目标MAC地址更改后扔到网络上,交换机收到后,会查看报文的目标MAC对应哪个接口上的real server,找到后就把报文发给指定的real server。real server收到报文后打开发现目标MAC是自己,就会把报文接收下来,因为请求报文的目标IP没有修改,仍然是VIP,real server主机上有,这就是每个real server配置VIP的原因,如果real server上没有VIP就会拒收或转发报文。如果目标IP(即VIP)是自己,但是这个IP是在lo接口别名上,real server就会先通过物理接口RIP把报文接收进来,然后转发给lo接口,由lo接口再转交给用户空间的应用程序。

real server在响应时,由于客户端是外网主机,而lo接口是本地回环地址,所以无法把报文直接发送到客户端,因此还需要把响应报文通过物理接口发送出去。但是响应报文第一次从哪个接口出,就会把这个接口当作源地址。因此从real server发出时,源IP是物理接口上RIP,那么就会有问题,因为客户端发送的请求报文的目标IP时VIP,这就会造成矛盾。

解决办法:强行让响应报文先经过lo接口,这样lo接口地址就是响应报文的地址了,然后再经过物理网卡RIP转发出去,但是lo接口的IP是127.0.0.1,所以需要在real server上设置一个路由,要求从lo某个别名进来,就要从lo某个别名先出去(注意是lo接口的别名),因此响应报文的源IP地址就是lo接口上的别名地址:VIP地址。

注意虽然响应报文源地址是VIP,但还是要经过物理接口RIP出去,于是响应报文想要到达客户端必须要经过RIP前端的路由设备发送过去,也就是说发送响应报文的real server的网关一定是物理网卡上所配置的接口地址所指向的网络的网关,而不能是VIP的网关。

报文是通过物理网卡出去的,真正发往外部也通过物理网卡发送的,就是通过real server上面的物理网卡的IP地址转发出去的,转发给real server物理网卡接口所指定的下一跳网关,由网关再向后转发(目标地址是CIP,如果CIP和RIP不在同一网段,需要经过网络转发)。

RIP和VIP是否在同一网段?可在可不在

如果RIP、DIP、VIP都在同一网段,此时RIP的网关直接指向跟director同一个路由就可以了,因为请求报文是通过响应报文转发出去后,源IP是VIP,跟DIP同一网关,但网关不能指向DIP,因为响应报文不经过director。

如果DIP和VIP不在同一网段,网关就不能指向director所指向的路由接口了,此时要另起一个路由接口, 

示例:RIP、DIP、VIP都在同一网段

即ARP(Address Resolution Protocol),是根据IP地址获取物理地址的一个TCP/IP协议主机发送信息时将包含目标IP地址的ARP请求广播到网络上的所有主机,并接收返回消息,以此确定目标的物理地址;收到返回消息后将该IP地址和物理地址存入本机ARP缓存中并保留一定时间,下次请求时直接查询ARP缓存以节约资源。地址解析协议是建立在网络中各个主机互相信任的基础上的,网络上的主机可以自主发送ARP应答消息,其他主机收到应答报文时不会检测该报文的真实性就会将其记入本机ARP缓存;由此攻击者就可以向某一主机发送伪ARP应答报文,使其发送的信息无法到达预期的主机或到达错误的主机,这就构成了一个ARP欺骗ARP命令可用于查询本机ARP缓存中IP地址和MAC地址的对应关系、添加或删除静态对应关系等。相关协议有RARP代理ARPNDP用于在IPv6中代替地址解析协议。
 

两个内核参数   arp_announce/arp_ignore   https://www.jianshu.com/p/734640384fda

arp_announce的作用是控制系统在对外发送ARP请求时,如何选择ARP请求数据包的源IP地址。(比如系统准备通过网卡发送一个数据包A,这时数据包一个的源IP和目标IP一般都是知道的,而根据目的IP查询路由表,发送网卡也是确定的,故源MAC地址也是知道的,这时就差确定目的MAC地址了。而想要获取目的IP对应的目的MAC地址,就需要发送arp请求.arp请求的目标IP自然就是想要获取其MAC地址的IP,而arp请求的源IP是什么呢?可能第一反应会以为肯定是数据包a的源IP地址,但是这个也不是一定的,ARP请求的源IP是可以选择的,控制这个地址如何选择就是arp_announce的作用)

arp_announce参数常用的取值有0,1,2。

0:允许使用任意网卡上的IP地址作为ARP请求的源IP,通常就是使用数据包一个的源IP。(通告所有IP地址)

1:尽量避免使用不属于该发送网卡子网的本地地址作为发送ARP请求的源IP地址。(尽量避免向非本网络中的接口广播通告非本网络网路接口的地址,还是有可能的)

2:忽略IP数据包的源IP地址,选择该发送网卡上最合适的本地地址作为ARP请求的源IP地址。(总是用最佳本地网络地址向网络通告)

sysctl.conf的中包含所有和ETH / LO(具体网卡)的arp_ignore参数,取其中较大的值生效。

    

0:有什么地址统统都通告,1.1向1.0网络通告它由2.1和3.1的地址

1:1.1尽量不把2.1和3.1的网络地址通告给1.0网络,尽量避免依然有可能

2:向1.0只通告1.1,2.1和3.1的地址不通告

 

arp_ignore:定义对目标地址为本地IP的ARP询问不同的应答模式0 

0 - (默认值): 回应任何网络接口上对任何本地IP地址的arp查询请求

1 - 仅当目标IP地址是本地地址时才回复(请求报文从哪个接口进入,我们就必须使用这个接口上配置的地址,即请求的地址从这个接口进来,那么目标地址就必须配置在这个接口上,才给予响应。否则即使有这个地址,但没配置在这个接口上,不予响应。请求的是VIP,但VIP并不在入栈的物理接口上,而是在lo接口别名上,所以不予相应)

2 - 只回答目标IP地址是来访网络接口本地地址的ARP查询请求,且来访IP必须在该网络接口的子网段内

3 - 不回应该网络界面的arp请求,而只对设置的唯一和连接地址做出回应 

4-7 - 保留未使用 

8 - 不回应所有(本地地址)的arp查询

鉴于以上解释,配置情况是

arp_ignore = 1   arp_announce = 2

示例步骤

因为都DIP、RIP、VIP都在同一网段,所以都指向同一个网关

1、下面配置DIP和两个RIP

# vim /etc/sysconfig/network-scripts/ifcfg-eth0 //此是RS1的网络配置,其他大致相同

TYPE="Ethernet"
PROXY_METHOD="none"
BROWSER_ONLY="no"
BOOTPROTO="none"
DEFROUTE="yes"
IPV4_FAILURE_FATAL="no"
NAME="eth0"
UUID="74cfc7ee-373b-4974-8592-86cfc47b6439"
DEVICE="eth0"
ONBOOT="yes"
IPADDR="192.168.184.141"
DNS1="8.8.8.8"
PREFIX="24"
GATEWAY="192.168.184.2"
BOOTPROTO="static"
NETMASK=255.255.255.0

网关是192.168.184.2

2、下面配置3台主机的VIP

首先配置director

# ifconfig eth0:0 192.168.184.145/32 broadcast 192.168.184.145 up   

  //此IP仅用来做调度器使用时的目标地址,所以把掩码定义为32位,广播地址为本IP,表示只广播给自己

eth0:0: flags=4163<UP,BROADCAST,RUNNING,MULTICAST> mtu 1500
        inet 192.168.184.145 netmask 0.0.0.0 broadcast 192.168.184.145
        ether 00:0c:29:ce:f8:04 txqueuelen 1000 (Ethernet)

#ping 192.168.184.145  //找另外一台主机测试192.168.184.145是否是通的

# route add -host 192.168.184.145 dev eth0:0 

   //限定报文从哪个接口(目标地址192.168.184.145)进来,就让报文从那个接口(eth0:0)出去,当然对于director这种限制不是必须的,只是与RS统一,但RS必须。

# route -n

Kernel IP routing table
Destination       Gateway        Genmask            Flags   Metric   Ref  Use  Iface
0.0.0.0           192.168.184.2  0.0.0.0            UG      0        0    0    eth0
169.254.0.0       0.0.0.0        255.255.0.0        U       1002     0    0    eth0
192.168.184.0     0.0.0.0        255.255.255.0      U       0        0    0    eth0
192.168.184.145   0.0.0.0        255.255.255.255    UH      0        0    0    eth0

3、下面配置两台RS

注意:在配置real server的arp_announce、arp_ignore时,实现配置两个参数再配置VIP还是配置顺序相反?

     先配置参数再配置VIP,因为如果先配置VIP,那么VIP一旦配置好就会开始广播通告

配置参数:

# echo 1 > /proc/sys/net/ipv4/conf/   //下面有四个接口文件,都有自己专门的配置
    all/ default/ eth0/ lo/ 

# echo 1 > /proc/sys/net/ipv4/conf/all/arp_ignore  //为all下面所有接口的arp_ignore配置为1(仅当目标IP地址是本地地址时才回复)

# echo 1 > /proc/sys/net/ipv4/conf/eth0/arp_ignore  //同时把外网接口的arp_ignore配置为1

# echo 2 > /proc/sys/net/ipv4/conf/all/arp_announce   //总是用最佳本地网络地址向网络通告

# echo 2 > /proc/sys/net/ipv4/conf/eth0/arp_announce
配置VIP地址

# ifconfig lo:0 192.168.184.145/32 broadcast 192.168.184.145 up
# route add -host 192.168.184.145 dev lo:0

把以上配置写成脚本

1 #!/bin/bash
2 #
3 vip=192.168.184.145
4
5 case $1 in
6    start)
7      echo 1 > /proc/sys/net/ipv4/conf/all/arp_ignore
8      echo 1 > /proc/sys/net/ipv4/conf/eth0/arp_ignore
9      echo 2 > /proc/sys/net/ipv4/conf/all/arp_announce
10     echo 2 > /proc/sys/net/ipv4/conf/eth0/arp_announce
11     ifconfig lo:0 $vip netmask 255.255.255.255 broadcast $vip up
12     ;;
13   stop)
14     ifconfig lo:0 down
15     echo 0 > /proc/sys/net/ipv4/conf/all/arp_ignore
16     echo 0 > /proc/sys/net/ipv4/conf/eth0/arp_ignore
17     echo 0 > /proc/sys/net/ipv4/conf/all/arp_announce
18     echo 0 > /proc/sys/net/ipv4/conf/eth0/arp_announce
19     ;;
20 esac

4、用dos命令行测试接口别名IP,查看响应的是director的VIP还是RS的VIP?

从下图可以看到IP为192.168.184.145对应的MAC地址与IP为192.168.184.141对应的MAC是一样的,即当使用外网请求VIP:192.168.184.145时,响应的是director的VIP,而不是real server的VIP。

 

以上两台real server的网络配置OK

4、下面配置web服务

# yum install httpd -y   //安装httpd

# vim /var/www/html/index.html

<h1>Test Page on RS1:192.168.184.141</h1>

<h1>Test Page on RS2:192.168.184.143</h1>

5、在director主机上此时web服务

# curl http://192.168.184.141
    <h1>Test Page on RS1:192.168.184.141</h1>
# curl http://192.168.184.143
    <h1>Test Page on RS2:192.168.184.143</h1>
# curl http://192.168.184.145   //这个IP是无法连接的
    curl: (7) Failed connect to 192.168.184.145:80; Connection refused

以上步骤用脚本执行

 

#!/bin/bash
#
echo "The scripts is install apache."
if [ "`rpm -qa httpd | wc -L`" -ge 1 ]; then
   systemctl start httpd &>/dev/null
   if [ "`netstat -tunlp | grep httpd | wc -L`" -ge 1 ]; then
       echo "apache was installed"
       exit 0
   fi
else
   yum install httpd -y &>/dev/null
   read -p "Please input the IP of RS " IP
   read -p "Please input the num of RS " num
   echo "<h1>Test Page on RS$num $IP</h1>" > /var/www/html/index.html
   systemctl start httpd
fi

 

6、在director主机上添加ipvs规则

# rpm -ivh ipvsadm-1.27-7.el7.x86_64.rpm   //首先安装ipvsadm程序

Preparing... ################################# [100%]
Updating / installing...
1:ipvsadm-1.27-7.el7 ################################# [100%]

# ipvsadm -L -n  //查看是否由ipvsadm规则,如果有就清空

# ipvsadm -A -t 192.168.184.145:80 -s rr
# ipvsadm -a -t 192.168.184.145:80 -r 192.168.184.141 -g
# ipvsadm -a -t 192.168.184.145:80 -r 192.168.184.143 -g

测试

以上是DIP、VIP、RIP在同一网段内构建的LVS-DR模型

作业:

dr模型实现http和https两种负载均衡集群:

ssl:

RS:都要提供同一个私钥和同一个证书;

dr模型实现MySQL负载均衡集群

拓展:规划拓扑实现,VIP与RIP不在同一网络中的集群 

RIP和VIP不在同一网段示例

错误

 

posted @ 2018-10-04 10:30  Study~Column  阅读(589)  评论(0编辑  收藏  举报