lvs集群

一、首先集群Cluster分为
(一)、负载均衡集群(LB)
  web服务器只能承载600个,若发来了2000个请求如何解决呢?、
  Scale on  向上扩展,提高服务器性能(增大内存,添加CUP个数等)
  Scale out 向外扩展,增大服务器容量
   1、负载均衡,DNS的轮询
 部署调度服务器,并定义好调度方法
 前端的服务器(为了保证前端出现故障的冗余,可以再增加一台)把请求发给后台的多台服务器,实现负载均衡,中间的多台服务器可以同时对一台服务器实现共享存储
 2、通过NF或RAID
 NFS:是文件服务器,通过网络,彼此之间是通过协议的(tcp等)
 RAID:盘阵,本身是硬盘,通过BUS总线和主板的适配器等
  (两个进程同时写同一个文件,一定要加锁,不然文件系统会崩溃的)
  对于RAID,多台主机对文件写操作,又不在一台服务器上进行,因此加锁,对方并不知道,会崩溃的
  对于NFS,来说,就不会出现上一种情况,因为NFS是在一台服务器上,会自动加锁的

(二)、高可用集群:为了避免一个点出现错误而业务终止的情况(例如前端有两台调度服务器)
 目的是保证服务一直在线的,99.999%是指一年的时间99.9%的时间服务要在线
 高可用是负载能力,第一台挂了要转移负载能力和IP地址到备用服务器
 若第一台没有挂,而备节点认为他挂了,则STONITH(爆头),替代了主节点
 若两个节点的性能一样,大多数情况被节点是浪费的,因此让被节点提供服务,充分利用起来(主-主)
 主-主这种情况,一旦一个主挂了,那么这个主上的服务就要到第二个主了,负载过大
  因此需要多主一从,一般是一个节点提供一个服务,然后多个主的,一个从的,实现高可用

(三)、高性能计算机: 

存储方式:
 DAS:directory attach storage 直接附加存储
  使用当前主机上主板直接连接外接设备的方式:
   IDE  133M/S(IDE USB有时也是一种协议)并行的
   USB  480M/S     串行
   IEE1394
   SATA  300M/S 600M/S  并行的   
   SCSI  320M/S     并行的
   SAS:  4GB/S  串行
    同样容量的大小,SAS  SCSI要比IDE SATA贵的多),SCSI和SAS的控制要比IDE好的多
    SCSI可以接多个硬盘,IDE可以接两个一主一从;
  
 FC SAN  光SAN,通过光网络来传输SCSI协议的
 IP SAN :iSCSI 比FC SAN要便宜的多(里面装有操作系统,作用解码和提供SCSI服务)
  iSCSI 使用以太网,做中继,先封装SCSI协议,而后再还原SCSI数据包
  
  这些都是总线类型,本质都是有这么一个芯片
  Controller 控制器 固定在主板上的
  Adapter 适配器,(解码用的)独立的,可以拔下来的
  
 NAS:network attach storage 网络附加存储(例如NFS)
 SAN:storage area network(使用专门的传输线缆,连接起来,练到后端又不是通过网络共享来实现的)

二、由于web服务是一种很独特的服务,里面是一堆链接。一个页面可以有多个对象,来自不同的服务器,于是出现了集群

LB :load balancing 负载均衡集群
 lvs
 haproxy
HA: highly avilable 高可用
 heartbeat
 corosync+openais  (redhat6.0之后默认使用的集群)       RHCS(红帽的集群套件)
 ultramokey
 keepalived
HP: highly performance 高性能
 bowerful

一台主机无法满足需求时,用多台服务器,前面增加一台调度器
Scale Out
这个调度器改如何实现呢?

对于负载均衡集群:
有硬件方式和软件方式
Hardware:
 BigIP-->F5(公司名)的:1000W,很贵
 A10---->IBM,600W
 Netscaler--->Citrix(思捷),500W
software:
 LVS(linux virtual server) 400W
 Haproxy
  两者都是4次交换-->L4Switch ,根据地址+端口实现的是否用负载均衡
   
 Nginx()
 Varnish
 squid
  这三者都是7次交换-->L7Switch

这里我们主要说明LVS集群

三、LVS集群

LVS 
 CIP VIP DIP RIP
 前端的Director并不真正的提供服务
 后端的Real Server 才是真正的提供服务
 LVS工作在INPUT链上,如果是80端口就会修改到FORWARD链上,然后转发
  一般说来LVS不能和Iptables同时使用
 LVS一段代码位于用户空间ipvsadm
  一段位于内核空间ipvs
 LVS Type 有3中类型
 
 LVS NAT


     director 配置VIP DIP 后端Real Server 配置  RIP
  用户的请求到达directory,选择由哪个real server提供服务
  用户的请求来是DNAT 源地址cip-->vip   源地址cip--->rip
  返回请求是 SNAT 
  总结:1)所有的集群节点(director real server)必须要在同一个IP网络中(同一网段,VLAN)
  2)RIP通常使用私有地址
  3)用户请求的进出都要经过director
  4)real server的网关要指向DIP
  5)支持端口映射VIP RIP上端口可以是不一样的;VIP上的是80端口,RIP上的可以不是80端口
  6)real server上的系统可以是任何操作系统
  7)在大并发的情况下,director会成为系统瓶颈的(因此有了LVS DR)
 LVS DR(director routing直接路由)


  进来的数据包经过director,响应的数据包不经过director
  在后端的real server上配置上vip地址,然后响应的时候就是以vip的身份响应
  director改变的不是目标IP而是目标MAC (因此必须要在同一物理网络,不能用路由隔离)
   arp-ignore
   arp-announce
  对于Linux而言地址是属于系统的,将VIP设定在LO回环地址上,如果是通过物理
  网卡进来而不是从LO进来的,就不予以响应
  总结:1)所有的节点都要在同一个物理网络当中
  2)RIP可以是私有地址也可以是公网地址
  3)DR模型不支持端口映射
  4)director仅处理入站请求,出站的不予以响应
  5)real server一定不能把网关指向director
  6)DR模型比Net模型支持使用更多的real server
   
 LVS TUN(隧道)


  director 配置VIP DIP 后端server 配置 VIP RIP
  CIP--VIP        DIP---RIP  然后real server直接响应给client
  通过隧道将原有的IP请求封装
  总结:1)所有的real server可以在任意位置(不需要在同一物理网络或IP网络)
  2)RIP必须是公网地址
  3)director只处理入站请求,real server直接响应给客户端
  4)不支持端口映射

四、无论哪一种模型,都需要用到调度方法(前端的调度服务器)
静态方法:(fixed)
 RR(Round Rolling) ;轮询
 WRR(Weithed Round Rolling) 加权轮询(轮调)
  若A的性能比B的好,则第1个 第2个给A ,第3个给B
 DH:destination hashing目标地址哈希
  如果real server不是web服务器而是web的缓存服务器
  例如第一次到A上请求了,然后A上就有了缓存,以后每次都会到A上请求
  所以DH算法只用到real server为缓存服务器的场景
 SH:source  hashing 源地址哈希
  有两个网关,内网的客户端太多了,然后内部访问互联网时,随机选一个网关出去
动态方法:(dynamic),根据后端服务状态
 LC (list connetion)最少连接
  real server 中谁的连接个数少,就把请求给谁
   活动连接:当前处理的请求
   非活动连接:处理完了,但是还没有断开,仍然使用资源
   连接数的计算---一般是使用活动连接*256+非活动连接
       《--》overhead=active*256+inactive
 WLC:加权LC
  连接数  overhead=(active*256+inactive)/权重
  对于linux是最好用的算法的,默认是WLC
  但是有缺陷:在没有活动连接的时候第一个怎么选呢?
  例如R1的权重为10 R2的权重为1 那么计算就是R1,但是不符合要求
  
 SED:最少期望延迟,不考虑非活动链接
  (active+1)*256/weight
  上面的例子,第一次就会给R2,第二次还是R2,第三次还是R2。。
 NQ:永不排队(解决了SED),不考虑非活动连接
  至少有一次给对方一个请求。
  NQ SED是改进的WLC(不考虑非活动连接)
  
 LBLC:基于本地的最少连接locality based least connection
  这个就是DH静态算法的静态版
 LBLCR:带复制的基于本地的最少连接
  是LBLC的改进:后端real server 缓存服务器之间实现内容共享

五、下面来具体介绍一下DR模型及其他的实现方法

先安装ipvsadm

yum -y install ipvsadm
 
 ipvsadm命令用法简介:
 使用格式: ipvsadm -A|E -t|u|f service-adress [-s(指定使用哪个方法,默认wlc) scheduler][-p [timeout]][-O][-M netmask]
    -C 即clear,清空所有所有集群信息
   -A(新增)|E(修改) -t|u|f添加一个新的集群服务         -t表示是个tcp的服务
        -u表示是个udp服务
        -f表示是一个防火墙标记的服务
   -a|e -t|u|f Director_ip -r Real_Server_ip:PORT -i(TUN)|m(地址伪装,NAT)|g(DR模型) -w指定权重 添加realserver(默认是DR模型)    -D -t|u|f 删除集群服务
   -d -t|u|f 从集群服务列表中删除real server
   -Ln 显示已经定义好的集群服务,个已经定义好的realserver列表
        -c 即connection显示连接信息,与-L一起用
     --stats显示的是总数
        --rate显示当前lvs负载均衡,每秒处理的自己数,个数,显示的是平均值
   -S:保存服务和RS的定义至某文件中,可以自定义重定向=ipvsadm-save > /part/to/file
   -R:将保存至文件中的服务和RS定义应用起来,生效=ipvsadm-restore < /path/to/file
   -p:持久连接的时间,持久连接超时时间timeout默认为300秒

DR模型
    以下地址必须在同一网段,首先设置RIP地址
 RS1:172.16.134.11
 RS2:172.16.134.12
 DIP:172.16.134.10
 VIP:172.16.134.1(公网地址)
    arp_announce IP地址的限制规则
             =0 默认值,用本地地址
    =1 试图避免对不在同意网络接口中的地址借口通信
    =2 以最适合的地址使用
 arp_ignore 发送接受ARP请求的不通模型
             =0 默认值,无论是哪个地址,任意接口,只要访问地址是本机地址,就予以响应
             =1 如果访问地址不在这个网卡上,即便是本机其他网卡地址也不予响应
 Real Servel的配置   
 echo 1 > /proc/sys/net/ipv4/conf/eth0/arp_ignore
 echo 2 > /proc/sys/net/ipv4/conf/eth0/arp_announce
 echo 1 > /proc/sys/net/ipv4/conf/all/arp_ignore
 echo 2 > /proc/sys/net/ipv4/conf/all/arp_announce
 必须先设定以上内容再设定VIP
 ifconfig lo:0 172.16.134.1 broadcast(广播地址) 172.16.134.1 netmask(掩码) 255.255.255.255 up
 添加到主机的路由
 route add -host 172.16.134.1 dev(通过哪个设备进来,出去) lo:0
 
 Director的配置
 ifconfig eth0 172.16.134.10
 ifconfig eth0:0 172.16.134.1 broadcast 172.16.134.1(对本级广播) netmask 255.255.255.255 up
 route add -host 172.16.134.1 dev eth0:0
 echo 1 > /proc/sys/net/ipv4/ip_forward
 
 ipvsadm -A -t 172.16.134.1:80 -s rr
 ipvsadm -a -t 172.16.134.1:80 -r 172.16.134.11 -g
 ipvsadm -a -t 172.16.134.1:80 -r 172.16.134.12 -g


 访问页面即可

 

httpd是一个无状态协议stateless
LVS Persistence持久连接(会损害一定的负载均衡效果)
cache是客户端发起请求,服务器端保存在客户端的数据
session是客户端发起请求的时候,服务器在自己的内存当中建立一个hash表,每一个用户来源都有一个hash码,客户端也需要存储一些数据,所以seeion也许要借助cache,但是数据很少

Persistent client connections PCC持久客户端连接
Persistent port connections PPC持久端口连接
Persistent Netfilter Marked Packet persistence持久防火墙标记连接,定义端口间的姻亲关系
FTP connections
Expired persistence

PCC:
具体配置与DR模型相同,只是最后的ipvsadm不同
ipvsadm -C
ipvsadm -A -t 172.16.134.1:0 -s rr -p 1800(持久30分钟)
ipvsadm -a -t 172.16.134.1:0 -r 172.16.134.11 -g
ipvsadm -a -t 172.16.134.1:0 -r 172.16.134.12 -g


然后我们将看到qinqin2,并且无论怎么刷新都是qinqin2,如果30分钟过了,会自动延长2分钟,直到退出,结束访问


此时我们通过xshell登录172.16.134.1也是登录到rs主机


PPC:
首先清空ipvsadm
ipvsadm -C
ipvsadm -A -t 172.16.134.1:80 -s rr -p 1800
ipvsadm -a -t 172.16.134.1:80 -r 172.16.134.11 -g
ipvsadm -a -t 172.16.134.1:80 -r 172.16.134.12 -g
ipvsadm -A -t 172.16.134.1:23 -s rr -p 1800
ipvsadm -a -t 172.16.134.1:23 -r 172.16.134.12 -g
ipvsadm -a -t 172.16.134.1:23 -r 172.16.134.11 -g


然后我们重新打开网页将看到qinqin2,刷新也无影响,通过xshell登录此时我们通过xshell登录172.16.134.1,将看到的是rs1

用一个证书对集群服务器实现ssl加密访问
以Director主机作为证书服务器,向外发证,让rs1和rs2使用同一证书向外提供web服务
具体过程:
Director主机:修改/etc/pki/tls/openssl.cnf将[CA_default]中dir修改为dir=/etc/pki/CA
cd /etc/pki/CA
(umask 077;openssl genrsa 1024 > private/cakey.pem)
opensll req -new -x509 -key private/cakey.pem -out cacert.pem -days 3655


touch index.txt
mkdir crl certs newcerts
echo 01 > serial
RS1:修改/etc/pki/tls/openssl.cnf将[CA_default]中dir修改为dir=/etc/pki/CA
cd /etc/httpd
mkdir ssl/
cd ssl/
(umask 077; openssl genrsa 1024 > httpd.key)
openssl req -new -key httpd.key -out httpd.csr这里要与上图保持一致,否则通过不了
然后发请求给CA,即Director服务器
scp httpd.csr 172.16.134.10:/tmp
Director主机:
对RS1发过来的请求进行签证
cd /tmp
openssl ca -in httpd.csr -out httpd.crt -days 3655
scp httpd.crt 172.16.134.11:/etc/httpd/ssl
然后签证完成
RS1:
安装mod_ssl
使其httpd服务器支持
修改ssl.conf中的
启用Document
ServerName mail.magedu.com:443
SSLCertificateFile /etc/httpd/ssl/httpd.crt
SSLCertificateKeyFile /etc/httpd/ssl/httpd.key
然后重启httpd服务
Director主机:
将CA的证书拷贝到本机上,然后安装证书
RS1:
将/etc/httpd/ssl中所有内容拷贝到RS2的/etc/httpd/ssl中
scp -rp ./* 172.16.134.12:/etc/httpd/ssl
RS2:
修改/etc/httpd/conf.d/ssl.conf(同RS1)
Director主机:
ipvsadm -A -t 172.16.134.1:443 -s rr
ipvsadm -a -t 172.16.134.1:443 -r 172.16.134.12 -g
ipvsadm -a -t 172.16.134.1:443 -r 172.16.134.11 -g

在页面中访问https://mail.magedu.com,

即可

Persistent Netfilter Marked Packet persistence持久防火墙标记连接
Director主机:
首先ipvsadm -C清空刚才定义的内容
iptables -t mangle -A PREROUTING -d 172.16.134.1 -p tcp -m multiport --source-ports 443,80 -j MARK --set-mark 6

 

iptables打标记
iptables -t mangle -A PREROUTING -d 172.16.100.1 -p tcp --dport 80 -j MARK(打标记) --set-mark(标记成什么) 6
ipvsadm -A -f 6 -s rr
ipvsadm -a -f 6 -r 172.16.134.11 -g
ipvsadm -a -f 6 -r 172.16.134.12 -g

打开网页可以看到

 

你可能感兴趣的:(集群,ipvsadm)