Nginx负载均衡(主备)+Keepalived

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负载均衡器的文件一样

?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
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;
         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配置是否成功

主:

?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
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
     }
}

备: 

?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
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

?
1
2
3
4
5
6
7
8
#!/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①②,提高硬件资源利用率

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值