nginx自定义负载均衡及根据cpu运行自定义负载均衡
转载请注明出处:
1.nginx如何自定义负载均衡
在Nginx中,可以通过配置文件自定义负载均衡策略。具体步骤如下:
首先,在Nginx配置文件中定义一个upstream模块,并设置负载均衡策略和后端服务器列表,例如:
upstream myapp {
server backend1.example.com weight=3;
server backend2.example.com;
server backend3.example.com;
hash $remote_addr consistent;
}
其中,myapp是一个自定义的upstream名称,backend1.example.com、backend2.example.com、backend3.example.com是后端服务器的地址或域名。weight=3表示给backend1.example.com设置权重为3,而backend2.example.com和backend3.example.com的权重默认为1。hash $remote_addr consistent表示采用基于客户端IP地址的一致性哈希算法进行负载均衡。
2. 然后,在server模块中配置具体的代理规则,将请求代理到upstream中定义的服务器列表中,例如:
server {
listen 80;
server_name example.com;
location / {
proxy_pass http://myapp;
}
}
其中,proxy_pass http://myapp 表示将请求代理到myapp定义的服务器列表中进行负载均衡。
3. 最后,重新加载Nginx配置文件,使其生效:
sudo nginx -s reload
需要注意的是,Nginx支持多种负载均衡策略,例如轮询(默认)、IP哈希、URL哈希、加权轮询等。可以根据实际情况选择不同的负载均衡策略,并根据需要调整后端服务器列表的权重等参数,以实现自定义的负载均衡策略。
2.如何自定义根据cpu的运行情况进行负载均衡配置
可以使用Nginx的ngx_http_upstream_module模块和Lua脚本语言实现根据CPU的运行情况进行负载均衡配置。具体步骤如下:
安装ngx_http_lua_module模块,该模块提供了在Nginx中运行Lua脚本的能力。
在Nginx配置文件中定义upstream模块,并设置负载均衡策略和后端服务器列表,例如:
upstream myapp {
server backend1.example.com;
server backend2.example.com;
}
3.在server模块中定义Lua脚本,并在其中编写根据CPU运行情况进行负载均衡的代码,例如:
server {
listen 80;
server_name example.com;
location / {
access_by_lua_block {
local status = require "ngx.status"
local cpu = status.get_cpu()
local servers = ngx.shared.servers
local peer = servers:get(cpu)
if not peer then
local peers = {"backend1.example.com", "backend2.example.com"}
local index = cpu % #peers + 1
peer = peers[index]
servers:set(cpu, peer, 60 * 5) -- 缓存5分钟
end
ngx.var.backend = peer
}
proxy_pass http://$backend;
}
}
4. 在Nginx配置文件中添加shared_dict指令,用于共享服务器列表和CPU状态信息:
http {
lua_shared_dict servers 1m;
lua_shared_dict status 1m;
...
}
5.最后,重新加载Nginx配置文件,使其生效:
sudo nginx -s reload
该方法仅仅是一个参考,真实场景下,CPU的负载情况并不是唯一的考虑因素,还需要考虑网络延迟、后端服务器的性能、负载均衡的稳定性等因素。
nginx自定义负载均衡及根据cpu运行自定义负载均衡的更多相关文章
- CentOS 6.5 + Nginx 1.8.0 + PHP 5.6(with PHP-FPM) 负载均衡源码安装
CentOS 6.5 + Nginx 1.8.0 + PHP 5.6(with PHP-FPM) 负载均衡源码安装 http://www.cnblogs.com/ppoo24/p/4918288.ht ...
- 【官方文档】Nginx负载均衡学习笔记(二)负载均衡基本概念介绍
简介 负载均衡(Server Load Balancer)是将访问流量根据转发策略分发到后端多台 ECS 的流量分发控制服务.负载均衡可以通过流量分发扩展应用系统对外的服务能力,通过消除单点故障提升应 ...
- HHvm Apache 2.4 Nginx建站环境搭建方法安装运行WordPress博客
HHvm Apache 2.4 Nginx建站环境搭建方法安装运行WordPress博客 VPS主机 2014年06月02日 17:20 评论» 文章目录 Debian上安装 Ce ...
- 服务降级 托底预案 Nginx中使用Lua脚本检测CPU使用率,当达到阀值时开启限流,让用户排队
https://mp.weixin.qq.com/s/FZAcQQAKomGEe95kln1HCQ 在京东我们是如何做服务降级的 https://mp.weixin.qq.com/s/FZAcQQAK ...
- linux启动后自动登录并运行自定义图形界面程序
在<Ubuntu CTRL+ALT+F1~F6 进入命令模式后不支持中文显示的解决办法>一文中提到linux启动在以后运行一个独占显示器的图形程序的两种办法. 1.不启动xserver,使 ...
- cpu使用率低负载高,原因分析
原因总结 产生的原因一句话总结就是:等待磁盘I/O完成的进程过多,导致进程队列长度过大,但是cpu运行的进程却很少,这样就体现到负载过大了,cpu使用率低. 下面内容是具体的原理分析:在分析负载为什么 ...
- LVS(Linus Virtual Server):三种负载均衡方式比较+另三种负载均衡方式
还有个姊妹篇也可以参考这个文章:六大Web负载均衡原理与实现 什么是LVS (Linux Virtual Server)? 首先简单介绍一下LVS (Linux Virtual Server)到底 ...
- Linux下CPU利用率和负载的关系
1.CPU利用率和负载 CPU利用率显示的是程序在运行期间实时占用的CPU百分比:cpu使用率反映的是当前cpu的繁忙程度,忽高忽低的原因在于占用cpu处理时间的进程可能处于io等待状态但却还未释放进 ...
- 在kubernetes上运行WASM负载
在kubernetes上运行WASM负载 WASM一般用在前端业务中,但目前有扩展到后端服务的趋势.本文使用Krustlet 将WASM服务部署到kubernetes. 简介 Krustlet 是一个 ...
- 【转】多核CPU运行模式
多核CPU运行模式主要有以下三种: •非对称多处理(Asymmetric multiprocessing,AMP)——每个CPU内核运行一个独立的操作系统或同一操作系统的独立实例(instantiat ...
随机推荐
- Linux子系统之【内存管理】
1.内存管理的意义? 内存是进程运行的地方,相当于是战场.完善的机制能让进程多快好省地运行. 2.原始内存管理是怎么样的? 简陋(直接运行在物理内存上).不安全(无隔离,无权限) 缺点:容易出错,进程 ...
- Ansys-CHEMKIN-pro表面反应机制输入(Surface Kinetics Input)规则
chemkin表面反应机制文件(Ansys-CHEMKIN-pro表面反应机制输入) 1. 文件包含表面活性位(相).表面组分,固相组分.固相,热力学数据,反应机制: 2. 顺序:物质名称,活性位数据 ...
- 探秘ThreadLocal
一 类结构 主要是set(T), get(), remove()方法 二 TheadLocal是什么时候创建的 threadLocal的初始化, lazy creating, 用到的时候(get 或 ...
- Eclipse导入第四版《算法》algs4库
最近在研究<算法>,遇到algs4库导入eclipse问题,查了很多网站,都不适用,最终解决,特此记录一下.第一次写博客,有什么不足之处望各位大神纠正. 1. 首先打开eclipse软件, ...
- canal对接阿里云kafka
一.前提条件 已经有mysql实例 自建或者云上都可以 已经在阿里云的kakfa创建topic 默认不自动创建topic 二.配置要监控的instance 先修改example的配置文件 conf/e ...
- Django Models字段设置为空,界面上还校验必填问题
models.CharField(max_length=1000,null=True,blank=True) 其中blank=True是admin管理后台自动校验放开
- Java下变量大小写驼峰、大小写下划线、大小写连线转换
<dependency> <groupId>com.google.guava</groupId> <artifactId>guava</artif ...
- bytes转化为字典
import requestsurl='https://su.ke.com/api/listtop?type=resblock&resblock_id=2311062653496924& ...
- USB TTL CMOS 电平
USB转TTL模块的作用就是把电平转换到双方都能识别进行通信. TTL电平信号规定,+5V等价于逻辑"1",0V等价于逻辑"0"(采用二进制来表示数据时).这样 ...
- element plus按钮点击后不会自动失去焦点的解决方案及Vue3中如何挂载全局函数并在组件中使用
一.element plus按钮点击后不会自动失去焦点,该如何解决? 在按钮点击点击回调中增加以下代码: event.target.blur() if (event.target.nodeName = ...