• Nginx (7):nginx高可用配置


    所谓的高可用,就是虽然nginx可以反向代理,如果某个内部服务器down了,可以使用其他的内部服务器,然而万一nginx挂了呢????布置多个nginx再反向代理nginx??反向套娃,总有一个是头部的nginx,就还会出现这个问题。
    而高可用的方法是:两台并列的nginx,都可以处理内部服务器,如果有一台nginx挂了,另一个迅速顶上。所谓的顶上,其实就是修改第二个nginx的ip地址为第一个nginx服务器,然而这样很复杂,问题很多,例如万一挂掉的nginx恢复了呢,这时候ip冲突了就。这里换一种思路,使用虚拟ip地址,它是固定的字符串,外部就用它访问,只不过它是飘忽不定的,一会在第一台nginx,一会在第二台nginx,是不固定的,这样就避免了很多问题。
    这就会用到一个小软件——keepalived。咱们可以来模拟一下。

    • 模拟:在之前的设置中,都是01虚拟机作为nginx服务器,这里我们把01虚拟机克隆一下,作为并列的两个nginx服务器,如果其中一个挂了,另一个迅速顶上。
    • 首先克隆虚拟机01——然后两台都下载安装keepalived软件
      这里下载安装还有一些坑,下载安装命令很简单:
    sudo apt-cache search keepalived
    sudo apt-get install keepalived
    
    • 1
    • 2

    但是我发现安装完之后,在/etc/keepalived目录下却没有相应的keepalived.conf文件。
    首先尝试启动

    /etc/init.d/keepalived status # 查看状态
    /etc/init.d/keepalived stop  # 停止
    /etc/init.d/keepalived start # 启动
    
    systemctl start keepalived # 启动
    systemctl status keepalived # 查看状态
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6

    然后查看状态,发现
    在这里插入图片描述
    没有配置文件,果然启动失败了,那么怎么生成配置文件呢,额,这里有个模板,在/usr/share/doc/keepalived/samples 目录下的模板文件keepalived.conf.sample,复制到/etc/keepalived目录下,改名字为keepalived.conf即可。重新启动
    在这里插入图片描述
    成了。

    • 配置01虚拟机
      keepalived.conf配置文件:
    global_defs {
       router_id lb111 #起一个名字
    }
    
    vrrp_instance atguigu {# 后面atguigu是实例名字,随便起
        state MASTER # 表示是主机,不是备用
        interface ens33 #对应本机网卡的名字,用ifconfig查看
        virtual_router_id 50 #不用改
        nopreempt
        priority 100 #主备竞选时候的优先级
        advert_int 1 #间隔检测的时间
        authentication { #这个是分组,一个局域网内可能有多台机器配置
            auth_type PASS #keepalived了,总得区分开谁跟谁是一组配置
            auth_pass 1111 #这个只要同组保持一致就行
        }
        virtual_ipaddress {#虚拟ip,可以虚拟好几个,咱们就用一个
            192.168.200.11 #来实验就行
            #192.168.200.12
            #192.168.200.13
        }
    }
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21

    ifconfig网卡:
    这里修改完配置文件之后重启keepalived发现报错了:
    keepalived daemon is already running
    原因其实是上一次不正常退出,而它daemon还在运行,这次重启发现daemon还在运行,他以为已经启动了。解决方法也很简单,先杀死keepalived所有进程,systemctl stop keepalived其实是没用的,这个玩意的进程很难杀死,具体遵循下面的文章,可以破解:

    https://blog.csdn.net/liuyichen999521/article/details/127570525

    启动成功后,看看IP是不是变了:
    在这里插入图片描述
    可以看到,多了一个虚拟地址。(要用ip addr才能看到哦,ifconfig看不到)。

    • 配置04虚拟机
      这里配置文件可是有差别的,不能完全复制,
    global_defs {
       router_id lb110 #变一个
    }
    
    vrrp_instance atguigu {# atguigu,必须一致!!!
        state BACKUP #备用机
        interface ens33
        virtual_router_id 50 #必须一致!!!
        nopreempt
        priority 50 # 优先级低一点,因为是备用机
        advert_int 1
        authentication { #必须一致!!!
            auth_type PASS
            auth_pass 1111
        }
        virtual_ipaddress {
            192.168.125.100
        }
    }
    
    
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21

    此时虚拟ip被01虚拟机占用了,所以ip addr不显示虚拟ip。

    • 测试方法:用其他机器,ping 192.168.125.100,也就是ping虚拟ip,发现通了,此时一旦挂掉虚拟主机01,你会发现有一个请求超时,然后立刻通了,然后去04虚拟机,ip addr,发现出现了192.168.125.100,也就是说,完成了ip漂移。
      在这里插入图片描述
      在这里插入图片描述
      绝了~
      这个时候依然可以使用常规nginx的代理功能,访问:
    http://192.168.125.100:80/
    
    • 1

    在这里插入图片描述
    没毛病

    • 拓展:keepalived是通过监听对方的keepalived进程来实现检测的,而万一虚拟机上的nginx坏了,keepalived没出问题,那这是检测不到的呀!!那可咋整,keepalived又不是为nginx服务的,他只是检测虚拟机是不是好使。
    • 这里可以通过写脚本的方式,它在虚拟机本机上跑,通过它把keepalived和nginx联系起来,脚本不断去检测nginx是否报错,如果出问题就kill掉keepalived进程,触发ip漂移。
    • 可见keepalived不是专门服务于nginx的,把nginx换成redis、mysql一样可以和keepalived配合。
  • 相关阅读:
    poi判断excel单元格内容是否为日期
    C语言第四章第2节用if语句实现选择结构学习导案
    Qt day2
    Vue中methods实现原理
    Kubernetes入门 十六、访问控制
    面向企业中高层、业务决策人员的数据分析培训
    java计算机毕业设计二手车交易平台源码+mysql数据库+系统+lw文档+部署
    vscode更改为中文版本
    在springboot中整合mybatis配置流程!
    NER中BiLSTM-CRF解读Forward_algorithm
  • 原文地址:https://blog.csdn.net/qq_41076797/article/details/128059382