zoukankan      html  css  js  c++  java
  • LVS+Keepalived -----> 效率最高的负载均衡器

    一、 简介 

    1. 负载均衡的类型 

    • 负载均衡可以采用硬件设备(例如常常听见的 F5),也可以采用软件负载
    • 商用硬件负载设备成本通常较高(一台几十万甚至上百万),所以一般 情况下会采用软件负载
    • 软件负载解决的两个核心问题是:选谁、转发,其中最著名的是 lvs 

    2. lvs 负载均衡机制 

    lvs 是四层负载均衡,也就是说建立在 OSI 模型的第四层——传输层之 上
    传输层上有 TCP/UDP,lvs 支持 TCP/UDP 的负载均衡
    因为 LVS 是四层负载均衡,因此它相对于其它高层负载均衡的解决办法, 比如 DNS 域名轮流解析、应用层负载的调度、客户端的调度等,它的效 率是非常高的
    lvs 的转发可以通过修改 IP 地址实现(NAT 模式)
    lvs 的转发还可以通过修改直接路由实现(DR 模式) 
    3、 lvs+keepAlived 的应用场景? 

    • 大型网站负载均衡

    Keepavlied双机热备

                                      HA(高可用)

    Keepalived起初是为LVS设计的,专门用来监控集群系统中各个服务节点的状态,它根据TCP/IP参考模型的第三、第四层、第五层交换机制检测每个服务节点的状态,如果某个服务器节点出现异常,或者工作出现故障,Keepalived将检测到,并将出现的故障的服务器节点从集群系统中剔除,这些工作全部是自动完成的,不需要人工干涉,需要人工完成的只是修复出现故障的服务节点

    ==================================================================================================

    一.lvs搭建

    1、环境

    名称                                         IP 
    LVS-DR-Master                192.168.200.111 
    LVS-DR-BACKUP            192.168.200.112
    LVS-DR-VIP                      192.168.200.254 
    WEB1                                192.168.200.113
    WEB2                                192.168.200.114

    二.  LVS-DR-Master/LVS-DR-BACKUP 安装 LVS和 Keepalvied软件包

    [root@localhost ~]# yum install ipvsadm kernel-devel openssl-devel keepalived -y
    注:一定要与当前的运行的内核一致,因为 /usr/src/kernels目录下可有多个内核。否则在编译 keepalived 时会出错,
    从而不能继续进行安装外,还会使keepalived 启动后功能失效
    三.  配置 LVS实现负载均衡 
    1. LVS-DR-Master 配置
    设置网卡IP地址

    [root@master ~]# cat /etc/sysconfig/network-scripts/ifcfg-ens33

    BOOTPROTO=none

    
    2、配置Keepalived

    [root@master ~]# cd /etc/keepalived/
    [root@masterkeepalived]# cp keepalived.conf keepalived.conf.bak

    keepalived配置文件详情

    ! Configuration File for keepalived
    global_defs {
       notification_email { 
       crushlinux@163.com  #设置报警邮件地址,可以设置多个,每行一个。注意,如果要开启邮件报警,需要开启本机的sendmail服务
       }
       notification_email_from root@example.com   #设置邮件的发送地址
       smtp_server 127.0.0.1      #设置smtp服务器地址
       smtp_connect_timeout 30      #设置连接 smtp 服务器超时时间 
       router_id LVS_MASTER       #运行 Keepalived服务器的一个标识。发邮件时显示在邮件标题中的信息
    }
    vrrp_instance VI_1 {    #vrrp实例定义部分    
        state MASTER     #指定 Keepalived 的角色,MASTER表示此主机是主用服务器,BACKUP表示是备用服务器。备份服务器上将 MASTER 改为 BACKUP。 
        interface eth0     #指定 HA监测网络的接口
        virtual_router_id 51   虚拟路由标识,这个标识是一个数字,并且同一个 vrrp 实例使用唯一的标识,即同一个 vrrp_instance下,MASTER 和 BACKUP必须是一致的。(0-255)
        priority 100     #定义优先级,数字越大,优先级越高,在一个 vrrp_instance下,MASTER的优先级必须大于 BACKUP 的优先级。备份服务上将 100 改为 50
        advert_int 1     #设定MASTER 与 BACKUP负载均衡器之间同步检查的时间间隔,单位是秒
        authentication {    #设定验证类型和密码 
            auth_type PASS    #设置验证类型,主要有 PASS和 AH 两种 
            auth_pass 1111    #设置验证密码,在一个 vrrp_instance下,MASTER 与 BACKUP必须使用相同的密码才能正常通信。
        }
        virtual_ipaddress {    #设置虚拟 IP地址,可以设置多个虚拟IP地址,每行一个 
            192.168.200.254 
        }
    }
    #虚拟服务器定义部分 
    virtual_server 192.168.200.254 80 {  #设置虚拟服务器,需要指定虚拟 ip 地址和服务端口,ip 与
    端口之间用空格隔开。 
        delay_loop 6      #设置健康检查时间,单位是秒
        lb_algo rr       #设置负载调度算法,这里设置为 rr,即轮询算法,rr|wrr|lc|wlc|lblc|sh|dh
        lb_kind DR       #设置 LVS实现负载均衡的机制,可以有 NAT、TUN 和 DR三个模式可选。  
        protocol TCP      #指定转发协议类型,有 tcp和 udp 两种
        real_server 192.168.200.113 80 { #配置服务节点 1,需要指定 real server 的真实IP地址和端口,ip 与端口之间用空格隔开。
            weight 1      #配置服务节点的权值,权值大小用数字表示,数字越大,权值越高,设置权值的大小可以为不同性能的服务器分配不同的负载,可以对性能高的服务器设置较高的
    权值,而对性能较低的服务器设置相对较低的权值,这样就合理的利用和分配了系统资源 
            TCP_CHECK {      #realserve 的状态检测设置部分,单位是秒
                connect_timeout 10   #10秒无响应超时
                nb_get_retry 3    #重试次数
                delay_before_retry 3  #重试间隔 
                connect_port 80    #测试连接的端口 
            }
        }
        real_server 192.168.200.114 80 {
            weight 1
            TCP_CHECK {
                connect_timeout 10
                nb_get_retry 3
                delay_before_retry 3
                connect_port 80
            }
        }
    }
    Master配置

    [root@master keepalived]# cat keepalived.conf

    ! Configuration File for keepalived
    global_defs {
    notification_email {
    crushlinux@163.com
    }
    notification_email_from root@example.com
    smtp_server 127.0.0.1
    smtp_connect_timeout 30
    router_id LVS_MASTER
    }
    vrrp_instance VI_1 {
    state MASTER
    interface ens33
    virtual_router_id 51
    priority 100
    advert_int 1
    authentication {
    auth_type PASS
    auth_pass 1111
    }
    virtual_ipaddress {
    192.168.200.254
    }
    }
    virtual_server 192.168.200.254 80 {
    delay_loop 6
    lb_algo wrr
    lb_kind DR
    protocol TCP
    real_server 192.168.200.113 80 {
    weight 1
    TCP_CHECK {
    connect_timeout 10
    nb_get_retry 3
    delay_before_retry 3
    connect_port 80
    }
    }
    real_server 192.168.200.114 80 {
    weight 1
    TCP_CHECK {
    connect_timeout 10
    nb_get_retry 3
    delay_before_retry 3
    connect_port 80
    }
    }
    }

    [root@localhost keepalived]# systemctl restart keepalived
    [root@localhost keepalived]# chkconfig keepalived on

    SALVE备配置

    1. LVS-DR-salve 配置

    设置网卡IP地址

    [root@salve  ~]# cat /etc/sysconfig/network-scripts/ifcfg-ens33

    BOOTPROTO=none

    2、配置Keepalived

    [root@salve  ~]# cd /etc/keepalived/
    [root@salve keepalived]# cp keepalived.conf keepalived.conf.bak
    [root@salve  keepalived]# vim keepalived.conf
    [root@salve  keepalived]# cat keepalived.conf

    ! Configuration File for keepalived
    global_defs {
    notification_email { 
    crushlinux@163.com
    }
    notification_email_from root@example.com
    smtp_server 127.0.0.1 
    smtp_connect_timeout 30 
    router_id LVS_BACKUP
    }
    vrrp_instance VI_1 {
    state BACKUP
    interface ens33
    virtual_router_id 51
    priority 50
    advert_int 1
    authentication { 
    auth_type PASS
    auth_pass 1111
    }
    virtual_ipaddress {
    192.168.200.254 
    }
    }
    virtual_server 192.168.200.254 80 { 
    delay_loop 6 
    lb_algo wrr 
    lb_kind DR 
    protocol TCP 
    real_server 192.168.200.113 80 {
    weight 1
    TCP_CHECK { 
    connect_timeout 10
    nb_get_retry 3
    delay_before_retry 3
    connect_port 80
    }
    }
    real_server 192.168.200.114 80 {
    weight 1
    TCP_CHECK {
    connect_timeout 10
    nb_get_retry 3
    delay_before_retry 3
    connect_port 80
    }
    }
    }

    [root@localhost keepalived]# systemctl restart keepalived
    [root@localhost keepalived]# chkconfig keepalived on

    四.  配置WEB1和WEB2操作一致

    [root@web1 ~]# cat realserver.sh

    #!/bin/bash 
    SNS_VIP=192.168.200.254 
    . /etc/rc.d/init.d/functions 
    case "$1" in 
    start) 
    ifconfig lo:0 $SNS_VIP netmask 255.255.255.255 broadcast $SNS_VIP 
    /sbin/route add -host $SNS_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 
    sysctl -p >/dev/null 2>&1 
    echo "RealServer Start OK" 
    ;; 
    stop) 
    ifconfig lo:0 down 
    route del $SNS_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

    [root@web1 ~]# chmod +x realserver.sh

    [root@web1 ~]# ./realserver.sh start
    RealServer Start OK
    [root@web1 ~]# yum install httpd -y

    [root@web1 ~]# systemctl restart httpd
    [root@web1 ~]# systemctl stop firewalld
    [root@web1 ~]# iptables -F
    [root@web1 ~]# setenforce 0

    五、配置两台WEB中的index.html测试页面用于区分

    [root@web1 ~]# cd /var/www/html/
    [root@web1 html]# echo '192.168.200.113' > index.html

    [root@web2 ~]# cd /var/www/html/
    [root@web2 html]# echo '192.168.200.114' > index.html

    六、测试LVS

    [root@master ~]# ip a | grep ens33
    2: ens33: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast state UP group default qlen 1000
    inet 192.168.200.111/24 brd 192.168.200.255 scope global noprefixroute ens33
    inet 192.168.200.254/32 scope global ens33

    [root@salve ~]# ip a | grep ens33
    2: ens33: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast state UP group default qlen 1000
    inet 192.168.200.112/24 brd 192.168.200.255 scope global noprefixroute ens33

    多刷新几次页面

    [root@master ~]# ipvsadm -Ln
    IP Virtual Server version 1.2.1 (size=4096)
    Prot LocalAddress:Port Scheduler Flags
    -> RemoteAddress:Port Forward Weight ActiveConn InActConn
    TCP 192.168.200.254:80 wrr
    -> 192.168.200.113:80             Route     1   1     2
    -> 192.168.200.114:80             Route     1   1     2

  • 相关阅读:
    Android获取实时连接热点的设备IP地址
    CentOS7打开关闭防火墙与端口
    Nginx的反向代理和负载均衡
    Linux系统(centos7)中Nginx安装、配置和开机自启
    navicat for oracle 创建表ID字段的自动递增
    Java初学者的学习路线建议
    分享一些JAVA常用的学习网站
    ThinkPHP框架
    PHP中的session
    PHP中的Cookie
  • 原文地址:https://www.cnblogs.com/CMX_Shmily/p/11628428.html
Copyright © 2011-2022 走看看