IT数码 购物 网址 头条 软件 日历 阅读 图书馆
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
图片批量下载器
↓批量下载图片,美女图库↓
图片自动播放器
↓图片自动播放器↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁
 
   -> 系统运维 -> Consul自动负载均衡 -> 正文阅读

[系统运维]Consul自动负载均衡

动态负载均衡有哪些实现方案?
何谓动态: (增加节点 调整权重 修改配置文件)
属于架构的知识: 传统的配置都放在项目中, 这样的化就有弊端(如果生产环境中发现配置文件配置有误), 重新修改项目配置文件, 重新打包
分布式领域: 分布式配置中心(配置统一管理) 扩展性及高
动态化: 可变化 灵活 Dubbo
2. 动态负载均衡 大型互联网公司中(动态配置), 如果需要频繁的发布版本, 提高扩展性 传统方式的Nginx配置负载均衡upstream扩展新的节点 要重启nginx服务器才能获取到最新的配置, 所以存不存在这样的一种方式, 在不重启nginx的前提下, 修改了upstream配置, 能实现动态获取nginx_upstream配置

upstream wwwbackend {
server 10.15.200.101:80 weight=1;
server 10.15.200.102:80 weight=1;
server 10.15.200.103:80 weight=1 backup;
}

server {
server_name www.example.cn;
access_log /dev/shm/www.example.cn.access.log main;
error_log /dev/shm/www.example.cn.error.log;
location / {
proxy_pass http://wwwbackend;
}
}

  1. 一台服务器专门的存放动态upstream配置服务器
  2. 可配置化: 灵活的扩展( 不要写死 ) 分布化配置中心 设置jdbc懒加载

一般常见如下三种方式:
1. Consul+Consl-template: 需要reload
2. Consul+OpenResty: 无需reload
3. Consul+UpSync: 无需reload

Nginx+Consul+UpSync: 实现动态负载均衡

实验思路:
每个知识点 哪个环节 及 其作用

Nginx: 反向代理和负载均衡
Consul: 实现分布式服务注册与发现功能(go)
UpSync:

微服务:
1)服务注册与发现应用场景: 微服务rpc远程调用(对服务实现服务治理(注册中心))
会员项目: 10.15.200.101
IP地址+端口号 (http://10.15.200.102:8081)
订单项目: 10.15.200.102:8081

注册中心: 专门存和IP地址和端口号

会员项目: vip.example.cn
    IP地址+端口号 (http://order.example.cn)
订单项目: order.example.cn

SpringCloud: 支持zookeeper Eureka Consul etcd(k8s注册中心)

服务注册:
服务发现:
故障检测:
K/V存储:
多数据中心:
Raft算法:
传统的负载均衡
请添加图片描述
自动负载均衡
请添加图片描述
服务调用
请添加图片描述
注册中心
请添加图片描述

[root@node01 ~]# tar -zxf nginx_consul.tgz
[root@node01 ~]# cd nginx_consul
[root@node01 nginx_consul]# unzip consul_1.6.3_linux_amd64.zip
[root@node01 nginx_consul]# sudo cp consul /usr/local/sbin/
consul-6ecc 服务的名字 下面nginx中的配置 与 服务的名字绑定 表明归属 (注册绑定信息)**
[root@node01 ~]# consul agent -dev -ui -node=consul-6ecc -client=10.15.200.101

浏览器进行访问: (出现一个web页面 这就是consul的web管理页面)

http://10.15.200.101:8500

HTTP_API接口: 1) curl 2) python 3) Postman

通过API方式 添加对应的upstream及服务节点: (添加3个后端节点 3001 3002 3003)

效果见: 05_consul管理页面.jpg

[root@node01 ~]# curl -X PUT -d ‘{“weight”:1,“max_fails”:2,“fail_timeout”:10}’ http://10.15.200.101:8500/v1/kv/upstreams/6ecc/10.15.200.101:3001
true
[root@node01 ~]# curl -X PUT -d ‘{“weight”:1,“max_fails”:2,“fail_timeout”:10}’ http://10.15.200.101:8500/v1/kv/upstreams/6ecc/10.15.200.101:3002
true
[root@node01 ~]# curl -X PUT -d ‘{“weight”:1,“max_fails”:2,“fail_timeout”:10}’ http://10.15.200.101:8500/v1/kv/upstreams/6ecc/10.15.200.101:3003
true

在 node01 创建 5个 测试目录 3001-3005 (3004 3005后面的测试要用到 提前创建好)

mkdir -p /data/web/6ecc/{3001,3002,3003,3004,3005}

for p in 3001 3002 3003 3004 3005
do
echo "welcome to 6ecc port p " > / d a t a / w e b / 6 e c c / p" > /data/web/6ecc/ p">/data/web/6ecc/p/index.html
done

前提 6ecc.example.cn这个域名 解析到 10.15.200.101
目的: 浏览器 或 CentOS 进行访问 多次刷新 出现 3001 3002 3003 的页面
http://6ecc.example.cn/

下面对Nginx进行相关安装和配置:

[root@node01 ~]# cd /root/nginx_consul/
[root@node01 nginx_consul]# sh install.sh

[root@node01 nginx_consul]# nginx -t
nginx: the configuration file /usr/local/webserver/nginx/conf/nginx.conf syntax is ok
nginx: configuration file /usr/local/webserver/nginx/conf/nginx.conf test is successful

[root@node01 nginx_consul]# systemctl start nginx
[root@node01 nginx_consul]# cat /usr/local/webserver/nginx/conf/vhosts_consul/6ecc.conf
server 10.15.200.101:3003 weight=1 max_fails=2 fail_timeout=10s;
server 10.15.200.101:3002 weight=1 max_fails=2 fail_timeout=10s;
server 10.15.200.101:3001 weight=1 max_fails=2 fail_timeout=10s;

配置文件本地持久化: (这是自动生成的 根据前面 绑定到 key:6ecc的value(多条数据): curl -X PUT -d)

[root@node01 ~]# cat /usr/local/webserver/nginx/conf/vhosts_consul/6ecc.conf
server 10.15.200.101:3003 weight=1 max_fails=2 fail_timeout=10s;
server 10.15.200.101:3002 weight=1 max_fails=2 fail_timeout=10s;
server 10.15.200.101:3001 weight=1 max_fails=2 fail_timeout=10s;

用浏览器进行测试:
http://6ecc.example.cn/ (如下结果 轮询出现)

welcome to 6ecc port 3001
welcome to 6ecc port 3002
welcome to 6ecc port 3003
在这里插入图片描述

在node01上 再加两个节点 进行测试: 效果图见: 06_添加两个节点.jpg

curl -X PUT -d ‘{“weight”:1,“max_fails”:2,“fail_timeout”:10}’ http://10.15.200.101:8500/v1/kv/upstreams/6ecc/10.15.200.101:3004
curl -X PUT -d ‘{“weight”:1,“max_fails”:2,“fail_timeout”:10}’ http://10.15.200.101:8500/v1/kv/upstreams/6ecc/10.15.200.101:3005

上面两条命令 的返回结果 一定是true 标明 命令返回成功

http://10.15.200.101:8500/ui/dc1/kv/upstreams/6ecc/ 效果图见: 06_添加两个节点.jpg

重复上面的过程中 进行测试:
http://6ecc.example.cn/ (如下结果 轮询出现)
在这里插入图片描述

welcome to 6ecc port 3001
welcome to 6ecc port 3002
welcome to 6ecc port 3003
welcome to 6ecc port 3004
welcome to 6ecc port 3005

发现 新增加的节点 直接持久化到本地
[root@node01 nginx_consul]# cat /usr/local/webserver/nginx/conf/vhosts_consul/6ecc.conf
server 10.15.200.101:3005 weight=1 max_fails=2 fail_timeout=10s;
server 10.15.200.101:3004 weight=1 max_fails=2 fail_timeout=10s;
server 10.15.200.101:3003 weight=1 max_fails=2 fail_timeout=10s;
server 10.15.200.101:3002 weight=1 max_fails=2 fail_timeout=10s;
server 10.15.200.101:3001 weight=1 max_fails=2 fail_timeout=10s;

添加或删除节点 不需要再次手动加载reload 或 重启nginx

  系统运维 最新文章
配置小型公司网络WLAN基本业务(AC通过三层
如何在交付运维过程中建立风险底线意识,提
快速传输大文件,怎么通过网络传大文件给对
从游戏服务端角度分析移动同步(状态同步)
MySQL使用MyCat实现分库分表
如何用DWDM射频光纤技术实现200公里外的站点
国内顺畅下载k8s.gcr.io的镜像
自动化测试appium
ctfshow ssrf
Linux操作系统学习之实用指令(Centos7/8均
上一篇文章      下一篇文章      查看所有文章
加:2021-08-20 15:29:39  更:2021-08-20 15:30:20 
 
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁

360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年11日历 -2024/11/15 9:57:05-

图片自动播放器
↓图片自动播放器↓
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
图片批量下载器
↓批量下载图片,美女图库↓
  网站联系: qq:121756557 email:121756557@qq.com  IT数码