Nginx的负载均衡和高可用
一、Nginx的理解
Nginx是一个高性能的HTTP和反向代理服务,也是一个IMAP/POP3/SMTP服务。Nginx是一款轻量级的web服务器/反向代理服务器及电子邮件(IMAP/POP3)代理服务器,并在一个BSD-like协议下发行。特点:占有内存少,并发能力强,事实上nginx的并发能力确实在同类型的网页服务器中表现最好。
轮询(默认算法) —— 每个请求会依次分配给后端不同的应用程序服务器,不理会后端服务器的实际压力
加权轮询 —— 权重越大的服务器,被分配到的次数就会越多,通常用于后端服务器性能不一致的情况
IP HASH —— 当同IP进行重复访问时会被指定到上次访问到的服务器,可以解决动态网站SESSION共享问题
二、nginx的配置
实验步骤:由于之前在源码包的编译过程使用了nginx,在此就不再叙述了,我们对nginx的配置进行如下修改。
1) 检测是否安装成功
---> /usr/local/nginx/sbin/nginx # 开启ngnix服务
注意:当服务启动出现错误:error while loading shared libraries:libpcre.so.1:cannot open shared object file:No such file or directory
解决方法:1、使用命令where libpcre.so.1找到它所在的位置
2、ln -s /usr/local/lib/libpcre.so.1 /lib64 命令做个软链接
3、再重新启动即可(ps -axu| grep nginx来查看nginx服务进程)
---> ln -s /usr/local/nginx/sbin/nginx /sbin/ # 进行nginx的链接操作
2)去掉nginx服务的版本号
---> vim /root/nginx-1.15.3/src/core/nginx.h # 只修改一行
# 此时,在真机中使用 curl -I 172.25.2.1 查看,则不会显示nginx的版本号。
3)注释/root/nginx-1.15.3/auto/cc/gcc中debug的下一行
4)在浏览器中输入server1的ip,可以访问nginx的默认文件
5)添加发布文件
---> vim /usr/local/nginx/html/index1.html
<h1>server1 --- nginx</h1>
# 在浏览器中的结果:
6)nginx的基本操作
---> /usr/local/nginx/sbin/nginx # 启动服务
---> /usr/local/nginx/sbin/nginx -s stop(reload、quit) #停停止、重启服务
---> /usr/local/nginx/sbin/nginx -h|-t # h命令帮助;t验证配置文件
三、Nginx实现负载均衡
1)修改主配置文件
---> vim /usr/local/nginx/conf/nginx.conf
worker_processes 1;
events {
worker_connections 65535;
}
http {
upstream xniu{
# ip_hash # 负载均衡算法,不写默认为rr(轮询)
server 172.25.2.2:80; # 后端服务器
server 172.25.2.3:80;
server 127.0.0.1:8080 backup; # 当后端服务器均有问题时,使用本地的服务
}
include mime.types;
default_type application/octet-stream;
server {
listen 80; # nginx监听80端口
server_name www.xniu.com; # 访问域名
location / {
proxy_pass http://xniu; # 访问上边的虚拟主机
}
}
}
2)查看系统支持的最大文件数,并编辑限制文件
---> sysctl -a | grep file
---> vim /etc/security/limits.conf
Nginx - nofile 65535 # 使nginx工作再nginx用户的工作空间
3)创建nginx用户
---> useradd -M -d /usr/local/ngnix ngnix #指定用户加目录
4)重新加载nginx:(加载之后需要打开server2和server3的httpd服务)
---> nginx -s reload
5)启动server2和server3的httpd服务;server1的httpd访问端口为8080并添加默认发布文件
6)在真机中测试负载均衡,方式是轮询
# 当server2和server3都坏掉的时候,会调用server1的httpd服务
# 也可以给后端服务器设置权重;编辑nginx.conf文件;在虚拟主机172.25.2.2后添加weight=2.则在真机中会出现两次server2,一此server3。结果如下:
# 若负载均衡算法为ip_hash,结果如下(同一个ip访问时,后端服务器不会改变):算法为hash时,不能有后备服务主机。
四、在nginx中静态模块sticky
sticky时nginx的一个模块,它是基于cookie的一种nginx的负载均衡解决方案,通过分发和时别cookie,来使同一客户端的请求罗在同一台服务器上。默认标识为route。功能相当于算法ip_bash。
具体数据的处理过程为:客户算首次发送访问请求,nginx接收后,发现请求头没有cookie,则以轮询方式将请求分发给后端服务器;后端服务器请求完成后,将响应数据返回给客户端;(此时,nginx生成带有route的cookie,返回给客户端,route的值与后端服务器想对应,可能是明文、md5、sha1等hash值;客户端保存带route的cookie )下一次客户端再发送请求时,会带上route,nginx接收到cookie中route值,随即就转发给对应的后端服务器。
五、使用corosync和pacemaker实现nginx的高可用
由于之前配置过corosync和pacemaker的实验环境,再这里就直接使用。若时有问题的话,可以查看之前的博客。
1)首先我们把server1和server4上都安装上nginx服务。这是只需要把server1中安装好的目录拷贝过去即可使用。
---> scp -r /usr/local/nginx server4:/usr/local
2)我们在server4中做一个软链接,并启动
---> ln - s /usr/local/nginx/sbin/nginx /sbin/
---> nginx # 启动服务(没报错说明正常)
---> nginx -s stop # 关闭服务
3)编写nginx的执行脚本(在网上搜即可),放在/etc/init.d/目录下,并给一个可执行权限
4)此时我们启动server1和server4的corosync服务
---> /etc/init.d/corosync start
5) 在corosync中添加ip和nginx服务(ip为之前添加进去的)
# 建立一个资源组,使ip和nginx运行在同一个节点上
6)完成之后,我们对节点进行测试。(添加进去的服务可以自启动)
# 在关闭节点4的corosync服务时,资源的调度会自动转换在server1上。(若两个节点都有问题,则不可以访问后端)
# 当server1主机崩了之后(echo c> /proc/sysrq-trigger),由于有fence机制,会自动启动,完成后又添加在在线节点中。
注意:当我挂掉一个节点后,再启动的时候,该节点会自动进行资源的抢夺。为了防止出现这样的现象,我们可以设置corosync的当前节点的粘滞性即可 。
Nginx的负载均衡和高可用的更多相关文章
- Keepalived+LVS+Nginx负载均衡之高可用
Keepalived+LVS+Nginx负载均衡之高可用 上一篇写了nginx负载均衡,此篇实现高可用(HA).系统整体设计是采用Nginx做负载均衡,若出现Nginx单机故障,则导致整个系统无法正常 ...
- nginx负载均衡+keepalived高可用
nginx负载均衡+keepalived高可用 环境准备 192.168.88.111:nginx + keepalived MASTER 192.168.88.112:nginx + keepa ...
- net core 实战之 redis 负载均衡和"高可用"实现
net core 实战之 redis 负载均衡和"高可用"实现 1.概述 分布式系统缓存已经变得不可或缺,本文主要阐述如何实现redis主从复制集群的负载均衡,以及 redis的& ...
- HAProxy+keepalived+MySQL 实现MHA中slave集群负载均衡的高可用
HAProxy+keepalived+MySQL实现MHA中slave集群的负载均衡的高可用 Ip地址划分: 240 mysql_b2 242 mysql_b1 247 haprox ...
- dubbo服务层面上的负载均衡和高可用
dubbo上的服务层可以做集群,来达到负载均衡和高可用,很简单,只需要在不同的服务器节点上向同一个zk(内网环境)注册相同的服务 注意就是,消费者不能在同一个zk做这种集群操作的 转载请注明博客出处: ...
- 本文介绍如何使用 Docker Swarm 来部署 Nebula Graph 集群,并部署客户端负载均衡和高可用
本文作者系:视野金服工程师 | 吴海胜 首发于 Nebula Graph 论坛:https://discuss.nebula-graph.com.cn/t/topic/1388 一.前言 本文介绍如何 ...
- Net分布式系统之三:Keepalived+LVS+Nginx负载均衡之高可用
上一篇写了nginx负载均衡,此篇实现高可用(HA).系统整体设计是采用Nginx做负载均衡,若出现Nginx单机故障,则导致整个系统无法正常运行.针对系统架构设计的高可用要求,我们需要解决Nginx ...
- asp.net core 实战之 redis 负载均衡和"高可用"实现
1.概述 分布式系统缓存已经变得不可或缺,本文主要阐述如何实现redis主从复制集群的负载均衡,以及 redis的"高可用"实现, 呵呵双引号的"高可用"并不是 ...
- TCP接入层的负载均衡、高可用、扩展性架构
一.web-server的负载均衡 互联网架构中,web-server接入一般使用nginx来做反向代理,实施负载均衡.整个架构分三层: 上游调用层,一般是browser或者APP 中间反向代理层,n ...
随机推荐
- java-基础-【三】try/catch/finally
原文地址: https://my.oschina.net/bieber/blog/703251 一.单层的try/catch public int test(int a,int b){ try{ re ...
- R语言apply()函数用法
在R语言的帮助文档里,apply函数的功能是: Retruns a vector or array or list of values obtained by applying a function ...
- PAT 1105 Spiral Matrix[模拟][螺旋矩阵][难]
1105 Spiral Matrix(25 分) This time your job is to fill a sequence of N positive integers into a spir ...
- 如何把PDF文件转换为JPG图片
大家有遇到需要将PDF文件转换为JPG的情况么,文档资料里面经常会有一些图片类型的内容,有的时候我们需要获取这些图片内容,但是PDF文件又是不可编辑的,那如何把PDF文件转换为JPG图片呢,跟着小编一 ...
- 4.5 Routing -- Setting Up A Controller
1. 改变URL可能也会改变屏幕显示哪个模板.然而,如果它们有信息去显示,模板才是有用的. 2. 在Ember.js中,一个模板从一个controller检索信息去显示. 3. 为了告诉control ...
- Thread的六中状态
线程共有6种状态:在某一时刻只能是这6种状态之一.这些状态由Thread.State这个枚举类型表示,并且可以通过getState()方法获得当前线程具体的状态类型. NEW:至今尚未启动的线程的状态 ...
- [翻译] Rails::Railtie
原文:http://api.rubyonrails.org/classes/Rails/Railtie.html Railtie 是 Rails 框架的核心,提供几个钩子来扩展或修改 Rails 的 ...
- FTRL与Online Optimization
1. 背景介绍 最优化求解问题可能是我们在工作中遇到的最多的一类问题了:从已有的数据中提炼出最适合的模型参数,从而对未知的数据进行预测.当我们面对高维高数据量的场景时,常见的批量处理的方式已经显得力不 ...
- 【运维技术】Jenkins配置使用教程
Jenkins配置使用教程 单机jenkins启动 软件安装和启动,必须含有java环境 # 安装jdk,参考其他教程,创建文件目录 mkdir -p /app/jenkins cd /app/jen ...
- 【转载】Java动态代理之JDK实现和CGlib实现(简单易懂)
转载请注明原文地址:http://www.cnblogs.com/ygj0930/p/6542259.html 一:代理模式(静态代理) 代理模式是常用设计模式的一种,我们在软件设计时常用的代理一般是 ...