群集01-LVS负载均衡群集
群集01-LVS负载均衡群集
一、企业群集应用概述
群集(或集群)来自于单词“Cluster”,表示一群的意思,用在服务器领域则表示大量服务器的集合体。
在互联网应用中,随着站点对硬件性能、响应速度、服务稳定性、数据可靠性等要求越来越高,单台服务器力不从心。
解决方法:
·使用价格昂贵的小型机、大型机
·使用普通服务器构建服务群集
二、企业群集分类
根据群集所针对的目标差异,可分为三种类型:
1、负载均衡群集(Load Balance Cluster)
以提高应用系统的响应能力、尽可能处理更多的访问请求、减少延迟为目标,获得高并发、高负载(LB)的整体性能。例如,“DNS轮询”、“应用层交换”、“反向代理”等都可用作负载均衡群集。
LB的负载分配依赖于主节点的分流算法,将来自客户机的访问请求分配给多个服务器节点,从而缓解整个系统的负载压力。
2、高可用群集(High Availability Cluster)
以提高应用系统的可靠性、尽可能地减少中断时间为目标,确保服务的连续性,达到高可用(HA)的容错效果。例如,“故障切换”、“双机热备”、“多机热备”等都属于高可用集群技术。
HA的工作方式包括双工和主从两种,双工即所有节点同时在线;主从则只有主节点在线,但当出现故障时从节点能自动切换为主节点。
3、高性能运算群集(High Performance Computer Cluster)
以提高应用系统的CPU运算速度、扩展硬件资源和分析能力为目标,获得相当于大型、超级计算机的高性能运算(HPC)能力。例如,“云计算”、“网格计算”也可视为高性能运算的一种。
高性能运算群集的高性能依赖于“分布式运算”、“并行计算”,通过专用硬件和软件将多个服务器的CPU、内存等资源整合在一起,实现只有大型、超级计算机才具备的计算能力。
三、负载均衡群集工作模式分析
负载均衡群集是目前企业用得最多的集群类型,通过主节点,使用特定的分流算法,将来自客户机的访问请求分配给多个服务器节共同处理,从而缓解整个系统的负载压力,响应更多请求。
2、IP隧道(IP Tunnel)
3、直接路由(Direct Routing)
简称DR模式,采用半开放式的网络结构,与TUN模式的结构类似,但各节点并不是分散在各地,而是与调度器位于同一个物理网络。负载调度器与各节点服务器通过本地网络连接,不需要建立专用的IP隧道。
四、负载均衡群集架构
负载均衡群集中,包括三个层次的组件:
1、第一层,负载调度器
前段至少有一个负载调度器(Load Balancer 或称为Director)负责响应并分发来自客户端的访问请求。
2、第二层,服务器池
后端由大量真实服务器(Real Server)构成服务器池(Server Pool),提供实际的应用服务,整个群集的伸缩性通过增加、删除服务器节点来完成,而这些过程对客户机是透明的。
3、第三层,共享储存
为了保持服务的一致性,所有节点使用共享储存设备。
为了服务器池中的所有节点提供稳定、一致的文件存取服务,确保整个集群的统一性。在Linux/UNIX环境中,共享储存可以使用NAS设备,或者提供NFS(Network File System,网络文件系统)共享服务的专用服务器。
五、LVS群集架构原理
1、LVS群集架构原理概述
官方网站:http://www.linuxvirtualserver.org/
2、LVS的负载调度算法
(1)轮询(Round Robin)rr
将收到的访问请求按照顺序轮流分配给群集中的各节点(真实服务器),均等地对待每一台服务器,而不管服务器实际的连接数和系统负载。
(2)加权轮询(Weighted Round Robin)wrr
根据真实服务器的处理能力轮流分配收到的访问请求,调度器可以自动查询各节点的负载情况,并动态调整期权重。这样保证处理能力强的服务器承担更多的访问流量。
(3)最少链接(Least Connections)lc
根据真实服务器已建立的连接数量进行分配,将受到的访问请求优先分配给连接数最少的节点。如果所有的服务器节点性能相近,采用这种方可以更好地均衡负载。
(4)加权最少链接(weighted Least Connections)wlc
在服务器节点的性能差异较大的情况下,可以为真实服务器自动调整权重,权重较高的节点将承担更大比例的活动连接负载。
六、LVS-NAT案例
实验环境:
LVS调度器(BL)作为Web1、Web2两台Web服务器池的网关
BL两块网卡,分别连接内外网
BL主机(负载调度器):
Web1主机:192.168.2.3/24
Web2主机:192.168.2.4/24
NFS主机:192.168.2.5/24
使用轮询(rr)调度算法
1、NFS共享储存部署
(1)安装nfs-utils、rpcbind软件包
[root@nfs ~]# rpm -q nfs-utils rpcbind
package nfs-utils is not installed
package rpcbind is not installed
[root@nfs ~]# yum -y install nfs-utils rpcbind
[root@nfs ~]# rpm -q nfs-utils rpcbind
nfs-utils-1.2.3-39.el6.x86_64
rpcbind-0.2.0-11.el6.x86_64
(2)设置共享目录,将/opt/www作为共享目录,要求192.168.2.0/24网段只读权限访问网页数据(若增加读写速度和安全性,可结合raid5+LVM)
[root@nfs ~]# mkdir /opt/www
[root@nfs ~]# vim /etc/exports
/opt/www 192.168.2.0/24(ro,sync,no_root_squash)
(3)启动服务并查看共享目录
[root@nfs ~]# /etc/init.d/rpcbind start
正在启动 rpcbind: [确定]
[root@nfs ~]# /etc/init.d/nfs start
启动 NFS 服务: [确定]
启动 NFS mountd: [确定]
启动 NFS 守护进程: [确定]
正在启动 RPC idmapd: [确定]
[root@nfs ~]# showmount -e 192.168.2.5
Export list for 192.168.2.5:
/opt/www 192.168.2.0/24
[root@nfs ~]# chkconfig rpcbind on
[root@nfs ~]# chkconfig nfs on
[root@nfs ~]# echo "
it works
" >/opt/www/index.html
2、Web1、Web2服务器配置
(1)Web1配置
[root@web1 ~]# rpm -q httpd
package httpd is not installed
[root@web1 ~]# yum -y install httpd
[root@web1 ~]# rpm -q httpd
httpd-2.2.15-29.el6.centos.x86_64
[root@web1 ~]# sed -i '/#S/ s/#//' /etc/httpd/conf/httpd.conf
[root@web1 ~]# sed -n '/com:80/p' /etc/httpd/conf/httpd.conf
ServerName www.example.com:80
[root@web1 ~]# /etc/init.d/httpd start
正在启动 httpd: [确定]
[root@web1 ~]# netstat -anpt |grep :80
tcp 0 0 :::80 :::* LISTEN 1541/httpd
[root@web1 ~]# yum -y install nfs-utils
[root@web1 ~]# mount 192.168.2.5:/opt/www/ /var/www/html/
[root@web1 ~]# df -hT
Filesystem Type Size Used Avail Use% Mounted on
/dev/mapper/vg_www-lv_root ext4 37G 1.3G 34G 4% /
tmpfs tmpfs 242M 0 242M 0% /dev/shm
/dev/sda1 ext4 485M 33M 427M 8% /boot
/dev/sr0 iso9660 4.2G 4.2G 0 100% /media/cdrom
192.168.2.5:/opt/www/ nfs 37G 1.3G 34G 4% /var/www/htm
[root@web1 ~]# cp -p /etc/fstab /etc/fstab.bak
[root@web1 ~]# vim /etc/fstab
……
192.168.2.5:/opt/www/ /var/www/html/ nfs defaults,_netdev 1 2
[root@web1 ~]# umount /var/www/html/
[root@web1 ~]# mount -a
[root@web1 ~]# df -hT
Filesystem Type Size Used Avail Use% Mounted on
/dev/mapper/vg_www-lv_root ext4 37G 1.3G 34G 4% /
/dev/sda1 ext4 485M 33M 427M 8% /boot
tmpfs tmpfs 242M 0 242M 0% /dev/shm
192.168.2.5:/opt/www/ nfs 37G 1.3G 34G 4% /var/www/html
(2)Web2配置(与Web1相同)
[root@web2 ~]# yum -y install httpd^C
[root@web2 ~]# sed -i '/#S/ s/#//' /etc/httpd/conf/httpd.conf
[root@web2 ~]# /etc/init.d/httpd start
正在启动 httpd: [确定]
[root@web2 ~]# yum -y install nfs-utils
[root@web2 ~]# cp -p /etc/fstab /etc/fstab.bak
[root@web2 ~]# echo "192.168.2.5:/opt/www/ /var/www/html/ nfs defaults,_netdev 1 2" >>/etc/fstab
[root@web2 ~]# mount -a
[root@web2 ~]# df -hT
Filesystem Type Size Used Avail Use% Mounted on
/dev/mapper/vg_www-lv_root ext4 37G 1.3G 34G 4% /
tmpfs tmpfs 242M 0 242M 0% /dev/shm
/dev/sda1 ext4 485M 33M 427M 8% /boot
/dev/sr0 iso9660 4.2G 4.2G 0 100% /media/cdrom
192.168.2.5:/opt/www/ nfs 37G 1.3G 34G 4% /var/www/html
宿主机访问测试:
3、LVS-NAT部署
ipvsadm工具参数说明:
-A 添加虚拟服务器
-D 删除虚拟服务器
-C 删除所有配置条目
-E 修改虚拟服务器
-L 或-l,列表查看
-n 不做解析,以数字形式显示
-c 输出当前IPVS连接
-a 添加真实服务器
-d 删除某个节点
-s 指定负载调度算法,rr|wrr|lc|wlc|lblc|lblcr|dh|sh|sed|nq,默认wlc
-m NAT群集模式
-g DR模式
-i TUN模式
-w 设置权重(权重为0时表示暂停节点)
--help 帮助
(1)加载ip_vs模块,安装ipvsadm工具
[root@bl ~]# modprobe ip_vs
[root@bl ~]# cat /proc/net/ip_vs
IP Virtual Server version 1.2.1 (size=4096)
Prot LocalAddress:Port Scheduler Flags
-> RemoteAddress:Port Forward Weight ActiveConn InActConn
[root@bl ~]# yum -y install ipvsadm
(2)配置负载调度器SNAT转发规则
[root@bl ~]# /etc/init.d/ipvsadm stop
ipvsadm: Clearing the current IPVS table: [确定]
ipvsadm: Unloading modules: [确定]
[root@bl ~]# ipvsadm -A -t 192.168.1.66:80 -s rr
[root@bl ~]# ipvsadm -a -t 192.168.1.66:80 -r 192.168.2.3:80 -m -w 1
[root@bl ~]# ipvsadm -a -t 192.168.1.66:80 -r 192.168.2.4:80 -m -w 1
[root@bl ~]# 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.66:80 rr
-> 192.168.2.3:80 Masq 1 0 0
-> 192.168.2.4:80 Masq 1 0 0
[root@bl ~]# /etc/init.d/ipvsadm save
ipvsadm: Saving IPVS table to /etc/sysconfig/ipvsadm: [确定]
[root@bl ~]# chkconfig ipvsadm on
(3)开启路由转发功能
[root@bl ~]# cp -p /etc/sysctl.conf /etc/sysctl.conf.origin
[root@bl ~]# sed -i '7 s/0/1/' /etc/sysctl.conf
[root@bl ~]# sysctl -p
net.ipv4.ip_forward = 1
net.ipv4.conf.default.rp_filter = 1
net.ipv4.conf.default.accept_source_route = 0
kernel.sysrq = 0
kernel.core_uses_pid = 1
net.ipv4.tcp_syncookies = 1
error: "net.bridge.bridge-nf-call-ip6tables" is an unknown key
error: "net.bridge.bridge-nf-call-iptables" is an unknown key
error: "net.bridge.bridge-nf-call-arptables" is an unknown key
kernel.msgmnb = 65536
kernel.msgmax = 65536
kernel.shmmax = 68719476736
kernel.shmall = 4294967296
客户机访问测试:
(若不成功,检查各个服务器的防火墙与selinux机制是否关闭)
多刷新几次
[root@bl ~]# ipvsadm -L -n -c
IPVS connection entries
pro expire state source virtual destination
TCP 01:51 TIME_WAIT 192.168.1.104:63567 192.168.1.66:80 192.168.2.3:80
TCP 01:00 TIME_WAIT 192.168.1.104:63560 192.168.1.66:80 192.168.2.3:80
TCP 01:01 TIME_WAIT 192.168.1.104:63562 192.168.1.66:80 192.168.2.3:80
TCP 01:00 TIME_WAIT 192.168.1.104:63556 192.168.1.66:80 192.168.2.3:80
TCP 01:00 TIME_WAIT 192.168.1.104:63561 192.168.1.66:80 192.168.2.4:80
TCP 00:59 TIME_WAIT 192.168.1.104:63555 192.168.1.66:80 192.168.2.4:80
TCP 01:50 TIME_WAIT 192.168.1.104:63566 192.168.1.66:80 192.168.2.4:80
TCP 01:54 TIME_WAIT 192.168.1.104:63569 192.168.1.66:80 192.168.2.3:80
之所以看到的结果并不是轮询的一次是192.168.2.2下一次是192.168.2.3,是因为负载调度器要判断一次完整TCP连接结束后才会进行轮询,也就是完成完整的三次握手与四次断开,因此若在网页上下载电影时及时刷新了网页,也不会轮询到下一台服务器导致传输中断。
课外补充:LVS的负载调度算法
在内核中的连接调度算法上,IPVS已实现了以下八种调度算法:
一、轮叫调度(Round-Robin Scheduling) ----rr
轮叫调度(Round Robin Scheduling)算法就是以轮叫的方式依次将请求调度不同的服务器,即每次调度执行i = (i + 1) mod n,并选出第i台服务器。算法的优点是其简洁性,它无需记录当前所有连接的状态,所以它是一种无状态调度。
二、加权轮叫调度(Weighted Round-Robin Scheduling) ----wrr
加权轮叫调度(Weighted Round-Robin Scheduling)算法可以解决服务器间性能不一的情况,它用相应的权值表示服务器的处理性能,服务器的缺省权值为1。假设服务器A的权值为1,B的权值为2,则表示服务器B的处理性能是A的两倍。加权轮叫调度算法是按权值的高低和轮叫方式分配请求到各服务器。权值高的服务器先收到的连接,权值高的服务器比权值低的服务器处理更多的连接,相同权值的服务器处理相同数目的连接数。
三、最小连接调度(Least-Connection Scheduling) ---lc
最小连接调度(Least-Connection Scheduling)算法是把新的连接请求分配到当前连接数最小的服务器。最小连接调度是一种动态调度算法,它通过服务器当前所活跃的连接数来估计服务器的负载情况。调度器需要记录各个服务器已建立连接的数目,当一个请求被调度到某台服务器,其连接数加1;当连接中止或超时,其连接数减一。
四、加权最小连接调度(Weighted Least-Connection Scheduling)---wlc
加权最小连接调度(Weighted Least-Connection Scheduling)算法是最小连接调度的超集,这个是ipvsadm的默认算法。各个服务器用相应的权值表示其处理性能。服务器的缺省权值为1,系统管理员可以动态地设置服务器的权值。加权最小连接调度在调度新连接时尽可能使服务器的已建立连接数和其权值成比例。
五、基于局部性的最少链接(Locality-Based Least Connections Scheduling) --lblc
六、带复制的基于局部性最少链接(Locality-Based Least Connections with Replication Scheduling)--lblcr
本文来源:http://www.benet.wang/%E6%9C%8D%E5%8A%A1%E6%90%AD%E5%BB%BA/108.html