Nginx配置upstream实现负载均衡及keepalived实现nginx高可用
(原文链接:http://www.studyshare.cn/blog-front//blog/details/1159/0 )
一、准备工作
1、准备两个项目,发布到不同的服务器上,此处使用2个虚拟机发布了两个项目分别为:http://192.168.28.128:8081,
http://192.168.28.129:8081
2、在两个虚拟机上都安装好nginx
二、配置upstream
1、在任意一台虚拟机上所安装的nginx的nginx.conf配置文件中配置upstream如下:

以上是负载均衡的基本配置,当前模式采用的是轮询的方式负载。除了轮询,还有weight(权重)、ip_hash(根据访
问ip,解决session问题)、第三方。
2、根据weight负载
upstream blog {
server 192.168.28.128:8081 weight=2;
server 192.168.28.129:8081 weight=1;
}
说明:以上配置表示三次访问的时候weight=2的服务被访问两次,weight=1的服务只被访问一次。
3、根据ip_hash负载
upstream blog {
ip_hash;
server 192.168.28.128:8081;
server 192.168.28.129:8081;
}
说明:用户第一次访问落在128上,那么以后该用户的访问都会在128的服务器上,如此即可解决session问题。
4、fair第三方
这种方式是按后端服务的响应时间来分配请求,相应时间短的优先分配。
upstream blog {
server 192.168.28.128:8081;
server 192.168.28.129:8081;
fair;
}
5、url_hash第三方
这种方式是按url的hash结果来分配请求,使没一个url请求定向到同一个后端服务器。也可解决session问题,但需
要注意,使用这种方式后,server语句中不能写入weight等其他参数。
upstream blog {
server 192.168.28.128:8081;
server 192.168.28.129:8081;
hash $request_uri;
hash_method crc32; #使用crc32 hash算法
}
三、配置keepalived
使用以上配置可以达到负载均衡的目的,如果使其中一台机器的服务挂掉,例如使用kill -9将192.168.28.128
的服务(注意:不是nginx挂掉,而是服务挂掉),此时nginx的负载均衡会检测到128的服务停止,只将来自
客户端的请求发到129所在的服务器上去,因此也保证了高可用。
那么如果128机器上的nginx也挂了呢?整个服务肯定就不可用了,如何保证nginx也高可用呢?此处使用keepalived
来保证nginx的高可用。
首先在192.168.28.128虚拟机上安装配置keepalived,如下:
1、安装keepalived:请参考:http://www.studyshare.cn/blog-front//software/details/1158/1 ,此处不再赘述
2、配置keepalived
命令:cd /etc/keepalived #进入keepalived配置文件目录
命令:vi keepalived.conf #编辑keepalived.conf配置文件
global_defs {
router_id LVS_1
}
vrrp_instance VI_1 {
state MASTER #主机
interface eth0 #网卡
virtual_router_id 51
priority 100
advert_int 1
authentication {
auth_type PASS
auth_pass 1111
}
virtual_ipaddress {
192.168.28.200 #配置一个虚拟vip
}
}
启动keepalived
命令:/usr/local/keepalived/sbin/keepalived
命令:ps -ef|grep keepalived #查看启动进程

命令:ip addr #查看eth0网卡

然后在192.168.28.129虚拟机上安装配置keepalived,如下:
1、安装略
2、配置keepalived配置文件
global_defs {
router_id LVS_2
}
vrrp_instance VI_1 {
state BACKUP #从机
interface eth0 #网卡
virtual_router_id 51
priority 50 #优先级
advert_int 1
authentication {
auth_type PASS
auth_pass 1111
}
virtual_ipaddress {
192.168.28.200 #配置一个虚拟vip,此ip与主机配置在虚拟ip需要一致
}
}
启动从机器的keepalived,启动方式与主机启动方式相同。
3、测试
(1)、主机的keepalive被kill前与kill后,从机器上eth0绑定vip情况如下:

总结:keepalived保证了vip在主从机器之间漫游。谁被kill掉后,vip就漫游到未被kill掉
4、配置keepalived监控nginx,实现nginx的高可用
(1)、新建一个文件并写入监控nginx执行脚本
命令:cd /usr/local/src
命令:vi check_nginx.sh
写入以下脚本命令:
#!/bin/bash
A=`ps -C nginx --no-header |wc -l`
if [ $A -eq 0 ];then
/usr/local/nginx/sbin/nginx #重启nginx,根据自己本机nginx安装路径编写
if [ `ps -C nginx --no-header |wc -l` -eq 0 ];then #nginx重启失败,则停掉keepalived服务,进行VIP转移
killall keepalived #杀掉,vip就漫游到另一台机器
fi
fi
保存退出。
(2)、修改keepalived.conf配置文件,加入以下两段

配置完成,重启keepalived。
总结:以上就完成了keepalived监控nginx的配置,当停止nginx的时候,监控脚本会自动检测nginx
是否存活,否就重启。达到nginx不死鸟的目的。
原创文章,转载请注明出处。更多技术文章:http://www.studyshare.cn/blog-front/blog/index
Nginx配置upstream实现负载均衡及keepalived实现nginx高可用的更多相关文章
- Nginx配置upstream实现负载均衡
如果Nginx没有仅仅只能代理一台服务器的话,那它也不可能像今天这么火,Nginx可以配置代理多台服务器,当一台服务器宕机之后,仍能保持系统可用.具体配置过程如下: 1. 在http节点下,添加ups ...
- 【upstream】Nginx配置upstream实现负载均衡
如果Nginx没有仅仅只能代理一台服务器的话,那它也不可能像今天这么火,Nginx可以配置代理多台服务器,当一台服务器宕机之后,仍能保持系统可用.具体配置过程如下: 1. 在http节点下,添加ups ...
- Nginx配置upstream实现负载均衡1
如果Nginx没有仅仅只能代理一台服务器的话,那它也不可能像今天这么火,Nginx可以配置代理多台服务器,当一台服务器宕机之后,仍能保持系统可用.具体配置过程如下: 1. 在http节点下,添加ups ...
- 【Nginx(三)】Nginx配置集群 负载均衡策略
Nginx配置集群 负载均衡策略 一.安装环境 1.安装JDK8的环境,配置JDK8的环境变量 2.上传jar包demo-1.jar 和 demo-2.jar demo-1.jar 监听8080端口; ...
- 浅谈web应用的负载均衡、集群、高可用(HA)解决方案(转)
1.熟悉几个组件 1.1.apache —— 它是Apache软件基金会的一个开放源代码的跨平台的网页服务器,属于老牌的web服务器了,支持基于Ip或者域名的虚拟主机,支持代理服务器,支持安 ...
- keepalived+LVS 实现双机热备、负载均衡、失效转移 高性能 高可用 高伸缩性 服务器集群
本章笔者亲自动手,使用LVS技术实现实现一个可以支持庞大访问量.高可用性.高伸缩性的服务器集群 在读本章之前,可能有不少读者尚未使用该技术,或者部分读者使用Nginx实现应用层的负载均衡.这里大家都可 ...
- 浅谈web应用的负载均衡、集群、高可用(HA)解决方案
http://aokunsang.iteye.com/blog/2053719 声明:以下仅为个人的一些总结和随写,如有不对之处,还请看到的网友指出,以免误导. (详细的配置方案请google,这 ...
- web应用的负载均衡、集群、高可用(HA)解决方案
看看别人的文章: 1.熟悉几个组件 1.1.apache —— 它是Apache软件基金会的一个开放源代码的跨平台的网页服务器,属于老牌的web服务器了,支持基于Ip或者域名的虚拟主机,支持代 ...
- JAVAEE——宜立方商城03:商品类目选择、Nginx端口或域名区分虚拟机、Nginx反向代理、负载均衡、keepalived实现高可用
1. 学习计划 第三天: 1.商品类目选择(EasyUI的tree实现) 2.图片上传 a) 图片服务器FastDFS(Nainx部分) 2. 商品类目选择 2.1. 原型 2.2. 功能分析 展示商 ...
随机推荐
- 洛谷 P1163 银行贷款
题目描述 当一个人从银行贷款后,在一段时间内他(她)将不得不每月偿还固定的分期付款.这个问题要求计算出贷款者向银行支付的利率.假设利率按月累计. 输入输出格式 输入格式: 输入文件仅一行包含三个用空格 ...
- Traceroute侦测主机到目的主机之间所经路由情况的重要工具
ICMP的应用--Traceroute Traceroute是用来侦测主机到目的主机之间所经路由情况的重要工具,也是最便利的工具.前面说到,尽管ping工具也可以进行侦测,但是,因为ip头的限制,pi ...
- PYTHON_DAY_02
今日内容: 01 列表内置方法 '''''' ''' 列表: 定义: 在[]内,可以存放多个任意类型的值, 并以逗号隔开. 一般用于存放学生的爱好,课堂的周期等等... ''' # 定义一个学生列表, ...
- 主成分分析、因子分析、ICA(未完成)
并且SVD分解也适用于一般的矩阵. 主成分分析可以简单的总结成一句话:数据的压缩和解释.常被用来寻找判断某种事物或现象的综合指标,并且给综合指标所包含的信息以适当的解释.在实际的应用过程中,主成分分析 ...
- Vickers Vane Pump Tips - Vane Pump Maintenance Note
The Vickers Vane Pump describes the matters needing attention in the maintenance of the vane p ...
- python猜年龄游戏升级版
猜年龄游戏升级版 要求:允许用户最多尝试3次,每尝试3次后,如果还没猜对,就问用户是否还想继续玩,如果回答Y,就继续让其猜3次,以此往复,如果回答N,就退出程序,如何猜对了,就直接退出 age = 1 ...
- qcloudsms_py
qcloudsms_py from qcloudsms_py import SmsVoicePromptSender from qcloudsms_py.httpclient import HTTPE ...
- docker nginx 负载均衡
index1.html <html> <head> <title>lb-test</title> </head> <body> ...
- 在不使用ssr的情况下解决Vue单页面SEO问题
遇到的问题: 近来在写个人博客的时候遇到了大家可能都会遇到的问题 Vue单页面在SEO时显得很无力,尤其是百度不会抓取动态脚本 Vue-Router配合前后端分离无法让meta标签在蜘蛛抓取时动态填充 ...
- 利用OpenXml读取、导出Excel
OpenXml是通过 XML 文档提供行集视图.由于OPENXML 是行集提供程序,因此可在会出现行集提供程序(如表.视图或 OPENROWSET 函数)的 Transact-SQL 语句中使用 OP ...