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 { server 192.168.1.3:80; server 192.168.1.4:80; server 192.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 [error] 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