前言
在生产环境上很多时候是以 nginx 做反向代理对外提供服务,但是一天nginx难免遇见故障,如:服务器宕机。当 nginx 宕机那么 所有对外提供的接口都将导致无法访问。虽然我们无法保证服务器百分之百可用,但是也得想办法避免这种悲剧,今天我们使用 keepalived 来实现 nginx 的高可用。
一、双机热备方案是什么?
这种方案是国内企业中最为普遍的一种高可用方案,双机热备其实 就是指一台服务器在提供服务,另一台为某服务的备用状态,当一 台服务器不可用另外一台就会顶替上去。 本文我们通过keepalived来实现双机热备。keepalived是基于vrrp协议实现的保证集群高可用的一个服务软 件,主要功能是实现真机的故障隔离和负载均衡器间的失败切换, 防止单点故障。
二、使用步骤
1.环境准备
准备两台nginx主机,主nginx的ip为192.168.66.100,备nginx的服务器ip为192.168.66.101.还有一个lvs虚拟vip(这个不需要特别准备,在配置文件写上就可,但主备nginx服务器需要特别准备),lvs虚拟vip为192.168.66.99.
2.具体操作
在两台虚拟机上分别执行以下命令,安装keepalived
yum install -y keepalived
现在对主nginx进行操作,修改keepalived.conf文件,直接把文件中原有的内容删除,粘贴并修改以下内容。其中主备nginx的virtual_router_id必须一样,可以直接用代码里的,不用修改,mcast_src_ip必须为nginx宿主机的ip地址(如主nginx的为192.168.66.100),virtual_ipaddress为lvs虚拟vip192.168.66.99
! configuration file for keepalived vrrp_script chk_nginx { script "/etc/keepalived/nginx_check.sh" #运行脚本,脚本内容下面有,就是起到一个nginx宕机以后,自动开启服务 interval 2 #检测时间间隔 weight -20 #如果条件成立的话,则权重 -20 } # 定义虚拟路由,vi_1 为虚拟路由的标示符,自己定义名称 vrrp_instance vi_1 { state master #来决定主从 interface ens33 # 绑定虚拟 ip 的网络接口,根据自己的机器填写 virtual_router_id 121 # 虚拟路由的 id 号, 两个节点设置必须一样 mcast_src_ip 192.168.66.100 #填写本机ip priority 100 # 节点优先级,主要比从节点优先级高 nopreempt # 优先级高的设置 nopreempt 解决异常恢复后再次抢占的问题 advert_int 1 # 组播信息发送间隔,两个节点设置必须一样,默认 1s authentication { auth_type pass auth_pass 1111 } # 将 track_script 块加入 instance 配置块 track_script { chk_nginx #执行 nginx 监控的服务 } virtual_ipaddress { 192.168.212.110 # 虚拟ip,也就是解决写死程序的ip怎么能切换的ip,也可扩展,用途广泛。可配置多个。 } }
现在对从nginx进行操作,修改keepalived.conf文件,直接把文件中原有的内容删除,粘贴并修改以下内容。其中主备nginx的virtual_router_id必须一样,可以直接用代码里的,不用修改,mcast_src_ip必须为nginx宿主机的ip地址(如主nginx的为192.168.66.101),virtual_ipaddress为lvs虚拟vip192.168.66.99
! configuration file for keepalived vrrp_script chk_nginx { script "/etc/keepalived/nginx_check.sh" #运行脚本,脚本内容下面有,就是起到一个nginx宕机以后,自动开启服务 interval 2 #检测时间间隔 weight -20 #如果条件成立的话,则权重 -20 } # 定义虚拟路由,vi_1 为虚拟路由的标示符,自己定义名称 vrrp_instance vi_1 { state backup #来决定主从 interface ens33 # 绑定虚拟 ip 的网络接口,根据自己的机器填写 virtual_router_id 121 # 虚拟路由的 id 号, 两个节点设置必须一样 mcast_src_ip 192.168.66.100 #填写本机ip priority 100 # 节点优先级,主要比从节点优先级高 nopreempt # 优先级高的设置 nopreempt 解决异常恢复后再次抢占的问题 advert_int 1 # 组播信息发送间隔,两个节点设置必须一样,默认 1s authentication { auth_type pass auth_pass 1111 } # 将 track_script 块加入 instance 配置块 track_script { chk_nginx #执行 nginx 监控的服务 } virtual_ipaddress { 192.168.66.99 # 虚拟ip,也就是解决写死程序的ip怎么能切换的ip,也可扩展,用途广泛。可配置多个。 } }
nginx+keepalived实现高可用
写入nginx_check.sh脚本 /etc/keepalived/nginx_check.sh.输入命令
vim /etc/keepalived/nginx_check.sh
#!/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 killall keepalived fi fi
cd /etc/keepalived
chmod 777 nginx_check.sh
- 运行keepalived和nginx
这里给出运行和停止keepalived的命令,nginx大家自行运行
service keepalived start #启动keepalived service keepalived stop #停止keepalived
如果在启动keepalived的时候报错:
当你在浏览器输入192.168.66.99的时候,打开的是nginx的页面或者服务,就说明双机热备就成功了
总结
到此这篇关于nginx结合keepalived实现双机热备方案的文章就介绍到这了,更多相关nginx keepalived双机热备内容请搜索代码网以前的文章或继续浏览下面的相关文章希望大家以后多多支持代码网!
发表评论