nginx+keepalive实现高可用负载均衡

原创 2016年07月26日 18:21:57

一:实验环境

主nginx负载均衡器:10.192.203.201  (通过keepalived配置了VIP:10.192.203.106供外使用)
副nginx负载均衡器:10.192.203.102(通过keepalived配置了VIP:10.192.203.106供外使用)

后端代理的web服务器:
10.192.203.201:81
10.192.203.102:81

--由于是在自己虚拟机里实验的,所以这里一共使用了两台服务器。Nginx服务器最好能和web服务器分离。

二:实验步骤


2.1 安装web服务器

2.2 安装Nginx

在两台服务器上分别安装nginx,实验步骤参考:

http://blog.csdn.net/yabingshi_tech/article/details/47416787

 

2.3 配置nginx

#代理两台web服务器

修改两台nginx服务器配置文件:

vi /usr/local/nginx/conf/nginx.conf

修改前:

修改后(添加ustream……,修改server里的location /部分):

 

注意:proxy_pass http://webservers的webservers需要和upstream 后的内容保持一致。

 

重新加载配置文件(可以不用重启nginx):

/usr/local/nginx/sbin/nginx -s reload

#测试效果

这里以10.192.203.201为例。

先修改两台web服务器默认调用的文件index.html

[root@web1 ~]# echo"<h1>web1.test.com</h1>" > /var/www/html/index.html

[root@web2 ~]# echo"<h1>web2.test.com</h1>" > /var/www/html/index.html

 

多次刷新,可以看到有时调用的是web1,有时调用的是web2,说明做到了负载均衡。

也可以通过查看apache 访问日志,来查看nginx当时将请求发送到了哪台web服务器。

2.4 ngnix实现动静态分离

动态的由apache处理,静态的由Nginx处理。

vi /usr/local/nginx/conf/nginx.conf

server{}里添加:

location ~\.(php)?$ {
        proxy_set_header X-Real-IP$remote_addr;
        proxy_pass http://webservers;
        }
 
        location ~.*.(htm|html|gif|jpg|jpeg|png|bmp|swf|ioc|rar|zip|txt|flv|mid|doc|ppt|pdf|xls|mp3|wma|js|css)${
        root /usr/local/nginx/dandan;
        }

如图:

/*

如果后端代理的是tomcat或者jboss的话,将location ~ \.(php)?$ {

        proxy_set_header X-Real-IP$remote_addr;

        proxy_pass http://webservers;

        }

改为:  location ~  \.(jsp|do)$ { 

        proxy_pass http://webservers;

        proxy_set_header  X-Real-IP  $remote_addr;

}即可。

如图:

*/

在/usr/local/nginx/下新建一个dandan目录,并在该目录下新建一个a.html文件,添加内容:this is from nginx dir

测试静态页面:

 

测试动态页面

/*

确保web服务器上已经安装PHP

# sudo yum install php

# sudo /etc/init.d/httpd restart

*/

 echo"<?php phpinfo(); ?>" > /var/www/html/info.php

验证php是否是通过apache处理的:
关闭apache再测试访问php页面,看到访问不到php,但是能访问到静态页面

[root@PChtml]# service httpd stop

Stoppinghttpd:                                           [  OK  ]

 


2.5 nginx结合keepalive

nginx结合keepalive可以实现nginx的高可用。

2.5.1 安装keepalive

yum install -y popt-devel
cd /usr/local/src
tar zxvf keepalived-1.2.2.tar.gz
cd keepalived-1.2.2
./configure --prefix=/
make
make install


2.5.2 新建检查nginx脚本

vi /root/check_nginx.sh
if [ "$(ps -ef | grep "nginx:master process"| grep -v grep )" == "" ]
 then
    /etc/init.d/keepalived stop
 else
    echo "nginx is running"
fi

chmod +x /root/check_nginx.sh

加入到作业计划

crontab -e

*/1 * * * * /root/check_nginx.sh >>/root/check_nginx.log

2.5.3 修改配置文件

--修改两台keepalived服务器配置文件

vi /etc/keepalived/keepalived.conf

#ConfigurationFile for keepalived
global_defs {
notification_email {                        ######定义接受邮件的邮箱
 wangjj@hrloo.com
       }
 notification_email_from jiankong@staff.tuge.com    ######定义发送邮件的邮箱
 smtp_server mail.tuge.com
 smtp_connect_timeout 10
}
vrrp_script check_nginx {                   ######定义监控nginx的脚本
    script "/root/check_nginx.sh"
    interval 2                            ######监控时间间隔
    weight 2                              ######负载参数
    }
vrrp_instance vrrptest {                 ######定义vrrptest实例
       state BACKUP              ######服务器状态
 interface eth0                     ######使用的接口
       virtual_router_id 51               ######虚拟路由的标志,一组lvs的虚拟路由标识必须相同,这样才能切换
       priority 150                       ######服务启动优先级,值越大,优先级越高,BACKUP 不能大于MASTER
       advert_int 1                        ######服务器之间的存活检查时间
authentication {
       auth_type PASS                     ######认证类型
       auth_pass ufsoft       ######认证密码,一组lvs 服务器的认证密码必须一致
}
track_script {                              ######执行监控nginx进程的脚本
    check_nginx
    }
virtual_ipaddress {                         ######虚拟IP地址
        10.192.203.106
}
}

#注意,需要修改下从的priority的值 ,改成比主的小。

2.5.4  vi /etc/sysconfig/iptables

#注意,在两台机器上都要修改。添加:

-A INPUT -d 10.192.203.106/32 -j ACCEPT

-A INPUT -d 224.0.0.18 -j ACCEPT

#第二行意思是添加VRRP通讯支持

修改完后,重启防火墙

service iptables restart

2.5.5 启动keepalived

在两台服务器上分别启动:
service keepalived start

分别执行ip addr命令,可以在最先启动的机器上看到虚拟IP.如:

 [root@PCkeepalived]# ip addr
1: lo: <LOOPBACK,UP,LOWER_UP> mtu16436 qdisc noqueue state UNKNOWN
   link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00
   inet 127.0.0.1/8 scope host lo
   inet6 ::1/128 scope host
      valid_lft forever preferred_lft forever
2: eth0:<BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast state UP qlen1000
   link/ether 08:00:27:04:05:16 brd ff:ff:ff:ff:ff:ff
   inet 10.192.203.201/24 brd 10.192.203.255 scope global eth0
   inet 10.192.203.106/32 scope global eth0
   inet6 fe80::a00:27ff:fe04:516/64 scope link
      valid_lft forever preferred_lft forever
3: eth1:<BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast state UP qlen1000
   link/ether 08:00:27:3a:ec:3c brd ff:ff:ff:ff:ff:ff
   inet 10.0.0.1/24 brd 10.0.0.255 scope global eth1
   inet6 fe80::a00:27ff:fe3a:ec3c/64 scope link
      valid_lft forever preferred_lft forever
 

2.5.6 验证

关掉主的nginx,看到vip漂移到了从,且仍然能通过虚拟IP均衡地访问web服务器。

[root@PC keepalived]# ip addr
1: lo: <LOOPBACK,UP,LOWER_UP> mtu16436 qdisc noqueue state UNKNOWN
   link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00
   inet 127.0.0.1/8 scope host lo
   inet6 ::1/128 scope host
      valid_lft forever preferred_lft forever
2: eth0:<BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast state UP qlen1000
   link/ether 08:00:27:04:05:16 brd ff:ff:ff:ff:ff:ff
   inet 10.192.203.102/24 brd 10.192.203.255 scope global eth0
   inet 10.192.203.106/32 scope global eth0
   inet6 fe80::a00:27ff:fe04:516/64 scope link
      valid_lft forever preferred_lft forever

同理nginx也可以代理tomcat,jboss等。

本篇文章参考:http://www.360doc.com/content/13/1114/12/7694408_329125489.shtmlhttp://ju.outofmemory.cn/entry/52165

nginx - KeepAlive详细解释

最近工作中遇到一个问题,想把它记录下来,场景是这样的:     从上图可以看出,用户通过Client访问的是LVS的VIP, VIP后端挂载的RealServer是Nginx...
  • babydavic
  • babydavic
  • 2014年07月15日 11:24
  • 44776

Nginx之——Nginx+Keepalive 实现高可用负载均衡方案

主nginx负载均衡器:192.168.0.99  (通过keepalived配置了VIP:192.168.0.101供外使用) 副nginx负载均衡器:192.168.0.100 (通过keepal...
  • l1028386804
  • l1028386804
  • 2016年09月18日 21:15
  • 3166

nginx keepalive 高可用

在网络中机器不可避免的出现单点故障,当我们使用nginx进行反向代理的时候如果出现了nginx机器宕机,那么整个服务就会出现不可用的状态。那么我们针对这种情况我们该如何解决它呢?...
  • u012410733
  • u012410733
  • 2017年02月25日 15:53
  • 2331

nginx配置长连接---keepalive相关

http {   keepalive_timeout 20; --长连接timeout keepalive_requests 8192; --每个连接最大请求数 } events {...
  • senlin1202
  • senlin1202
  • 2017年01月19日 16:44
  • 4642

nginx优化——包括https、keepalive等

nginx优化——包括https、keepalive等 一、nginx之tcp_nopush、tcp_nodelay、sendfile 1、TCP_NODELAY 你怎么可以强制...
  • Dream_Flying_BJ
  • Dream_Flying_BJ
  • 2017年01月24日 18:15
  • 4744

nginx+keepalive实现高可用负载均衡

一:实验环境 主nginx负载均衡器:10.192.203.201  (通过keepalived配置了VIP:10.192.203.106供外使用) 副nginx负载均衡器:10.192.203....
  • u012572955
  • u012572955
  • 2017年02月28日 11:34
  • 477

Nginx Upstream Keepalive 分析

1.  实现原理 Nginx 1.1.14版本以前upstream连接建立和获取的机制如下图所示,Nginx会在一开始创建connection pool(进程间不共享,可以避免锁),提供给所有向前/...
  • lizhiqiang50
  • lizhiqiang50
  • 2012年05月09日 19:34
  • 7880

使用Nginx做负载均衡

原文出处: Steven Vaughan-nichols 译文出处: ChenYi 当然,除非你想干掉你的机器。蜘蛛侠有这样的一句信条,“权力越大,责任越大。” 对于 Linux 系统管理员们来...
  • zyd_15221378768
  • zyd_15221378768
  • 2018年01月11日 16:01
  • 51

Nginx+Tomcat搭建高性能负载均衡集群之枯藤老树

天净沙·秋思 --枯藤老树昏鸦,小桥流水人家,古道西风瘦马。夕阳西下,断肠人      在天涯。 一、     工具   nginx-1.8.0   apache-to...
  • chajinglong
  • chajinglong
  • 2018年01月16日 19:14
  • 10

CentOS7 keepalive+nginx高可用配置

I.准备 VIP:10.1.125.244 IP:10.1.125.152 IP:10.1.125.89  http://10.1.125.152:88/ http://10.1.125.89:88...
  • dingsai88
  • dingsai88
  • 2016年03月30日 15:58
  • 7911
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:nginx+keepalive实现高可用负载均衡
举报原因:
原因补充:

(最多只允许输入30个字)