LinuxEye - Linux系统教程

LinuxEye - Linux系统教程

当前位置: 主页 > Linux教程 >

高可用负载均衡:Nginx + KeepAlived

时间:2013-09-12 20:26来源:zrwm.com 编辑:linuxeye 点击:
Nginx由于配置简单,扩展能力好,也很适合用来做负载均衡的解决方案. 环境说明: 192.168.1.191: 后台web服务器01 192.168.1.192: 后台web服务器02 192.168.1.190: Nginx Master服务器(lb0) 192.168.1.189: Nginx B

Nginx由于配置简单,扩展能力好,也很适合用来做负载均衡的解决方案.
环境说明:
192.168.1.191: 后台web服务器01
192.168.1.192: 后台web服务器02
192.168.1.190: Nginx Master服务器(lb0)
192.168.1.189: Nginx Backup服务器(lb1)
192.168.1.195: 负责对外提供服务的虚拟IP,该VIP由KeepAlived管理

VIP的绑定说明:

Internet--
         |
    =============
    | ISP Router|
    =============
         |
         |
         |      |eth0 -> 192.168.1.190 (connected to lan)
         |-lb0==|
         |      |eth1 -> 192.168.1.195 (vip master)
         |
         |      |eth0 -> 192.168.1.189 (connected to lan)
         |-lb1==|
                |eth1 -> 192.168.1.195 (vip backup)

VIP可以绑定到eth1,通过eth1与外网连接对外提供服务.本文配置测试的时候绑定到eth0:1

1.Nginx安装

wget -c http://nginx.org/download/nginx-1.2.6.tar.gz
tar zxvf nginx-1.2.6.tar.gz
cd nginx-1.2.6
./configure --prefix=/usr/local/nginx --with-http_ssl_module --with-http_realip_module --with-http_stub_status_module --with-pcre --with-http_gzip_static_module --with-openssl=/data/install/openssl-1.0.1c
make && make install

2. Nginx配置
#vi /usr/local/nginx/conf/nginx.conf

user  www www;
worker_processes 2;
pid        logs/nginx.pid;
worker_rlimit_nofile 51200;

events {
    use epoll;
    worker_connections 51200;
}
 
http {
   ##
   # basic settings
   ##
   include       mime.types;
   default_type  application/octet-stream;
   sendfile on;
   tcp_nopush on;
   tcp_nodelay on;
   keepalive_timeout 65;
   types_hash_max_size 2048;

   ##
   # logging settings
   ##
   #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;
   #error_log /var/log/nginx/error.log;

   ##
   # Gzip Settings
   ##
   gzip on;
   gzip_disable "msie6";
   
   #include /usr/local/nginx/conf/sites-enabled/*;
   include lb.conf;
}

#vi /usr/local/nginx/conf/lb.conf

upstream backend  {
    #ip_hash;
    server 192.168.1.191:80 max_fails=2 fail_timeout=5s;
    server 192.168.1.192:80 max_fails=2 fail_timeout=5s;
}

server {
    listen  80;
    server_name  192.168.1.195; #listen on VIP
    location / {
        proxy_pass        http://backend;
        proxy_set_header   Host             $host;
        proxy_set_header   X-Real-IP        $remote_addr;
        proxy_set_header   X-Forwarded-For  $proxy_add_x_forwarded_for;
    }
}

将lb0机器上的nginx配置文件nginx.conf和lb.conf复制到lb1机器上.

3.KeepAlived的配置及启动
#vi /etc/sysctl.conf
net.ipv4.ip_nonlocal_bind=1 #add this line to sysctl.conf
#sysctl -p

lb0和lb1的KeepAlived配置keepalived.conf如下:(不同的部分见红色部分注释)
#vi /usr/local/keepalived/etc/keepalived.conf

global_defs {
	router_id LVS_MASTER_1
}

vrrp_script check_http_port {
	script "/usr/local/nginx/monitoring.sh"
        interval 2  #check every 2 secs
	weight 2    # add 2 points of priority if OK
}
vrrp_instance VI_1 {
	state MASTER # or "BACKUP" on backup
 	interface eth0
 	priority 101 # 101 on master, 100 on backup
 	advert_int 1
        virtual_router_id 195

 	authentication {
 		auth_type PASS
 		auth_pass 123456
	}

 	track_script {
 		check_http_port
	}

 	virtual_ipaddress {
 		192.168.1.195
 	}
}

Nginx监控脚本:
#cat /usr/local/nginx/monitoring.sh

#!/bin/bash
if [ "$(ps -ef | grep "nginx: master process"| grep -v grep )" == "" ]; then
     /usr/local/nginx/sbin/nginx
     sleep 5
     if [ "$(ps -ef | grep "nginx: master process"| grep -v grep )" == "" ];then
         killall keepalived
     fi
fi

KeepAlived的启动

/usr/local/keepalived/sbin/keepalived -D -f /usr/local/keepalived/etc/keepalived/keepalived.conf

4.测试
原文:http://www.zrwm.com/?p=1824

转载请保留固定链接: https://linuxeye.com/Linux/1922.html

------分隔线----------------------------
标签:nginxKeepalived
栏目列表
推荐内容