day2 - 集群

day2 - 集群

集群概述

LVS负载平衡集群及调试算法
LVS集群配置

一组相互独立的、通过高速网络互联的计算机构成一个组,并以单一系统的模式加以管理
将很多服务器集中起来一起进行同一种服务,在客户端看来就象是只有一个服务器
可以在付出较低成本的情况下获得在性能、可靠性、灵活性方面的相对较高的收益
任务调试则是集群系统中的核心技术

集群目地
提高性能
如计算密集型应用。天气预报、核试验模拟
降低成本
价格相对较高,但百万美元级的超级计算机相比,还是非常便宜的
提高可扩展性
只要增加集群节点即可
增强可靠性
多个节点完成相同功能,避免单点失败

集群分类
高性能计算集群HPC
通过以集群开发的并行应用程序,解决复杂的科学问题
负载均衡(LB)集群
客户端访问负载可以在计算机集群中尽可能平均地分摊处理
高可用(HA)集群
当集群中的一个系统发生故障时,集群软件迅速做出反应,将该系统的任务分配到集群中其它正在工作的系统上执行

LVS负载均衡集群及调试算法

LVS负载均衡集群
Linux虚拟服务器(LVS)由章文嵩在国防科技大学就读博士间创建
利用LVS可以实现高可用的、可伸缩的WEB、MAIL、CACHE和Media等网络服务
最终目标是利用Linux操作系统和LVS集群软件实现一个高可用、高性能、低成本的服务器应用集群

LVS集群组成
前端:负载均衡层
由一台或多台负载调试器构成
中间:服务器群组层
由一组实际运行应用服务的服务器组成
底端:数据共享存储层
提供共享存储空间的存储区域

LVS术语
Director Server:调试服务器,将负载分发到Real Server的服务器
Real Server:真实服务器,真正提供应用服务的服务器
VIP:虚拟IP地址,公布给用户访问的IP地址
RIP:真实IP地址,集群节点上使用的IP地址
DIP:Director连到Real Server的IP地址

LVS负载均衡方式
VS/NAT:通过网络地址转换实现的虚拟服务器
Director将用户请求报文的目的地址改成待定的Real Server地址后,转发给Real Server
大并发访问时,调试器的性能成为瓶颈
优点:节省IP 缺点:转发效率低

VS/DR:直接使用路由技术实现虚拟服务器
通过改写请求报文的MAC地址,将请求发至Real Server,Real Server直接响应客户端

VS/TUN:通过隧道方式实现虚拟服务器
Director采用隧道技术将请求发至Real Server后,Real Server直接响应客户端

负载均衡调试算法
Director Server根据各台服务器的负载情况,通过调试算法动态选择一台Real Server
LVS目前实现了10种调试算法
常用调试算法有4种
1.
轮询(Round Robin) 加权轮询(Weighted Round Robin) 最少连接(Least Connections) 加权最少连接(Weighted Least Connections)

1、轮询(Round Robin)——rr

将客户端请求平均分发到Real Server

2、加权轮询(Weighted Round Robin)——wrr

根据Real Server的性能设置权重,再进行轮询调度

3、最少连接(Least Connections)——lc

动态地将网络请求调试到已建立的连接数最好少的服务器上、

4、加权最少连接(Weighted Least Connections)——wlc

根据Real Server的性能设置权重,再将网络请求调度到已建立的连接数最好少的服务器上

5、基于局部性的最好少链接(Locality-Based Least Connections)——lblc

根据请求的目标IP地址找出该目标IP地址最好近使用的服务器,若该服务器是可用的且没有超载,将请求发送到该服务器;若服务器不存在,或者该服务器超载且有服务器处于一半的工作负载,则用"最少链接"的原则迁出一个可用的服务器,将请求发送到该服务器

6、带复制的基于局部性最好少链接(Locality-Based Least Connections with Replication)——lblcr
维护从一个目标IP地址到一台服务器的映射
根据请求的目标IP地址找出该目标IP地址对应的服务器组,按"最小连接"原则从服务器组中迁出一台服务器,若服务器没有超载,将请求发送到该服务器;若服务器超载,则按"最小连接"原则从这个集群中选出一台服务器,将该服务器加入到服务器组中,将请求发送到该服务器

当该服务器组有一段时间没有被修改, 将最尽快的服务从服务器组中删除,以降低复制的程序。

7、目标地址散列(Destination Hashing)——dh
根据请求的目标IP地址,作为散列键(Hash Key)从静态分配的散列表找出对应的服务器,若该服务器是可用的且未超载,将请求发送到该服务器,否则返回空

8、源地址散列(Source Hashing)——sh

根据请求的源IP地址,作为散列键(Hash Key)从静态分配的散列表找出对应的服务器,若该服务器是可用的且未超载,将请求发送到该服务器,否则返回空

9、最短的期望的延迟(Shortest Expected Delay Scheduling SED)——sed
基于WLC算法
A、B、C三台机器分别权重1、2、3,连接数也分别是1、2、3.如果使用WLC算法的话一个新请求进入时它可能会分给ABC中的的任意一个
使用sed算法后会进行这样一个运算:A(1+1)/1,B(1+2)/2,C(1+3)/3
根据运算结果,把连接交给C

10、最好少队列调度(Never Queue Scheduling NQ)——nq
如果有台Real Server的连接数为0就直接分配过去,无需SED运算

LVS集群配置
IPVS
LVS的IP负载均衡技术是通过IPVS模块实现的
IPVS是LVS集群的核心软件
已成为Linux组成部分

# grep -i 'ipvs' /boot/config-2.6.32-358.el6.x86_64

IPVS安装
注意:默认光盘的yum install ipvsadm无法安装
在光盘下的LoadBalancer

rpm –ivh ipvsadm-xxx
ipvsadm -v

ipvsadm用法
创建虚拟服务器
-A 添加虚拟服务器
-t 设置群集地址(VIP,Virtual IP)
-s 指定负载调度算法

#ipvsadmAT 192.168.100.100:80s rr

添加、删除服务器节点
-a 添加真实服务器
-d 删除真实服务器
-r 指定真实服务器(Real Server)的地址
-m 使用NAT模式;-g、-i分别对应DR、TUN模式
-w 为节点服务器设置权重,默认为1

#ipvsadmat 192.168.100.100:80r 192.168.1.1:80m
#ipvsadmdr 192.168.1.1:80t 192.168.100.100:80

查看IPVS

ipvsadm -Ln

NET操作步骤
Real server:配置WEB服务器
Director Server
安装并启用ipvsadm
创建虚拟服务器
向虚拟服务器中加入节点
Client:连接虚拟服务器测试

Director server配置
打开ip_forward

#sed -i '/ip_forward/s/0/1/' /etc/sysctl.conf
#stsctkp

启动ipvsadm

#service ipvsadm start

Client端验证

#ab –c 10 –n 1000 http://192.168.100.100/index.html

在Director上查看连接数

#ipvsadm –L –n

配置LVS-DR集群
Real Server
配置WEB服务器
配置辅助IP地址
调整内核参数
Director Server
在上安装并启用ipvsadm
配置辅助IP地址
创建虚拟服务器
向虚拟服务器中加入节点
Client连接虚拟服务器测试

配置辅助IP地址

ifconfig lo:0 192.168.100.100 netmask 255.255.255.255 broadcast 192.168.100.100

调整内核参数

echo 1 >/proc/sys/net/ipv4/conf/lo/arp_ignore
echo 1 >/proc/sys/net/ipv4/conf/all/arp_ignore
echo 2 >/proc/sys/net/ipv4/conf/lo/arp_announce
echo 2 >/proc/sys/net/ipv4/conf/all/arp_announce

实验
配置LVS-NAT(打开ip_forward,配置ipvsadm)
lvs(eth0:192.168.10.100 eth1:192.168.100.99)
yum install ipvsadm -y(下面加-m是NAT模式不加转为为DR路由模式)
enter description here

若要永久修改serivce ipvsadm save即可
enter description here

开启IP路由转发功能

sed -i '/net.ipv4.ip_forward/ s/\(.*= \).*/\11/' /etc/sysctl.conf
sed -i '/ip_forward/s/0/1/'  sysctl.conf

WEB1(需要设置网关 eth0:192.168.100.100)

yum install httpd php-mysql php -y
/etc/init.d/httpd start
chkconfig httpd on

WEB2(需要设置网关 eth0:192.168.100.200)

yum install httpd php-mysql php -y
/etc/init.d/httpd start
chkconfig httpd on

MYSQL(eth0:192.168.100.250)
yum install mysql-server -y
mysql>grant all on *.* to 'root'@'192.168.100.100' IDENTIFIED BY '1';
mysql>grant all on *.* to 'root'@'192.168.100.200' IDENTIFIED BY '1'

client(客户机)————策略是轮询
enter description here
enter descriptionenter description herehere

若更改LVS高度算法为wrr————加权轮询
enter description here

编写脚本来监控(自动添加,自动删除WEB主机)

#!/bin/bash

VIP=192.168.10.100
RIP1=192.168.100.100
RIP2=192.168.100.200

while [ 1 ]
do
    for IP in $RIP1 $RIP2
    do
        WebStatus=$(nmap -n -sT $IP -p 80 |grep open)
        IPVSIP=$(ipvsadm -Ln |grep $IP)
        if [ -z "$WebStatus" ];then
            if [ -n "$IPVSIP" ];then
                ipvsadm -d -t ${VIP}:80 -r $IP
            fi
        else
            if [ -z "$IPVSIP" ];then
                if [  "$IP"=="$RIP1" ];then
                    ipvsadm -at ${VIP}:80 -r $IP -m -w 1
                else
                    ipvsadm -at ${VIP}:80 -r $IP -m -w 2
                fi
            fi
        fi
    done
    sleep 2
done

测试

watch -n 1 ipvsadm -Ln

实验
配置LVS-DR(realserver修改lo:0、修改内核参数;directory修改eth0:0;配置ipvsadm)

[root@localhost ~]# cat /etc/sysconfig/network-scripts/ifcfg-eth0
DEVICE=eth0
TYPE=Ethernet
ONBOOT=yes
NM_CONTROLLED=yes
BOOTPROTO=static
IPADDR=192.168.100.254
NETMASK=255.255.255.0
[root@localhost ~]# cat /etc/sysconfig/network-scripts/ifcfg-eth0:0
DEVICE=eth0:0
TYPE=Ethernet
ONBOOT=yes
NM_CONTROLLED=yes
BOOTPROTO=static
IPADDR=192.168.100.253
NETMASK=255.255.255.0

WEB1

[root@localhost ~]# cat /etc/sysconfig/network-scripts/ifcfg-eth0
DEVICE=eth0
TYPE=Ethernet
ONBOOT=yes
NM_CONTROLLED=yes
BOOTPROTO=static
IPADDR=192.168.100.100
NETMASK=255.255.255.0
GATEWAY=192.168.100.254
[root@localhost ~]# cat /etc/sysconfig/network-scripts/ifcfg-lo:0
DEVICE=lo:0
IPADDR=192.168.100.253
NETMASK=255.255.255.255
# If you're having problems with gated making 127.0.0.0/8 a martian,
# you can change this to something else (255.255.255.255, for example)
BROADCAST=192.168.100.253
ONBOOT=yes
NAME=loopback

enter description here
enter description here


 echo "net.ipv4.conf.all.arp_announce = 2" >> /etc/sysctl.conf
 echo "net.ipv4.conf.lo.arp_announce = 2" >> /etc/sysctl.conf
 echo "net.ipv4.conf.all.arp_ignore = 1" >> /etc/sysctl.conf
 echo "net.ipv4.conf.lo.arp_ignore = 1" >> /etc/sysctl.conf

WEB2

[root@localhost ~]# cat /etc/sysconfig/network-scripts/ifcfg-eth0
DEVICE=eth0
TYPE=Ethernet
ONBOOT=yes
NM_CONTROLLED=yes
BOOTPROTO=static
IPADDR=192.168.100.200
NETMASK=255.255.255.0
GATEWAY=192.168.100.254
[root@localhost ~]# cat /etc/sysconfig/network-scripts/ifcfg-lo:0
DEVICE=lo:0
IPADDR=192.168.100.253
NETMASK=255.255.255.255
# If you're having problems with gated making 127.0.0.0/8 a martian,
# you can change this to something else (255.255.255.255, for example)
BROADCAST=192.168.100.253
ONBOOT=yes
NAME=loopback

enter description here
enter description here

 echo "net.ipv4.conf.all.arp_announce = 2" >> /etc/sysctl.conf
 echo "net.ipv4.conf.lo.arp_announce = 2" >> /etc/sysctl.conf
 echo "net.ipv4.conf.all.arp_ignore = 1" >> /etc/sysctl.conf
 echo "net.ipv4.conf.lo.arp_ignore = 1" >> /etc/sysctl.conf

测试
yum install httpd-tools
发送1000连接请求,每次并发10个连接
ab -n 1000 -c 10 http://192.168.100.253/

自动监控脚本

#!/bin/bash

VIP=192.168.100.253
RIP1=192.168.100.100
RIP2=192.168.100.200

while [ 1 ]
do
    for IP in $RIP1 $RIP2
    do
        WebStatus=$(nmap -n -sT $IP -p 80 |grep open)
        IPVSIP=$(ipvsadm -Ln |grep $IP)
        if [ -z "$WebStatus" ];then
            if [ -n "$IPVSIP" ];then
                ipvsadm -d -t ${VIP}:80 -r $IP
            fi
        else
            if [ -z "$IPVSIP" ];then
                if [  "$IP"=="$RIP1" ];then
                    ipvsadm -at ${VIP}:80 -r $IP
                else
                    ipvsadm -at ${VIP}:80 -r $IP -g -w 2
                fi
            fi
        fi
    done
    sleep 2
done

posted @ 2016-10-12 17:05  Final233  阅读(178)  评论(0编辑  收藏  举报