zoukankan      html  css  js  c++  java
  • 160526、高并发之LVS搭建负载均衡

    LVS介绍:

            LVS的英文全称是Linux Virtual Server,即Linux虚拟服务器。它是我们国家的章文嵩博士的一个开源项目。在linux内核2.6中,它已经成为内核的一部分,在此之前的内核版本则需要重新编译内核。

    优势:

    1、抗负载能力强,因为lvs工作方式的逻辑是非常之简单,而且工作在网络4层仅做请求分发之用,没有流量,所以在效率上基本不需要太过考虑。在我手里的 lvs,仅仅出过一次问题:在并发最高的一小段时间内均衡器出现丢包现象,据分析为网络问题,即网卡或linux2.4内核的承载能力已到上限,内存和 cpu方面基本无消耗。

    2、配置性低,这通常是一大劣势,但同时也是一大优势,因为没有太多可配置的选项,所以除了增减服务器,并不需要经常去触碰它,大大减少了人为出错的几率。

    3、工作稳定,因为其本身抗负载能力很强,所以稳定性高也是顺理成章,另外各种lvs都有完整的双机热备方案,所以一点不用担心均衡器本身会出什么问题,节点出现故障的话,lvs会自动判别,所以系统整体是非常稳定的。

    4、无流量,上面已经有所提及了。lvs仅仅分发请求,而流量并不从它本身出去,所以可以利用它这点来做一些线路分流之用。没有流量同时也保住了均衡器的IO性能不会受到大流量的影响。

    5、基本上能支持所有应用,因为lvs工作在4层,所以它可以对几乎所有应用做负载均衡,包括http、数据库、聊天室等等。

    开始搭建:

    调度器的实现技术中,IP负载均衡技术是效率最高的,IP虚拟服务器软件(IPVS)是在linux内核中实现的。本文采用这种方式搭建。

    第一步:安装三台centos

    第二步:在二台真实服务器上添加LO:0接口,并设置虚拟IP

    cd /etc/init.d(这样做的目的是为了可以通过service命令启用)

    touch realserver (realserver这个名字可以随便取,是为了service命令那里用)

    vim realserver  (添加以下内容)

    SNS_VIP=192.168.200.201      #定义VIP变量

    . /etc/rc.d/init.d/functions#导脚本库

    case "$1" in#case语句 $1传递给该shell脚本的第一个参数

    start)

    ifconfig lo:0 $SNS_VIP netmask 255.255.255.255 broadcast $SNS_VIP #设置Lo:0 VIP  netmask  及广播

    /sbin/route add -host $SNS_VIP dev lo:0  ##route del 增加本地路由

    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

    sysctl -p >/dev/null 2>&1# -p <file>   (default /etc/sysctl.conf) 将标准信息输入设备空文件

    echo "RealServer Start OK"

    ;;

    stop)

    ifconfig lo:0 down

    route del $SNS_VIP >/dev/null 2>&1     #route del 删除本地路由

    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}"  #$0 是脚本本身的名字

    exit 1#表示进程正常退出

    esac#case结束

    exit 0#表示进程非正常退出

    chmod 750 realserver

    chkconfig realserver on

    service realserver start       #RealServer Start OK   #表示启动成功!

    ifconfig   #查看一下是否真的成功添加了lo:0接口

    第二步:开启二台真实服务器上自带的Apache公司的Http服务器

    service httpd start              #开启Http服务器

    cd /var/www/html/             #进入Http服务器默认的目录

    #touch index.html               #创建Http服务器默认访问页面

    #vim index.html                #编辑Http服务器默认访问页面

    I am http IP : 真实服务器自己的IP(例如:192.168.200.201)

    用浏览器访问一下:http://192.168.200.201      默认端口80

    查看结果是否是自己编辑的:   I am http IP : 真实服务器自己的IP(例如:192.168.200.201)

    二台真实服务器一样

    第三步:开始搭建负载均衡

    1:安装 ipvsadm  keepalived

    命令:yum –y install ipvsadm keepalived

    2:配置 keepalived

    命令:vim /etc/keepalived/keepalived.conf

    global_defs {                        ##全局配置部分

    #   notification_email {             ##下面几行均为全局通知配置,可以实现出现问题后报警,但功能有限,因此注释掉,并采用Nagios监视lvs运行情况

    #       admin@toxingwang.com

    #   }

    #   notification_email_from master@toxingwang.com

    #   smtp_server smtp.exmail.qq.com

    #   smtp_connect_timeout 30

    router_id LVS_DEVEL             ##设置lvs的id,在一个网络内应该是唯一的

    }

    vrrp_instance VI_1 {            ##设置vrrp组,唯一且同一LVS服务器组要相同

    state MASTER             ##备份LVS服务器设置为BACKUP

    interface eth0             # #设置对外服务的接口

    virtual_router_id 51        ##设置虚拟路由标识

    priority 100                   #设置优先级,数值越大,优先级越高,backup设置为99,这样就能实现当master宕机后自动将backup变为master,而当原master恢复正常时,则现在的master再次变为backup。

    advert_int 1            ##设置同步时间间隔

    authentication {         ##设置验证类型和密码,master和buckup一定要设置一样

    auth_type PASS

    auth_pass 1111

    }

    virtual_ipaddress {          ##设置VIP,可以多个,每个占一行

    192.168.200.201

    }

    }

    virtual_server 192.168.200.201 80 {

    delay_loop 6            ##健康检查时间间隔,单位s

    lb_algo wrr             ##负载均衡调度算法设置为加权轮叫

    lb_kind DR                              ##负载均衡转发规则

    nat_mask 255.255.255.0   ##网络掩码,DR模式要保障真实服务器和lvs在同一网段

    persistence_timeout 50    ##会话保持时间,单位s

    protocol TCP                           ##协议

    real_server 192.168.200.139 80 {      ##真实服务器配置,80表示端口

    weight 3                             ##权重

    TCP_CHECK {                       ##服务器检测方式设置 keepalived的健康检查方式 有:HTTP_GET|SSL_GET|TCP_CHECK|SMTP_CHECK|MISC_CHECK

    connect_timeout 0    ##连接超时时间

    nb_get_retry 3     ##失败重试次数

    delay_before_retry 3 ##失败重试的间隔时间

    connect_port 80      ##连接的后端端口

    }

    }

    real_server 192.200.140. 80 {

    weight 3

    TCP_CHECK {

    connect_timeout 10

    nb_get_retry 3

    delay_before_retry 3

    connect_port 80

    }

    }

    }

    启动keepalived服务:service keepalived start

    注:由于keepalived配置文件有语法错误也能启动,因此看到启动了lvs服务,不代表配置文件没有错误,如果遇到lvs不能正常转发,及时跟踪日志进行处理。

    LVS备机搭建(其他操作同上,注意下面红色部分的修改)

    global_defs {                       

    #   notification_email {             

    #       admin@toxingwang.com

    #   }

    #   notification_email_from master@toxingwang.com

    #   smtp_server smtp.exmail.qq.com

    #   smtp_connect_timeout 30

    router_id LVS_DEVEL             

    }

    vrrp_instance VI_1 {            

    state BACKUP             

    interface eth0            

    virtual_router_id 51        

    priority 99       #主机是100,备机的这个值要比主机小,这里设成99    

    advert_int 1           

    authentication {        

    auth_type PASS

    auth_pass 1111

    }

    virtual_ipaddress {         

    192.168.200.201

    }

    }

    virtual_server 192.168.200.201 80 {

    delay_loop 6           

    lb_algo wrr            

    lb_kind DR                          

    nat_mask 255.255.255.0   

    persistence_timeout 0    

    protocol TCP                          

    real_server 192.168.200.139 80 {     

    weight 3                             

    TCP_CHECK {                     

    connect_timeout 10   

    nb_get_retry 3

    delay_before_retry 3

    connect_port 80

    }

    }

    real_server 192.168.200.140 80 {

    weight 3

    TCP_CHECK {

    connect_timeout 10

    nb_get_retry 3

    delay_before_retry 3

    connect_port 80

    }

    }

    }

     

    通过以上搭建,lvs的主机和备机就可以用了,当主机不可用了,备机就会自动转到主机的位置,当主机可用了,备机就会自动退出。可以参考视频http://pan.baidu.com/s/1o7G8Q4i和http://pan.baidu.com/s/1bpC1K4n,如果链接失效可以联系我。

    声明:本文参考了传智播客上课文档,根据本人实验后改写。

  • 相关阅读:
    AJAX 基础知识
    jQuery知识点总结
    css基础应用总结
    javascript 总结
    找回密码-博客园
    centerOS 7 安装MySql
    java leetcode TreeNode类、ListNode类的实现
    iOS StatusBar状态栏文字颜色更改
    使用Jmeter压力测试工具测试
    安装node.js
  • 原文地址:https://www.cnblogs.com/zrbfree/p/5533016.html
Copyright © 2011-2022 走看看