运维工程师必备LVS_NAT && LVS_ DR配置

LVS集群模式有三种,我们这里先演示的是LVS集群模式中的第一种NAT配置,再演示LVS集群的第二种模式DR,我们这里以举例子的方式将NAT && DR的配置过程演示出来的。

LVS的三种模式:

NAT: 地址转换

DR:直接路由

TUN:隧道

一、编辑NAT方式:

这里前面的Director,至少有两个网络接口,一个接口面对互联网,让互联网用户可以访问到;而另一个接口面向于real server。而用户请求到达的时候,将用户请求的目标地址转换为real server(图中为RIP)中的某一个地址的方式来实现的。

一、编辑NAT

这里我们做一个web服务器的负载均衡集群,它VIP172.16.58.1,DIP192.168.10.7RIP1192.168.10.8RIP2192.168.10.9,我们以物理机为客户端发起请求。我们这里需要三个虚拟机,一个为Director,一个RIP1,一个RIP2.(例如:图2

1、更改地址【提示:这里需要两个网卡一个为外网地址,一个为内网地址】

更改ip地址,我们这里将我们Director的两个ip地址的DIP改为192.168.10.7VIP改为172.16.58.1。我们

这使用的是两个网卡,一个改为Bridged一个改为Host-only。我们的两台real serverRIP分别为192.168.10.8192.168.10.9,连接都为Host-only

⑴更改Director上的VIPDIP地址

# setup

# servicenetwork restart

⑵配置Real server服务器上的RIP地址,网关为Dector上的DIP


2、安装yum【提示:yum库中必须要配置Cluster,安装的ipvsadm文件都在Cluster里面】

   我们这里用挂载光盘来安装yum库,进而安装开发环境,需要安装Development LibrariesDevelopment Tools但是DevelopmentTools默认都安装过了,所以我们这里安装一个就行了。安装完成后开发环境就安装成功了。提示:Directorreal server都需要安装,Director 需要安装Cluster并且安装开发环境。但是real server不用安装Cluster,只需要安装一个Server就可以了(开发环境也不用安装)。】


[root@localhost ~]# mkdir /mnt/cdrom    ###创建cdrom目录
[root@localhost ~]# mount /dev/cdrom /mnt/cdrom  ###挂载光盘(当场有效,开机无效)
[root@localhost ~]# vim /etc/fstab  ###在配置文件中挂载光盘(当场无效,开机有效)
/dev/cdrom              /mnt/cdrom              ext3    defaults        00
[root@localhost ~]# cd /etc/yum.repos.d/  ###进入yum.repos.d目录下面
[root@localhost yum.repos.d]# vim server.repo  ###编辑server.repo
[base]
name=Server
baseurl=file:///mnt/cdrom/Server
enabled=1
gpgcheck=0
[Cluster]
name=Cluster
baseurl=file:///mnt/cdrom/Cluster
enabled=1
gpgcheck=0[root@localhost yum.repos.d]# yum groupinstall "Development Libraries"

3、⑴Director上安装ipvsadm【提示:ipvsadm用法在前一章】

# grep -i 'vs'/boot/config-2.6.18-308.el5  ###查看一下内核中是否有ipvs的功能
    # yum install ipvsadm  ####安装ipvsadm
       ⑵Real server上安装httpd 和 telnet-server【提示:】
    # yum install httpd telnet-server  ####用于验证

  4、同步时间【重点提示:各节点之间的时间偏差不应该超出1秒钟】

   我们这里不能用hwclock来进行调时间,因为这样的话会有大量的时间凭空消失了,那样服务器里面会出现一段空白,就像是穿越了,我们应该进行加速的方法调整时间,我们这里是根据服务器来调整时间的。

# date  ###查看时间
# server ntpd stop   ####关闭时间命令
#ntpdate 172.16.0.1  ####从服务器上同步时间

5、在real server服务器中添加页面

   ⑴在RIP1中添加RS1.shuaige.com

# echo “RS1.shuaige.com” > /var/www/html/index.html ####使用管道将内容传输到index.html中
# service httpd start
# curl http://localhost  ####测试一下
# curl  -i http://localhost  ####获取首部
# curl http://192.168.10.9 ####获取对方的

⑵在RIP2中添加RS2.shuaige.com

# echo “RS2.shuaige.com” > /var/www/html/index.html
# service httpd start
# curl http://localhost

   ⑶在Director上测试

6、添加集群服务(只在Director服务器上添加)

# ipvsadm  �CA  �Ct 172.16.58.1:80�Cs rr
# ipvsadm �Ca �Ct 172.16.58.1:80�Cr 192.168.10.8�Cm
# ipvsadm �Ca �Ct 172.16.58.1:80�Cr 192.168.10.9�Cm

7、进行测试

# echo 1> /proc/sys/net/ipv4/ip_forward ####网卡间的信息转发要打开

刷新后

统计数据

二、编辑DR有三种方式

   这里虽说编辑DR有三种方式,但是我们这里可不是三种方式都给大家进行编译一下,我们这里将每种方式的利弊说一下,找到最合适的方法,我们这里只编译第三种方法。

第一种方式:在路由器上明显说明vip对应的地址一定是Director上的MAC,只要绑定,以后再跟vip通信也不用再请求了,这个绑定是静态的,所以它也不会失效,也不会再次发起请求,但是有个前提,我们的路由设备必须有操作权限能够绑定MAC地址,万一这个路由器是运行商操作的,我们没法操作怎么办?第一种方式固然很简便,但未必可行。

第二种方式:在给别主机上(例如:红帽)它们引进的有一种程序arptables,它有点类似于iptables,它肯定是基于arp或基于MAC做访问控制的,很显然我们只需要在每一个real server上定义arptables规则,如果用户arp广播请求的目标地址是本机的vip则不予相应,或者说相应的报文不让出去,很显然网关(gateway)是接受不到的,也就是director相应的报文才能到达gateway,这个也行。第二种方式我们可以基于arptables

   第三种方式:在相对较新的版本中新增了两个内核参数(kernelparameter),第一个是arp_ignore定义接受到ARP请求时的相应级别;第二个是arp_announce定义将自己地址向外通告是的通告级别。【提示:很显然我们现在的系统一般在内核中都是支持这些参数的,我们用参数的方式进行调整更具有朴实性,它还不依赖于额外的条件,像arptables,也不依赖外在路由配置的设置,反而通常我们使用的是第三种配置】

      arp_ignore:定义接受到ARP请求时的相应级别

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

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

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

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

4-7 - 保留未使用

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

   arp_ignore 设置为1,当别人的arp请求过来的时候,如果接收的设备上面没有这个ip,就不响应,默认是0,只要这台机器上面任何一个设备上面有这个ip,就响应arp请求,并发送MAC地址应答。

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

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

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

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

三、规划图

四、编辑DR

   这里我们是以编辑好的NAT为基础进行编译DR的,因为编辑DR上的Director只要要一个网卡就行了,并且每个RIP上都是一个网卡。所以这里我们根据规划图进行修改。

1、我们要关闭另一个网卡

# ifconfig eth1 down   ####关闭eth1【提示:这样关闭重启后又会开启的】

#vim /etc/etc/sysconfig/network-scripts/ifcfg-eth1 ####编辑网络配置

ONBOOT=no  

# ifconfig  ####查看是否关掉

2、更改DIP

3、在Director上添加VIP(设置别名)

# ifconfig eth0:0 172.16.58.1/16

4、编辑(Realserver)网络配置

首先我们要跟Director一样,设置成桥接模式,它们在同一个交换机上。

# vim /etc/etc/sysconfig/network-scripts/ifcfg-eth1 ####编辑网络配置

IPADDR=172.16.58.7

GATEWAY=172.16.0.1

NETMASK=255.255.0.0

# service network restart

5、在Real server2ping DIPRIP1

6、定义相应级别和通告级别(在realserver中定义)

这里我们更改相应级别和通告级别都需要更改两个文件,分别是eth0allArp_ignore中的1表示仅在请求的目标地址配置请求到达的接口上的时候,才给予响应。Arp_announce中的2表示仅向与本地借口上地址匹配的网络进行通告。(具体参数详解要看编辑DR的三种方式)

# echo 1 > /proc/sys/net/ipv4/conf/eth0/arp_ignore

# echo 1 > /proc/sys/net/ipv4/conf/eth0/arp_ignore

# echo 2 > /proc/sys/net/ipv4/conf/eth0/arp_announce

# echo 2 > /proc/sys/net/ipv4/conf/all/arp_announce

7、创建VIP

这里的广播地址是自己的地址,掩码是255.255.255.255表示此地址只跟自己在同一网段内不跟其他任何地址在同一网段内。

# ifconfig lo:0 172.16.58.1 netmask 255.255.255.255 broadcast172.16.100.1 up

8、添加路由

⑴在real server中添加路由

# route add �Chost 172.16.58.1 dev lo:0  ####如果目标地址是172.16.58.1,那我们就通过lo:0这个接口

⑵在Director中添加路由

# route add �Chost 172.16.58.1 dev eth0:0

9、访问RS1RS2web服务

10、设置规则(只在Director上添加)

# ipvsadm �CC   ####清除规则
 # ipvsadm -A -t172.16.58.1:80 -s wlc  
# ipvsadm -a -t 172.16.58.1:80 -r 172.16.58.7 -g -w 2     ####后面的数字是设置权重
# ipvsadm -a -t 172.16.58.1:80 -r172.16.58.8 -g -w 1     ####后面的数字是设置权重

11、查看网页信息

刷新前


刷新后

12、查看集群节点信息

五、编辑TUN(扩展)

TUN的工作机制跟DR一样,只不过在转发的时候,它需要重新包装IP报文。这里的real server(图中为RIP)离得都比较远。用户请求以后,到director上的VIP上,它跟DR模型一样,每个realserver上既有RIP又有VIPDirector就挑选一个real server进行响应,但是directorreal server并不在同一个网络上,这时候就用到隧道了,director进行转发的时候,一定要记得CIPVIP不能动。我们转发是这样的,让它的CIPVIP不动,在它上面再加一个IP首部,再加的IP首部源地址是DIP,目标地址的RIPIP地址。收到报文的RIP,拆掉报文以后发现了里面还有一个封装,它就知道了,这就是隧道。





你可能感兴趣的:(LVS,NAT,DR)