Wed负载均衡高可用之Nginx+keepalived

环境:centOS 5.5 64

软件:pcre-8.10.tar.gz

nginx-0.8.55.tar.gz

keepalived-1.2.7.tar.gz

安装

1pcre的作用为nginx提供兼容perl的正则表达式库。

tar zxvf pcre-8.10.tar.gz

cd pcre-8.10

./configure

make &&make install

2nginx 作用基于第7层(应用层),根据报头内的作息来执行负载均衡任务,所以对网络的依赖性比较小,理论上只要ping得通就能够实现负载均衡。适应高并发环境WEB应用软件。

tarzxvf nginx-0.8.55.tar.gz

cdnginx-0.8.55

./configure�Cuser=www �Cgroup=www �Cprefix=/usr/local/nginx �Cwith-http_stub_status_module--with-http_ssl_module

make&&makeinstall

配置文件vim/usr/local/nginx/conf/nginx.conf

#运行用户
userwww www ;
#启动进程,通常设置成和cpu的数量相等
worker_processes8;
#error_loglogs/error.log;
#error_loglogs/error.lognotice;
#error_loglogs/error.loginfo;
#PID文件
pidlogs/nginx.pid;
#这个指令是指当一个nginx进程打开的最多文件描述符数目,理论值应该是最多打开文件数,最好与ulimit -n 的值保持一致
worker_rlimit_nofile51200;
#工作模式及连接数上限
events {
#epoll是多路复用IO(I/OMultiplexing)中的一种方式,但是仅用于linux2.6以上内核,可以大大提高nginx的性能
use epoll;
#单个进程最大连接数(最大连接数=连接数*进程数)
worker_connections51200;
}
http {
includemime.types; #文件扩展名与文件类型映射表
default_typeapplication/octet-stream; #默认文件类型
server_names_hash_bucket_size 128;#服务器名字的hash表大小
client_header_buffer_size 32k;#上传文件大小限制
large_client_header_buffers 4 32k; #设定请求缓
client_max_body_size 8m; #设定请求缓
#sendfile 指令指定 nginx 是否调用 sendfile函数(zero copy 方式)来输出文件,对于普通应用,
#必须设为 on,如果用来进行下载等应用磁盘IO重负载应用,可设置为off,以平衡磁盘与网络I/O处理速度,降低系统的uptime.
sendfileon;
tcp_nopushon; #防止网络阻塞
tcp_nodelay on; #防止网络阻塞
keepalive_timeout120; #长连接超时时间,单位是秒
#FastCGI相关参数是为了改善网站的性能:减少资源占用,提高访问速度。下面参数看字面意思都能理解。
#服务器与脚本的接口
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模块设置
gzipon; #开启gzip压缩输出
gzip_min_length 1k; #最小压缩文件大小
gzip_buffers 4 16k; #压缩缓冲区
gzip_http_version 1.1; #压缩版本(默认1.1,前端如果是squid2.5请使用1.0)
gzip_comp_level 2; #压缩等级
#压缩类型,默认就已经包含text/html,所以下面就不用再写了,写上去也不会有问题,但是会有一个warn。
gzip_types text/plainapplication/x-javascript text/css application/xml;
gzip_vary on;
upstream backend {
#每个请求按访问ip的hash结果分配,这样每个访客固定访问一个后端服务器,可以解决session的问题。
ip_hash;
server 192.168.28.191:80;
server 192.168.28.192:80;
#主机后面加down为备份
#可以用域名
}
#虚拟主机的配置
server {
listen80; #监听端口
server_namewww.test.com; #域名可以有多个,用空格隔开
#charset koi8-r;
#access_loglogs/host.access.logmain;
#对 "/" 启用反向代理
location / {
root/home/www/html;
indexindex.php index.html index.htm;
proxy_redirect off;
#后端的Web服务器可以通过X-Forwarded-For获取用户真实IP
proxy_set_header Host $host;
proxy_set_header X-Real-IP$remote_addr;
proxy_set_header X-Forwarded-For$proxy_add_x_forwarded_for;
proxy_pass http://backend; #请求转向mysvr 定义的服务器列表
}
location /nginx {
access_log off;
stub_status on; #开启nginx监控模块
}
#日志格式与贵重路径
log_formatmain'$remote_addr - $remote_user [$time_local] "$request" '
'$status$body_bytes_sent "$http_referer" '
'"$http_user_agent" "$http_x_forwarded_for"';
access_log /home/logs/access.log;
}
}

Nginx启动:/usr/local/nginx/sbin/nginx

lsof �CI :80查看

通过查看Nginx的并发连接,我们可以更清除的知道网站的负载情况

#netstat -n |awk '/^tcp/ {++S[$NF]} END {for(a in S) print a, S[a]}'

解析:
CLOSED  //无连接是活动的或正在进行
LISTEN  //服务器在等待进入呼叫
SYN_RECV  //一个连接请求已经到达,等待确认
SYN_SENT  //应用已经开始,打开一个连接
ESTABLISHED  //正常数据传输状态/当前并发连接数
FIN_WAIT1  //应用说它已经完成
FIN_WAIT2  //另一边已同意释放
ITMED_WAIT  //等待所有分组死掉
CLOSING  //两边同时尝试关闭
TIME_WAIT  //另一边已初始化一个释放
LAST_ACK  //等待所有分组死掉

3keepalived 一款优秀实现高可用软件,主要功能实现真实的故障隔离及负载均衡器间的失败切换。

tar zxvf keepalived-1.2.7.tar.gz

cd keepalived-1.2.7

./configure �Cprefix=/usr/local/keepalived

make&&make install

为了方便启动和关闭

     cp/usr/local/keepalived/sbin/keepalived /usr/sbin

cp/usr/local/keepalived/etc/sysconfig/keepalived /etc/sysconfig/

cp/usr/local/keepalived/etc/rc.d/init.d/keepalived/etc/init.d/

配置文件vim/etc/keepalived/keepalived.conf

! ConfigurationFile for keepalived
global_defs {
notification_email{
[email protected]
#指定keepalived在发生切换时需要发送email到的对象,一行一个
}
notification_email_from [email protected]#指定发件人
smtp_server 127.0.0.1 #指定smtp服务器地址
smtp_connect_timeout 30#指定smtp连接超时时间
router_id LVS_DEVEL #运行keepalived机器的一个标识
}
vrrp_scriptcheck_nginx {
script"/etc/keepalived/monitor_nginx.sh" #切换脚本
interval 2#间隔几秒
weight 2#权重
}
vrrp_instanceVI_1 {
state MASTER#指定那个为master,那个为backup
#nopreempt不抢占
interface eth0#设置实例绑定的网卡
virtual_router_id 51 #VPID标记
mcast_src_ip 172.16.2.195 #本机IP 与从不同
priority 100#优先级,另一台改为90 与从不同
advert_int 1#检查间隔,默认1s
#认证
authentication {
auth_type PASS
auth_pass chtopnet
}
track_script {
check_nginx#指定应用的脚本
}
virtual_ipaddress {
172.16.2.1#设置虚拟IP
}
}

监控脚本

vim/etc/keepalived/monitor_nginx.sh

#!/bin/bash
PROC=`/usr/sbin/lsof -i:80 | wc -l`
if [ $PROC -eq 0 ]; then
/usr/local/nginx/sbin/nginx
sleep 5
PROC=`/usr/sbin/lsof -i:80 | wc -l`
[ $PROC -eq 0 ] && /etc/init.d/keepalived stop
Fi

 

 

 

你可能感兴趣的:(nginx,负载均衡,高可用,keepalived)