热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

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

目录 lvs+keepalived+Nginx搭建高可用nginx集群LVS介绍keepalived介绍nginx介绍安装Keepalived安装i

目录

 

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下安装部署NGINX、Nginx配置文件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的不要窝里斗,谢谢大家!!


本文地址:https://blog.csdn.net/weixin_44253327/article/details/110563379



推荐阅读
  • Nginx入门指南:从零开始掌握基础配置与优化技巧
    Nginx入门指南:从零开始掌握基础配置与优化技巧 ... [详细]
  • 为了在Hadoop 2.7.2中实现对Snappy压缩和解压功能的原生支持,本文详细介绍了如何重新编译Hadoop源代码,并优化其Native编译过程。通过这一优化,可以显著提升数据处理的效率和性能。此外,还探讨了编译过程中可能遇到的问题及其解决方案,为用户提供了一套完整的操作指南。 ... [详细]
  • 在Linux系统中避免安装MySQL的简易指南
    在Linux系统中避免安装MySQL的简易指南 ... [详细]
  • 本文详细介绍了在Linux系统上编译安装MySQL 5.5源码的步骤。首先,通过Yum安装必要的依赖软件包,如GCC、GCC-C++等,确保编译环境的完备。接着,下载并解压MySQL 5.5的源码包,配置编译选项,进行编译和安装。最后,完成安装后,进行基本的配置和启动测试,确保MySQL服务正常运行。 ... [详细]
  • 深入解析 OpenSSL 生成 SM2 证书:非对称加密技术与数字证书、数字签名的关联分析
    本文深入探讨了 OpenSSL 在生成 SM2 证书过程中的技术细节,重点分析了非对称加密技术在数字证书和数字签名中的应用。非对称加密通过使用公钥和私钥对数据进行加解密,确保了信息传输的安全性。公钥可以公开分发,用于加密数据或验证签名,而私钥则需严格保密,用于解密数据或生成签名。文章详细介绍了 OpenSSL 如何利用这些原理生成 SM2 证书,并讨论了其在实际应用中的安全性和有效性。 ... [详细]
  • 在JavaWeb项目架构中,NFS(网络文件系统)的实现与优化是关键环节。NFS允许不同主机系统通过局域网共享文件和目录,提高资源利用率和数据访问效率。本文详细探讨了NFS在JavaWeb项目中的应用,包括配置、性能优化及常见问题的解决方案,旨在为开发者提供实用的技术参考。 ... [详细]
  • 在CentOS上部署和配置FreeSWITCH
    在CentOS系统上部署和配置FreeSWITCH的过程涉及多个步骤。本文详细介绍了从源代码安装FreeSWITCH的方法,包括必要的依赖项安装、编译和配置过程。此外,还提供了常见的配置选项和故障排除技巧,帮助用户顺利完成部署并确保系统的稳定运行。 ... [详细]
  • 在Linux环境下编译安装Heartbeat时,常遇到依赖库缺失的问题。为确保顺利安装,建议预先通过yum安装必要的开发库,如glib2-devel、libtool-ltdl-devel、net-snmp-devel、bzip2-devel和ncurses-devel等。这些库是编译过程中不可或缺的组件,能够有效避免编译错误,确保Heartbeat的稳定运行。 ... [详细]
  • 在使用 PHP 通过 SSL 安全连接到 MySQLi 数据库服务器时,遇到了一些技术难题。我的环境包括一个 Web 服务器和一个数据库服务器,两者均使用 OpenSSL 生成了证书。尽管证书内容一致,但在尝试从 Web 服务器使用 `mysql` 命令进行连接时,仍然遇到了问题。为了确保连接的安全性和稳定性,需要进一步检查证书配置和 PHP 的 SSL 设置,以排除潜在的配置错误或兼容性问题。 ... [详细]
  • 在 CentOS 7 上部署和配置 RabbitMQ 消息队列系统时,首先需要安装 Erlang,因为 RabbitMQ 是基于 Erlang 语言开发的。具体步骤包括:安装必要的依赖项,下载 Erlang 源码包(可能需要一些时间,请耐心等待),解压源码包,解决可能出现的错误,验证安装是否成功,并将 Erlang 添加到环境变量中。接下来,下载 RabbitMQ 的 tar.xz 压缩包,并进行解压和安装。确保每一步都按顺序执行,以保证系统的稳定性和可靠性。 ... [详细]
  • UC浏览器无法加载网页的解决方案:详细指南与专业建议
    许多用户在使用UC浏览器时遇到无法加载网页的问题。本文将提供详细的解决方案和专业建议,帮助您快速排除故障。首先,需要确认UC浏览器的版本是否为最新,同时检查网络连接是否正常。如果问题依旧存在,可以尝试清除缓存、重置浏览器设置或重新安装UC浏览器。此外,禁用可能干扰浏览器的第三方安全软件也是一个有效的解决办法。希望这些方法能有效解决您的问题。 ... [详细]
  • Kafka 是由 Apache 软件基金会开发的高性能分布式消息系统,支持高吞吐量的发布和订阅功能,主要使用 Scala 和 Java 编写。本文将深入解析 Kafka 的安装与配置过程,为程序员提供详尽的操作指南,涵盖从环境准备到集群搭建的每一个关键步骤。 ... [详细]
  • 如何精通编程语言:全面指南与实用技巧
    如何精通编程语言:全面指南与实用技巧 ... [详细]
  • 大家好,全新的技术专栏《从零开始掌握容器云网络实战》正式上线。该专栏将系统地介绍容器云网络的基础知识、核心技术和实际应用案例,帮助读者全面理解和掌握容器云网络的关键技术与实践方法。 ... [详细]
  • 在CentOS 7上部署WebRTC网关Janus
    在CentOS 7上部署WebRTC网关Janus ... [详细]
author-avatar
a7431555
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有