gaohan 发表于 2015-11-19 14:17:20

nginx+keepalived做负载均衡解决方案

  

nginx进程基于于Master+Slave多进程模型,自身具有非常稳定的子进程管理功能。在Master进程分配模式下,Master进程永远不进行业务处理,
只是进行任务分发,从而达到Master进程的存活高可靠性,Slave进程所有的业务信号都由主进程发出,Slave进程所有的超时任务都会被Master中止
,属于非阻塞式任务模型。
Keepalived是Linux下面实现VRRP 备份路由的高可靠性运行件。基于Keepalived设计的服务模式能够真正做到主服务器和备份服务器故障时IP瞬间无缝交接。
二者结合,可以构架出比较稳定的软件lb方案
keepalived 只vrrp模式配置参考
MASTER 配置文件
vrrp_instance VI_INET1 {
state MASTER
interface eth0
virtual_router_id 53
priority 200
advert_int 1
authentication {
auth_type pass
auth_pass yourpass
}
virtual_ipaddress {
213.138.29.8
213.138.29.9
}
}
SLAVE配置
vrrp_instance VI_INET1 {
state BACKUP
interface eth0
virtual_router_id 53
priority 100
advert_int 1
authentication {
auth_type pass
auth_pass yourpass
}
virtual_ipaddress {
213.138.29.8
213.138.29.9
}
}
Nginx负载均衡配置参考
user    www   www;
worker_processes 10;
pid   /var/run/nginx.pid;
worker_rlimit_nofile 51200;
events
{
use epoll;
worker_connections      51200;
}
http
{
include mime.types;
default_type application/octet-stream;
keepalive_timeout 120;
tcp_nodelay on;
upstream www.nix-adm.org {
server192.168.1.3:80;
server192.168.1.4:80;
server192.168.1.5:80;
}
server {
listen 80;
server_name www.nix-adm.org;
location /{
proxy_pass      http://www.nix-adm.org;
proxy_set_header Host   $host;
proxy_set_header X-Real-IP      $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
}
access_log /var/log/access.log combined;
}
}
SLAVE同步脚本
可以用crontab,每1分钟执行一次,逻辑是:
检查slave和master的配置文件md5 sum,如果不一样,则复制master的配置文件,并重新装载配置,如果进程不存在,则启动进程
#!/bin/sh
#ipv6chia@comsenz.com
#conf
MASTER_HOST=192.168.0.10
CONF=/usr/local/nginx/conf/nginx.conf
PROC=/usr/local/nginx/sbin/nginx
PID=/var/run/nginx.pid
#sum md5
SLAVE_SIG=`md5sum $CONF|awk '{print $1}'`
MASTER_SIG=`ssh $MASTER_HOST "md5sum $CONF"|awk '{print $1}'`
#check sig and reload or start nginx process
[ $SLAVE_SIG != $MASTER_SIG ] && scp $MASTER_HOST:$CONF $CONF && ( kill -HUP `cat $PID` &>/dev/null || eval $PROC ) || ( ! netstat -lnp|grep nginx && eval $PROC )

Q&A
2008/07/02 12:22:00 28639#0: *59 connect() failed (111: Connection refused) while connecting to upstream, client: 214.217.134.19, server: www.nix-adm.org, request: "GET /index.php HTTP/1.1", upstream: "http://192.168.0.12:80/index.php", host: "202.96.80.5"
请检查hostname
页: [1]
查看完整版本: nginx+keepalived做负载均衡解决方案