您的位置:首页 > 运维架构 > Nginx

Nginx+Keepalived实现Web服务器负载均衡

2015-08-04 21:27 597 查看
说明:操作系统:CentOS 5.X 64位Web服务器:192.168.21.127、192.168.21.128站点:bbs.osyunwei.com和sns.osyunwei.com部署在两台Web服务器上实现目的:增加两台服务器(主主模式),通过Nginx+Keepalived实现Web服务器负载均衡架构规划:负载均衡服务器:192.168.21.129、192.168.21.130虚拟服务器(VIP):192.168.21.252、192.168.21.253部署完成之后:1、VIP:192.168.21.253指向192.168.21.129;VIP:192.168.21.252指向192.168.21.130;2、当192.168.21.129宕机时,VIP:192.168.21.253漂移到192.168.21.130上;3、当192.168.21.130宕机时,VIP:192.168.21.252漂移到192.168.21.129上;这样的主主模式好处是,两台服务器在提供服务的同时,又互为对方的备份服务器。具体操作:第一部分:在两台Nginx服务器上分别操作一、关闭SElinux、配置防火墙1、vi /etc/selinux/config#SELINUX=enforcing #注释掉#SELINUXTYPE=targeted #注释掉SELINUX=disabled #增加:wq! #保存退出setenforce 0 #使配置立即生效2、vi /etc/sysconfig/iptables #编辑-A RH-Firewall-1-INPUT -d 224.0.0.18 -j ACCEPT #允许组播地址通信-A RH-Firewall-1-INPUT -p vrrp -j ACCEPT #允许VRRP(虚拟路由器冗余协)通信-A RH-Firewall-1-INPUT -m state --state NEW -m tcp -p tcp --dport 80 -j ACCEPT #允许80端口通过防火墙:wq! #保存退出/etc/init.d/iptables restart #重启防火墙使配置生效二、安装Nginx1、安装编译工具包(使用CentOS yum命令安装,安装的包比较多,方便以后配置lnmp环境)yum install -y make apr* autoconf automake curl curl-devel gcc gcc-c++ gtk+-devel zlib-devel openssl openssl-devel pcre-devel gd kernel keyutils patch perl kernel-headers compat* cpp glibc libgomp libstdc++-devel keyutils-libs-devel libsepol-devel libselinux-devel krb5-devel libXpm* freetype freetype-devel freetype* fontconfig fontconfig-devel libjpeg* libpng* php-common php-gd gettext gettext-devel ncurses* libtool* libxml2 libxml2-devel patch policycoreutils bison2、下载软件包(1)http://nginx.org/download/nginx-1.4.7.tar.gz #下载Nginx(2)ftp://ftp.csx.cam.ac.uk/pub/software/programming/pcre/pcre-8.34.tar.gz #下载pcre (支持nginx伪静态)(3)http://labs.frickle.com/files/ngx_cache_purge-2.1.tar.gz #下载ngx_cache_purge(方便以后扩展配置nginx缓存服务器)上传以上软件包到/usr/local/src 目录3、安装pcrecd /usr/local/srcmkdir /usr/local/pcre #创建安装目录tar zxvf pcre-8.34.tar.gzcd pcre-8.34./configure --prefix=/usr/local/pcre #配置makemake install4、安装Nginxcd /usr/local/srcgroupadd www #添加www组useradd -g www www -s /bin/false #创建nginx运行账户www并加入到www组,不允许www用户直接登录系统cd /usr/local/src #进入安装目录tar zxvf ngx_cache_purge-2.1.tar.gz #解压tar zxvf nginx-1.4.7.tar.gz #解压cd nginx-1.4.7./configure --prefix=/usr/local/nginx --without-http_memcached_module --user=www --group=www --with-http_stub_status_module --with-openssl=/usr/ --with-pcre=/usr/local/src/pcre-8.34 --add-module=../ngx_cache_purge-2.1 #配置注意:--with-pcre=/usr/local/src/pcre-8.34指向的是源码包解压的路径,而不是安装的路径,否则会报错make #编译make install #安装/usr/local/nginx/sbin/nginx #启动nginx设置nginx开启启动vi /etc/rc.d/init.d/nginx #编辑启动文件添加下面内容=======================================================
=======================================================:wq! #保存退出chmod 775 /etc/rc.d/init.d/nginx #赋予文件执行权限chkconfig nginx on #设置开机启动/etc/rc.d/init.d/nginx restart #重新启动Nginxservice nginx restart=======================================================三、配置Nginxcp /usr/local/nginx/conf/nginx.conf /usr/local/nginx/conf/nginx.confbak #备份nginx配置文件1、设置nginx运行账vi /usr/local/nginx/conf/nginx.conf #编辑,修改找到user nobody;修改为user www www; #在第一行:wq! #保存退出2、禁止nginx空主机头vi /usr/local/nginx/conf/nginx.conf #编辑找到server,在上面一行添加如下内容:##############################server {listen 80 default;server_name _;location / {root html;return 404;}location ~ /.ht {deny all;}}##############################:wq! #保存退出/etc/rc.d/init.d/nginx restart #重启nginx这样设置之后,空主机头访问会直接跳转到nginx404错误页面。3、添加nginx虚拟主机包含文件cd /usr/local/nginx/conf/ #进入nginx安装目录mkdir vhost #建立虚拟目录vi /usr/local/nginx/conf/nginx.conf #编辑找到上一步添加的代码,在最后添加如下内容:include vhost/*.conf;:wq! #保存退出例如:##############################server {listen 80 default;server_name _;location / {root html;return 404;}location ~ /.ht {deny all;}}include vhost/*.conf;##############################4、添加Web服务器列表文件cd /usr/local/nginx/conf/ #进入目录touch mysvrhost.conf #建立文件vi /usr/local/nginx/conf/nginx.conf #编辑找到上一步添加的代码,在下面添加一行include mysvrhost.conf;:wq! #保存退出5、设置nginx全局参数vi /usr/local/nginx/conf/nginx.conf #编辑worker_processes 2; # 工作进程数,为CPU的核心数或者两倍events{use epoll; #增加worker_connections 65535; #修改为65535,最大连接数。}#############以下代码在http { 部分增加与修改##############server_names_hash_bucket_size 128; #增加client_header_buffer_size 32k; #增加large_client_header_buffers 4 32k; #增加client_max_body_size 300m; #增加tcp_nopush on; #修改为onkeepalive_timeout 60; #修改为60tcp_nodelay on; #增加server_tokens off; #增加,不显示nginx版本信息gzip on; #修改为ongzip_min_length 1k; #增加gzip_buffers 4 16k; #增加gzip_http_version 1.1; #增加gzip_comp_level 2; #增加gzip_types text/plain application/x-javascript text/css application/xml; #增加gzip_vary on; #增加6、设置Web服务器列表cd /usr/local/nginx/conf/ #进入目录vi mysvrhost.conf #编辑,添加以下代码upstream osyunweihost {server 192.168.21.127:80 weight=1 max_fails=2 fail_timeout=30s;server 192.168.21.128:80 weight=1 max_fails=2 fail_timeout=30s;ip_hash;}7、新建虚拟主机配置文件cd /usr/local/nginx/conf/vhost #进入虚拟主机目录touch osyunwei.conf #建立虚拟主机配置文件vi osyunwei.conf #编辑log_format access '$remote_addr - $remote_user [$time_local] $request ''"$status" $body_bytes_sent "$http_referer" ''"$http_user_agent" "$http_x_forwarded_for"';server{listen 80;server_name bbs.osyunwei.com sns.osyunwei.com;location /{proxy_next_upstream http_502 http_504 error timeout invalid_header;proxy_pass http://osyunweihost;#proxy_redirect off;proxy_set_header Host $host;proxy_set_header X-Forwarded-For $remote_addr;}location /NginxStatus {stub_status on;access_log on;auth_basic "NginxStatus";#auth_basic_user_file pwd;}access_log /usr/local/nginx/logs/access.log access;}:wq! #保存配置service nginx restart #重启nginx四、安装keepalived系统运维 www.osyunwei.com 温馨提醒:qihang01原创内容版权所有,转载请注明出处及原文链接下载keeplived:http://www.keepalived.org/software/keepalived-1.2.12.tar.gz上传keepalived-1.2.12.tar.gz到/usr/local/src目录cd /usr/local/srctar zxvf keepalived-1.2.12.tar.gzcd keepalived-1.2.12./configure --prefix=/usr/local/keepalived #配置,必须看到以下提示,说明配置正确,才能继续安装Use IPVS Framework : YesIPVS sync daemon support : YesUse VRRP Framework : Yesmake #编辑make install #安装cp /usr/local/keepalived/etc/sysconfig/keepalived /etc/sysconfig/keepalivedmkdir /etc/keepalivedln -s /usr/local/keepalived/etc/keepalived/keepalived.conf /etc/keepalived/cp /usr/local/keepalived/sbin/keepalived /usr/sbin/cp /usr/local/keepalived/etc/rc.d/init.d/keepalived /etc/rc.d/init.d/chmod +x /etc/rc.d/init.d/keepalived #添加执行权限chkconfig keepalived on #设置开机启动service keepalived start #启动service keepalived stop #关闭service keepalived restart #重启五、配置keepalivedcp /usr/local/keepalived/etc/keepalived/keepalived.conf /usr/local/keepalived/etc/keepalived/keepalived.conf-bakvi /usr/local/keepalived/etc/keepalived/keepalived.conf #编辑,修改为以下代码##########################################################以下为192.168.21.129服务器! Configuration File for keepalivedglobal_defs {notification_email {acassen@firewall.locfailover@firewall.locsysadmin@firewall.loc}notification_email_from Alexandre.Cassen@firewall.locsmtp_server 192.168.200.1smtp_connect_timeout 30router_id LVS_DEVEL}vrrp_script chk_nginx {script "/etc/keepalived/check_nginx.sh" #Nginx服务监控脚本interval 2weight 2}vrrp_instance VI_1 {state MASTERinterface eth0virtual_router_id 51priority 100advert_int 1authentication {auth_type PASSauth_pass 1111}track_script {chk_nginx #监测nginx进程状态}virtual_ipaddress {192.168.21.253}notify_master "/etc/keepalived/clean_arp.sh 192.168.21.253" #更新虚拟服务器(VIP)地址的arp记录到网关}vrrp_instance VI_2 {state BACKUPinterface eth0virtual_router_id 52priority 99advert_int 1authentication {auth_type PASSauth_pass 1111}virtual_ipaddress {192.168.21.252}notify_master "/etc/keepalived/clean_arp.sh 192.168.21.252" #更新虚拟服务器(VIP)地址的arp记录到网关}#########################################################:wq! #保存退出##########################################################以下为192.168.21.130服务器! Configuration File for keepalivedglobal_defs {notification_email {acassen@firewall.locfailover@firewall.locsysadmin@firewall.loc}notification_email_from Alexandre.Cassen@firewall.locsmtp_server 192.168.200.1smtp_connect_timeout 30router_id LVS_DEVEL}vrrp_script chk_nginx {script "/etc/keepalived/check_nginx.sh" #Nginx服务监控脚本interval 2weight 2}vrrp_instance VI_1 {state BACKUPinterface eth0virtual_router_id 51priority 99advert_int 1authentication {auth_type PASSauth_pass 1111}track_script {chk_nginx #监测nginx进程状态}virtual_ipaddress {192.168.21.253}notify_master "/etc/keepalived/clean_arp.sh 192.168.21.253" #更新虚拟服务器(VIP)地址的arp记录到网关}vrrp_instance VI_2 {state MASTERinterface eth0virtual_router_id 52priority 100advert_int 1authentication {auth_type PASSauth_pass 1111}virtual_ipaddress {192.168.21.252}notify_master "/etc/keepalived/clean_arp.sh 192.168.21.252" #更新虚拟服务器(VIP)地址的arp记录到网关}#########################################################:wq! #保存退出六、设置nginx服务监控脚本touch /usr/local/keepalived/check_nginx.shln -s /usr/local/keepalived/check_nginx.sh /etc/keepalived/check_nginx.shvi /etc/keepalived/check_nginx.sh #编辑,添加以下代码##########################################################!/bin/shif [ $(ps -C nginx --no-header | wc -l) -eq 0 ]; then/etc/rc.d/init.d/nginx startfisleep 2if [ $(ps -C nginx --no-header | wc -l) -eq 0 ]; then/etc/rc.d/init.d/keepalived stopfi#########################################################:wq! #保存退出chmod +x /usr/local/keepalived/check_nginx.sh #添加执行权限七、设置更新虚拟服务器(VIP)地址的arp记录到网关脚本touch /usr/local/keepalived/clean_arp.shln -s /usr/local/keepalived/clean_arp.sh /etc/keepalived/clean_arp.shvi /etc/keepalived/clean_arp.sh #编辑,添加以下代码#!/bin/shVIP=$1GATEWAY=192.168.21.2 #网关地址/sbin/arping -I eth0 -c 5 -s $VIP $GATEWAY &>/dev/null:wq! #保存退出chmod +x /usr/local/keepalived/clean_arp.sh #添加脚本执行权限service nginx restart #重启nginxservice keepalived restart #重启keepalived第二部分:测试Nginx+Keepalived是否正常运行一、bbs.osyunwei.com 解析到192.168.21.253;sns.osyunwei.com 解析到192.168.21.252;在两台Nginx服务器:192.168.21.129、192.168.21.130上执行命令:ip addr如下图所示:

系统运维 www.osyunwei.com 温馨提醒:qihang01原创内容版权所有,转载请注明出处及原文链接

可以看出现在VIP:192.168.21.253指向192.168.21.129;VIP:192.168.21.252指向192.168.21.130;在浏览器中打开http://bbs.osyunwei.com/http://sns.osyunwei.com/如下图所示:

此时,bbs和sns域名都被均衡到192.168.21.127上面二、停止192.168.21.127上面的nginx服务service nginx stop继续打开上面的两个网址,如下图所示:

此时,bbs和sns域名都被均衡到192.168.21.128上面(由于192.168.21.127服务器nginx服务被关闭,实现了故障转移)三、关闭192.168.21.129上面的Keepalived服务service keepalived stop此时,在两台Keepalived服务器:192.168.21.129、192.168.21.130上执行命令:ip addr如下图所示:



可以看出VIP:192.168.21.253和192.168.21.252均指向到192.168.21.130;此时,打开http://bbs.osyunwei.com/如下图所示:

可以正常访问四、恢复192.168.21.129上面的keepalived服务,恢复192.168.21.127上面的nginx服务,停止192.168.21.130上面的Keepalived服务service keepalived stop在两台Keepalived服务器:192.168.21.129、192.168.21.130上执行命令:ip addr如下图所示:



可以看出VIP:192.168.21.253和192.168.21.252均指向到192.168.21.129;此时,打开http://sns.osyunwei.com/如下图所示:

可以正常访问至此,Nginx+Keepalived实现Web服务器负载均衡配置完成。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息