A-A+

lvs-dr直接路由集群和防火墙标记实现持久连接的方法

2015年11月21日 站长资讯 暂无评论

一、集群实现的意义:

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

1. LVS的结构

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

2. LVS的三种包转发方式

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

NAT(网络地址映射)

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

IP Tunneling(IP隧道)

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

Direct Routing(直接路由)

与IP Tunneling类似,负载均衡器仅处理一半的连接,避免了新的性能瓶颈,同样增加了系统的可伸缩性。Direct Routing与IP 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的实现)

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

1)多个的虚拟vip地址

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

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

2.两台server的基本配置

[root@localhost ~]# sysctl -a |gerp arp (过滤与arp有关的)

[root@localhost ~]# echo "net.ipv4.conf.all.arp_ignore = 1" >>/etc/sysctl.conf

[root@localhost ~]# echo "net.ipv4.conf.all.arp_announce = 2" >>/etc/sysctl.conf

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

[root@localhost ~]# sysctl -p (使配置立即生效)

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

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

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

[root@localhost Server]# yum install httpd-2.2.3-22.el5.i386.rpm

[root@localhost Server]# cd /var/www/html/

[root@localhost html]# echo "hua1">index.html

[root@localhost html]# service httpd start

Starting httpd: [ OK ]

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

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

[root@localhost Cluster]# yum install ipvsadm-1.24-8.1.i386.rpm

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

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

[root@localhost Cluster]# ipvsadm -a -t 192.168.1.101:80 -r 192.168.1.201 -g

[root@localhost Cluster]# ipvsadm -L

[root@localhost Cluster]# ipvsadm -ln (查看规则)

这样就可以测试成功了。

三、通过防火墙标记实现持久的连接(http和https在同一个server上)

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

  1. 1、[root@localhost html]# cd /etc/pki/  
  2.   
  3. [root@localhost pki]# vim tls/openssl.cnf (里面做简单的改变)  
  4. [root@localhost ~]# cd /etc/pki/CA/  
  5. [root@localhost CA]# mkdir crl certs newcerts (创建三个目录)  
  6. [root@localhost CA]# touch serial index.txt (创建两个文件)  
  7. [root@localhost CA]# echo "01" >serial  (CA里面的)必须做不然会出错  
  8. [root@localhost CA]# openssl genrsa 1024 >private/cakey.pem(产生私钥的文件)  
  9. [root@localhost CA]# chomod 600 private/* (改变权限)  
  10. [root@localhost CA]# openssl req -new -key private/cakey.pem -x509 -out cacert.pem(产生证书文件)  
  11. [root@localhost CA]# mkdir -pv /etc/httpd/cert (创建一个目录放站点的证书)  
  12. mkdir: created directory `/etc/httpd/cert'  
  13. [root@localhost CA]# cd /etc/httpd/cert/  
  14. [root@localhost cert]# openssl genrsa 1024 >httpd.key  
  15. Generating RSA private key, 1024 bit long modulus  
  16. ......................++++++  
  17. .......................++++++  
  18. e is 65537 (0x10001)  
  19. [root@localhost cert]# openssl req -new -key httpd.key -out httpd.csr  
  20. [root@localhost cert]# openssl ca -in httpd.csr -out httpd.cert  

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

  1. [root@localhost Server]# yum list all |grep ssl  
  2. [root@localhost Server]# yum install mod_ssl-2.2.3-22.el5.i386.rpm -y  
  3. [root@localhost Server]# vim /etc/httpd/conf.d/ssl.conf (编辑ssl的主配置文件)  
  4. 112 行SSLCertificateFile /etc/httpd/cert/httpd.cert (证书文件的所在的路径)  
  5. 119 行SSLCertificateKeyFile /etc/httpd/cert/httpd.key(私钥在的路径)  
  6. 128 行SSLCertificateChainFile /etc/pki/CA/cacert.pem(证书链所在的路径)  
  7. [root@localhost Server]# service httpd restart (做完配置别忘了重启服务)  

3、iptables规则中mangle表格的配置

  1. [root@localhost Cluster]# iptables -t mangle -A PREROUTING -p tcp --dport 80 -d 192.168.1.101 -j MARK --set-mark 10  
  2. [root@localhost Cluster]# iptables -t mangle -A PREROUTING -p tcp --dport 443 -d 192.168.1.101 -j MARK --set-mark 10  
  3. [root@localhost Cluster]# iptables -t mangle -L -v -n  
  4. [root@localhost Cluster]# service iptables save(保存配置)  

4、配置ipvsadm的规则

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

[root@localhost Cluster]# ipvsadm -a -f 10 -r 192.168.1.200 -g

[root@localhost Cluster]# ipvsadm -a -f 10 -r 192.168.1.201 -g

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

标签:

给我留言