Consul在linux环境的集群部署


Posted in Servers onApril 08, 2022

1.Consul概念

1.1什么是Consul?

Consul是一种服务网格解决方案,是HashiCorp公司推出的开源组件,由Go语言开发,部署起来很容易,只需要极少的可执行程序和配置。同时Consul也是一个分布式的,高度可用的系统,它附带了一个简单的内置代理,开箱即用,也支持Envoy等第三方代理集成,它还提供了具有服务发现,配置和分段功能。

1.2Consul的特点

●服务发现(Service Discovery):Consul提供了通过DNS或者HTTP接口的方式来注册服务和发现服务。一些应用程序通过Consul很容易的找到它所依赖的服务。
●健康检查(Health Checking):Consul的Client可以提供任何数量的健康检查,这些健康检查与应用服务(“ Web服务器是否返回200 OK”)或本地节点(“内存利用率低于90%”)相关联。操作员可以使用此信息来监视集群的健康状况,通过服务发现组件监控,避免流量路由到健康状况不佳的应用主机中。
●Key/Value存储(Key/Value Store):应用程序可以根据自己的需求使用Consul提供的Key/Value存储。Consul提供了简单易用的HTTP接口,结合其他工具可以实现动态配置(dynamic configuration)、功能标记(feature flagging)、协调(coordination)、领袖选举( leader election)等等功能。
●安全的服务通信(Secure Service Communication):Consul可以为服务生成和分发TLS证书,以建立相互的TLS连接。意图可用于定义允许哪些服务通信。服务分割可以很容易地进行管理,其目的是可以实时更改的,而不是使用复杂的网络拓扑和静态防火墙规则。
●多数据中心(Multi Datacenter):Consul支持开箱即用的多数据中心。这意味着用户不需要担心需要建立额外的抽象层让业务扩展到多个区域。

1.3Consul架构

Consul在linux环境的集群部署

根据这幅图可以看到有两个数据中心,分别为DataCenter1和DataCenter2。Consul拥有对多个数据中心的一流支持,这是比较常见的情况。
在每个数据中心中,我们都有客户端和服务器。最好是有三到五台服务器,这对于在故障情况下的可用性和性能之间取得了平衡,因为随着添加更多的机器,一致性会逐渐变慢。但是,客户端的数量没有限制,可以很容易地扩展到数千或数万。
Consul实现多个数据中心都依赖于gossip protocol协议。这样做有几个目的:首先,不需要使用服务器的地址来配置客户端;服务发现是自动完成的。其次,健康检查故障的工作不是放在服务器上,而是分布式的。这使得故障检测比单纯的心跳模式更具可伸缩性。为节点提供故障检测;如果无法访问代理,则节点可能经历了故障。
每个数据中心中的服务器都是一个Raft对等集的一部分。这意味着它们一起工作来选举单个leader,一个被选中的服务器有额外的职责。领导负责处理所有的查询和事务。事务还必须作为协商一致协议的一部分复制到所有对等方。由于这个需求,当非leader服务器接收到RPC请求时,它会将其转发给集群leader。

1.4Consul的应用场景包括服务发现、服务隔离与服务配置

●服务发现场景中consul作为注册中心,服务地址被注册到consul中以后,可以使用consul提供的dns、http接口查询,consul支持health check。
●服务隔离场景中consul支持以服务为单位设置访问策略,能同时支持经典的平台和新兴的平台,支持tls证书分发,service-to-service加密。
●服务配置场景中consul提供key-value数据存储功能,并且能将变动迅速地通知出去,借助Consul可以实现配置共享,需要读取配置的服务可以从Consul中读取到准确的配置信息。
●Consul可以帮助系统管理者更清晰的了解复杂系统内部的系统架构,运维人员可以将Consul看成一种监控软件,也可以看成一种资产(资源)管理系统。

2.Consul在linux上的集群部署

在consul官网(https://www.consul.io/downloads)上下载linux系统组件的最新版本,示例版本是1.8.5:
Consul在linux环境的集群部署

2.1前期准备

在虚拟机上准备三台CentOS:

CentOS 7-No.1:192.168.113.128
CentOS 7-No.2:192.168.113.129
CentOS 7-No.3:192.168.113.130

通过Xftp(或者其他工具)把解压好的consul组件分别上传到三台linux服务器里面,组件安装目录随自己喜好,我是放在/root目录里面的:
Consul在linux环境的集群部署

2.2集群部署

通过Xshell(或者其他工具)输入命令安装集群,先在三台服务器上切换到安装目录:

cd /root/consul_1.8.5_linux_amd64

然后分别在三台服务器上输入如下命令启动对应的Consul组件:

192.168.113.128:./consul agent -server -bootstrap-expect=3 -data-dir=/root/consul_1.8.5_linux_amd64 -node=server1 -bind=192.168.113.128 -client=0.0.0.0 -datacenter=myservicedc1 -ui
192.168.113.129:./consul agent -server -bootstrap-expect=3 -data-dir=/root/consul_1.8.5_linux_amd64 -node=server2 -bind=192.168.113.129 -client=0.0.0.0 -datacenter myservicedc1
192.168.113.130:./consul agent -server -bootstrap-expect=3 -data-dir=/root/consul_1.8.5_linux_amd64 -node=server3 -bind=192.168.113.130 -client=0.0.0.0 -datacenter myservicedc1

如果报执行权限不够(Permission denied),执行如下命令授予执行权限:

//授予执行权限
chmod +x consul

代理配置参数如下,想要了解更加详细配置参数也可以到官网文档(https://www.consul.io/docs/agent/options)查询:
●-server:此标志用于控制代理是处于服务器还是客户端模式。提供后,代理将充当Consul服务器。
●-bootstrap-expect:集群要求的最少server数量,当低于这个数量,集群即失效。
●-data-dir:data存储目录路径。
●-node:节点id,集群中的每个node必须有一个唯一的名称。默认情况下,Consul使用机器的hostname。
●-bind:监听的ip地址。默认绑定0.0.0.0,可以不指定。表示Consul监听的地址,而且它必须能够被集群中的其他节点访问。Consul默认会监听第一个Private IP,但最好还是提供一个。生产设备上的服务器通常有好几个网卡,所以指定一个不会出错。
●-client:客户端的ip地址,0.0.0.0是指谁都可以访问(不加这个,下面的ui :8500无法访问)。
●-ui:可以访问Consul UI管理界面。
●-config-dir:指定配置文件夹,Consul会加载其中的所有文件。
●-datacenter:指定数据中心名称,默认是dc1。
启动Consul集群组件后,会看到如下信息(No cluster leader):
Consul在linux环境的集群部署
这是因为集群没有指定一个leader,所以需要在128、129跟130服务器上之间指定一个为leader。因为这里我指定了128服务器为leader,所以需要在129、130服务器上输入如下命令加入以128为leader的Consul集群:

./consul join 192.168.113.128

输入命令后会看到如下信息:
Consul在linux环境的集群部署
这样说明129、130服务器的Consul组件加入集群成功!以下再列举下如何查看集群成员跟状况的命令:
●查看集群成员

./consul members

●查看集群状况

./consul operator raft list-peers

在浏览器上输入leader的Consul地址访问:
Consul在linux环境的集群部署
通过上述示例图片可以看到,Consul集群部署成功!

参考文献:
Consul官网

Servers 相关文章推荐
基于Nginx实现限制某IP短时间访问次数
Mar 31 Servers
Nginx反向代理及负载均衡如何实现(基于linux)
Mar 31 Servers
Linux中Nginx的防盗链和优化的实现代码
Jun 20 Servers
Nginx虚拟主机的配置步骤过程全解
Mar 31 Servers
阿里云k8s服务升级时502错误 springboot项目应用
Apr 09 Servers
Windows Server 2008 修改远程登录端口以及配置防火墙
Apr 28 Servers
聊聊配置 Nginx 访问与错误日志的问题
May 25 Servers
Nginx开源可视化配置工具NginxConfig使用教程
Jun 21 Servers
Linux中一对多配置日志服务器的详细步骤
Jul 23 Servers
阿里云服务器(windows)手动部署FTP站点详细教程
Aug 05 Servers
CentOS7 minimal 最小化安装网络设置过程
Dec 24 Servers
keepalived + nginx 实现高可用方案
Dec 24 Servers
nginx.conf配置文件结构小结
docker-compose部署Yapi的方法
Apr 08 #Servers
Nginx隐藏式跳转(浏览器URL跳转后保持不变)
Apr 07 #Servers
Nginx动静分离配置实现与说明
Nginx禁止ip访问或非法域名访问
Apr 07 #Servers
Nginx流量拷贝ngx_http_mirror_module模块使用方法详解
Apr 07 #Servers
忘记Grafana不要紧2种Grafana重置admin密码方法详细步骤
Apr 07 #Servers
You might like
Discuz 模板引擎的封装类代码
2008/07/18 PHP
用Php编写注册后Email激活验证的实例代码
2013/03/11 PHP
ThinkPHP 3.2 版本升级了哪些内容
2015/03/05 PHP
JavaScript判断两种格式的输入日期的正确性的代码
2007/03/25 Javascript
鼠标经过的文本框textbox变色
2009/05/21 Javascript
使用javascript实现ListBox左右全选,单选,多选,全请
2013/11/07 Javascript
JS实现鼠标单击与双击事件共存
2014/03/08 Javascript
javascript移动设备Web开发中对touch事件的封装实例
2014/06/05 Javascript
js实现键盘上下左右键选择文字并显示在文本框的方法
2015/05/07 Javascript
JS+DIV实现鼠标划过切换层效果的方法
2015/05/25 Javascript
使用bootstrapValidator插件进行动态添加表单元素并校验
2016/09/28 Javascript
seajs学习之模块的依赖加载及模块API的导出
2016/10/20 Javascript
ES6新特性之解构、参数、模块和记号用法示例
2017/04/01 Javascript
Vue2.0基于vue-cli+webpack Vuex的用法(实例讲解)
2017/09/15 Javascript
vue里面父组件修改子组件样式的方法
2018/02/03 Javascript
使用FileReader API创建Vue文件阅读器组件
2018/04/03 Javascript
Easyui 去除jquery-easui tab页div自带滚动条的方法
2019/05/10 jQuery
layui的表单提交以及验证和修改弹框的实例
2019/09/09 Javascript
解析vue、angular深度作用选择器
2019/09/11 Javascript
vue学习笔记之slot插槽用法实例分析
2020/02/29 Javascript
微信小程序仿抖音视频之整屏上下切换功能的实现代码
2020/05/24 Javascript
[10:42]Team Liquid Vs Newbee
2018/06/07 DOTA
Linux 发邮件磁盘空间监控(python)
2016/04/23 Python
Python实现按学生年龄排序的实际问题详解
2017/08/29 Python
Python导入模块时遇到的错误分析
2017/08/30 Python
Python字符串格式化%s%d%f详解
2018/02/02 Python
Python中常见的异常总结
2018/02/20 Python
python多进程提取处理大量文本的关键词方法
2018/06/05 Python
Python实现爬取马云的微博功能示例
2019/02/16 Python
python GUI库图形界面开发之PyQt5日期时间控件QDateTimeEdit详细使用方法与实例
2020/02/27 Python
tensorflow从ckpt和从.pb文件读取变量的值方式
2020/05/26 Python
Python实现文件压缩和解压的示例代码
2020/08/12 Python
python 两种方法修改文件的创建时间、修改时间、访问时间
2020/09/26 Python
Ancheer官方户外和运动商店:销售电动自行车
2019/08/07 全球购物
电气工程及其自动化专业求职信
2014/06/23 职场文书
优秀工作者事迹材料
2014/12/26 职场文书