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

2024-02-26 06:58

本文主要是介绍nginx+keepalive实现高可用负载均衡,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

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

一:实验环境

主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.comsmtp_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 UNKNOWNlink/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 UNKNOWNlink/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等。

 

posted @ 2018-11-29 14:53 疯狂的米粒儿 阅读( ...) 评论( ...) 编辑 收藏

这篇关于nginx+keepalive实现高可用负载均衡的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/748018

相关文章

python使用watchdog实现文件资源监控

《python使用watchdog实现文件资源监控》watchdog支持跨平台文件资源监控,可以检测指定文件夹下文件及文件夹变动,下面我们来看看Python如何使用watchdog实现文件资源监控吧... python文件监控库watchdogs简介随着Python在各种应用领域中的广泛使用,其生态环境也

el-select下拉选择缓存的实现

《el-select下拉选择缓存的实现》本文主要介绍了在使用el-select实现下拉选择缓存时遇到的问题及解决方案,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的... 目录项目场景:问题描述解决方案:项目场景:从左侧列表中选取字段填入右侧下拉多选框,用户可以对右侧

使用Nginx来共享文件的详细教程

《使用Nginx来共享文件的详细教程》有时我们想共享电脑上的某些文件,一个比较方便的做法是,开一个HTTP服务,指向文件所在的目录,这次我们用nginx来实现这个需求,本文将通过代码示例一步步教你使用... 在本教程中,我们将向您展示如何使用开源 Web 服务器 Nginx 设置文件共享服务器步骤 0 —

Python pyinstaller实现图形化打包工具

《Pythonpyinstaller实现图形化打包工具》:本文主要介绍一个使用PythonPYQT5制作的关于pyinstaller打包工具,代替传统的cmd黑窗口模式打包页面,实现更快捷方便的... 目录1.简介2.运行效果3.相关源码1.简介一个使用python PYQT5制作的关于pyinstall

使用Python实现大文件切片上传及断点续传的方法

《使用Python实现大文件切片上传及断点续传的方法》本文介绍了使用Python实现大文件切片上传及断点续传的方法,包括功能模块划分(获取上传文件接口状态、临时文件夹状态信息、切片上传、切片合并)、整... 目录概要整体架构流程技术细节获取上传文件状态接口获取临时文件夹状态信息接口切片上传功能文件合并功能小

python实现自动登录12306自动抢票功能

《python实现自动登录12306自动抢票功能》随着互联网技术的发展,越来越多的人选择通过网络平台购票,特别是在中国,12306作为官方火车票预订平台,承担了巨大的访问量,对于热门线路或者节假日出行... 目录一、遇到的问题?二、改进三、进阶–展望总结一、遇到的问题?1.url-正确的表头:就是首先ur

C#实现文件读写到SQLite数据库

《C#实现文件读写到SQLite数据库》这篇文章主要为大家详细介绍了使用C#将文件读写到SQLite数据库的几种方法,文中的示例代码讲解详细,感兴趣的小伙伴可以参考一下... 目录1. 使用 BLOB 存储文件2. 存储文件路径3. 分块存储文件《文件读写到SQLite数据库China编程的方法》博客中,介绍了文

Redis主从复制实现原理分析

《Redis主从复制实现原理分析》Redis主从复制通过Sync和CommandPropagate阶段实现数据同步,2.8版本后引入Psync指令,根据复制偏移量进行全量或部分同步,优化了数据传输效率... 目录Redis主DodMIK从复制实现原理实现原理Psync: 2.8版本后总结Redis主从复制实

JAVA利用顺序表实现“杨辉三角”的思路及代码示例

《JAVA利用顺序表实现“杨辉三角”的思路及代码示例》杨辉三角形是中国古代数学的杰出研究成果之一,是我国北宋数学家贾宪于1050年首先发现并使用的,:本文主要介绍JAVA利用顺序表实现杨辉三角的思... 目录一:“杨辉三角”题目链接二:题解代码:三:题解思路:总结一:“杨辉三角”题目链接题目链接:点击这里

基于Python实现PDF动画翻页效果的阅读器

《基于Python实现PDF动画翻页效果的阅读器》在这篇博客中,我们将深入分析一个基于wxPython实现的PDF阅读器程序,该程序支持加载PDF文件并显示页面内容,同时支持页面切换动画效果,文中有详... 目录全部代码代码结构初始化 UI 界面加载 PDF 文件显示 PDF 页面页面切换动画运行效果总结主