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

但是我发现安装完之后,在/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 # 查看状态

然后查看状态,发现
在这里插入图片描述
没有配置文件,果然启动失败了,那么怎么生成配置文件呢,额,这里有个模板,在/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
    }
}

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
    }
}


此时虚拟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/

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

  • 拓展:keepalived是通过监听对方的keepalived进程来实现检测的,而万一虚拟机上的nginx坏了,keepalived没出问题,那这是检测不到的呀!!那可咋整,keepalived又不是为nginx服务的,他只是检测虚拟机是不是好使。
  • 这里可以通过写脚本的方式,它在虚拟机本机上跑,通过它把keepalived和nginx联系起来,脚本不断去检测nginx是否报错,如果出问题就kill掉keepalived进程,触发ip漂移。
  • 可见keepalived不是专门服务于nginx的,把nginx换成redis、mysql一样可以和keepalived配合。
  • 0
    点赞
  • 9
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

CtrlZ1

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值