• Nginx通过Keepalived实现高可用


    本次测试环境:

    两台虚拟机

    centos7.3虚拟机A 10.0.3.46

    centos7.3虚拟机B 10.0.3.110

    对外开放的虚拟ip 10.0.3.96(这个ip只需要在keepalived里面配置就可以了)

    简述实验原理:

    虚拟机A和B都需要安装nginx和keepalived(过程省略,其中keepalived为yum安装模式yum install keepalived -y,编译安装的貌似不能正常运行,暂时不清楚什么原因)我简单将keepalived理解为检测i服务器是否可用,如果某台服务器宕机,则将虚拟ip转移到另一台服务器

    实验步骤:

    为了区别虚拟机AB,修改nginx的默认页面

    分别开启nginx

    分别修改keepalived的配置文件keepalived.conf,yum安装默认放在/etc/keepalived/keepalived.conf,或者也可以自行find / -name keepalived.conf。注意需要把原文件内容全部删除(或者把原文件重命名做备份),否则会出错

    在两台keepalived上都需要在/etc/sysctl.conf中添加以下参数,否则无法正常绑定虚拟ip

    net.ipv4.ip_nonlocal_bind = 1

    虚拟机A的keepalived配置文件全部内容为:(正常来说还应该配套一个检测Nginx存活状态的脚本,后续我实践了再加进来)

    vrrp_instance VI_1 {
        state MASTER
        interface ens33      #这里需要根据自己的网卡接口修改
        virtual_router_id 66   #该值保持一致,默认为51,但是建议修改为其他值,我的就是因为局域网内已经部署有一个keepalived占用了51这个id,导致keepalived无法正常启动
        priority 101         #具有更高的优先级,比如说当这台虚拟机A宕机恢复后,keepalived根据这个优先级决定是否优先使用虚拟机A
        advert_int 1
        authentication {           #类型和密码必须与另一台虚拟机保持一致
            auth_type PASS
            auth_pass 123456
        }
        virtual_ipaddress {
            10.0.3.96     #这个是我随便取的,只要局域网内该ip没有被占用就可以了
        }
    }
    

     虚拟机B的keepalived配置文件为

    vrrp_instance VI_1 {
        state BACKUP
        interface ens33
        virtual_router_id 66
        priority 100
        advert_int 1
        authentication {
            auth_type PASS
            auth_pass 123456
        }
        virtual_ipaddress {
            10.0.3.96
        }
    }
    

    Nginx存活状态检测脚本:(目前没有添加这个配置,放在这里是让大家知道有这个东西)

    #!/bin/bash
    A=`ps -C nginx–no-header |wc -l`
    if [ $A -eq 0 ];then
        /usr/local/nginx/sbin/nginx
    sleep 2
    if [ `ps -C nginx --no-header |wc -l` -eq 0 ];then
    killallkeepalived
    fi
    fi

    现在启动两台虚拟机的keepalived

    systemctl start keepalived

    此时ping 10.0.3.96会有反应,必须能ping通

    PS:这种配置方法,会出现在ifconfig无法找到virtual_ipaddress的情况,但是可以正常ping通,整个keepalived也可以正常使用。这个以后熟悉了再回来补充

    测试实验效果

    尝试从外界访问10.0.3.96,优先访问46,因为46的优先级101比另一台的优先级100大

     现在我们把虚拟机B上的keepalived服务停掉,再次访问,发现切换到虚拟机B上了(该nginx默认页面我没有进行修改)

     现在把虚拟机A的keepalived重新启动

    题外话扩展:

    另外,还有一个关于Nginx的session(会话)处理问题,之前面试的时候被问过,一脸懵逼,所以这里顺便提一下

    解决方法

    1.Nginx配置ip_hash,使client访问的服务器固定

    2.使用Redis等缓存会话

    3.设置使用浏览器本地cookie

  • 相关阅读:
    SharePoint 2013 安装.NET Framework 3.5 报错
    SharePoint 2016 配置工作流环境
    SharePoint 2016 站点注册工作流服务报错
    Work Management Service application in SharePoint 2016
    SharePoint 2016 安装 Cumulative Update for Service Bus 1.0 (KB2799752)报错
    SharePoint 2016 工作流报错“没有适用于此应用程序的地址”
    SharePoint 2016 工作流报错“未安装应用程序管理共享服务代理”
    SharePoint JavaScript API in application pages
    SharePoint 2016 每天预热脚本介绍
    SharePoint 无法删除搜索服务应用程序
  • 原文地址:https://www.cnblogs.com/biaopei/p/8618050.html
Copyright © 2020-2023  润新知