文档章节

Nginx负载均衡(主备)+Keepalived

1899
 1899
发布于 2015/12/28 18:04
字数 1003
阅读 7894
收藏 506

Nginx负载均衡器的优点:

实现看弹性化操作的架构,压力增大的时候可以临时添加后端Web服务器;

upstream具有负载均衡能力(默认使用轮询),可以自动判断下面的机器,并且自动踢出不能正常提供服务的机器;

Keepalvied加Nginx监测脚本可保证单个nginx负载均衡器的有效性,避免单点故障

系统

 

两台Nginx:

CentOS6.7 x86_64

两台Web:

Ubuntu15.04 desktop

拓扑

IP地址

nginx(主LB):192.168.15.132

nginx(备LB):192.168.15.133

VIP地址:192.168.15.135

Real1IP:192.168.15.128

Real2的IP:192.168.15.130

部署整个环境用到的软件为:

nginx-1.6.3.tar.gz  
prce-8.38.tar.gz 

zlib-1.2.8.tar.gz

2Web主机(Ubuntu)上部署Nginx+PHP-FPM+MySQL,此处省略。

分别在二台Nginx负载均衡器上安装Nginx,配置

 

安装GCC编译器等工具:

 

yum install -y gcc gcc-c++ autoconf automake libtool make openssl openssl-devel

安装Nginx:

wget http://exim.mirror.fr/pcre/pcre-8.38.tar.gz

tar -zxvf pcre-8.38.tar.gz

cd pcre-8.38

./configure

make && make install

wget http://zlib.net/zlib-1.2.8.tar.gz

tar -zxvf zlib-1.2.8.tar.gz

cd zlib-1.2.8

./configure

make && make install

wget http://nginx.org/download/nginx-1.6.3.tar.gz

tar -zxvf nginx-1.6.3.tar.gz 
cd nginx-1.6.3/  

./configure --prefix=/usr/local/nginx

--sbin-path=/usr/local/nginx/sbin/nginx

--conf-path=/usr/local/nginx/conf/nginx.conf

 

--pid-path=/usr/local/nginx/logs/nginx.pid \

--with-http_ssl_module \

--with-http_stub_status_module \

--with-http_gzip_static_module \ 

make && make install 

注:查询"./configure --help"相关模块,按需求指定启用

Nginx.conf配置文件二个nginx负载均衡器的文件一样

user  www-data www-data;
worker_processes  1;
error_log  /usr/local/nginx/logs/error.log notice;
pid        /usr/local/nginx/logs/nginx.pid;
worker_rlimit_nofile 51200;
events {
    use epoll;
    worker_connections  51200;
}
http {
    include       mime.types;
    default_type  application/octet-stream;
    log_format  main  '$remote_addr - $remote_user [$time_local] "$request" '
                      '$status $body_bytes_sent "$http_referer" '
                      '"$http_user_agent" "$http_x_forwarded_for"';
    access_log  logs/access.log  main;
    server_names_hash_bucket_size 128;
    client_header_buffer_size 32k;
    large_client_header_buffers 4 32k;
    client_max_body_size 8m;
    sendfile        on;
    tcp_nopush     on;
    server_tokens off;
    keepalive_timeout  60;
    fastcgi_connect_timeout 300;
    fastcgi_send_timeout 300;
    fastcgi_read_timeout 300;
    fastcgi_buffer_size 64k;
    fastcgi_buffers 4 64k;
    fastcgi_busy_buffers_size 128k;
    fastcgi_temp_file_write_size 128k;
    gzip  on;
    upstream backend
    {
    server 192.168.15.128;
    server 192.168.15.130;
    }
    server {
        listen       80;
        server_name  192.168.15.135;

        if ($request_method !~ ^(GET|HEAD|POST)$ ) {
         return 444;
        }

        location / {
            root   html;
            index  index.php index.html index.htm;
            proxy_redirect off;
            proxy_set_header Host $host;
            proxy_set_header X-Real-IP $remote_addr;
            #后端的Web服务器可以通过X-Forwarded-For获取用户真实IP
            proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
            proxy_pass http://backend;
        }
        error_page   500 502 503 504  /50x.html;
        location = /50x.html {
            root   html;
        }
        
        location /nginx_status {
            stub_status on; 
            auth_basic "NginxStatus";
            auth_basic_user_file /usr/local/nginx/htpasswd;
            #allow 127.0.0.1;
            #deny all;
        }
        location ~* \.(ini|docx|txt|doc|pdf)$ {
        #禁止访问文档性文件
        root /usr/share/nginx/html;
        deny all;
        }
        location ~ .*\.(gif|jpg|jpeg|png|bmp|swf|js|html|htm|css)$ {
        root /home/image;
        proxy_store on;
        proxy_store_access user:rw group:rw all:rw;
        proxy_temp_path /home/image;
        if ( !-e $request_filename) {
           proxy_pass  http://backend;
        }
    }
}
}

在二台Nginx上安装及配置keepalived:

 

 

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

tar -zxvf keepalived-1.2.15.tar.gz

cd keepalived-1.2.15

./configure --sysconf=/etc/  --with-kernel-dir=/usr/src/kernels/2.6.32-573.8.1.el6.x86_64

make && make install

ln -s /usr/local/sbin/keepalived  /sbin/  

#这一步很重要,不执行ln -s会报错“Starting keepalived: /bin/bash: keepalived: command not found”

service keepalived start

 

二台Nginxkeepalived.conf配置文件如下配置完成后分别service keepalived start启动检验keepalived配置是否成功

主:

global_defs {
   notification_email {
     test@163.com
   }
   notification_email_from keepalived@localhost 
   smtp_server 127.0.0.1
   smtp_connect_timeout 30
   router_id LVS_MASTER
}
vrrp_script chk_http_port {
script "/usr/local/src/check_nginx_pid.sh"
interval 2                           #(检测脚本执行的间隔)
weight 2
}
vrrp_instance VI_1 {
   #state MASTER
    state BACKUP
    nopreempt                       
    #设置非抢占模式时,需修改“state MASTER”为“state BACKUP”,添加“nopreempt“
    interface bond0
    virtual_router_id 51
    priority 100
    advert_int 1
    authentication {
        auth_type PASS
        auth_pass 1111
}
track_script {
chk_http_port            #(调用检测脚本)
}
    virtual_ipaddress {
        192.168.15.135/24 broadcast 192.168.15.255 dev bond0 label bond0:1
    }
}

 

备: 

global_defs {
   notification_email {
     test@163.com
   }
   notification_email_from keepalived@localhost 
   smtp_server 127.0.0.1
   smtp_connect_timeout 30
   router_id LVS_BACKUP
}
vrrp_script chk_http_port {
script "/usr/local/src/check_nginx_pid.sh"
interval 2                           #(检测脚本执行的间隔)
weight 2
}
vrrp_instance VI_1 {
    state BACKUP
    interface bond0
    virtual_router_id 51
    priority 66
    advert_int 1
    authentication {
        auth_type PASS
        auth_pass 1111
}
track_script {
chk_http_port            #(调用检测脚本)
}
    virtual_ipaddress {
        192.168.15.135/24 broadcast 192.168.15.255 dev bond0 label bond0:1
    }
}

以下是针对nginx状态进行检测的脚本,第一次nginx服务死掉时,会重新启动,如果Nginx服务无法正常启动,则杀掉keepalived进程

vim  /usr/local/src/check_nginx_pid.sh

#!/bin/bash
A=`ps -C nginx --no-header |wc -l`        
if [ $A -eq 0 ];then                            
      /usr/local/nginx/sbin/nginx        
      if [ `ps -C nginx --no-header |wc -l` -eq 0 ];then  
              killall keepalived                    
      fi
fi

 

Ok,开始nginx负载均衡测试,停掉其中一台的任何服务,不影响整个系统的运作

注:两台LBServer也可分别添加一个VIP①②(Keepalived心跳监控,服务不可用或者宕机,VIP①被备LBServer接管),外部使用智能DNS轮询两个VIP①②,提高硬件资源利用率

© 著作权归作者所有

共有 人打赏支持
1899
粉丝 51
博文 206
码字总数 106081
作品 0
宝山
运维
私信 提问
加载中

评论(31)

MGL_TECH
MGL_TECH

引用来自“灰仔”的评论

引用来自“杨伦亮”的评论

希望出一份文件服务器的负载均衡
后面测试后会及时发布的

同求……
1899
1899

引用来自“杨伦亮”的评论

希望出一份文件服务器的负载均衡
后面测试后会及时发布的
1899
1899

引用来自“单行道”的评论

学习了
多多交流
单行道
单行道
学习了
杨伦亮
杨伦亮
希望出一份文件服务器的负载均衡
1899
1899

引用来自“hzh62”的评论

没有网络拓扑图,看起来吃力。
网络拓扑图和对应的配置文件,ip地址映射好才能更好的表达。

引用来自“灰仔”的评论

画了个简单的拓扑,敬请指正。

引用来自“hzh62”的评论

有图后,明晰多了。 但是后面说的,主备资源浪费的问题能一并完成配置就实用多了,完全实现智能切换,热备。
双主的配置已经测试了,你可以试试。http://my.oschina.net/HeAlvin/blog/552875
hzh62
hzh62

引用来自“龅牙驴”的评论

VIP主机是唯一的客户端入口,如果最前端的VIP主机出现性能瓶颈怎么办?
这个问题不属于这次讨论,可以考虑 LVS 等。太扩散了也不好,讨论不清楚。
1899
1899

引用来自“龅牙驴”的评论

VIP主机是唯一的客户端入口,如果最前端的VIP主机出现性能瓶颈怎么办?
升级
1899
1899

引用来自“BaiYang”的评论

这种基于心跳线的双机容错方案无法避免出现脑裂(Split Brain)的风险。建议使用基于多数派算法的选举策略来推选 Master,同时实现实时的故障检测。
收到,我这边测试后会及时回复你的。
Keepalived高可用集群应用场景与配置

1.Keepalived单实例主备模式集群方案 这是最简单的模式,不只考虑高可用集群,先不考虑后方的Nginx负载均衡集群,即后端的服务器集群,参考下面的图示: 其对应的Keepalived核心配置如下: ...

xpleaf
2017/03/07
0
0
Nginx+Keepalived高可用集群

1.Keepalived高可用软件 Keepalived软件起初是专为LVS负载均衡软件设计的,用来管理并监控LVS集群系统中各个服务节点的状态,后来又加入了可以实现高可用的VRRP功能。因此,keepalived除了能...

10pcm
04/07
0
0
keepalived+nginx+tomcat的简单部署

keepalived+nginx Keepalived是一个基于VRRP协议来实现的服务高可用方案,也是一种高性能的服务器高可用或热备解决方案,可以利用其来避免IP单点故障,类似的工具还有heartbeat、corosync、p...

听雨x
2017/09/06
0
0
day63:keepalived介绍及高可用集群应用

1、linux集群:linux根据功能可分为两大类:高可用和负载均衡: 高可用集群:通常是两台服务器,一台工作,另一台提供冗余,当提供服务器的机器down机,冗余将接替继续提供服务,提供系统可用效率...

芬野de博客
09/05
0
0
分步LVS: 详解利用Keepalived+Nginx解决站点高可用性

方案: 利用keepalived+nginx实现官网web的高可用性 两台服务器一台为主,一台为备机,使两台机器公用一个虚拟IP,当主服务器宕机,106.3.32.6这个IP会自动切换到备机上,前端机恢复之后再自...

拜仁慕尼黑
2014/03/25
0
0

没有更多内容

加载失败,请刷新页面

加载更多

防御CSRF攻击

跨站请求伪造(CSRF)是一种安全漏洞,攻击者利用受害者的 session 来通过受害者的浏览器发出请求。攻击者通过受害者的浏览器发送请求,并伪造成是受害者自己发出的请求。 建议你先熟悉CSRF,...

Landas
23分钟前
0
0
【双12首发】终于等来了!PhalApi-iView-admin 开源后台框架

PhalApi-iView-admin 开源后台框架 码云地址:https://gitee.com/dogstar/phalapi-iview-admin Github地址:https://github.com/phalapi/phalapi-iview-admin 主要采用的技术: PhalApi 开源......

暗夜在火星
23分钟前
0
0
JavaScript面试题大坑之隐式类型转换实例代码

1.1-隐式转换介绍 在js中,当运算符在运算时,如果两边数据不统一,CPU就无法计算,这时我们编译器会自动将运算符两边的数据做一个数据类型转换,转成一样的数据类型再计算 这种无需程序员手...

peakedness丶
25分钟前
0
0
示例vue 的keep-alive缓存功能的实现

本篇文章主要介绍了vue 的keep-alive缓存功能的实现,写的十分的全面细致,具有一定的参考价值,对此有需要的朋友可以参考学习下。如有不足之处,欢迎批评指正。 #Vue 实现组件信息的缓存 当...

前端攻城老湿
27分钟前
0
0
解析Vue.js中的computed工作原理

我们通过实现一个简单版的和Vue中computed具有相同功能的函数来了解computed是如何工作的。写的十分的全面细致,具有一定的参考价值,对此有需要的朋友可以参考学习下。如有不足之处,欢迎批...

前端攻城小牛
28分钟前
1
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部