【Nginx-Series】三、lvs+keepalived+Nginx搭建高可用nginx集群

1 篇文章 0 订阅
0 篇文章 0 订阅

目录

 

lvs+keepalived+Nginx搭建高可用nginx集群

LVS介绍

keepalived介绍

nginx介绍

安装Keepalived

安装ipvsadm

配置RS(两台Nginx服务器)

配置keepalived

配置 MASTER

配置BACKUP

lvs+keepalived+Nginx搭建高可用nginx集群

今天我同事着急的叫我,

我很礼貌的回应他说:发生肾么事了。

他说:你说单节点的nginx挂掉了,虽然咱们也有搭建后台服务集群,那么这样依然会崩溃呀。

我不假思索的回复他,啪,很快啊。说:小伙子,你不讲码德,我这不就是要给你讲,你怎么还抢问呢?

他说他是胡乱问的,诶,他可不是胡乱问的,他是有bear而来!!!

前言:当前行业内的前后端分离项目越来越火爆,而且为了让系统能够经受住压力,往往都会做集群部署,尽可能达到高可用,从而也可以使系统更为稳定的为用户服务,

前面我的文章讲到了单节点nginx搭建的负载均衡。可是会遇到一个问题,如果当前nginx节点的服务器挂掉依然会引起整个系统的崩溃,所以,本节就会讲到如何搭建nginx

的集群,并实现负载均衡,会用到两个技术lvs+keepalived。

LVS介绍

LVSLinux Virtual Server的简写,意即Linux虚拟服务器,是一个虚拟的服务器集群系统。本项目在1998年5月由章文嵩博士成立,是中国国内最早出现的自由软件项目之一。

宗旨:

    使用集群技术和Linux操作系统实现一个高性能、高可用的服务器.

    很好的可伸缩性(Scalability)

    很好的可靠性(Reliability)

    很好的可管理性(Manageability)。 

负载均衡模式:

    VS/NAT、VS/TUN和VS/DR技术是LVS集群中实现的三种IP负载均衡技术

    NAT:基于网络地址的转换,通过lvs接收并响应请求。

    TUN:IP隧道模式,该模式的硬性要求就是所有后面的server节点的服务器都要配置网卡用于建立隧道,工作模式是,所有请求会经过lvs,当server节点处理好响应之后会每个单独响应给用户,这样的话server集群的各个节点也会暴露在公网。

    DR:直接路由模式,该工作模式是,所有请求会经过lvs,然后分发给server集群的各个节点,此时server的各个节点返回响应的话会经过一个路由,通过路由中转以后返回给用户。

keepalived介绍

keepalived是一个类似于layer3, 4 & 5交换机制的软件,也就是我们平时说的第3层、第4层和第5层交换。Keepalived的作用是检测服务器的状态,如果有一台web服务器宕机,或工作出现故障,Keepalived将检测到,并将有故障的服务器从系统中剔除,同时使用其他服务器代替该服务器的工作,当服务器工作正常后Keepalived自动将服务器加入到服务器群中,这些工作全部自动完成,不需要人工干涉,需要人工做的只是修复故障的服务器。

作用:主要用作RealServer的健康状态检查以及LoadBalance主机和BackUP主机之间failover的实现。

                  高可用web架构: LVS+keepalived+nginx+apache+php+eaccelerator(+nfs可选 可不选)。

nginx介绍

Linux下安装部署NGINXNginx配置文件nginx.conf详解以及负载均衡讲解


 

Linux虚拟机( 虚拟ip:192.168.1.100)
ip作用
192.168.1.110lvs+keepalived(Master)
192.168.1.111lvs+keepalived(BackUP)
192.168.1.112nginx112
192.168.1.113nginx113

 

安装Keepalived

  • 下载:keepalived-2.0.20.tar.gz
  • 上传至110和111服务器/home/software/
  • 解压编译、安装 
  • tar -zxvf keepalived-2.0.18.tar.gz
    
    ./configure --prefix=/usr/locah/keepalived  --sysconf=/etc (注意:一定要指定 --sysconf在/etc下)
    
    make && make install 
    
    ##常见错误1
    !!! OpenSSL is not properly installed on your system. !!!
    !!! Can not include OpenSSL headers files. !!!
    解决方法:
    yum -y install openssl-devel
    ##常见错误2
    this build will not support IPVS with IPv6. Please install libnl/libnl-3 dev libraries to support IPv6 with IPVS.(此版本不支持使用IPv6的IPVS。 请安装libnl / libnl-3 dev库以支持带IPVS的IPv6。)
    解决方法:
    yum -y install libnl libnl-devel
    ##常见问题3
    configure: error: libnfnetlink headers missing
    解决方法:
    yum install -y libnfnetlink-devel

 

  • 将keepalived注册为系统服

 

  • cd /home/software/keepalived-2.0.20/keepalived/etc/
    
    cp init.d/keepalived /etc/init.d/
    
    cp sysconfig/keepalived  /etc/sysconfig/
    
    systemctl daemon-reload
  • 启动、关闭、重启
  •  systemctl start keepalived.service
    
     systemctl stop keepalived.service
    
     systemctl restart keepalived.service

安装ipvsadm

  • 只在110和111上进行安装,用于查看lvs转发及代理情况的工具
  • yum install ipvsadm -y

配置RS(两台Nginx服务器)

     该步骤两台都要执行

  • 关闭防火墙
  • systemctl stop firewalld.service
    systemctl disable firewalld.service
    systemctl mask firewalld.service
    
  • 编辑realserver脚本文件
  • cd /etc/init.d/
  • vim realserver.sh
  • #!/bin/bash
        SNS_VIP=192.168.1.100
        /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
  • 设置脚本权限
  • chmod u+x /etc/init.d/realserver.sh
    // 因为realserver脚本中用到了/etc/rc.d/init.d/functions,所以一并设置权限
    chmod u+x /etc/rc.d/init.d/functions
  • 启动

  • /etc/rc.d/init.d/realserver.sh start 

 

  • 查看执行结果 : ip addr

配置keepalived

配置 MASTER

  • 进入192.168.1.110服务器
  • cd /etc/keepalived/
    vim keepalived.conf
  • global_defs {
       router_id lvs_110            #router_id 机器标识
    }
    vrrp_instance VI_1 {          
        state MASTER              #设置lvs的状态,MASTER和BACKUP两种,必须大写 
        interface ens33           #设置对外服务的接口
        virtual_router_id 110     #设置虚拟路由标示,这个标示是一个数字,同一个vrrp实例使用唯一标示 
        priority 100              #定义优先级,数字越大优先级越高,在一个vrrp——instance下,master的优先级必须大于backup
        advert_int 1              #设定master与backup负载均衡器之间同步检查的时间间隔,单位是秒
        authentication {          #设置验证类型和密码
            auth_type PASS        #主要有PASS和AH两种
            auth_pass 1111        #验证密码,同一个vrrp_instance下MASTER和BACKUP密码必须相同
        }
        virtual_ipaddress {       #设置虚拟ip地址,可以设置多个,每行一个
            192.168.1.100
        }
    }
    #设置虚拟服务器,需要指定虚拟ip和服务端口,并和nginx80保持一致
    virtual_server 192.168.1.100 80 {
        #健康检查时间间隔,单位秒   
        delay_loop 6  
        #负载均衡调度算法                    
        lb_algo rr
        #负载均衡转发规则                       
        lb_kind DR  
        #设置会话保持时间,对动态网页非常有用                      
        persistence_timeout 50 
        #指定转发协议类型,有TCP和UDP两种 -t           
        protocol TCP      
        #配置服务器节点1,需要指定real server的真实IP地址和端口                
        real_server 192.168.1.112 80 {  
            #设置权重,数字越大权重越高
            weight 1                          
            TCP_CHECK { 
               #连接超时为10秒                       
               connect_timeout 10   
               #重连次数          
               retry 3       
               #重试间隔                
               delay_before_retry 3
               #连接端口为80,要和上面的保持一致           
               connect_port 80                
             }
         }
         real_server 192.168.1.113 80 { 
             weight 1                         
             TCP_CHECK {                      
               connect_timeout 10            
               retry 3                     
               delay_before_retry 3         
               connect_port 80               
             }
         }
    }
  • 启动keepalived :  systemctl start keepalived.service

配置BACKUP

  • 进入192.168.1.111服务器
  • cd /etc/keepalived/
    vim keepalived.conf
  • global_defs {
       router_id lvs_111           #router_id 机器标识
    }
    vrrp_instance VI_1 {          
        state BACKUP              #设置lvs的状态,MASTER和BACKUP两种,必须大写 
        interface ens33           #设置对外服务的接口
        virtual_router_id 110     #设置虚拟路由标示,这个标示是一个数字,同一个vrrp实例使用唯一标示 
        priority 80               #定义优先级,数字越大优先级越高,在一个vrrp——instance下,master的优先级必须大于backup
        advert_int 1              #设定master与backup负载均衡器之间同步检查的时间间隔,单位是秒
        authentication {          #设置验证类型和密码
            auth_type PASS        #主要有PASS和AH两种
            auth_pass 1111        #验证密码,同一个vrrp_instance下MASTER和BACKUP密码必须相同
        }
        virtual_ipaddress {       #设置虚拟ip地址,可以设置多个,每行一个
            192.168.1.100
        }
    }
    #设置虚拟服务器,需要指定虚拟ip和服务端口,并和nginx80保持一致
    virtual_server 192.168.1.100 80 {
        #健康检查时间间隔,单位秒   
        delay_loop 6  
        #负载均衡调度算法                    
        lb_algo rr
        #负载均衡转发规则                       
        lb_kind DR  
        #设置会话保持时间,对动态网页非常有用                      
        persistence_timeout 50 
        #指定转发协议类型,有TCP和UDP两种 -t           
        protocol TCP      
        #配置服务器节点1,需要指定real server的真实IP地址和端口                
        real_server 192.168.1.112 80 {  
            #设置权重,数字越大权重越高
            weight 1                          
            TCP_CHECK { 
               #连接超时为10秒                       
               connect_timeout 10   
               #重连次数          
               retry 3       
               #重试间隔                
               delay_before_retry 3
               #连接端口为80,要和上面的保持一致           
               connect_port 80                
             }
         }
         real_server 192.168.1.113 80 { 
             weight 1                         
             TCP_CHECK {                      
               connect_timeout 10            
               retry 3                     
               delay_before_retry 3         
               connect_port 80               
             }
         }
    }
  • 启动keepalived : systemctl start keepalived.service

由于本人电脑容量有限,搞不了演示,实际在公司内网已经测试完成,放心使用。

完成!打工搞成,搞IP的不要窝里斗,谢谢大家!!

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 2
    评论
简介 Keepalived的作用是检测服务器的状态,如果有一台web服务器宕机,或工作出现故障,Keepalived将检测到,并将有故障的服务器从系统中剔除,同时使用其他服务器代替该服务器的工作,当服务器工作正常后Keepalived自动将服务器加入到服务器群中,这些工作全部自动完成,不需要人工干涉,需要人工做的只是修复故障的服务器。 工作原理 Layer3,4,5工作在IP/TCP协议栈的IP层,TCP层,及应用层,原理分别如下: Layer3:Keepalived使用Layer3的方式工作式时,Keepalived会定期向服务器群中的服务器发送一个ICMP的数据包(既我们平时用的Ping程序),如果发现某台服务的IP地址没有激活,Keepalived便报告这台服务器失效,并将它从服务器群中剔除,这种情况的典型例子是某台服务器被非法关机。Layer3的方式是以服务器的IP地址是否有效作为服务器工作正常与否的标准。 Layer4:如果您理解了Layer3的方式,Layer4就容易了。Layer4主要以TCP端口的状态来决定服务器工作正常与否。如web server的服务端口一般是80,如果Keepalived检测到80端口没有启动,则Keepalived将把这台服务器从服务器群中剔除。 Layer5:Layer5对指定的URL执行HTTP GET。然后使用MD5算法对HTTP GET结果进行求和。如果这个总数与预期值不符,那么测试是错误的,服务器将从服务器池中移除。该模块对同一服务实施多URL获取检查。如果您使用承载多个应用程序服务器的服务器,则此功能很有用。此功能使您能够检查应用程序服务器是否正常工作。MD5摘要是使用genhash实用程序(包含在keepalived软件包中)生成的。 SSL_GET与HTTP_GET相同,但使用SSL连接到远程Web服务器。 MISC_CHECK:此检查允许用户定义的脚本作为运行状况检查程序运行。结果必须是0或1.该脚本在导演盒上运行,这是测试内部应用程序的理想方式。可以使用完整路径(即/path_to_script/script.sh)调用可以不带参数运行的脚本。那些需要参数的需要用双引号括起来(即“/path_to_script/script.sh arg 1 … arg n”) 作用 主要用作RealServer的健康状态检查以及LoadBalance主机和BackUP主机之间failover的实现。 可用web架构: LVS+keepalived+nginx+apache+php+eaccelerator(+nfs可选 可不选)

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值