
二:Nginx高可用集群实现思路
1:如上所述我们需要有个程序一直去监听nginx是否down,这里我们使用Keepalived来做
2:当我们发现nginx反向代理服务器down了,我们需要找一台服务器做替代
当nginx主服务故障,使用备份服务器的时候,对外暴露的IP会发生改变,为了减少web端的操作,我们需要统一对外的IP,这就是所谓的虚拟IP, 虚拟IP解决的问题就是当我的nginx故障切换了,对外暴露的IP始终是不变的, 不会对web层有影响。
主要是采用 nginx负载均衡 + 监控(keepalived)来实现,keepalived来监听Nginx是否存活,同时维护 虚拟IP对外访问解决静态路由的单点故障。
3.1:主备服务器安装配置keepalived
yum install keepalived –y
查看是否安装成功,成功后有版本提示
systemctl start keepalived
开启keepalived:
systemctl start keepalived
keepalived开机启动:systemctl enable keepalived
3.2:编写Nginx自动重启脚本
注意:主备之间都需要编写该文件。
脚本中使用到的非linux默认安装的命令
**安装killall 命令 **yum install -y psmisc
**安装 netstat 命令 **yum install -y net-tools
在keepalived配置文件存放目录中创建脚本
vim etc/keepalived/chk_nginx.sh
#!/bin/bash# 这种方式是查询nginx的进程#A=`ps -C nginx --no-header | wc -l`# 这种方式是查询nginx的端口A=`netstat -tnlp | grep nginx | wc -l`if [ $A -eq 0 ];then# 启动Nginx ,根据你自己的路径启动usr/local/nginx/sbin/nginxsleep 2#if [ `ps -C nginx --no-header | wc -l` -eq 0 ];thenif [ `netstat -tnlp | grep nginx | wc -l` -eq 0 ];thenkillall keepalivedfifi
使用 chmod +x ``/etc/keepalived/chk_nginx.sh
赋予文件执行权限
3.3:修改keepalived.conf 配置文件
vim etc/keepalived/keepalived.conf
主机配置:
! Configuration File for keepalived#全局配置global_defs {router_id keep_135 #路由ID,局域网内应唯一script_user root #运行脚本的用户,避免 WARNING - default user 'keepalived_script' for script execution does not exist - please create.enable_script_security #避免SECURITY VIOLATION警告}#脚本检测vrrp_script check_nginx_alived {#脚本路径script "/etc/keepalived/chk_nginx.sh"# 脚本运行间隔interval 2# 如果脚本运行成功,则升权+10,如果配置负数(-10),则运行失败,降权。weight 10}#虚拟路由配置vrrp_instance VI_1 {state MASTER #初始情况下的主备状态interface ens33 #网卡文件名,注意应填写你的主机使用的网卡名称virtual_router_id 51 #虚拟路由id,主备应保持一致priority 100 #权重,发生主备切换时成为主机的优先级advert_int 1 #侦测心跳,单位s#鉴权配置authentication {auth_type PASS #鉴权类型 PASSauth_pass 1111 #密码}#脚本追踪track_script {#对应vrrp_script 的namecheck_nginx_alived}#虚拟IP,可以有多个,一行一个,主备之间应保持一致virtual_ipaddress {192.168.242.135}}
备用机配置:
! Configuration File for keepalived#全局配置global_defs {router_id keep_130 #路由ID,局域网内应唯一script_user root #运行脚本的用户,避免 WARNING - default user 'keepalived_script' for script execution does not exist - please create.enable_script_security #避免SECURITY VIOLATION警告}#脚本检测vrrp_script check_nginx_alived {#脚本路径script "/etc/keepalived/chk_nginx.sh"# 脚本运行间隔interval 2# 如果脚本运行成功,则升权+10,如果配置负数(-10),则运行失败,降权。weight 10}#虚拟路由配置vrrp_instance VI_1 {state MASTER #初始情况下的主备状态interface ens33 #网卡文件名,注意应填写你的主机使用的网卡名称virtual_router_id 51 #虚拟路由id,主备应保持一致priority 80 #权重,发生主备切换时成为主机的优先级advert_int 1 #侦测心跳,单位s#鉴权配置authentication {auth_type PASS #鉴权类型 PASSauth_pass 1111 #密码}#脚本追踪track_script {#对应vrrp_script 的namecheck_nginx_alived}#虚拟IP,可以有多个,一行一个,主备之间应保持一致virtual_ipaddress {192.168.242.135}}
测试




