环境:centOS 5.5 64位
软件:pcre-8.10.tar.gz
nginx-0.8.55.tar.gz
keepalived-1.2.7.tar.gz
安装
1、pcre的作用为nginx提供兼容perl的正则表达式库。
tar zxvf pcre-8.10.tar.gz
cd pcre-8.10
./configure
make &&make install
2、nginx 作用基于第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 //等待所有分组死掉
3、keepalived 一款优秀实现高可用软件,主要功能实现真实的故障隔离及负载均衡器间的失败切换。
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