高性能高可用(2)LVS

1、服务器安装

1.1准备

cd /usr/local/src

下载安装包(下载1.2.版本,1.3.版本暂不知如何安装)

wget http://www.linuxvirtualserver.org/software/kernel-2.6/ipvsadm-1.26.tar.gz

解压

tar -zxvf ipvsadm-1.26.tar.gz

查看系统内核版本

Uname –a

建立内核链接,下面的内核版本参照上面的命令输出

ln -s /usr/src/kernels/2.6.32-642.el6.x86_64  /usr/src/linux

1.2安装依赖包

yum install libnl* libpopt*
yum install    popt-static

1.3安装

安装
make && make install
查看是否安装成功
lsmod | grep ip_vs

2、IPVSADM命令

术语

  • virtual-service-address:是指虚拟服务器的ip地址
  • real-service-address:是指真实服务器的ip地址
  • scheduler:调度方法

ipvsadm的用法和格式如下:

ipvsadm -A|E -t|u|f virutal-service-address:port [-s scheduler] [-p [timeout]] [-M netmask]
ipvsadm -D -t|u|f virtual-service-address
ipvsadm -C
ipvsadm -R
ipvsadm -S [-n]
ipvsadm -a|e -t|u|f service-address:port -r real-server-address:port [-g|i|m] [-w weight]
ipvsadm -d -t|u|f service-address -r server-address
ipvsadm -L|l [options]
ipvsadm -Z [-t|u|f service-address]
ipvsadm --set tcp tcpfin udp
ipvsadm --start-daemon state [--mcast-interface interface]
ipvsadm --stop-daemon
ipvsadm -h

命令选项解释:
有两种命令选项格式,长的和短的,具有相同的意思。在实际使用时,两种都可以。
-A --add-service 在内核的虚拟服务器表中添加一条新的虚拟服务器记录。也就是增加一台新的虚拟服务器。
-E --edit-service 编辑内核虚拟服务器表中的一条虚拟服务器记录。
-D --delete-service 删除内核虚拟服务器表中的一条虚拟服务器记录。
-C --clear 清除内核虚拟服务器表中的所有记录。
-R --restore 恢复虚拟服务器规则
-S --save 保存虚拟服务器规则,输出为-R选项可读的格式
-a --add-server 在内核虚拟服务器表的一条记录里添加一条新的真实服务器记录。也就是在一个虚拟服务器中增加一台新的真实服务器
-e --edit-server 编辑一条虚拟服务器记录中的某条真实服务器记录
-d --delete-server 删除一条虚拟服务器记录中的某条真实服务器记录
-L|-l --list 显示内核虚拟服务器表
-Z --zero 虚拟服务表计数器清零(清空当前的连接数量等)
--set tcp tcpfin udp 设置连接超时值
--start-daemon 启动同步守护进程。他后面可以是master或backup,用来说明LVS Router是master或是backup。在这个功能上也可以采用keepalived的VRRP功能。
--stop-daemon 停止同步守护进程
-h --help 显示帮助信息
其他的选项:
-t --tcp-service service-address 说明虚拟服务器提供的是tcp的服务[vip:port] or [real-server-ip:port]
-u --udp-service service-address 说明虚拟服务器提供的是udp的服务[vip:port] or [real-server-ip:port]
-f --fwmark-service fwmark 说明是经过iptables标记过的服务类型。
-s --scheduler scheduler 使用的调度算法,有这样几个选项rr|wrr|lc|wlc|lblc|lblcr|dh|sh|sed|nq,
默认的调度算法是: wlc.
-p --persistent [timeout] 持久稳固的服务。这个选项的意思是来自同一个客户的多次请求,将被同一台真实的服务器处理。timeout的默认值为300秒。
-M --netmask netmask persistent granularity mask
-r --real-server server-address 真实的服务器[Real-Server:port]
-g --gatewaying 指定LVS的工作模式为直接路由模式(也是LVS默认的模式)
-i --ipip 指定LVS的工作模式为隧道模式
-m --masquerading 指定LVS的工作模式为NAT模式
-w --weight weight 真实服务器的权值
--mcast-interface interface 指定组%B

3、客户端脚本

配置启动脚本

cd /usr/local/bin
touch lvs_real

将以下内容写入文件

#!/bin/bash
#description : start realserver
VIP=61.135.20.16
/etc/rc.d/init.d/functions
case "$1" in
start)
echo " start LVS of REALServer"
/sbin/ifconfig lo:0 $VIP broadcast $VIP netmask 255.255.255.255 up
echo "1" >/proc/sys/net/ipv4/conf/lo/arp_ignore
echo "2" >/proc/sys/net/ipv4/conf/lo/arp_announce
echo "1" >/proc/sys/net/ipv4/conf/all/arp_ignore
echo "2" >/proc/sys/net/ipv4/conf/all/arp_announce
;;
stop)
/sbin/ifconfig lo:0 down
echo "close LVS Directorserver"
echo "0" >/proc/sys/net/ipv4/conf/lo/arp_ignore
echo "0" >/proc/sys/net/ipv4/conf/lo/arp_announce
echo "0" >/proc/sys/net/ipv4/conf/all/arp_ignore
echo "0" >/proc/sys/net/ipv4/conf/all/arp_announce
;;
*)
echo "Usage: $0 {start|stop}"
exit 1
esac

启动命令

lvs_real start

关闭命令

lvs_real stop

4、负载均衡技术

参考文档:http://www.linuxvirtualserver.org/zh/lvs3.html

方案要求性能
NAT运行任何支持TCP/IP的操作系统较弱,支持节点10左右
TUN大部分Linux操作系统支持100节点
DR负载调度器与实际服务器都有一块网卡连在同一物理网段上,服务器网络设备(或者设备别名)不作ARP响应,或者能将报文重定向(Redirect)到本地的Socket端口上支持100节点

4.1NAT模式

  •   原理

    地址转换类型,主要是做地址转换,类似于iptables的DNAT类型,它通过多目标地址转换,来实现负载均衡;

  •   特点和要求
    1. LVS(Director)上面需要双网卡:DIP(内网)和VIP(外网)
    2. 内网的Real Server主机的IP必须和DIP在同一个网络中,并且要求其网关都需要指向DIP的地址
    3. RIP都是私有IP地址,仅用于各个节点之间的通信
    4. Director位于client和Real Server之间,负载处理所有的进站、出站的通信
    5. 支持端口映射
    6. 通常应用在较大规模的应用场景中,但Director易成为整个架构的瓶颈!

4.2DR模式:

  •   原理

    直接路由模型,每个Real Server上都有两个IP:VIP和RIP,但是VIP是隐藏的,就是不能提高解析等功能,只是用来做请求回复的源IP的,Director上只需要一个网卡,然后利用别名来配置两个IP:VIP和DIP

    Director在接受到外部主机的请求的时候转发给Real Server的时候并不更改目标地址,只是通过arp解析的MAC地址进行封装然后转给Real Server,Real Server在接受到信息以后拆除MAC帧封装,然后直接回复给CIP。

  •   特点和要求
    1. 各个集群节点必须和Director在同一个物理网络中
    2. RIP地址不能为私有地址,可以实现便捷的远程管理和监控
    3. Director仅仅负责处理入站请求,响应报文则由Real Server直接发往客户端
    4. 集群节点Real Server 的网关一定不能指向DIP,而是指向外部路由
    5. Director不支持端口映射
    6. Director能够支持比NAT多很多的Real Server
        原理:
        

4.3TUN模式

  •   原理

    其实数据转发原理和DR是一样的,不过这个我个人认为主要是位于不同位置(不同机房);LB是通过隧道进行了信息传输,虽然增加了负载,可是因为地理位置不同的优势,还是可以参考的一种方案;

  •   优点

    负载均衡器只负责将请求包分发给物理服务器,而物理服务器将应答包直接发给用户。所以,负载均衡器能处理很巨大的请求量,这种方式,一台负载均衡能为超过100台的物理服务器服务,负载均衡器不再是系统的瓶颈。使用VS-TUN方式,如果你的负载均衡器拥有100M的全双工网卡的话,就能使得整个Virtual Server能达到1G的吞吐量。

  •   不足

    这种方式需要所有的服务器支持”IP Tunneling”(IP Encapsulation)协议。

5、负载调度算法

参考文档:http://www.linuxvirtualserver.org/zh/lvs4.html

调度算法配置说明
轮叫调度rr轮叫的方式依次将请求调度不同的服务器,当服务器的权值为零时,表示该服务器不可用而不被调度
加权轮叫调度wrr按权值的高低和轮叫方式分配请求到各服务器。权值高的服务器先收到的连接,权值高的服 务器比权值低的服务器处理更多的连接,相同权值的服务器处理相同数目的连接数。
最小连接调度lc把新的连接请求分配到当前连接数最小的服务器。
加权最小连接调度wlc加权最小连接调度在调度新连接时尽可能使服务器的已建立连接数和其权值成比例
源地址散列调度sh根据请求的目标IP地址找出该目标IP地址最近使用的服务器,若该服务器是可用的且没有超载,将请求发送到该服务器;若服务器不 存在,或者该服务器超载且有服务器处于其一半的工作负载,则用“最少链接”的原则选出一个可用的服务器,将请求发送到该服务器。
目标地址散列调度dh根据请求的目标IP地址,作为散列键(Hash Key)从静态分配的散列表找出对应的服务器,若该服务器是可用的且未超载,将请求发送到该服务器,否则返回空
基于局部性的最少链接lblc根据请求的源IP地址,作为散列键(Hash Key)从静态分配的散列表找出对应的服务器,若该服务器是可用的且未超载,将请求发送到该服务器,否则返回空。

6、LVS+Keepalived

6.1客户机

开启nginx服务器,并运行客户端脚本

6.1服务机

安装Keepalived和LVS
修改Keepalived配置文件

! Configuration File for keepalived
#全局定义块
global_defs {
    # 邮件通知配置
   notification_email {
     #acassen@firewall.loc
     #failover@firewall.loc
     #sysadmin@firewall.loc
   }
   #notification_email_from Alexandre.Cassen@firewall.loc
   #smtp_server 192.168.200.1
   #smtp_connect_timeout 30
   router_id LVS_DEVEL102 #用户标识本节点的名称,通常为hostname
   #vrrp_skip_check_adv_addr
   #vrrp_strict
   #vrrp_garp_interval 0
   #vrrp_gna_interval 0
}

vrrp_instance VI_1 {
    state MASTER #实例状态,只有MASTER 和 BACKUP两种状态,并且需要全部大写。抢占模式下,其中MASTER为工作状态,BACKUP为备用状态。当MASTER所在的服务器失效时,BACKUP所在的服务会自动把它的状态由BACKUP切换到MASTER状态。当失效的MASTER所在的服务恢复时,BACKUP从MASTER恢复到BACKUP状态。
    interface eth2     #对外提供服务的网卡接口,即VIP绑定的网卡接口。如:eth0,eth1。
    virtual_router_id 100 #虚拟路由的ID号,每个节点设置必须一样,可选择IP最后一段使用,相同的 VRID 为一个组,他将决定多播的 MAC 地址。
    priority 100   #节点优先级,取值范围0~254,MASTER要比BACKUP高,且MASTER-BACKUP<weight,否则即使MASTER Down,也不会发生切换
    advert_int 1   #MASTER与BACKUP节点间同步检查的时间间隔,单位为秒
    authentication {    
        auth_type PASS       #验证类型。类型主要有 PASS、AH 两种,通常使用PASS类型,据说AH使用时有问题。验证密码为明文,同一vrrp 实例MASTER与BACKUP使用相同的密码才能正常通信。
        auth_pass 1111       #验证密码。
    }

    virtual_ipaddress {
    #虚拟IP地址池,可以有多个IP,每个IP占一行,不需要指定子网掩码。注意:这个IP必须与我们的设定的vip保持一致。
        192.168.234.100 #192.168.234.100/24      brd 192.168.234.255 dev eth2 label eth2:2  
    #通过ip addr命令可以查看VIP绑定情况
    }
}

virtual_server 192.168.234.100 80 {   #定义一个虚拟服务器,这个ip是virtual_ipaddress中定义的其中一个,后面一个空格,然后加上虚拟服务的端口号。 
    delay_loop 3 #健康检查时间间隔,单位:秒 
    lb_algo lc   #负载均衡调度算法,rr|wrr|lc|wlc|sh|dh|lblc 
    lb_kind DR   #负载均衡转发规则。包括DR、NAT、TUN 3种,一般使用路由(DR)转发规则。 
    persistence_timeout 1 #http服务会话保持时间,单位:秒 
    protocol TCP  #转发协议,分为TCP和UDP两种

    real_server 192.168.234.101 80 {   #真实服务器IP和端口,可以定义多个 
        weight 100       #负载权重,值越大,转发的优先级越高      
    HTTP_GET {     #HTTP_GET(HTTP检查)或SSL_GET(HTTPS检查)
            url {  #HTTP/SSL 检查的url 可以是多个
               path /             
               #digest ff20ad2481f97b1754ef3e12ecd3a9cc # HTTP/SSL 检查后的摘要信息 用工具genhash生成
               status_code 200 # HTTP/SSL 检查返回的状态码
            }
            #url {
            #  path /mrtg/
            #  digest 9b3a0c85a887a256d6939da88aabd8cd
            #}
            connect_timeout 3 # 连接超时时间
            nb_get_retry 3 # 重连次数
            delay_before_retry 3 #重连间隔时间
        }
    }

    real_server 192.168.234.103 80 {   #真实服务器IP和端口,可以定义多个 
        weight 100       #负载权重,值越大,转发的优先级越高 
        HTTP_GET {      #HTTP_GET(HTTP检查)或SSL_GET(HTTPS检查)
            url {  #HTTP/SSL 检查的url 可以是多个
               path /             
               #digest ff20ad2481f97b1754ef3e12ecd3a9cc # HTTP/SSL 检查后的摘要信息 用工具genhash生成
               status_code 200 # HTTP/SSL 检查返回的状态码
            }
            #url {
            #  path /mrtg/
            #  digest 9b3a0c85a887a256d6939da88aabd8cd
            #}
            connect_timeout 3 # 连接超时时间
            nb_get_retry 3 # 重连次数
            delay_before_retry 3 #重连间隔时间
        }
    }
}
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值