的一群机器,所以集群就分为三种:
1.LB:Load balancing 负载均衡集群
2.HA:High availability 高可用性集群
3.HP:High performance 高性能集群
1、scale on向上扩展,就是使用更好的服务器的组件来替代现有的服务器的组件,
如使用多颗cpu,更大的内存,但是这样会提高
成本。
2、scale out 向外发展,这也是集群的方式。
LB:
lvs *
haproxy
F5 (硬件)
HA:
heartbeat *
corosync+openais:RHCS
ultramokey
keepalive *
HP:
bowerfull
lvs(linux virtual server)Linux的虚拟服务
Internet的快速增长使多媒体网络服务器面对的访问数量快速增加,服务器需要具备提供大量并发访问服务的能力,因此对于大负载的服务器来讲, CPU、I/O处理能力很快会成为瓶颈。由于单台服务器的性能总是有限的,简单的提高硬件性能并不能真正解决这个问题。为此,必须采用多服务器和负载均衡技术才能满足大量并发访问的需要。Linux 虚拟服务器(Linux Virtual Servers,LVS) 使用负载均衡技术将多台服务器组成一个虚拟服务器。它为适应快速增长的网络访问需求提供了一个负载能力易于扩展,而价格低廉的解决方案。
LVS的结构和工作原理:
LVS由前端的负载均衡器(Load Balancer,LB)和后端的真实服务器(Real Server,RS)群组成。RS间可通过局域网或广域网连接。LVS的这种结构对用户是透明的,用户只能看见一台作为LB的虚拟服务器(Virtual Server),而看不到提供服务的RS群。
当用户的请求发往虚拟服务器,LB根据设定的包转发策略和负载均衡调度算法将用户请求转发给RS。RS再将用户请求结果返回给用户。同请求包一样,应答包的返回方式也与包转发策略有关。
1.net(LVS-NET)
a.集群接点必须和LB在同一个子网中(即DIP和),不能跨域网段
b.RIP 是私有地址
c.所有的RIP的网关必须指向DIP
d.调度器处理所有的请求
e.端口地址转换
f.因为是NAT
h.单点瓶颈
2.直接路由(LVS-DR)
a.集群接点必须和LB必须在一个物理网段,之间不能有路由器
b.RIP可以使用公网地址,建议使用公网地址
c.LB仅处理请求,不处理响应
d.real server的网关不能指向DIP
e.不能做端口转换
f.并非所有的系统都可以做接点
h.LVS-DR 可以带动比LVS-NAT更多的接点
3.隧道(LVS-TUN)
a.集群接点和LB接点不必在同一个物理网络
b.RIP使用公网地址
c.LB只处理进来的请求,不处理出去的请求
d.响应的请求一定不经过LB
e.不支持端口地址转换
f.只能使用支持IP隧道协议的操作系统做集群接点
1.higher throughput
2.redundancy
3.adaptability
VIP(virtual ip)虚拟ip地址
RIP(real ip)后端真正提供接点的ip
DIP(Director‘s ip)及负载均衡器(Loader balance,LB)上连接D/RIP的地址
CIP(custom ip)用户请求的ip
lvs的LB的调度方法及各个调度方法对应的算法:
1.静态调度方法:(fixed scheduling)不考虑后端连接状态
a.RR(round-robin)轮循着,它将请求依次分配不同的RS,也就是在RS中均摊请求。这种算法简单,但是只适合于RS处理性能相差不大的情况;
b.WRR(weight round-robin)加权轮调,它将依据不同RS的权值分配任务。权值较高的RS将优先获得任务,并且分配到的连接数将比权值较低的RS更多。相同权值的RS得到相同数目的连接数;
c.destination hashing 根据服务的请求转发到特定的服务器,跟用户建立粘性,提高缓存命中率
d.source hashing 将来自同一个用户的请求,始终转发到特定的路由器或防火墙(平均内网负载)
2.动态调度方法:(dynamic scheduling)考虑后端连接状态
1.LC (least-connect)最少连接,检查active和inactive,连接数(overhead)最少的接受请求
2.WLC(weight least-connect)加权最小连接数(集群最好的算法)
3.shortest expected delay (SED)最短期望延迟 ,不考虑非活动状态,在计算overhead之前,把非活动状态的总数加上1
4.NQ(never query)只要有空闲的,不考虑算法的接受请求;
5.LBLC(locality-based-least-connect:DH)支持权重(后面的是缓存服务器的)基于地址的最小连接数调度(Locality-Based Least-Connection) 将来自同一目的地址的请求分配给同一台RS如果这台服务器尚未满负荷,否则分配给连接数最小的RS,并以它为下一次分配的首先考虑;
6.LBLCR (locality-based-least-connect with replication scheduling)是对LBLC的改进,对于某一目的地址,对应有一个RS子集。对此地址的请求,为它分配子集中连接数最小的RS;如果子集中所有的服务器均已满负荷,则从集群中选择一个连接数较小的服务器,将它加入到此子集并分配连接;若一定时间内,这个子集未被做任何修改,则将子集中负载最大的节点从子集删除;
ipvsadm用户空间的命令
ipvs是内核空间模块
用户在LB负载均衡器上使用ipvsadm命令进行操作,基于不同模式的不同调度算法进行设置,然后实现不同的不同的负载措施:
ipvsadm 功能及使用:
1.定义集群服务
ipvsadm -A|-E -t|-u|-f VIP:PORT {tcp|udp|firewall mark} -s 调度算法,默认是wlc
-A 添加
-E 修改
ipvsadm -D -t|-u VIP:PORT 删除定义的集群
2.要为集群服务定义realserver
ipvsadm -a|-e -t|-u VIP:port -r REALSERVER:port -g|-i|-m(模型) [-w weitht]
-a 添加
-e 修改
-w 权重
-d 删除
ipvsadm -d -t|-u VIP:port -r REALSERVER:PORT
-C 情况规则
-R 恢复
-S 保存
其中模式中的-g|-i|-m分别用于dr|tun|nat
3.查看
ipvsadm
-l
-L
-n 数字的方式来显示地址
--stats显示统计的数据信息
--rate 显示统计的速率
1.LVS-NAT
LB负载均衡器上的配置
#yum install ipvsadm
#ifconfig eth0 192.168.1.108/24
#ifconfig eth1 10.1.1.1/8
#echo 1 >/proc/sys/net/ipv4/ip_forward
#ipvsadm -A -t 192.168.1.108:80 -s rr
#ipvsadm -a -t 192.168.1.108:80 -r 10.1.1.2:80 -m
#ipvsadm -a -t 192.168.1.108:80 -r 10.1.1.3:80 -m
RealServer1上的配置
#yum install httpd mysql-server php php-mysql php-mbstring
#service mysqld start
#echo "<h1>RealServer1<h1>" >/var/www/html/index.html
#server httpd start
#ifconfig eth0 10.1.1.2/8
#route add default gw 10.1.1.1
RealServer2上的配置
#yum install httpd mysql-server php php-mysql php-mbstring
#service mysqld start
#echo "<h1>RealServer2<h1>" >/var/www/html/index.html
#server httpd start
#ifconfig eth0 10.1.1.3/8
#route add default gw 10.1.1.1
测试:
然后使用自己的主机进行测试:
在浏览器中输入http://192.168.1.108然后不断的刷新页面,可以看到这时候会出现不同的页面的,而且是轮循这出现
(算法是自己选择的,不同的算法,会导致服务器的响应不同)
ok,这个实验就完成了。
1.在LB负载均衡器上做的配置如下:
LB负载均衡器上的配置:
DIP配置在接口上,VIP配置在接口别名
#ifconfig eth0 172.16.100.10/16
#ifconfig eth0:0 172.16.100.1 broadcast 172.16.100.1 netmask 255.255.255.255 up
#route -host 172.16.100.1 dev eth0:0
#echo 1 > /proc/sys/net/ipv4/ip_forward
定义集群的服务:
#ipvsadm -A -t 172.16.100.1:80 -s rr
#ipvsadm -a -t 172.16.100.1:80 -r 172.16.100.11:80 -g
#ipvsadm -a -t 172.16.100.1:80 -r 172.16.100.12:80 -g
2.RealServer1上的配置:
RIP 要配置在接口上,VIP配置在lo的别名上
定义内核参数,禁止响应对应VIP的ARP的广播请求
#echo 1 > /proc/sys/net/ipv4/conf/lo/arp_igonre
#echo 1 > /proc/sys/net/ipv4/conf/all/arp_igonre
#echo 2 > /proc/sys/net/ipv4/conf/all/arp_announce
#echo 2 > /proc/sys/net/ipv4/conf/lo/arp_announce
配置RIP&&VIP
#ifconfig eth0 172.16.100.11/16
#ifconfig lo:0 172.16.100.1 broadcast 172.16.100.1 netmask 255.255.255.255 up
#route add -host 172.16.100.1 dev lo:0
#yum install php httpd mysql-server php-mysql php-mbstring
#service httpd start
#service mysqld start
3.RealServer1上的配置:
RIP 要配置在接口上,VIP配置在lo的别名上
定义内核参数,禁止响应对应VIP的ARP的广播请求
#echo 1 > /proc/sys/net/ipv4/conf/lo/arp_igonre
#echo 1 > /proc/sys/net/ipv4/conf/all/arp_igonre
#echo 2 > /proc/sys/net/ipv4/conf/all/arp_announce
#echo 2 > /proc/sys/net/ipv4/conf/lo/arp_announce
配置RIP&&VIP
#ifconfig eth0 172.16.100.12/16
#ifconfig lo:0 172.16.100.1 broadcast 172.16.100.1 netmask 255.255.255.255 up
#route add -host 172.16.100.1 dev lo:0
#yum install php httpd mysql-server php-mysql php-mbstring
#service httpd start
#service mysqld start
4.测试OK了!