nginx+keepalived实现负载均衡nginx的高可用

摘要:
准备四台服务器,两台用于活动和备用,另外两台用于访问192.168.1.120master192.1.121backup192.168.1.122nginx192.168.1.123nginx,以安装keepalivedbyum-yinstallgccpcre-develzlib-develysl-develyum-yininstallpot-devellwgethttp://www.keepalive

准备四台服务器

两台做主备,另外两台做访问

192.168.1.120 master

192.168.1.121 backup

192.168.1.122 nginx

192.168.1.123 nginx

安装keepalived

yum -y install gcc pcre-devel zlib-devel openssl-devel

yum -y install popt-devel

wget http://www.keepalived.org/software/keepalived-1.2.7.tar.gz

tar zxvf keepalived-1.2.7.tar.gz

cd keepalived-1.2.7

./configure

make&&make install

漫长的等待后.....

cp /usr/local/etc/rc.d/init.d/keepalived /etc/rc.d/init.d/
cp /usr/local/etc/sysconfig/keepalived /etc/sysconfig/
mkdir /etc/keepalived
cp
/usr/local/etc/keepalived/keepalived.conf /etc/keepalived/
cp /usr/local/sbin/keepalived /usr/sbin/

加入启动服务 注册成服务

echo "/etc/init.d/keepalived start" >> /etc/rc.local

  chkconfig --add keepalived

配置master nginx 192.168.1.110 和 192.168.1.121 

#user  nobody;
worker_processes  1;

error_log  logs/error.log;
#error_log  logs/error.log  notice;
#error_log  logs/error.log  info;

#pid        logs/nginx.pid;
events {
    worker_connections  1024;
}
http {
    include       mime.types;
    default_type  application/octet-stream;
    access_log  logs/access.log;
    sendfile        on;
   upstream 120.com {
      #ip_hash;
      server 192.168.1.122:80;
      server 192.168.1.123:80;
    }
    #tcp_nopush     on;

    #keepalive_timeout  0;
    keepalive_timeout  65;

    #gzip  on;

    server {
        listen       80;
        server_name  localhost;
        error_page   500 502 503 504  /50x.html;
        location = /50x.html {
            root   html;
        }
        location ~ .php$ {
            root           html;
            fastcgi_pass   127.0.0.1:9000;
            fastcgi_index  index.php;
            fastcgi_param  SCRIPT_FILENAME  $document_root$fastcgi_script_name;
            proxy_pass http://120.com;
            include        fastcgi_params;
        }

    }

    include vhost/*.conf;

}

然后访问试试

nginx+keepalived实现负载均衡nginx的高可用第1张nginx+keepalived实现负载均衡nginx的高可用第2张

nginx+keepalived实现负载均衡nginx的高可用第3张nginx+keepalived实现负载均衡nginx的高可用第4张

实现了负载均衡调用另外两台服务器

配置master keepalived 

vi /etc/keepalived/keepalived.conf

! Configuration File for keepalived

global_defs {
   notification_email {
        25427801@qq.com
   }
   notification_email_from 25427801@qq.com
   smtp_server 127.0.0.1
   smtp_connect_timeout 30
   router_id nginx_master
}
vrrp_script check_nginx_is_run {
    script "/etc/keepalived/check_nginx_is_run.sh"
    interval 2
    weight 2
}
# 虚拟IP1, 本机作为Master
vrrp_instance VI_1 {
    state MASTER
    interface ens33 #你的网卡
    virtual_router_id 51
    priority 100
    advert_int 1
    track_interface {
        ens33
    }
    authentication {
        auth_type PASS
        auth_pass 1111
    }
    virtual_ipaddress {
        192.168.1.51
    }
    track_script {
        check_nginx_is_run
    }
}

配置backup keepalived

! Configuration File for keepalived

global_defs {
   notification_email {
        25427801@qq.com
   }
   notification_email_from 25427801@qq.com
   smtp_server 127.0.0.1
   smtp_connect_timeout 30
   router_id nginx_backup
}
vrrp_script check_nginx_is_run {
    script "/etc/keepalived/check_nginx_is_run.sh"
    interval 2
    weight 2
}
# 虚拟IP1, 本机作为Master
vrrp_instance VI_1 {
    state BACKUP
    interface ens33
    virtual_router_id 51
    priority 100
    advert_int 1
    track_interface {
        ens33
    }
    authentication {
        auth_type PASS
        auth_pass 1111
    }
    virtual_ipaddress {
        192.168.1.51
    }
    track_script {
        check_nginx_is_run
    }
}

安装 killall 命令

yum install psmisc

编写 shell 脚本

#!/bin/bash
A=`ps -C nginx --no-header |wc -l`        
if [ $A -eq 0 ];then                            
      /usr/local/nginx/sbin/nginx                #重启nginx
      sleep 3
      if [ `ps -C nginx --no-header |wc -l` -eq 0 ];then    #nginx重启失败,则停掉keepalived服务,进行VIP转移
              killall keepalived                    
      fi
fi

设置可执行命令

chmod a+x check_nginx_is_run.sh

如果你是window下放进去的,会有 

-bash: ./check_nginx_is_run.sh: /bin/bash^M: 坏的解释器: 没有那个文件或目录

解决办法

sed -i 's/
$//' check_nginx_is_run.sh

查看master keepalived 日记 vim /var/log/messages

nginx+keepalived实现负载均衡nginx的高可用第5张

查看 backup 

nginx+keepalived实现负载均衡nginx的高可用第6张

好了不说了 停止nginx ,再不行就关机 192.168.1.120 or 121

如果你service nginx stop 来测试,你会发现关不掉,因为脚本重启了

你会发现OK了~ 

 nginx+keepalived实现负载均衡nginx的高可用第7张

免责声明:文章转载自《nginx+keepalived实现负载均衡nginx的高可用》仅用于学习参考。如对内容有疑问,请及时联系本站处理。

上篇vue.js / nuxt.js 微信公众号判断是否在微信浏览器中打开并授权CentOS7 搭建Docker下篇

宿迁高防,2C2G15M,22元/月;香港BGP,2C5G5M,25元/月 雨云优惠码:MjYwNzM=

相关文章

关于 profile文件(转)

登录shell执行了两个特殊文件, 1个是:etcprofile, 这个文件由系统管理员设置,通常做一些如检查是否有邮件,设置默认的创建文件的掩码,给某些表转到处变量赋值,已经任何管理员希望每当用户登录时都需要执行的命令。第2个自动执行的文件是宿主目录下的.profile文件。当你得到账户时系统管理员会给一个默认的 .profile 文件。看看它现在是什么...

Apache和nginx相关知识

1 Apache和nginx相关知识 1.1 Apache配置文件 Listen 80 Listen主要侦听web服务端口状态,默认为:80,即侦听所有的地址的80端口,注意这里也可以写成IP地址的侦听形式,不写即默认的地址:0.0.0.0 ServerName 127.0.0.1:80/localhost:80 此选项主要用指定Apache默认的服务器名...

nginx server 实时监控

本文建立在Centos基础上,也可应用在其他版本的linux上。适合使用nginx为反向代理的java开发人员。写本文的原因是nginx在apache下面也有 一些监控的工具,不过大部分都是基于php的。java开发者可能不愿意再去配置php环境的apache,本文提供了一种简易专业的nginx监控方 法,比较适合小型应用(server number&l...

Nginx实战系列之功能篇----后端节点健康检查

公司前一段对业务线上的nginx做了整理,重点就是对nginx上负载均衡器的后端节点做健康检查。目前,nginx对后端节点健康检查的方式主要有3种,这里列出: 1 2 3 4 5 6 1、ngx_http_proxy_module模块和ngx_http_upstream_module模块(自带) 官网地址:http://nginx.org/...

Docker --Dockerfile(制作镜像)

Dockerfile Dockerfile 是一个文本格式的配置文件,用户可以使用 Dockerfile 快速创建自定义的镜像 Dockerfile 常用指令 FROM 作用:指定基础镜像,Dockerfile中FROM是必备指令,且必须是第一条指令; 格式:FROM <image>:[tag] FROM busybox LABEL 作用:设...

转:Linux 编译安装 Mysql5.7

http://broqiang.com/2017/04/18/Mysql-Install-5.7.18-Linux-Compile/ 原文 Linux 编译安装 Mysql5.7 Ubuntu 下快速安装直接 apt 方式即可, 一般的开发环境也足够了 个人比较喜欢新版本,一般有新版本就会尝试一下 此文档适用于 Ubuntu 16.10 和 CentOS...