Nginx+Keepalived负载均衡主从

简介:

拓扑图:

224259675.jpg

环境描述:

操作系统:CentOS6.4_x64

master-nginx均衡器:192.168.0.202

backup-nginx均衡器:192.168.0.203

后端web1:192.168.0.204

后端web2:192.168.0.205

VTP:192.168.0.200

一、安装nginx

1、安装依赖包和创建用户和组

1
2
3
# yum install -y gcc gcc-c++ make kernel-headers glibc-headers zlib-devel openssl openssl-devel pcre-devel
# groupadd nginx
# useradd -g nginx -s /sbin/nologin nginx

2、安装nginx

1
2
3
4
# tar zxvf nginx-1.4.2.tar.gz
# cd nginx-1.4.2
# ./configure --prefix=/usr/local/nginx --user=nginx --group=nginx --with-http_ssl_module --with-http_gzip_static_module --with-http_stub_status_module
# make && make install

二、配置主配置文件

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
# vi /usr/local/nginx/conf/nginx.conf
user nginx nginx;
worker_processes 8;
error_log logs /error .log;
pid logs /nginx .pid;
events {
  worker_connections 1024;
}
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;  #上面是访问日志格式和记录位置
  sendfile on;
  tcp_nopush on;
  keepalive_timeout 65;
  gzip  on;
upstream www. test .com {
  server 192.168.0.203:80 weight=2;
  server 192.168.0.204:80 weight=2;
  }
  server {
  listen 80;
  server_name www. test .com;
  location / {
  root html;
  index index.html index.htm;  #请求转向mysvr 定义的服务器列表
  proxy_pass http: //www . test .com;
  proxy_headers_hash_max_size 51200;
  #设置头部哈希表的最大值,不能小于你后端服务器设置的头部总数。
  proxy_headers_hash_bucket_size 6400;  #设置头部哈希表大小
  proxy_set_header Host $host;
  proxy_set_header X-Real-IP $remote_addr;
  proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
  include proxy.conf;
  }
  }

1
2
3
4
5
6
7
8
9
10
11
12
13
# vi /usr/local/nginx/conf/proxy.conf
proxy_redirect off;
proxy_set_header Host $host;  #后端的Web服务器可以通过X-Forwarded-For获取用户真实IP
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
client_max_body_size 10m;      #允许客户端请求的最大单文件字节数
client_body_buffer_size 128k;  #缓冲区代理缓冲用户端请求的最大字节数,
proxy_connect_timeout 90;  #nginx跟后端服务器连接超时时间(代理连接超时)
proxy_read_timeout 90;  #连接成功后,后端服务器响应时间(代理接收超时)
proxy_buffer_size 4k;   #设置代理服务器(nginx)保存用户头信息的缓冲区大小
proxy_buffers 6 32k;    #proxy_buffers缓冲区,网页平均在32k以下的话,这样设置
proxy_busy_buffers_size 64k;     #高负荷下缓冲大小(proxy_buffers*2)
proxy_temp_file_write_size 64k;  #设定缓存文件夹大小,大于这个值,将从upstream服务器传

三、安装主从keepalived (配置基本一样,主配置文件稍作修改)

1、安装依赖包:

1
# yum install -y pcre pcre-devel openssl-devel lftp libnl-devel popt*

2、安装keepalived

1
2
3
4
5
# 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 --prefix=/usr/local/keepalived
# make && make install

3、keepalived配置成系统服务

1
2
3
4
5
# cp /usr/local/keepalived/etc/rc.d/init.d/keepalived /etc/init.d/
# cp /usr/local/keepalived/etc/sysconfig/keepalived /etc/sysconfig/
# mkdir /etc/keepalived/
# cp /usr/local/keepalived/etc/keepalived/keepalived.conf /etc/keepalived/
# cp /usr/local/keepalived/sbin/keepalived /usr/sbin/

4、修改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
# vi /etc/keepalived/keepalived.conf
! Configuration File  for  keepalived
global_defs {
notification_email {
test @sina.com  #故障联系人
  }
notification_email_from admin@ test .com  #故障发送人
smtp_server 127.0.0.1
smtp_connect_timeout 30
router_id LVS_MASTER  #BACKUP上修改为LVS_BACKUP
  }
vrrp_script check_nginx {
  script  "/usr/local/nginx/check_nginx.sh"  #检测nginx脚本路径
  interval 2  #监控时间/秒
  }
vrrp_instance VI_1 {
  state MASTER  #BACKUP上修改为BACKUP
  interface eth0
  virtual_router_id 51
  priority 100  #BACKUP上修改为90
  advert_int 1
  authentication {
  auth_type PASS
  auth_pass 1111
  }
track_script {  #实例引用脚本
      check_nginx
}
  virtual_ipaddress {  #VTP
  192.168.0.203
  192.168.0.204
  }
}

5、编写nginx_local.sh脚本

1
2
3
4
5
6
7
8
9
10
11
12
13
14
# vi check_nginx.sh
#!/bin/bash
Count1=` netstat  -antp | grep  - v  grep  | grep  nginx | wc  -l`
if  [ $Count1 - eq  0 ]; then
     /usr/local/nginx/sbin/nginx
     Count2=` netstat  -antp | grep  - v  grep  | grep  nginx | wc  -l`
     if  [ $Count2 - eq  0 ]; then
         service keepalived stop
     else
         exit  0
     fi 
else
     exit  0
fi

6、重新启动

1
2
# service keepalived restart
# /usr/local/nginx/sbin/nginx -s reload

四、其他说明

实验中遇到一个问题,当keepalived或服务器没有DOWN时,主从服务器不会切换,所以就使用vrrp_script功能,写了个简单的检测脚本,nginx服务启动不起来时,就关闭keepalived,从而确保能主从切换。

1.常用命令:

1
2
3
4
5
6
7
# ipvsadm -ln #显示集群中服务器ip信息
# ip add #显示VTP绑定在哪个服务器上
# /usr/local/nginx/sbin/nginx #启动nginx
# /sbin/nginx -s stop #快速终止web服务
# /sbin/nginx -s quit #有安排的结束web服务
# /sbin/nginx -s reload #重新加载相关配置
# echo '/usr/local/nginx/sbin/nginx' >> /etc/rc.local #设置开机启动

2.tail -f /var/log/messger(从日志中可知,主机出现故障后,备机立刻检测到,此时备机变为MASTER角色,并且接管了主机的虚拟IP资源,最后将虚拟IP绑定在eth0设备上)

3.当主LVS恢复后,会切换成主动服务器,如果Keepalived监控模块检测web故障恢复后,恢复的wen主机又将此节点加入集群系统中




本文转自 李振良OK 51CTO博客,原文链接:http://blog.51cto.com/lizhenliang/1301457,如需转载请自行联系原作者

相关实践学习
部署高可用架构
本场景主要介绍如何使用云服务器ECS、负载均衡SLB、云数据库RDS和数据传输服务产品来部署多可用区高可用架构。
负载均衡入门与产品使用指南
负载均衡(Server Load Balancer)是对多台云服务器进行流量分发的负载均衡服务,可以通过流量分发扩展应用系统对外的服务能力,通过消除单点故障提升应用系统的可用性。 本课程主要介绍负载均衡的相关技术以及阿里云负载均衡产品的使用方法。
相关文章
|
10天前
|
负载均衡 算法 应用服务中间件
面试题:Nginx有哪些负载均衡算法?Nginx位于七层网络结构中的哪一层?
字节跳动面试题:Nginx有哪些负载均衡算法?Nginx位于七层网络结构中的哪一层?
28 0
|
2月前
|
负载均衡 Java 应用服务中间件
|
2月前
|
负载均衡 监控 应用服务中间件
Nginx负载均衡:你的网站流量翻倍利器
Nginx负载均衡:你的网站流量翻倍利器
42 0
|
2月前
|
消息中间件 关系型数据库 MySQL
使用Nginx的stream模块实现MySQL反向代理与RabbitMQ负载均衡
使用Nginx的stream模块实现MySQL反向代理与RabbitMQ负载均衡
60 0
|
3月前
|
缓存 负载均衡 算法
【Nginx】Nginx 负载均衡
【1月更文挑战第25天】【Nginx】Nginx 负载均衡
|
3月前
|
负载均衡 应用服务中间件 nginx
【实践】使用Nginx作为GrayLog日志接入的负载均衡
【实践】使用Nginx作为GrayLog日志接入的负载均衡
44 0
|
3月前
|
负载均衡 算法 应用服务中间件
深入了解Nginx底层负载均衡算法
深入了解Nginx底层负载均衡算法
33 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
|
8月前
|
tengine 负载均衡 应用服务中间件
Nginx+Keepalived高可用集群部署详细文档
Nginx+Keepalived高可用集群部署详细文档
|
5月前
|
应用服务中间件 Shell nginx
Nginx + keepalived 实现高可用 + 防盗链 + 动静分离(二)
Nginx + keepalived 实现高可用 + 防盗链 + 动静分离