Keepalived + Nginx实现高可用 Web负载均衡

Keepalived+Nginx实现

Keepalived简要介绍

Keepalived 是一种高性能的服务器高可用或热备解决方案,Keepalived可以用来防止服务器单点故

障的发生,通过配合 Nginx可以实现 web前端服务的高可用。

Keepalived  VRRP 协议为实现基础,用 VRRP 协议来实现高可用性(HA)VRRP(Virtual Router

Redundancy Protocol)协议是用于实现路由器冗余的协议,VRRP协议将两台或多台路由器设备虚拟成一个

设备,对外提供虚拟路由器 IP(一个或多个),而在路由器组内部,如果实际拥有这个对外 IP 的路由器如

果工作正常的话就是 MASTER,或者是通过算法选举产生,MASTER实现针对虚拟路由器 IP的各种网络功能,

 ARP请求,ICMP,以及数据的转发等;其他设备不拥有该虚拟 IP,状态是 BACKUP,除了接收 MASTER

VRRP状态通告信息外,不执行对外的网络功能。当主机失效时,BACKUP将接管原先 MASTER的网络功能。

VRRP协议使用多播数据来传输 VRRP数据,VRRP数据使用特殊的虚拟源 MAC地址发送数据而不是自身

网卡的 MAC地址,VRRP 运行时只有 MASTER 路由器定时发送 VRRP 通告信息,表示 MASTER 工作正常以及虚

拟路由器 IP()BACKUP 只接收 VRRP 数据,不发送数据,如果一定时间内没有接收到 MASTER 的通告信

息,各 BACKUP将宣告自己成为 MASTER,发送通告信息,重新进行 MASTER选举状态。


开始搭建:

节点:  安装

Cluster1 192.168.152.11    Keepalived  Nginx          CentOs6.8
Cluster1 192.168.152.12Keepalived  Nginx          CentOs6.8

 下载 Keepalived v1.2.18 和Nginx 1.10.2

点击这里下载Keepalived   点击这里下载Nginx

首先 安装需要的环境

[plain]  view plain  copy
  在CODE上查看代码片 派生到我的代码片
  1. yum install gcc gcc-c++ make automake autoconf libtool pcre pcre-devel zlib zlib-devel  
  2. openssl openssl-devel  
执行 下载 编译  Nginx 所需的依赖包

上传到Linux Nginxtar包 

[plain]  view plain  copy
  在CODE上查看代码片 派生到我的代码片
  1. tar -zxvf nginx-1.10.2.tar.gz  
  2. cd nginx-1.10.2  
  3. ./configure --prefix=/soft/install/nginx  
  4. make && make install  
执行上面代码 进行编译


成功以后 开始配置Nginx

[plain]  view plain  copy
  在CODE上查看代码片 派生到我的代码片
  1. vim /soft/install/nginx/conf/nginx.conf  
user  root;

将用户改为 root



修改html下的index.html页面 


Cluster2 机器同理

[plain]  view plain  copy
  在CODE上查看代码片 派生到我的代码片
  1. 启动 Nginx  
  2. /usr/local/nginx/sbin/nginx  
  3. 重启 Nginx  
  4. /usr/local/nginx/sbin/nginx -s reload  

访问


Nginx安装成功


安装Keepalived

上传并编译

[plain]  view plain  copy
  在CODE上查看代码片 派生到我的代码片
  1. tar -zxvf keepalived-1.2.18.tar.gz  
  2. cd keepalived-1.2.18  
  3. ./configure --prefix=/soft/install/keepalived  
  4. make && make install  

 keepalived安装成 Linux系统服务:

因为没有使用 keepalived的默认路径安装(默认是/usr/local,安装完成之后,需要做一些工作

复制默认配置文件到默认路径

[plain]  view plain  copy
  在CODE上查看代码片 派生到我的代码片
  1. mkdir /etc/keepalived  
  2. cp /soft/install/keepalived/etc/keepalived/keepalived.conf /etc/keepalived/  

复制 keepalived服务脚本到默认的地址

[plain]  view plain  copy
  在CODE上查看代码片 派生到我的代码片
  1. cp /soft/install/keepalived/etc/rc.d/init.d/keepalived /etc/init.d/  
  2. cp /soft/install/keepalived/etc/sysconfig/keepalived /etc/sysconfig/  
  3. ln -s /soft/install/sbin/keepalived /usr/sbin/  
  4. ln -s /soft/install/keepalived/sbin/keepalived /sbin/  

设置 keepalived服务开机启动

[plain]  view plain  copy
  在CODE上查看代码片 派生到我的代码片
  1. chkconfig keepalived on  


修改 Keepalived (Master)192.168.152.11配置文件

[plain]  view plain  copy
  在CODE上查看代码片 派生到我的代码片
  1. vi /etc/keepalived/keepalived.conf  
内容为:

[plain]  view plain  copy
  在CODE上查看代码片 派生到我的代码片
  1. ! Configuration File for keepalived  
  2.   
  3. global_defs {  
  4.    router_id cluster1  
  5. }  
  6.   
  7. vrrp_script chk_nginx {  
  8.         script "/etc/keepalived/nginx_check.sh"  
  9.         interval 60  
  10.         weight -20  
  11. }  
  12.   
  13. vrrp_instance VI_1 {  
  14.     state MASTER  
  15.     interface eth0  
  16.     virtual_router_id 51  
  17.     mcast_src_ip 192.168.152.11  
  18.     priority 100  
  19.     nopreempt  
  20.     advert_int 1  
  21.     authentication {  
  22.         auth_type PASS  
  23.         auth_pass 1111  
  24.     }  
  25.     track_script {  
  26.         chk_nginx  
  27.     }  
  28.     virtual_ipaddress {  
  29.         192.168.152.66  
  30.     }  
  31. }  

[plain]  view plain  copy
  在CODE上查看代码片 派生到我的代码片
  1. vi /etc/keepalived/keepalived.conf  

配置BACKUP (192.168.152.12)

[plain]  view plain  copy
  在CODE上查看代码片 派生到我的代码片
  1. ! Configuration File for keepalived  
  2.   
  3. global_defs {  
  4.    router_id cluster2  
  5. }  
  6.   
  7. vrrp_script chk_nginx {  
  8.         script "/etc/keepalived/nginx_check.sh"  
  9.         interval 2  
  10.         weight -20  
  11. }  
  12.   
  13. vrrp_instance VI_1 {  
  14.     state BACKUP  
  15.     interface eth0  
  16.     virtual_router_id 51  
  17.     mcast_src_ip 192.168.152.12  
  18.     priority 90  
  19.     nopreempt  
  20.     advert_int 1  
  21.     authentication {  
  22.         auth_type PASS  
  23.         auth_pass 1111  
  24.     }  
  25.     track_script {  
  26.         chk_nginx  
  27.     }  
  28.     virtual_ipaddress {  
  29.         192.168.152.66  
  30.     }  
  31. }  

编辑检查脚本

/etc/keepalived/nginx_check.sh

[plain]  view plain  copy
  在CODE上查看代码片 派生到我的代码片
  1. #!/bin/bash  
  2.   
  3. cd /soft/data/  
  4. failcount=0  
  5. runlog=nginx_runlog.txt  
  6.   
  7. for((i=1;i<=6;i++));  
  8. do  
  9.         result=`curl http://127.0.0.1/isok.html`  
  10.   
  11.         time=`date +%F\ %k:%M:%S`  
  12.         error=false  
  13.         if [ "$result" != "ok" ] ; then  
  14.                 echo "=================$time====================" >> $runlog  
  15.                                 failcount=`expr $failcount + 1`  
  16.                                 echo "nginx doesn't work!" >> $runlog  
  17.                 echo " ================================" >> $runlog  
  18.         else  
  19.                 break  
  20.         fi  
  21.   
  22.         if test $failcount -gt 5 ; then  
  23.                 echo "\n==================$time=====================\n\n" >> $runlog  
  24.                 echo "restart nignx..." >> $runlog  
  25.                 echo "     ================================" >> $runlog  
  26.   
  27.                         #关闭  
  28.                         /soft/install/nginx/sbin/nginx -s stop  
  29.   
  30.                         if [ -s /soft/install/nginx/logs/nginx.pid ] ; then  
  31.                                 pid=`cat /soft/install/nginx/logs/nginx.pid`  
  32.                                 kill -quit $pid  
  33.                         fi  
  34.   
  35.                         #启动  
  36.                         /soft/install/nginx/sbin/nginx  
  37.   
  38.                         sleep 10  
  39.   
  40.                         result=`curl http://127.0.0.1/isok.html`  
  41.   
  42.                         if [ "$result" != "ok" ] ; then  
  43.                                  killall keepalived  
  44.                         fi  
  45.         fi  
  46. done  


添加isok.html

[plain]  view plain  copy
  在CODE上查看代码片 派生到我的代码片
  1. vim /soft/install/nginx/html/isok.html   
  2. ok  


给脚本权限

[plain]  view plain  copy
  在CODE上查看代码片 派生到我的代码片
  1. chmod +x /etc/keepalived/nginx_check.sh  
启动 Keepalived
[plain]  view plain  copy
  在CODE上查看代码片 派生到我的代码片
  1. service keepalived start  
  2. Starting keepalived: [ OK ]  

Keepalived服务管理命令:

停止:service keepalived stop

启动:service keepalived start

重启:service keepalived restart

查看状态:service keepalived status


Ok 配置已经结束了 随便检测

到此结束。。。Keepalived + Nginx双机热备就OK了


转自:http://blog.csdn.net/lu1005287365/article/details/53166617?ref=myread

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值