Nginx笔记6-Nginx配置示例-高可用集群

一台Nginx是不稳定的,如果这台Nginx挂掉了,及时后面的服务是正常的,也无法访问了,所以正常情况下,需要配置Nginx高可用集群,当一台Nginx挂掉之后,可以继续由其余Nginx继续完成请求的处理工作。
要向搭建Nginx高可用,需要准备两台Nginx服务,两个Keepalived服务,Keepalived指定虚拟ip,还有实际的Tomcat服务。

# 安装Keepalived
[root@bogon ~]# yum install keepalived -y
# 检查Keepalived是否安装成功
[root@bogon ~]# rpm -q -a keepalived

Keepalived的安装位置在/etc/keepalived目录下,在目录下可以找到Keepalived的配置文件keepalived.conf。我们需要通过修改keepalived.conf来实现Nginx的高可用。
修改后的keepalived.conf内容。

# 全局定义
global_defs {
  notification_email {
    acassen@firewall.loc
    failover@firewall.loc
    sysadmin@firewall.loc
  }
  notification_email_from Alexandre.Cassen@firewall.loc
  smtp_server 192.168.0.123
  smtp_connect_timeout 30
  # 路由id
  router_id LVS_DEVEL
  # 设置运行脚本默认用户和组。如果没有指定,则默认用户为keepalived_script(需要该用户存在),否则为root用户。默认groupname同username
  script_user root
  # 如果脚本路径的任一部分对于非root用户来说,都具有可写权限,则不会以root身份运行脚本
  enable_script_security
}
# 检测Nginx是否还存活的脚本
vrrp_script check_nginx {
  # 脚本文件的位置
  script "/usr/local/src/nginx_check.sh"
  interval 2 # 检测脚本执行的间隔
  weight 2 # 设置当服务器的权重
}
# 虚拟IP的配置
vrrp_instance VI_1 {
  state MASTER # 表示当前服务器是MASTER还是BACKUP
  interface ens33 # 绑定的网卡名称
  virtual_router_id 51 # 主、备机的virtual_router_id必须相同
  priority 100 # 主、备机取不同的优先级,主机值较大,备份机值较小
  advert_int 1 # 每隔多久发送一次心跳,默认是1秒
  # 权限校验
  authentication {
    auth_type PASS
    auth_pass 1111
  }
  # 虚拟IP地址
  virtual_ipaddress {
    192.168.0.222
  }
  # 指定监控脚本
  track_script {
    # 这里的check_nginx对应上面的vrrp_script的名字
    check_nginx
  }
}

nginx_check.sh脚本。(感觉老师给的脚本不对,看了下评论区,有人提到这个问题,尝试修改了下)
从Keepalived的配置信息来看,Keepalived会每隔2秒执行一次脚本检查Nginx进程是否还在。
如果Nginx进程的数量等于0,尝试重启Nginx,等待2秒让Nginx启动完成,再次检测Nginx的进程数量,如果还是0,就把Keepalived服务也停掉,如果Keepalived服务不停掉,虚拟IP不能自动飘到另一台机器上。
如果Nginx在2s内正常启动了,那么就当什么都没有发生。

#!/bin/bash
if [ `ps -C nginx --no-header |wc -l` -eq 0 ];then
  /usr/local/nginx/sbin/nginx
  sleep 2
  if [ `ps -C nginx --no-header |wc -l` -eq 0 ];then
    systemctl stop keepalived
  fi
fi

之后,需要给这个脚本执行权限:chmod 744 /usr/local/src/nginx_check.sh,否则脚本无法执行,注意,这里不能给777权限,如果给777,在执行脚本的时候,会提示如下信息,导致脚本执行失败。

Apr  3 11:45:34 bogon Keepalived_vrrp[21615]: Unsafe permissions found for script '/usr/local/src/nginx_check.sh'.
Apr  3 11:45:34 bogon Keepalived_vrrp[21615]: Disabling track script check_nginx due to insecure

还需要关闭selinux。
临时关闭命令:setenforce 0,重启后又会打开。
永久关闭命令:sed -i “s/^SELINUX=.*/SELINUX=disabled/g” /etc/selinux/config,然后重启。
为了测试这个脚本,花了挺久的,说下里面的坑和排查方法。

  1. 使用两个窗口连接服务器,一边执行Keepalived的启动命令,一边查看日志,使用“tail -f /var/log/messages”可以查看到Keepalived的启动日志
  2. 如果日志中明显提示有错误信息,根据日志提示的错误进行修改即可,常见的有:unknown keyword xxx,这种一般是单词拼错了,或者是前后的变量不对应(比如,track_script里的脚本名称要和vrrp_script的名称对应,否则找不到脚本),还有可能是复制粘贴带过来的特殊符号问题(Windows里的换行符和Unix里的换行符不一致问题)
  3. nginx_check.sh这个脚本要赋予执行权限,但是不能赋予777权限,要想检查nginx_check.sh对不对,可以手动执行一次,看看功能正常不正常,如果功能正常,说明检测脚本没问题,否则根据报错修改脚本
  4. 关闭selinux

保证脚本正确之后,再往后做。
这里要用两台服务器,提前搞出来一台,复制虚拟机也行,重装也行,然后安装Nginx和Keepalived,修改配置文件后,启动两台Nginx和Keepalived服务。

# 跳转到Nginx目录启动Nginx
[root@bogon sbin]# cd /usr/local/nginx/sbin/
[root@bogon sbin]# ./nginx
# 启动Keepalived
[root@bogon sbin]# systemctl start keepalived.service
# 查看Keepalived进程
[root@bogon sbin]# ps -ef | grep keepalived

下面进行测试。
分别启动两台服务器上的Nginx和Keepalived,通过浏览器访问虚拟IP,可以看到Nginx的界面,这时候,我们关掉主的Nginx和Keepalived,再次刷新页面,Nginx依旧可以访问。
在Nginx的从服务器上,使用ip a命令,可以看到在ens33网卡下,其实绑定了虚拟IP。

[root@bogon sbin]# ip a
1: lo: <LOOPBACK,UP,LOWER_UP> mtu 65536 qdisc noqueue state UNKNOWN group default qlen 1000
    link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00
    inet 127.0.0.1/8 scope host lo
       valid_lft forever preferred_lft forever
    inet6 ::1/128 scope host
       valid_lft forever preferred_lft forever
2: ens33: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast state UP group default qlen 1000
    link/ether 00:0c:29:6f:46:5e brd ff:ff:ff:ff:ff:ff
    inet 192.168.0.124/24 brd 192.168.0.255 scope global noprefixroute ens33
       valid_lft forever preferred_lft forever
    inet 192.168.0.222/32 scope global ens33
       valid_lft forever preferred_lft forever
    inet6 fe80::6907:4913:db7b:dcb/64 scope link noprefixroute
       valid_lft forever preferred_lft foreve

上面的模式是一主一从的模式,使用ip a命令查看虚拟IP的时候,在Nginx的主服务器上,可以看到虚拟IP,当主挂掉后,虚拟IP才会绑定到Nginx的从服务器。
下面介绍双主模式,只需要在Keepalived的配置文件里加一段内容即可。

vrrp_instance VI_2 {
  state BACKUP
  interface ens33
  virtual_router_id 52
  priority 100
  advert_int 1
  authentication {
    auth_type PASS
    auth_pass 2222
  }
  virtual_ipaddress {
    192.168.0.222
  }
  # 指定监控脚本
  track_script {
    # 这里的check_nginx对应上面的vrrp_script的名字
    check_nginx
  }
}

上面的测试方法不大好,这里说一种动态的测试方法,当一台Nginx挂掉后,感受Keepalived动态切换到另一台的效果。
先进入Nginx的目录下“/usr/local/nginx/html”,编辑“index.html”,在Welcome to nginx!下面加一行标识,我这里加了一个服务器的ip,能够看出来哪台Nginx即可。
然后重启两台机器的Nginx和Keepalived服务,打开浏览器,需要在浏览器端下载一个自动刷新的插件,方便测试,我这里用的“Smart Auto Refresh”这个插件,访问虚拟IP,设置一秒刷新一次。
这时候,我们可以看到“Welcome to nginx!”下面有我们的标识IP。
找到这台机器,将它的Nginx和Keepalived服务停掉,另外观察定时刷新页面的变化,可以看到标识信息自动变化了。
测试的时候,还有一点需要注意,需要在浏览器开发工具的Network里Disable Cache,否则可能看不到正常的现象。

  • 2
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 2
    评论
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值