Lvs-dr(直接路由)集群的实现和防火墙标记实现持久连接

一、集群实现的意义:

在各种网络服务普遍应用的今天,随网络速度的提高以及用户的增加,在一些繁忙的场合,单凭一台机器已经无法就能应付所有的网络请求了。为了解决这个问题,许多用户就采用一组cluster(集群)来代替单一的机器。cluster可以将多台计算机连接起来协同运作以对外提供各种服务,比如ApacheFTPMail等。 

1. LVS的结构

  LVS方式的cluster从结构上可分为两部分:前端的负载均衡器(称之为director)和后端的真实服务器(称之为real server)cluster前端的director将来自外界的请求调度到cluster后端不同的real server去执行。real server负责真正的提供各种应用服务,比如:WebFTPMail等服务。real server的数量可以根据实际需求进行增加、减少。

  2. LVS的三种包转发方式

  LVS提供了三种包转发方式:NAT(网络地址映射)IP Tunneling(IP隧道)Direct Routing(直接路由)。不同的转发模式决定了不同的cluster的网络结构,下面对三种转发方式分别介始:

  NAT(网络地址映射)

  NAT方式可支持任何的操作系统,以及私有网络,并且只需一个Internet IP地址,但是整个系统的性能受到限制。因为执行NAT每次需要重写包,有一定的延迟;另外,大部分应用有80%的数据是从服务器流向客户机,也就是用户的请求非常短,而服务器的回应非常大,对负载均衡器形成很大压力,成为了新的瓶颈。

  IP Tunneling(IP隧道)

  director分配请求到不同的real serverreal server处理请求后直接回应给用户,这样director负载均衡器仅处理客户机与服务器的一半连接。IP Tunneling技术极大地提高了director的调度处理能力,同时也极大地提高了系统能容纳的最大节点数,可以超过100个节点。real server可以在任何LANWAN上运行,这意味着允许地理上的分布,这在灾难恢复中有重要意义。服务器必须拥有正式的IP地址用于与客户机直接通信,并且所有服务器必须支持IP隧道协议。

  Direct Routing(直接路由)

  与IP Tunneling类似,负载均衡器仅处理一半的连接,避免了新的性能瓶颈,同样增加了系统的可伸缩性。Direct RoutingIP Tunneling相比,没有IP封装的开销,但由于采用物理层(修改MAC地址)技术,所有服务器都必须在一个物理网段。

3. LVS的八种调度算法

  LVS已实现了以下八种调度算法:

  1.轮叫调度(Round-Robin Scheduling

  2.加权轮叫调度(Weighted Round-Robin Scheduling

  3.最小连接调度(Least-Connection Scheduling

  4.加权最小连接调度(Weighted Least-Connection Scheduling

  5.基于局部性的最少链接(Locality-Based Least Connections Scheduling

  6.带复制的基于局部性最少链接(Locality-Based Least Connections with Replication Scheduling

  7.目标地址散列调度(Destination Hashing Scheduling

  8.源地址散列调度(Source Hashing Scheduling

二、一个案例实现dr和防火墙标记(https的实现)

lvs-dr直接路由 和防火墙标记的实现

1Lvs-dr实现要注意的三个问题:

1)多个的虚拟vip地址

2)解决arp广播时real server 也做出回应

3)实现回应请求的路由源地址是vip地址

2.两台server的基本配置

[[email protected] ~]# sysctl -a |gerp arp (过滤与arp有关的)

[[email protected] ~]# echo "net.ipv4.conf.all.arp_ignore = 1" >>/etc/sysctl.conf 

[[email protected] ~]# echo "net.ipv4.conf.all.arp_announce = 2" >>/etc/sysctl.conf 

(追加给这个配置文件实现arp广播时不作出任何的回应,主要解决问题二

[[email protected] ~]# sysctl -p (使配置立即生效)

[[email protected] ~]# route add -host 192.168.1.101 dev lo:0 (主要解决问题三)

两台serversetup下设置地址和添加一个lo0lookback接口,并配上1.101vip虚拟地址,在diector 分发装置的ip地址添加一个eth0:0地址,配置虚拟地址。

3.安装apache实现web的发布,在两台server

[[email protected] Server]# yum install httpd-2.2.3-22.el5.i386.rpm

[[email protected] Server]# cd /var/www/html/

[[email protected] html]# echo "hua1">index.html

[[email protected] html]# service httpd start

Starting httpd:                                            [  OK  ]

4.director分发装置上安装ipvsadm的工具

[[email protected] ~]# yum list all |grep ipvs (列出yum库中全部与ipvs有关的)

[[email protected] Cluster]# yum install ipvsadm-1.24-8.1.i386.rpm 

[[email protected] Cluster]# ipvsadm -A -t 192.168.1.101:80 -s rr (设置要访问的地址,-s调度为rr轮询

[[email protected] Cluster]# ipvsadm -a -t 192.168.1.101:80 -r 192.168.1.200 -g (通过虚拟ip转给哪个server

[[email protected] Cluster]# ipvsadm -a -t 192.168.1.101:80 -r 192.168.1.201 -g 

[[email protected] Cluster]# ipvsadm -L 

[[email protected] Cluster]# ipvsadm -ln (查看规则)

这样就可以测试成功了。

三、通过防火墙标记实现持久的连接(httphttps在同一个server

配置认证功能,不在详解。

1[[email protected] html]# cd /etc/pki/

[[email protected] pki]# vim tls/openssl.cnf (里面做简单的改变)

[[email protected] ~]# cd /etc/pki/CA/

[[email protected] CA]# mkdir crl certs newcerts (创建三个目录)

[[email protected] CA]# touch serial index.txt (创建两个文件)

[[email protected] CA]# echo "01" >serial  (CA里面的)必须做不然会出错

[[email protected] CA]# openssl genrsa 1024 >private/cakey.pem(产生私钥的文件)

[[email protected] CA]# chomod 600 private/* (改变权限)

[[email protected] CA]# openssl req -new -key private/cakey.pem -x509 -out cacert.pem(产生证书文件)

[[email protected] CA]# mkdir -pv /etc/httpd/cert (创建一个目录放站点的证书)

mkdir: created directory `/etc/httpd/cert'

[[email protected] CA]# cd /etc/httpd/cert/

[[email protected] cert]# openssl genrsa 1024 >httpd.key

Generating RSA private key, 1024 bit long modulus

......................++++++

.......................++++++

e is 65537 (0x10001)

[[email protected] cert]# openssl req -new -key httpd.key -out httpd.csr

[[email protected] cert]# openssl ca -in httpd.csr -out httpd.cert

2、要实现https需要ssl的支持,还要安装ssl (两台server都要做这样的配置)

[[email protected] Server]# yum list all |grep ssl

[[email protected] Server]# yum install mod_ssl-2.2.3-22.el5.i386.rpm -y

[[email protected] Server]# vim /etc/httpd/conf.d/ssl.conf (编辑ssl的主配置文件)

112 SSLCertificateFile /etc/httpd/cert/httpd.cert (证书文件的所在的路径)

119 SSLCertificateKeyFile /etc/httpd/cert/httpd.key(私钥在的路径)

128 SSLCertificateChainFile /etc/pki/CA/cacert.pem(证书链所在的路径)

[[email protected] Server]# service httpd restart (做完配置别忘了重启服务)

3iptables规则中mangle表格的配置

[[email protected] Cluster]# iptables -t mangle -A PREROUTING -p tcp --dport 80 -d 192.168.1.101 -j MARK --set-mark 10

[[email protected] Cluster]# iptables -t mangle -A PREROUTING -p tcp --dport 443 -d 192.168.1.101 -j MARK --set-mark 10

[[email protected] Cluster]# iptables -t mangle -L -v -n

[[email protected] Cluster]# service iptables save(保存配置)

4、配置ipvsadm的规则

[[email protected] Cluster]# ipvsadm -A -f 10 -s rr  -p 1800 (-f为防火墙打标记,-p为超时时间)

[[email protected] Cluster]# ipvsadm -a -f 10 -r 192.168.1.200 -g

[[email protected] Cluster]# ipvsadm -a -f 10 -r 192.168.1.201 -g

lvs-dr直接路由 和防火墙标记的实现 

lvs-dr直接路由 和防火墙标记的实现

实现的效果是,在1800s的时间内,连接都是一台server,要是再有另一台ip主机连接就会到另一台服务器。