• lvs+keepalived实战


    1.配置规划:

    Paste_Image.png
    2.安装配置
    主DS和备用DS需要安装lvs和keepalived;RealServer只需添加realserver.sh文件,其余需要配置tomcat或apache,注:对apache或tomcat测试页面进行不通标识,方便测试负载均衡。
    2.1 安装lvs

    yum install ipvsadm
    

    2.2 安装配置keepalived

    #安装相关包
    
    yum -y install gcc make openssl openssl-devel wget kernel-devel
    
    #下载keepalived包
    
    #解压:
    
    #安装keepalived-1.2.16.tar.gz
    
    ./configure --prefix=/usr/local/keepalived --with-kernel-dir=/usr/src/kernels/2.6.32-431.el6.x86_64/
    
    make
    
    make install
    
    #安装成功后做成服务模式
    
    cp /usr/local/keepalived/sbin/keepalived /usr/sbin/
    
    cp /usr/local/keepalived/etc/sysconfig/keepalived /etc/sysconfig/
    
    cp /usr/local/keepalived/etc/rc.d/init.d/keepalived /etc/init.d/
    
    chmod +x /etc/init.d/keepalived
    
    chkconfig keepalived on
    

    3 创建编辑配置文件

    mkdir -p /etc/keepalived/
    

    主DS:keepalived.conf配置文件:

    ! Configuration File for keepalived 
    
    global_defs { 
    
     notification_email { 
    
     acassen@firewall.loc #设置报警邮件地址,可以设置多个,每行1个, 
    
     failover@firewall.loc #需开启邮件报警及本机的Sendmail服务。 
    
     sysadmin@firewall.loc 
    
     } 
    
     notification_email_from Alexandre.Cassen@firewall.loc 
    
     smtp_server 192.168.200.1 #设置SMTP Server地址; 
    
     smtp_connect_timeout 30 
    
     router_id LVS_DEVEL 
    
    } 
    
     ########VRRP Instance######## 
    
    vrrp_instance VI_1 { 
    
     state MASTER #指定Keepalived的角色,MASTER为主机服务器,BACKUP为备用服务器 
    
     interface eth0 #BACKUP为备用服务器 
    
     virtual_router_id 51
    
     priority 100 #定义优先级,数字越大,优先级越高,主DR必须大于备用DR。 
    
     advert_int 1 
    
     authentication { 
    
     auth_type PASS #设置验证类型,主要有PASS和AH两种 
    
     auth_pass 1111 #设置验证密码 
    
     } 
    
     virtual_ipaddress { 
    
     192.168.2.155 #设置主DR的虚拟IP地址(virtual IP),可多设,但必须每行1个 
    
     } 
    
    } 
    
     ########Virtual Server######## 
    
    virtual_server 192.168.2.155 80 { #注意IP地址与端口号之间用空格隔开 
    
     delay_loop 6 #设置健康检查时间,单位是秒 
    
     lb_algo rr #设置负载调度算法,默认为rr,即轮询算法,最优秀是wlc算法 
    
     lb_kind DR #设置LVS实现LB机制,有NAT、TUNN和DR三个模式可选 
    
     nat_mask 255.255.255.0 
    
     persistence_timeout 50 #会话保持时间,单位为秒 
    
     protocol TCP #指定转发协议类型,有TCP和UDP两种 
    
     real_server 192.168.2.153 80 { 
    
     weight 1 #配置节点权值,数字越大权值越高 
    
     TCP_CHECK { 
    
     connect_timeout 3 #表示3秒无响应,则超时 
    
     nb_get_retry 3 #表示重试次数 
    
     delay_before_retry 3 #表示重试间隔 
    
     } 
    
     } 
    
     real_server 192.168.2.154 80 { #配置服务器节点,即Real Server2的public IP 
    
     weight 3 #配置节点权值,数字越大权值越高 
    
     TCP_CHECK { 
    
     connect_timeout 3 #表示3秒无响应,则超时 
    
     nb_get_retry 3 #表示重试次数 
    
     delay_before_retry 3 #表示重试间隔 
    
     } 
    
     } 
    
    }
    
     ########Virtual Server-tomcat########
    
    virtual_server 192.168.2.155 8080 { #注意IP地址与端口号之间用空格隔开
    
     delay_loop 6 #设置健康检查时间,单位是秒
    
     lb_algo rr #设置负载调度算法,默认为rr,即轮询算法,最优秀是wlc算法
    
     lb_kind DR #设置LVS实现LB机制,有NAT、TUNN和DR三个模式可选
    
     nat_mask 255.255.255.0
    
     persistence_timeout 50 #会话保持时间,单位为秒
    
     protocol TCP #指定转发协议类型,有TCP和UDP两种
    
     real_server 192.168.2.153 8080 {
    
     weight 1 #配置节点权值,数字越大权值越高
    
     TCP_CHECK {
    
     connect_timeout 3 #表示3秒无响应,则超时
    
     nb_get_retry 3 #表示重试次数
    
     delay_before_retry 3 #表示重试间隔
    
     }
    
     }
    
     real_server 192.168.2.154 8080 { #配置服务器节点,即Real Server2的public IP
    
     weight 3 #配置节点权值,数字越大权值越高
    
     TCP_CHECK {
    
     connect_timeout 3 #表示3秒无响应,则超时
    
     nb_get_retry 3 #表示重试次数
    
     delay_before_retry 3 #表示重试间隔
    
     }
    
     }
    
    }
    

    备用DS keepalived.conf

    ! Configuration File for keepalived 
    
    global_defs { 
    
     notification_email { 
    
     acassen@firewall.loc #设置报警邮件地址,可以设置多个,每行1个, 
    
     failover@firewall.loc #需开启邮件报警及本机的Sendmail服务。 
    
     sysadmin@firewall.loc 
    
     } 
    
     notification_email_from Alexandre.Cassen@firewall.loc 
    
     smtp_server 192.168.200.1 #设置SMTP Server地址; 
    
     smtp_connect_timeout 30 
    
     router_id LVS_DEVEL 
    
    } 
    
     ########VRRP Instance######## 
    
    vrrp_instance VI_1 { 
    
     state BACKUP #指定Keepalived的角色,MASTER为主机服务器,BACKUP为备用服务器 
    
     interface eth0 #BACKUP为备用服务器 
    
     virtual_router_id 51
    
     priority 90 #定义优先级,数字越大,优先级越高,主DR必须大于备用DR。 
    
     advert_int 1 
    
     authentication { 
    
     auth_type PASS #设置验证类型,主要有PASS和AH两种 
    
     auth_pass 1111 #设置验证密码 
    
     } 
    
     virtual_ipaddress { 
    
     192.168.2.155 #设置主DR的虚拟IP地址(virtual IP),可多设,但必须每行1个 
    
     } 
    
    } 
    
     ########Virtual Server######## 
    
    virtual_server 192.168.2.155 80 { #注意IP地址与端口号之间用空格隔开 
    
     delay_loop 6 #设置健康检查时间,单位是秒 
    
     lb_algo rr #设置负载调度算法,默认为rr,即轮询算法,最优秀是wlc算法 
    
     lb_kind DR #设置LVS实现LB机制,有NAT、TUNN和DR三个模式可选 
    
     nat_mask 255.255.255.0 
    
     persistence_timeout 50 #会话保持时间,单位为秒 
    
     protocol TCP #指定转发协议类型,有TCP和UDP两种 
    
     real_server 192.168.2.153 80 { 
    
     weight 1 #配置节点权值,数字越大权值越高 
    
     TCP_CHECK { 
    
     connect_timeout 3 #表示3秒无响应,则超时 
    
     nb_get_retry 3 #表示重试次数 
    
     delay_before_retry 3 #表示重试间隔 
    
     } 
    
     } 
    
     real_server 192.168.2.154 80 { #配置服务器节点,即Real Server2的public IP 
    
     weight 3 #配置节点权值,数字越大权值越高 
    
     TCP_CHECK { 
    
     connect_timeout 3 #表示3秒无响应,则超时 
    
     nb_get_retry 3 #表示重试次数 
    
     delay_before_retry 3 #表示重试间隔 
    
     } 
    
     } 
    
    }
    
     ########Virtual Server-tomcat########
    
    virtual_server 192.168.2.155 8080 { #注意IP地址与端口号之间用空格隔开
    
     delay_loop 6 #设置健康检查时间,单位是秒
    
     lb_algo rr #设置负载调度算法,默认为rr,即轮询算法,最优秀是wlc算法
    
     lb_kind DR #设置LVS实现LB机制,有NAT、TUNN和DR三个模式可选
    
     nat_mask 255.255.255.0
    
     persistence_timeout 50 #会话保持时间,单位为秒
    
     protocol TCP #指定转发协议类型,有TCP和UDP两种
    
     real_server 192.168.2.153 8080 {
    
     weight 1 #配置节点权值,数字越大权值越高
    
     TCP_CHECK {
    
     connect_timeout 3 #表示3秒无响应,则超时
    
     nb_get_retry 3 #表示重试次数
    
     delay_before_retry 3 #表示重试间隔
    
     }
    
     }
    
     real_server 192.168.2.154 8080 { #配置服务器节点,即Real Server2的public IP
    
     weight 3 #配置节点权值,数字越大权值越高
    
     TCP_CHECK {
    
     connect_timeout 3 #表示3秒无响应,则超时
    
     nb_get_retry 3 #表示重试次数
    
     delay_before_retry 3 #表示重试间隔
    
     }
    
     }
    
    }
    

    realserver1:realserver.sh

    [root@localhost ~]# cat /etc/init.d/realserver.sh
    
    #!/bin/bash VIP=192.168.2.155 source /etc/rc.d/init.d/functions case "$1" in start) ifconfig lo:0 $VIP netmask 255.255.255.255 broadcast $VIP /sbin/route add -host $VIP dev lo:0 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 echo "RealServer Start OK" ;; stop) ifconfig lo:0 down route del $VIP >/dev/null 2>&1 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 "RealServer Stoped" ;; *) echo "Usage: $0 {start|stop}" exit 1 esac exit 0
    

    realserver2:realserver.sh

    [root@localhost ~]# cat /etc/init.d/realserver.sh
    
    #add for chkconfig #chkconfig: 2345 70 30 #234都是文本界面,5就是图形界面X,70启动顺序号,30系统关闭,脚本 #止顺序号 #description: RealServer's script #关于脚本的简短描述 #processname: realserver.sh #第一个进程名,后边设置自动时会用到 #!/bin/bash VIP=192.168.2.155 source /etc/rc.d/init.d/functions case "$1" in start) ifconfig lo:0 $VIP netmask 255.255.255.255 broadcast $VIP /sbin/route add -host $VIP dev lo:0 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 echo "RealServer Start OK" ;; stop) ifconfig lo:0 down route del $VIP >/dev/null 2>&1 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 "RealServer Stoped" ;; *) echo "Usage: $0 {start|stop}" exit 1 esac exit 0
    

    配置realserver权限:

    chmod a+x /etc/init.d/realserver.sh
    

    启动realserver

    [root@localhost ~]# /etc/init.d/realserver.sh start
    

    realserver添加成服务:

    echo "/etc/init.d/realserver.sh" >> /etc/rc.d/rc.local
    

    使用ipvsadm

    [root@node02 ~]# ipvsadm -LnIP Virtual Server version 1.2.1 (size=4096)Prot LocalAddress:Port Scheduler Flags -> RemoteAddress:Port Forward Weight ActiveConn InActConnTCP 192.168.2.155:80 rr persistent 50 -> 192.168.2.153:80 Route 1 0 0 -> 192.168.2.154:80 Route 3 0 0 TCP 192.168.2.155:8080 rr persistent 50 -> 192.168.2.153:8080 Route 1 0 0 -> 192.168.2.154:8080 Route 3 0 0 
    

    4.切换测试
    1.关闭主DS上的keepalived或关机,则VIP:192.168.2.155飘至备用DS
    2.负载均衡测试,由于采用rr模式,所以使用不同的机器访问可以得到不同的页面, 注:在realserver中apache和tomcat的页面上做出标识,方便查找
    3.使用ab进行压力测试时发现所有的请求都在一台服务器上进行处理监测方法:
    ipvsadm -Lcn
    ab -c 100 -n 100000 http://192.168.2.155/1.html;
    由于lvs使用rr的机制,按理说应该分配到不通的机器上,但考虑到其轮询可能是基于源IP的轮询,一台服务器不通客户端算同一个IP。后使用两台机器同时做压力测试发现两台后端realserver均有压力,不知道这种理解是否正确。如有理解错误请指出。

  • 相关阅读:
    Why does the memory usage increase when I redeploy a web application?
    lsof
    Advising controllers with the @ControllerAdvice annotation
    springMVC(一): 整体请求过程概述
    正则表达式30分钟入门教程
    Python基本语法_强制数据类型转换
    Python 正则表达式入门(初级篇)
    python实现简单爬虫功能
    在python3.3后urllib2已经不能再用,只能用urllib.request来代替
    JSON
  • 原文地址:https://www.cnblogs.com/sdhzdtwhm/p/9644622.html
Copyright © 2020-2023  润新知