keepalived双机热备nginx

简介:

 nginx目前是我最常用的反向代理服务,线上环境为了能更好的应对突发情况,一般会使用keepalived双机热备nginx或者使用docker跑nginx集群,keepalived是比较传统的方式,虽然用docker跑nginx集群更方便,但传统的方式总是有他的可取之处,并且多学一些东西也很好。以后也会写如何使用docker跑nginx集群。

  环境准备:

  2台centos: 192.168.0.105 和192.168.0.118, 虚拟IP(VIP)为192.168.0.119

配置keepavlived

  分别在105和118上安装keepalived

yum install keepalived

  准备心跳角本

  keepalived的配置相当灵活,可以定时执行角本命令,用于心跳检查,比如,我们访问nginx发现nginx不可访问时,就关闭keepalived,从而切换到从nginx来实现不间断的服务支持。

vi /etc/keepalived/keepalived.conf
复制代码
#!/bin/bash

count=0
for (( k=0; k<2; k++ ))
do
   check_code=$( curl --connect-timeout 3 -sL -w "%{http_code}\\n" http://localhost:81 -o /dev/null )
   if [ "$check_code" != "200" ]; then
       count=count +1
       continue
   else
       count = 0
       break
   fi
done
if [ "$count" != "0" ]; then
   killall keepalived
   exit 1
else
   exit 0
fi
复制代码

  这段角本的意思就是说每次的心跳检查会执行一个for循环,访问http://localhost:81,在for的2次循环中如果返回的状态都不是200就会关闭keepalived。这个角本在105和118两台机器上都要准备好。

  设置118机器上的keepalived为主节点,105机器上的keepalived为从节点,它们两个的配置文件差不太多

vi /etc/keepalived/keepalived.conf

  118机器keepalived的配置文件

复制代码
! Configuration File for keepalived
vrrp_script chk_nginx {
   script "/etc/keepalived/check_nginx.sh" # 心跳检测角本
   interval 2 #脚本执行间隔,每2s检测一次
   weight -5 #脚本结果导致的优先级变更,检测失败(脚本返回非0)则优先级 -5
   fall 3 #检测连续2次失败才算确定是真失败。会用weight减少优先级(1-255之间)
   rise 2 #检测1次成功就算成功。但不修改优先级
}

vrrp_instance VI_1 {
   state MASTER #指定keepalived的角色,MASTER表示此主机是主服务器,BACKUP表示此主机是备用服务器
   interface eth0 #指定监测网络的接口。实例绑定的网卡,因为在配置虚拟IP的时候必须是在已有的网卡上添加的
   mcast_src_ip  192.168.0.118 ## 发送多播数据包时的源IP地址
   virtual_router_id 51 #虚拟路由标识,MASTER和BACKUP必须是一致的
   priority 100 #定义优先级,数字越大,优先级越高
   advert_int 2 #设定MASTER与BACKUP负载均衡器之间同步检查的时间间隔,单位是秒
   authentication { #设置验证类型和密码。主从必须一样
       auth_type PASS #设置vrrp验证类型,主要有PASS和AH两种
       auth_pass 1111 #设置vrrp验证密码,在同一个vrrp_instance下,MASTER与BACKUP必须使用相同的密码才能正常通信
   }
   virtual_ipaddress {
       192.168.0.119 #VRRP 虚拟地址 如果有多个VIP,换行填写
   }
   track_script {
      chk_nginx # 心跳脚本,即在 vrrp_script 部分指定的名字
   }
}
复制代码

115机器上的角本对上面的角本稍做变动即可

改变 state MASTER -> state BACKUP,priority 100 -> priority 90,mcast_src_ip 192.168.0.118 -> mcast_src_ip 192.168.0.105。其他的地方保持不变,是不是很简单。

复制代码
! Configuration File for keepalived
vrrp_script chk_nginx {
   script "/etc/keepalived/check_nginx.sh"
   interval 2
   weight -5
}

vrrp_instance VI_1 {
   state BACKUP # 修改
   interface eth0
   mcast_src_ip  192.168.0.105 # 修改 为本机IP
   virtual_router_id 51
   priority 90  #数字变小
   advert_int 2
   authentication {
       auth_type PASS
       auth_pass 1111
   }
   virtual_ipaddress {
       192.168.0.119
   }
   track_script {
      chk_nginx
   }
}
复制代码

 

到这里keepalived的简单配置就完成了下面就启动keepalived

service keepalived start

 

安装Nginx

 
查看nginx的依赖库是否完整
 
rpm -qa zlib
rpm -qa zlib-devel
rpm -qa openssl
rpm -qa openssl-devel
rpm -qa pcre
rpm -qa pcre-devel
rpm -qa gcc
如果没有就安装
 
yum -y install gcc zlib zlib-devel openssl openssl-devel pcre-devel

 

下载并解压nginx
mkdir nginxsrc
cd nginxsrc/
 
 
wget http://nginx.org/download/nginx-1.13.9.tar.gz
 
tar zxvf nginx-1.13.9.tar.gz
 
cd nginx-1.13.9/

 

 
./configure --prefix=/usr/local/nginx   --with-http_ssl_module --with-http_stub_status_module --with-http_realip_module
 
安装在/usr/local/nginx/sbin/nginx 目录下
 
 
make&&make install

 

 
执行成功后会显示leaving directory 
 
 
启动
/usr/local/nginx/sbin/nginx

 

 
 
检查
ps aux|grep nginx

 

 
 
开机启动
vi /etc/rc.local
添加一行
/usr/local/nginx/sbin/nginx
 
 
 

 因为我的机器上80端口被别的应用占用了,所以就修改105和118的 nginx.conf 把端口80 修改为81

vi /usr/local/nginx/conf/nginx.conf

 分别个性105 和119上的index.html 加上一个ip以便们们识别打开的是哪个ip上的index.html

vi /usr/local/nginx/html/index.html 

 

 

nginx重新加载配置

/usr/local/nginx/sbin/nginx -s reload

好了,我们访问一下

curl 192.168.0.119:81

返回的html是 118机器上的index.html

 现在我们把118的nginx停止

 /usr/local/nginx/sbin/nginx -s stop

这时118上的keepalived的心跳检查角本发现nginx无法访问会把keepalived关闭,然后转向从节点

我们再访问一下119

 curl 192.168.0.119:81

 

在118上重新启动nginx和keepalived

再访问119 返回的网址是118上的index.html

目录
相关文章
|
6月前
|
网络协议 算法 Java
nginx与keepalived的那些事
nginx与keepalived的那些事
102 0
|
6月前
|
应用服务中间件 nginx
服务搭建篇(四) 搭建基于Nginx + keepalived的高可用服务
比如我这里虚拟IP+nginx端口是 : 192.168.154.10:80 , 我直接访问 , 出来的是192.168.154.134服务器上的nginx , 因为我刚刚做了区分 , 所以这个时候就可以知道访问的是哪个机器的Nginx , 然后我们把134的Nginx停掉 , 然后再次访问 , 仍然可以使用 , 此时 ,出现的135的页面 , 也就是访问的是192.168.154.135的Nginx
90 0
|
5月前
|
负载均衡 应用服务中间件 Linux
Nginx系列教程(14) - LVS+KeepAlived+Nginx实现高性能负载均衡集群
Nginx系列教程(14) - LVS+KeepAlived+Nginx实现高性能负载均衡集群
177 0
|
6月前
|
负载均衡 算法 应用服务中间件
百度搜索:蓝易云【Linux系统如何使用 HAProxy、Nginx 和 Keepalived 进行负载均衡?】
通过上述步骤,你可以在Linux系统中使用HAProxy、Nginx和Keepalived来实现负载均衡。这些工具可以帮助你将流量分配到多个后端服务器上,提高系统的性能、可靠性和可扩展性。
87 0
|
负载均衡 容灾 应用服务中间件
使用Docker-compose搭建nginx-keepalived双机热备来实现高可用nginx集群
最近同学出去面试经常会被问到一个问题。 面试官:你说你们公司使用nginx反向代理tornado,部署了多少多少台机器,好像很牛逼的样子,但是我问你,如果主机也就是部署了nginx那台机器并发过大导致宕机了怎么办? 答曰:不考虑带宽峰值的话,比较新的 CPU 跑 nginx 单核每秒能接近 2 万请求,而且nginx如果纯做 HTTP 转发的话,Nginx 的性能高到恐怖,会挂掉很不科学。。。。 面试官:好吧,算你会忽悠,那如果插头被扫地大妈踢掉了怎么办,因为没电导致服务器宕机 答曰:阿里云机房会断电。。。你特么在逗我吧。。
使用Docker-compose搭建nginx-keepalived双机热备来实现高可用nginx集群
|
8月前
|
tengine 负载均衡 应用服务中间件
Nginx+Keepalived高可用集群部署详细文档
Nginx+Keepalived高可用集群部署详细文档
|
4月前
|
负载均衡 前端开发 应用服务中间件
NGINX高可用之keepalived+nginx主从模式+主主模式配置实践
NGINX高可用之keepalived+nginx主从模式+主主模式配置实践
124 1
|
5月前
|
应用服务中间件 Shell nginx
Nginx + keepalived 实现高可用 + 防盗链 + 动静分离(二)
Nginx + keepalived 实现高可用 + 防盗链 + 动静分离
|
5月前
|
负载均衡 NoSQL 应用服务中间件
Nginx + keepalived 实现高可用 + 防盗链 + 动静分离(一)
Nginx + keepalived 实现高可用 + 防盗链 + 动静分离
|
5月前
|
Kubernetes 应用服务中间件 Linux
suse 12 编译部署Keepalived + nginx 为 kube-apiserver 提供高可用
suse 12 编译部署Keepalived + nginx 为 kube-apiserver 提供高可用
57 0