zoukankan      html  css  js  c++  java
  • Linux CentOs集群LVS+Keepalived负载均衡的实现

    准备工作

    环境:Win10下Centos6.4虚拟机。

    负载均衡:两台(一主一备)  LVS + Keepalived。

    HTTP服务器:3台。

    给每台服务器配置IP

    1、VIP(virtual ip):用来提供Virtual Server服务的ip地址。分别绑定在Director一个物理网卡上(对外接收请求包)和RS的回环设备上(回环设备需要绑定两个ip,一个是127.0.0.1,另一个就是vip)。

    粗俗的讲,负载均衡就是Linux虚拟服务器,也就是再加一个虚拟机,虚拟机有一个IP,也就称之为VIP;Linux虚拟机本身自己也有一个IP,也就是本地IP,这两个IP是同等地位。

    2、DIP(director ip):与vip绑定在一个物理网卡上,用来转发请求包到RS的RIP对应的mac上,此设备可以通过arp请求获取RIP对应的mac地址。

    3、RIP(real server ip):绑定在RS上的一个物理网卡上,用来接收从Directory转发过来的请求包。也就是真实服务器的IP。

     

    说一下我测试的每台服务器的IP:

    LVS负载均衡主(192.168.132.244)、LVS负载均衡备(192.168.132.245)

    HTTP1(192.168.132.251)、HTTP2(192.168.132.252)、HTTP3(192.168.132.242)

    先给每台HTTP服务器关闭防火墙试着访问,启动httpd服务,然后给出一个明显区分的标示。这里把每台服务器的index.html页面输出当前IP。如下图

    在每台台(HTTP服务器)真实服务器网上上添加LO:0接口,并设置虚拟IP在此接口上

    #cd /etc/init.d/
    #vim realserver
    SNS_VIP=192.168.132.200                      #定义VIP变量192.168.132.200     
    . /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接口

    OK,查看一下三台HTTP服务器是否都正常,那么继续进行下一步

    开始搭建负载均衡

    LVS中提供了八种不同的调度算法

    详情请参考:http://blog.csdn.net/u014649204/article/details/25115039

    1:轮叫调度(Round-Robin Scheduling)

    2: 加权轮叫调度(Weighted Round-Robin Scheduling)

    3:最小连接调度(Least-Connection Scheduling)

    4:加权最小连接调度(Weighted Least-Connection Scheduling)

    5:基于局部性的最少链接(Locality-Based Least Connections Scheduling)

    6:带复制的基于局部性最少链接(Locality-Based Least Connections with Replication Scheduling)

    7:目标地址散列调度(Destination Hashing Scheduling)

    8:源地址散列调度(Source Hashing Scheduling)

    9:最短预期延时调度(Shortest Expected Delay Scheduling)

    10:不排队调度(Never Queue Scheduling)

      对应: rr|wrr|lc|wlc|lblc|lblcr|dh|sh|sed|nq

    LVS负载均衡主机:

    先看一下CentOs内核,如果内核是2.6版本以后,那么LVS虚拟机已经存在于内核中。

    说一下什么是Keepalived?

    keepalived的作用是检测web服务器的状态,如果有一台web服务器死机或者工作出现故障,keepalived将会检测到,并将有故障的web服务器从系统中剔除,当web服务器工作正常之后,keepalived自动将web服务器加入到集群中,这些工作都会自动完成

    在这里使用Yum安装Keepalived

    yum -y install keepalived

    安装完成之后,使用rpm -ql 命令,查看一下Keepalived的安装信息

    rpm -ql keepalived

    根据提示信息里Keepalived的配置文件路径,覆盖配置文件,写入以下命令。详细说明在最后说明。

    global_defs {                       
    #   notification_email {             
    #       myemail@aliyun.com
    #   }
    #   notification_email_from myemail@aliyun.com
    #   smtp_server smtp.exmail.qq.com
    #   smtp_connect_timeout 30
        router_id LVS_DEVEL             
    }
    vrrp_instance VI_1 {            
        state MASTER             #
        interface eth1           #在负载均衡主机上查看一下ip,这里是eth1。这里要注意。     
        virtual_router_id 51        
        priority 100             #优先级        
        advert_int 1           
        authentication {        
            auth_type PASS
            auth_pass 1111
        }
        virtual_ipaddress {         
            192.168.132.200
        }
    }
    virtual_server 192.168.132.200 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.132.251 80 {       #第一台HTTP
            weight 3                             
            TCP_CHECK {                     
                connect_timeout 10   
                nb_get_retry 3
                delay_before_retry 3
                connect_port 80
            }
        }
        real_server 192.168.132.252 80 {        #第二台HTTP
            weight 3
            TCP_CHECK {
                connect_timeout 10
                nb_get_retry 3
                delay_before_retry 3
                connect_port 80
            }
        }
        real_server 192.168.132.242 80 {         #第三台HTTP
            weight 3
            TCP_CHECK {
                connect_timeout 10
                nb_get_retry 3
                delay_before_retry 3
                connect_port 80
            }
        }
    }

    然后启动Keepalived服务,有时候虽然提示启动成功,但是未必,因为Keepalive并没有对配置文件的校验功能,最好查看一下日志。

    service keepalived start    //启动服务
    tail -f /var/log/message     //查看日志

    启动成功之后,浏览器访问192.168.132.200观察变化。

    OK,分流成功。

    然后我们试着关掉一台HTTP服务器,观察访问发现,其他两台仍然可以正常访问,然后再启动一下刚才关闭的服务器,又恢复了之前。

    LVS负载均衡备机:

    global_defs {                       
    #   notification_email {             
    #       myemail@aliyun.com
    #   }
    #   notification_email_from myemail@aliyun.com
    #   smtp_server smtp.exmail.qq.com
    #   smtp_connect_timeout 30
        router_id LVS_DEVEL             
    }
    vrrp_instance VI_1 {            
        state BACKUP            #
        interface eth1          #在负载均衡主机上查看一下ip,这里是eth1。这里要注意。     
        virtual_router_id 51        
        priority 99             #优先级,低于主机   
        advert_int 1           
        authentication {        
            auth_type PASS
            auth_pass 1111
        }
        virtual_ipaddress {         
            192.168.132.200
        }
    }
    virtual_server 192.168.132.200 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.132.251 80 {       #第一台HTTP
            weight 3                             
            TCP_CHECK {                     
                connect_timeout 10   
                nb_get_retry 3
                delay_before_retry 3
                connect_port 80
            }
        }
        real_server 192.168.132.252 80 {        #第二台HTTP
            weight 3
            TCP_CHECK {
                connect_timeout 10
                nb_get_retry 3
                delay_before_retry 3
                connect_port 80
            }
        }
        real_server 192.168.132.242 80 {         #第三台HTTP
            weight 3
            TCP_CHECK {
                connect_timeout 10
                nb_get_retry 3
                delay_before_retry 3
                connect_port 80
            }
        }
    }

    配置完成之后,然后试着关掉主机,继续访问192.168.132.200,一切正常,主机开机之后,主机继续做大哥,备机继续待命。

    完毕!

  • 相关阅读:
    Promise.all和Promise.race区别,和使用场景
    使用Promise解决多层异步调用的简单学习【转】
    前端性能优化-缓存
    Node.js机制及原理理解初步【转】
    微信小程序 canvas 字体自动换行(支持换行符)
    百度地图-鼠标悬停样式
    文件I/O相关函数
    获取系统限制信息
    标准C头文件
    数据库系统小结:(不包括详细知识点,更像一个大纲)
  • 原文地址:https://www.cnblogs.com/wt645631686/p/6869072.html
Copyright © 2011-2022 走看看