温馨提示:集群的基础知识请点击此链接

---本文大纲

  • 定义集群的命令(ipvsadm)

  • NAT模型演示

  • DR模型演示

  • 持久连接演示

一、定义集群的命令

命令格式:

ipvsadm -A|E -t|u|f service-address [-s scheduler]
              [-p [timeout]] [-M netmask]
      ipvsadm -D -t|u|f service-address
      ipvsadm -C
      ipvsadm -R
      ipvsadm -S [-n]
      ipvsadm -a|e -t|u|f service-address -r server-address
              [-g|i|m] [-w weight] [-x upper] [-y lower]
      ipvsadm -d -t|u|f service-address -r server-address
      ipvsadm -L|l [options]
      ipvsadm -Z [-t|u|f service-address]
      ipvsadm --set tcp tcpfin udp
      ipvsadm --start-daemon state [--mcast-interface interface]
              [--syncid syncid]
      ipvsadm --stop-daemon state
      ipvsadm -h

常用选项

(1).管理集群服务

添加

-t :tcp协议的集群 service-address后面必须写成ip:port

-u :udp协议的集群 service-address后面必须写成ip:port

-f :防火墙的标记 service-address后面必须写成mark numbe

-s :指定调试算法

-p :保存session会话 -p  times

修改

ipvsadm -E -t|u|f server-adddress

-E: (实例中会有说明)

删除

ipvsadm -D -t|u|f server-adddres

-D:删除集群服务

(2).管理集群服务中的realserver

-t|u|f service-address 实现定义好的某集群服务

-r server-address rs的地址在nat模型中可使用ip:port实现端口映射

-g : DR(所使用的模型)

-i : TUN

-m : NAT

[-w weight] 指定权重(此处为数值)

修改

ipvsadm -e -t|u|f server-adddress    

删除

ipvsadm -d -t|u|f server-adddress

(3).查看

-n 显示主机地址和端口为数字格

--stats 显示进出站数据

--rate 显示速率

--timeout 显示每一个tcp tcpfin udp 的超时时间值

--deamon 显示进程信息

--sort 显示排序规则 默认是升序的

-c 显示多少个客户连接进来

(4).删除所有集群服务

ipvsadm -C

(5).保存定义的规则

service ipvsadm save(默认保存于/etc/sysconfig/ipvsadm文件中,当中没有集群服务,只有转发记录)

ipvsadm -S > /path/to/somefile

(6).载入此前的规则

ipvsadm -R(以默认文件/etc/sysconfig/ipvsadm为模板)

ipvsadm -R < /path/to/somefile

二、NAT模型演示

注:

NAT原理请参阅DNAT原理

1、资源分配

服务类型 软件版本/服务/说明 IP地址
OS Centos6.5.x86_64
Director

ipvsadm

vip:192.168.1.111

dip:172.16.32.111

real server 1 http rip:172.16.32.110
real server 2 http rip:172.16.32.112

2、实验拓扑图

Linux Load Balancing之NAT与DR模型_第1张图片

3、配置过程

第一步、Director

VIP(eth0):192.168.1.111

DIP(eth1):172.16.32.111/16

配置命令

1、配置外网IP(VIP)

2、配置内网IP(DIP)

3、开启路由间转发功能

4、安装ipvsadm程序包

#ifconfig eth0 192.168.1.111 netmask 255.255.255.0 up
#ifconfig eth1 172.16.32.111 netmask 255.255.0.0 up
#sysctl -w net.ipv4.ip_forward=1
#sysctl -p
#yum install -y ipvsadm

第二步、rs1

rip(eth0):172.16.32.110

配置命令

1、配置内网IP

2、添加默认网关

3、安装http服务

4、设置默认页面

5、启动http服务

#ifconfig eth0  172.16.32.110 netmask 255.255.0.0 up
#route add default gw 172.16.32.111
#yum install -y http
#echo "172.16.32.110" > /var/www/html/index.html
#service httpd start

第三步、rs2

rip(eth0):172.16.32.112

配置命令

1、配置内网IP

2、添加默认网关

3、安装http服务

4、设置默认页面

5、启动http服务

#ifconfig eth0  172.16.32.112 netmask 255.255.0.0 up
#route add default gw 172.16.32.111
#yum install -y http
#echo "172.16.32.112" > /var/www/html/index.html
#service httpd start

第四步、配置集群服务

配置命令

#ipvsadm -C
#ipvsadm -A -t 192.168.1.111:80 -s rr
#ipvsadm -a -t 192.168.1.111:80 -r 172.16.32.110:80 -m
#ipvsadm -a -t 192.168.1.111:80 -r 172.16.32.112:80 -m

第五步、测试

Linux Load Balancing之NAT与DR模型_第2张图片

Linux Load Balancing之NAT与DR模型_第3张图片

====================================NAT模型演示完毕======================================

三、DR模型演示

1、资源分配

服务类型 软件版本/服务/说明 IP地址
OS Centos6.5.x86_64
Director

ipvsadm

vip(eth0:0):192.168.1.10

dip(eth0):192.168.1.11

real server 1 http

vip(lo:0):192.168.1.10

rip(eth0):192.168.1.21

real server 2 http

vip(lo:0):192.168.1.10

rip(eth0):192.168.1.31

2、实验拓扑图

Linux Load Balancing之NAT与DR模型_第4张图片

3、配置过程

第一步、配置Director

#ifconfig eth0 192.168.1.11 netmask 255.255.255.0 up
#ifconfig eth0:0 192.168.1.10 netmask 255.255.255.0 up

第二步、配置RS1

#ifconfig eth0 192.168.1.21 netmask 255.255.255.0 up
#echo 1 > /proc/sys/net/ipv4/conf/eth0/arp_ignore
#echo 1 > /proc/sys/net/ipv4/conf/all/arp_ignore
#echo 2 > /proc/sys/net/ipv4/conf/all/arp_announce
#echo 2 > /proc/sys/net/ipv4/conf/eth0/arp_announce
#ifconfig lo:0 192.168.1.10 netmask 255.255.255.255 broadcast 192.168.1.10 up
#yum install -y http
#echo "192.168.1.21" >/var/www/html/index.html
#service httpd restart

第三步、配置RS2

#ifconfig eth0 192.168.1.31 netmask 255.255.255.0 up
#echo 1 > /proc/sys/net/ipv4/conf/eth0/arp_ignore
#echo 1 > /proc/sys/net/ipv4/conf/all/arp_ignore
#echo 2 > /proc/sys/net/ipv4/conf/all/arp_announce
#echo 2 > /proc/sys/net/ipv4/conf/eth0/arp_announce
#ifconfig lo:0 192.168.1.10 netmask 255.255.255.255 broadcast 192.168.1.10 up
#yum install -y http
#echo "192.168.1.31" >/var/www/html/index.html
#service httpd restart

说明:

arp_ignore: 定义接收到ARP请求时的响应级别;

0:只要本地配置的有相应地址,就给予响应;

1:仅在请求的目标地址配置请求到达的接口上的时候,才给予响应;

arp_ignore = 1

arp_announce:定义将自己地址向外通告时的通告级别;

0:将本地任何接口上的任何地址向外通告;

1:试图仅向目标网络通告与其网络匹配的地址;

2:仅向与本地接口上地址匹配的网络进行通告;

arp_announce = 2

第四步、增加主机路由

Director

#route add -host 192.168.1.10 dev eth0:0

RS1

#route add -host 192.168.1.10 dev lo:0

RS2

#route add -host 192.168.1.10 dev lo:0

第五步、配置集群服务

#ipvsadm -A -t 192.168.1.10:80 -s rr
#ipvsadm -a -t 192.168.1.10:80 -r 192.168.1.21:80 -g
#ipvsadm -a -t 192.168.1.10:80 -r 192.168.1.31:80 -g

第六步、测试

Linux Load Balancing之NAT与DR模型_第5张图片

注:

如果反复刷新只有一个页面,可能是有缓存,过一会再刷新就可能切换到另一个页面了。

=================================DR模式演示完毕=====================================

四、持久连接演示

说明

尽管我们选择了LVS的分发方法,但是大多时候我们要保证返回给客户端的所有响应请求必须来自于同一台Real Server,这里我们就要用到LVS Persistence(持久性)。

1、LVS 持久连接和类型

  • PCC 来自同一客户端所有服务的请求都被重定向到同一台Real Server上,以IP地址为准。

  • PPC 来自同一服务的请求都被重定向到同一台Real Server上,以端口号为准。

  • PNMP 基于防火墙标记的持久连接,根据iptables 的规则,将对于某类服务几个不同端口的访问定义为一类

2、PCC 演示

PCC是一个虚拟服务没有端口号(或者端口号为0),以"-p" 来标识服务。

缺陷:定向所有服务,期望访问不同的Real Server无法实现。

# ipvsadm -A -t 192.168.1.10:0 -s rr -p 200
# ipvsadm -a -t 192.168.1.10:0 -r 192.168.1.21 -g
# ipvsadm -a -t 192.168.1.10:0 -r 192.168.1.31 -g
# 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.1.10:0 rr persistent 200
  -> 192.168.1.21:0               Route   1      0          0      
  -> 192.168.1.31:0               Route   1      0          0

用ssh连接到192.168.1.10

Linux Load Balancing之NAT与DR模型_第6张图片

3、PPC 演示

缺陷:期望访问不同的端口到同一台RS上,无法实现。

#ipvsadm -A -t 192.168.1.10:80 -s rr -p 600
#ipvsadm -a -t 192.168.1.10:80 -r 192.168.1.21:80 -g
#ipvsadm -a -t 192.168.1.10:80 -r 192.168.1.31:80 -g

4、PNMP 演示

先对某一特定类型的数据包打上标记,然后再将基于某一类标记的服务送到后台的Real Server上去,后台的Real Server 并不识别这些标记。将持久和防火墙标记结合起来就能够实现端口姻亲功能,只要是来自某一客户端的对某一特定服务(需要不同的端口)的访问都定义到同一台 Real Server上去。假设这样一种场景:一个用户在访问购物网站时同时使用HTTP(80)和HTTPS(443)两种协议,我们需要将其定义到同一台 Real Server上,而其他的服务不受限制。

#iptables -t mangle -A PREROUTING -d 192.168.1.10 -i eth0 -p tcp --dport 80 -j MARK --set-mark 3
#iptables -t mangle -A PREROUTING -d 192.168.1.10 -i eth0 -p tcp --dport 443 -j MARK --set-mark 3
#ipvsadm -A -f 3 -s rr -p 600
#ipvsadm -a -f 3 -r 192.168.1.21 -g
#ipvsadm -a -f 3 -r 192.168.1.31 -g

五、ipvs集群内生性不足

1、后端RS的健康状态检测?

补救方法

   ⑴、脚本

   ⑵、ldirectord

2、Director自身的可用性

补救方法

   ⑴、ldirectord(heartbeat,corosync)

   ⑵、keekalived

===============================完=================================================