linux下实现Nginx + consul + upsync 完成动态负载均衡

news2024/11/16 19:22:00

一、yum安装consul 

#安装yum-utils
yum install -y yum-utils

#配置consul的下载仓库
yum-config-manager --add-repo https://rpm.releases.hashicorp.com/RHEL/hashicorp.repo

#必须上面步骤,不然会找不到仓库
yum -y install consul

#查看版本
consul -v

二、启动consul(单节点)

#创建consul目录
mkdir /home/consul-data

#后台启动
nohup consul  agent -server -data-dir=/home/consul-data/  -node=node1 -bind=0.0.0.0 -bootstrap-expect=1 -client=0.0.0.0 -ui > /home/consul-data/consul.log  &

#关闭防火墙或开放端口8500 
systemctl stop firewalld
  • –server 指定server agent

  • –data-dir l数据存储路径

  • –bootstrap-expect 期望的server节点数目,consul一直等到指定sever数目才会引导整个集群

  • –bind:该地址用来在集群内部的通讯,集群内的所有节点到地址都必须是可达的,默认是0.0.0.0

  • –node:节点在集群中的名称,在一个集群中必须是唯一的,默认是该节点的主机名

  • –ui: web的管理ui,查看服务和节点,可以通过访问:8500端口要访问UI

  • –client:提供HTTP、DNS、RPC等服务,默认是127.0.0.1,不对外提供服务,如果需要则改成0.0.0.0

 单节点扩容(需要扩容时再做)

#扩容192.168.100.30
nohup consul agent -bind=0.0.0.0 -client=0.0.0.0 -data-dir=/home/consul-data/ -node=node2 -join=192.168.100.30 > /home/consul-data/consul.log 2>&1 &

三、访问consul

http://192.168.100.7:8500

 或使用命令访问

curl localhost:8500/v1/catalog/nodes

返回内容
[{"ID":"3f9f219a-f15e-82a9-0a23-889f324b1fe9","Node":"node1","Address":"192.168.100.7","Datacenter":"dc1","TaggedAddresses":{"lan":"192.168.100.7","lan_ipv4":"192.168.100.7","wan":"192.168.100.7","wan_ipv4":"192.168.100.7"},"Meta":{"consul-network-segment":""},"CreateIndex":12,"ModifyIndex":17}]

四、关闭consul

#关闭命令
consul leave

#后台启动使用这个
ps -ef | grep consul

kill -9 PID(Consul进程ID)

五、使用PostMan 注册Http服务

//地址  使用put请求

http://192.168.100.7:8500/v1/catalog/register

//发送json格式数据
//参数1
{"Datacenter": "dc1",
 "Node":"skus1",
 "Address":"192.168.100.37",
 "Service": {
	"Id" :"skuprice-skus1", 
		"Service": "skuprice",
		"tags": ["prod"],
		"Port": 80
		}}

有几个注册几个

六、发现Http服务

  http://192.168.100.7:8500/v1/catalog/service/skuprice

[{"ID":"","Node":"skus1","Address":"192.168.100.37","Datacenter":"dc1","TaggedAddresses":null,"NodeMeta":null,"ServiceKind":"","ServiceID":"skuprice-skus1","ServiceName":"skuprice","ServiceTags":["prod"],"ServiceAddress":"","ServiceWeights":{"Passing":1,"Warning":1},"ServiceMeta":{},"ServicePort":80,"ServiceSocketPath":"","ServiceEnableTagOverride":false,"ServiceProxy":{"Mode":"","MeshGateway":{},"Expose":{}},"ServiceConnect":{},"CreateIndex":96,"ModifyIndex":310},{"ID":"","Node":"skus2","Address":"192.168.100.39","Datacenter":"dc1","TaggedAddresses":null,"NodeMeta":null,"ServiceKind":"","ServiceID":"skuprice-skus2","ServiceName":"skuprice","ServiceTags":["prod"],"ServiceAddress":"","ServiceWeights":{"Passing":1,"Warning":1},"ServiceMeta":{},"ServicePort":80,"ServiceSocketPath":"","ServiceEnableTagOverride":false,"ServiceProxy":{"Mode":"","MeshGateway":{},"Expose":{}},"ServiceConnect":{},"CreateIndex":101,"ModifyIndex":308}]

七、删除http服务

http://192.168.100.7:8500/v1/agent/service/deregister/{ID}

八、nginx安装-使用编译安装需要把upsync模块编译进去

  get -c https://github.com/weibocom/nginx-upsync-module/archive/master.zip

unzip nginx-upsync-module-master.zip

#编译需要增加upsync模块

--add-module=/root/nginx-upsync-module

 nginx -V 查看已安装模块

 

九、实现nginx动态负载均衡配置

user  www www;
worker_processes auto;
error_log  /www/wwwlogs/nginx_error.log  crit;
pid        /www/server/nginx/logs/nginx.pid;
worker_rlimit_nofile 51200;

stream {
    log_format tcp_format '$time_local|$remote_addr|$protocol|$status|$bytes_sent|$bytes_received|$session_time|$upstream_addr|$upstream_bytes_sent|$upstream_bytes_received|$upstream_connect_time';
  
    access_log /www/wwwlogs/tcp-access.log tcp_format;
    error_log /www/wwwlogs/tcp-error.log;
    include /www/server/panel/vhost/nginx/tcp/*.conf;
}

events
    {
        use epoll;
        worker_connections 51200;
        multi_accept on;
    }

http
    {
        include       mime.types;
		#include luawaf.conf;

		include proxy.conf;

        default_type  application/octet-stream;

        server_names_hash_bucket_size 512;
        client_header_buffer_size 32k;
        large_client_header_buffers 4 32k;
        client_max_body_size 50m;

        sendfile   on;
        tcp_nopush on;

        keepalive_timeout 60;

        tcp_nodelay on;

        fastcgi_connect_timeout 300;
        fastcgi_send_timeout 300;
        fastcgi_read_timeout 300;
        fastcgi_buffer_size 64k;
        fastcgi_buffers 4 64k;
        fastcgi_busy_buffers_size 128k;
        fastcgi_temp_file_write_size 256k;
		fastcgi_intercept_errors on;

        gzip on;
        gzip_min_length  1k;
        gzip_buffers     4 16k;
        gzip_http_version 1.1;
        gzip_comp_level 2;
        gzip_types     text/plain application/javascript application/x-javascript text/javascript text/css application/xml;
        gzip_vary on;
        gzip_proxied   expired no-cache no-store private auth;
        gzip_disable   "MSIE [1-6]\.";

        limit_conn_zone $binary_remote_addr zone=perip:10m;
		limit_conn_zone $server_name zone=perserver:10m;

        server_tokens off;
        access_log off;
        
     upstream api.sku.broadout.cn {
        server 192.168.100.3:80; 
        #server 192.168.100.27:80;
        #server 192.168.100.29:80;
        upsync 192.168.100.7:8500/v1/kv/upstreams/skuprice upsync_timeout=6m upsync_interval=500ms upsync_type=consul strong_dependency=off;
        
        upsync_dump_path /www/server/nginx/conf/vhost/servers_skuprice.conf;
        #include /www/server/nginx/conf/vhost/servers_skuprice.conf;
     }
     
server
    {
         listen 80;
        server_name api.sku.broadout.cn;
         location / {
           proxy_pass         http://api.sku.broadout.cn; 
          proxy_set_header   Host             $host; 
          proxy_set_header   X-Real-IP        $remote_addr; 
          proxy_set_header   X-Forwarded-For  $proxy_add_x_forwarded_for; 
          # 显示具体负载的机器的ip,X-Route-Ip随便命名
          add_header X-Route-Ip $upstream_addr;
	        add_header X-Route-Status $upstream_status;
        }
    }
include /www/server/panel/vhost/nginx/*.conf;
}

 改动只有两处

#实现动态负载均衡
upstream api.sku.broadout.cn {
        server 192.168.100.3:80; 
        #server 192.168.100.27:80;
        #server 192.168.100.29:80;
        upsync 192.168.100.7:8500/v1/kv/upstreams/skuprice upsync_timeout=6m upsync_interval=500ms upsync_type=consul strong_dependency=off;
        
        upsync_dump_path /www/server/nginx/conf/vhost/servers_skuprice.conf;
        #include /www/server/nginx/conf/vhost/servers_skuprice.conf;
     }
     
server
    {
         listen 80;
        server_name api.sku.broadout.cn;
         location / {
           proxy_pass         http://api.sku.broadout.cn; 
          proxy_set_header   Host             $host; 
          proxy_set_header   X-Real-IP        $remote_addr; 
          proxy_set_header   X-Forwarded-For  $proxy_add_x_forwarded_for; 
          # 显示具体负载的机器的ip,X-Route-Ip随便命名
          add_header X-Route-Ip $upstream_addr;
	        add_header X-Route-Status $upstream_status;
        }
    }

重启生效

十、负载均衡测试

# 使用curl 请求,一定要是put请求
curl -X PUT http://192.168.100.7:8500/v1/kv/upstreams/skuprice/192.168.100.27:80
curl -X PUT http://192.168.100.7:8500/v1/kv/upstreams/skuprice/192.168.100.29:80
curl -X PUT http://192.168.100.7:8500/v1/kv/upstreams/skuprice/192.168.100.3:80

#或者使用postman调用consul提供的api来添加key,value
http://192.168.254.134:8500/v1/kv/upstreams/springbootserver/192.168.0.116:8081

# 甚至可以图形化界面进行操作,手动添加key value,手动添加时注意如果是创建文件夹需要在最后加一个正斜杠 :/

 

十一、在consul图形中添加key/value,设置权重

 

{"weight":1, "max_fails":2, "fail_timeout":10, "down":0}

 

在linux下实现Nginx + consul + upsync 完成动态负载均衡已完成

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/350294.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

计算机SCI论文课题设计需要注意什么? - 易智编译EaseEditing

课题设计就要本着严谨性和可行性来进行。实验设计的类型要选择准确,统计学的方法要运用合理,研究对象和观察指标的选择也要符合研究目的的要求,技术路线要清晰明了。 关于课题的设计的可行性也要综合考虑,比如前期的相关工作基础…

一文详解Redis持久化的两种方案

一文详解Redis持久化的两种方案1.RDB持久化2.RDB持久化原理3.AOF持久化4.RDB VS AOF1.RDB持久化 RDB全称Redis Database Backup file(Redis数据备份文件),也被叫做Redis数据快照。简单来说就是把内存中的所有数据都记录到磁盘中。当Redis实例故障重启后&#xff0c…

分享107个HTML电子商务模板,总有一款适合您

分享107个HTML电子商务模板,总有一款适合您 107个HTML电子商务模板下载链接:https://pan.baidu.com/s/1VW67Wjso1BRpH7O3IlbZwg?pwd0d4s 提取码:0d4s Python采集代码下载链接:采集代码.zip - 蓝奏云 Aplustemplates 购物模板…

Redis之集群搭建

redis的集群模式简介: redis的集群模式中可以实现多个节点同时提供写操作,redis集群模式采用无中心结构,每个节点都保存数据,节点之间互相连接从而知道整个集群状态。 集群搭建步骤如下 (一台服务器模拟多台服务器) 1.创建6个配置…

关于使用CMT2300A FIFO缓存区间设置为64Byte的问题

首先请看,CMT2300A 是什么产品,或者说是 模组吗? 请看介绍: https://blog.csdn.net/sishuihuahua/article/details/105095994 以及RFPDK 的使用: 这博客,记录了 RFPDK 的使用,以及遇到的一些问题 我说一下&#…

Windows瘦身方法

一、快速删除系统盘临时文件方法, 1、winr打开运行对话框,输入%temp%命令,如图1 图1 2、打开temp文件夹,如图2,选择所有文件,鼠标右键删除或按Del键删除。 图2 二、磁盘清理 1、winr,输入cleanmgr&#x…

重生之我是赏金猎人-SRC漏洞挖掘(十二)-记一次对抗飞塔流量检测的文件上传

0x00 前言 https://github.com/J0o1ey/BountyHunterInChina 欢迎亲们点个star 0x01 起因 某项目靶标,是一个人员管理系统,通过webpack暴露的接口 我们成功找到了一个未鉴权的密码修改接口,通过fuzz 我们获取到了该接口的参数username与…

干了1年“点点点”,自己辞职了,下一步是继续干测试还是转开发?

最后后台有个粉丝向我吐槽,不知道怎么选择了....下面就他的情况说说怎么选择? 目前已经提桶跑路,在大工厂里混了半年初级低级功能测试经验,并没有什么用。测试培训班来的。从破山村贫困户贫困专项出去的,学校上海的。…

基于RK3588的嵌入式linux系统开发(二)——uboot源码移植及编译

由于官方的SDK占用空间较大(大约20GB左右),需要联系相关供应商提供,且官方的SDK通过各种脚本文件进行集成编译,难以理解系统开发的详细过程。本章介绍直接从官方Github网站下载源码进行移植,进行uboot移植及…

动态规划【Day02】

动态规划初探坐标型动态规划115 不同的路径 II序列型动态规划515 房屋染色划分型动态规划题目坐标型动态规划 115 不同的路径 II 题目链接 题目描述: “不同的路径” 的跟进问题: 有一个机器人位于一个 mn 网格左上角。 机器人每一时刻只能向下或…

分布式入门

目录 一、RPC 1.1 RPC调用流程 二、SOA 三、微服务 3.1.什么是微服务 3.2.微服务与微服务架构 1 )微服务架构 2) 微服务 3.3.微服务的优缺点 3.1 微服务的优点 3.2 微服务的缺点 四.微服务的技术栈有哪些 一、RPC RPC(Remote Pro…

Linux磁盘查看,使用(分区、格式化、挂载)

目录 0、观察磁盘分区状态:lsblk、blkid、parted 0.1 lsblk列出系统上的所有磁盘列表 0.2 blkid列出设备的UUID等参数 0.3 parted列出磁盘的分区表类型与分区信息 1、磁盘分区:gdisk、fdisk 1.1 fdisk 2、磁盘格式化(创建文件系统…

Redis高级:数据结构

动态字符串SDS Redis保存的Key是字符串,value往往是字符串或者字符串的集合。可见字符串是Redis中最常用的一种数据结构。不过Redis没有直接使用C语言中的字符串,因为C语言字符串存在很多问题: 获取字符串长度需要进行一个运算非二进制安全…

【Unity VR开发】结合VRTK4.0:其他类抓取

语录: 一个正确的认识,往往需要经过由物质到精神,由精神到物质,即由实践到认识,由认识到实践这样多次的反复,才能够完成。 前言: 前面我们简单的使用了Interactions.Interactable的抓取。今天…

Ant Design Chart词云图

什么是词云图?词云图,也叫文字云,是对网络文本中出现频率较高的“关键词”予以视觉上的突出,出现越多,显示的字体越大,越突出,这个关键词也就越重要。让浏览者通过词云图一眼就可以快速感知最突…

Java_Maven:3. 分模块构建工程

目录 1 需求 2 案例实现 2.1 maven-parent 父模块 2.1.1 创建父工程 2.1.2 定义 pom.xml 2.1.3 将父工程发布至仓库 2.2 ssm_dao 子模块 2.2.1 创建 dao 子模块 2.2.2 定义 pom.xml 2.2.3 dao 代码 2.2.4 配置文件 2.2.5 单元测试 2.2.6 把 dao 模块 install 到本…

MySQL的索引视图练习题

学生表:Student (Sno, Sname, Ssex , Sage, Sdept) 学号,姓名,性别,年龄,所在系 Sno为主键 课程表:Course (Cno, Cname,) 课程号,课程名 Cno为主键 学生选课表:SC (Sno, Cno, Score)…

FDX-B|EMID格式低频RFID 读卡模块LD6900技术选型与说明

FDX-B|EMID格式低频RFID 读卡模块LD6900是华翔天诚推出一款基于 RFID 无线射频识别技术的低频(LF)读卡模块,工作频率支持 134.2KHZ、125KHZ,符合 ISO 11784/5 国际标准,支持对 FDX-B、EMID 两种协议格式电子标签的读取…

C++ ---智能指针详解

文章目录前言一、 为什么需要智能指针?二、内存泄漏2.1 什么是内存泄露?危害是什么?2.2 内存泄露的分类2.3 如何避免内存泄露三、智能指针的使用及原理3.1 RAII3.2 智能指针的原理3.3 std::autoptr3.4 std::unique_ptr3.5 std::shared_ptrstd::shared_ptr的循环引…

Beefxss使用教程图文教程(超详细)

「作者主页」:士别三日wyx 「作者简介」:CSDN top100、阿里云博客专家、华为云享专家、网络安全领域优质创作者 Beefxss一、首次使用二、修改账号密码三、自带练习页面四、简单使用五、工具界面介绍六、功能演示1、网页重定向2、社工弹窗3、功能颜色标识…