如何配置consulconfig
⑴ 如何用Consul打造弹性可扩展的PaaS平台
如何用Consul打造弹性可扩展的PaaS平台
杜威,程序员,混迹互联网研发和运维近十年。《Linux系统案例精解》合着者之一。目前就职亮风台,专注DevOps、云计算、大数据等相关领域。
应用背景
HiAR 是亮风台打造的新一代增强现实(AR)开发平台,提供简单易用、功能强大、跨平台的 AR 服务。让广大开发者可以轻松使用最前沿的计算机视觉技术、计算机图形学技术,快速搭建个性化的 AR 应用。
云服务是HiAR平台中重要的基础设施。无论从高可用,还是到可扩展,服务发现都发挥着不可或缺的作用。在没有使用服务发现之前,我们遇到的几个痛点:
◆ 系统添加一个服务节点,我们需要手工修改Nginx/LVS的配置文件、修改DNS记录。
◆ 应用服务发布新版本,我们还是需要手工修改Nginx的配置文件把节点下线、等待发布成功后,再次修改Nginx的配置文件把服务上线。
◆ 尽管后来我们对上面两种场景的运维做了改进,编写脚本把过程改良为半自动半手动的方式,但还不是很方便,而结合服务注册就可以做到全自动。
◆ 内网DNS出了故障,我们需要对DNS服务进行维护。
◆ 没有服务注册,限制了Docker的发挥,只能当轻量级虚拟机来用。
现在,有了服务发现,一切都变得简单有趣。增减服务节点可以自动更新Nginx/LVS的配置文件;DNS丢一边吧!用IP就好;接入Mesos+Docker玩弹性扩展。
为什么选择 Consul
已经有很多文章对Zookeeper、etcd、Consul进行比较,这里就不重复类比了。没有什么比合适更重要!Consul 的运维成本低,部署简单、使用方便、五脏俱全,这对于中小型团队应该是性价比很高的。
在进入实战前,先看看 Consul 都有哪些特性。
◆ 服务注册。通过HTTP API或DNS,告诉服务注册中心有新的服务加入。
◆ 服务发现。通过HTTP API或DNS,可以知道目标服务的地址和端口。
◆ 健康检查。支持多种方式,HTTP、TCP、Docker、Shell脚本定制化监控。
◆ 配置模板。Consul Template 负责定期从服务注册中心获取信息,如果有变化自动更新配置文件并重新加载。
以上四点已经能满足很多企业的需求。当然这不是Consul的所有,Consul还有很多锦上添花的特性,比如:可视化Web界面、支持多数据中心。
实战经验
我们对Consul的使用可以归纳到四个方面:部署、应用、管理、升级。
部署
Consul Cluster有Server和Client两种角色。Server一般是3~5台,这也是官方推荐的。Consul Client就是需要进行服务注册或服务发现的节点。
Consul的部署简单、开箱即用,一个consul可执行文件,还没有乱七八糟的依赖。在官网下载编译好的Consul agent可执行文件,并上传到所有Server和Client角色的节点,便随时可启动consul agent了。
下面一起来看看,如何启动一个Consul集群(3台Server、1台Client)。
实验环境:
server01 192.168.1.11
server02 192.168.1.12
server03 192.168.1.13
client01 192.168.1.21
分别登录Server01、Server02、Server03,并启动agent。
[worker@server01 ~]$ consul agent -server -bootstrap-expect 2 -data-dir /tmp/consul -bind=192.168.1.11 -node=server01
[worker@server02 ~]$ consul agent -server -bootstrap-expect 2 -data-dir /tmp/consul -bind=192.168.1.12 -node=server02
[worker@server03 ~]$ consul agent -server -bootstrap-expect 2 -data-dir /tmp/consul -bind=192.168.1.13 -node=server03
新开窗口登录Server03,加入Server01、Server02的集群。
[worker@server03 ~]$ consul join 192.168.1.11 192.168.1.12
上面几步就完成了初始化Server节点,以后通过-rejoin参数启动,可以重新加入集群。
[worker@server01 ~]$ consul agent -server -bootstrap-expect 2 -data-dir /tmp/consul -bind=192.168.1.11 -node=server01 -rejoin
[worker@server02 ~]$ consul agent -server -bootstrap-expect 2 -data-dir /tmp/consul -bind=192.168.1.12 -node=server02 -rejoin
[worker@server03 ~]$ consul agent -server -bootstrap-expect 2 -data-dir /tmp/consul -bind=192.168.1.13 -node=server03 -rejoin
就这样三个Server节点部署完毕。接下来,部署Client节点,和Server节点一样,有初次启动、手工加入和重新加入集群三步。
[worker@client01 ~]$ consul agent -data-dir /tmp/consul -bind=192.168.1.21 -node=client01
还是在Client01上,新开一个登录窗口,加入Server01的集群。
[worker@client01 ~]$ consul join 192.168.1.11
Client01节点日后的维护,通过-rejoin参数启动,便可重新加入集群。
[worker@client01 ~]$ consul agent -data-dir /tmp/consul -bind=192.168.1.21 -node=client01 -rejoin
到这里为止,我们已经搭建好了一个Consul集群。然而,怎么进行服务注册和服务发现呢?这得跟实际需求紧密结合,在接下来的小节中进一步说明。
应用
Consul不是单独存在的。为了充分发挥Consul的优势,可以结合Nginx、LVS、Docker等工具来应用。
Nginx、LVS是系统的基础组件,RecoService、FeatureService、SearchService是基于SOA的内部服务。前者向Consul集群发现服务,后者向Consul集群注册服务。Consul是粘合剂也是开关,让整个系统的运作起来,低成本的实现了弹性伸缩。
接入层,用的是Nginx,负责反向代理和负载均衡。Nginx节点上跑两个Consul相关服务。一个是Consul Agent,做Consul Client;另外一个是Consul Template,做服务发现和配置更新。Consul Template负责定期查询本地Consul Agent,如果相关服务的注册信息有变化,则更新Nginx的配置文件并重新加载Nginx服务。
运行Consul Template是实现弹性扩展的关键步骤:
$ consul-template -consul 127.0.0.1:8500 -template "/etc/nginx/conf/vhosts/test.ctmpl:/etc/nginx/conf/vhosts/test.conf:nginx -s reload"
上面这句命令中,test.conf是Nginx的虚拟主机配置文件,test.ctmpl是该配置文件对应的模板。下面是模板在负载均衡上的代码片段:
upstream test-cluster {
ip_hash;{{range service "test"}}
server {{.Address}}:{{.Port}};{{end}}
}
逻辑层,基于SOA的内部服务集群。不同的内部服务集群之间通信需要做服务发现,这里引入LVS做服务发现。好处是不用在内部服务的代码里实现服务发现,而且规模大了还要做负载均衡。与接入层的Nginx类似,LVS也用Consul Template定期查询本地Consul Agent,更新相关配置文件,然后重载服务。
内部服务如何向服务中心注册?有两种方式,一是通过Consul的服务注册HTTP API,由服务自身在启动后调用API注册自己,二是通过在配置文件中定义服务的方式进行注册。建议使用后面一种方式来做服务注册。怎么办到的?请继续往下看 :)
为项目添加一个配置文件consul.json,指定服务名称和服务端口,并加上健康检查,内容如下:
{
"service":
{
"name" : "test",
"port" : 9999,
"check":
{
"tcp": "127.0.0.1:9999",
"interval": "10s"
}
}
}
最后一步,对服务进行注册,需要在Consul agent启动时指定配置文件,如下:
$ consul agent -data-dir /tmp/consul -node=test -bind=192.168.1.21 -config-dir=/tmp/consul.json
管理
一是节点管理,也就是Consul进程的管理。由于Consul Agent本身不具备高可用能力,所以我们有必要对Consul进程进行接管,我们用的是Systemd,你也可以选择Supervisord或者Upstart这些进程管理工具。
二是集群管理,Consul提供了可视化管理界面。可以查看所有的服务和节点,以及它们的健康检测和当前状态。
升级
由于Consul关系到整个系统的正常运作,所以升级的时候还是要很小心。最好在测试环境试验多几次,再到生产环境升级。升级的状况可以归纳为下面三种,需要对号入座之后再进行升级。
◆ 特殊版本的升级。在upgrade-specific页面查看当前升级的版本是否有特殊说明。比如:0.5.1之前的版本直接升级到0.6版本,要借助工具consul-migrate进行数据迁移。
◆ 不兼容的升级。使用consul -v查看新版的向后兼容协议版本号,当出现与当前版本不兼容时,需要分两步升级。先通过参数-protocal=旧的协议版本号,把整个集群升级一次,再把启动命令中的参数-protocal去掉来重启所有节点。
◆ 标准的升级。如果上面两种情况都不是,那么恭喜你,你需要做的只是简单的标准升级。即:停止旧版本的agent,然后启动新版本的agent。PS:其实大多数情况都是标准升级。
升级节点的推荐顺序是,先升级Server的Follower节点,再升级Server的Leader节点,最后升级所有Client的节点。
结语
在系统中引入服务注册和发现,虽然是一发牵动全身的改造,但整个系统架构会因此受益,尤其是现代的微服务架构。相信很多系统都具备负载均衡、健康检查、心跳检测等能力,利用好服务发现,那么弹性伸缩、服务高可用、灰度发布,自然是水到渠成的事情。
⑵ consul在本地安装后有哪些配置文件
是有两个,就像删个一样。比方说在酷狗里下了一首个歌这一首歌是你本来的歌单就有的你要把在酷狗里的这首歌删掉本地文件就是你本来的不是在酷狗里的那首歌那就叫本地文件
⑶ OpenResty 动态负载均衡
在之前提到的OpenResty/Nginx的负载均衡当中,当服务器启动之后,upstream中的上游服务器就是固定死的了,做不到动态的变更。这里面说到的变更,其实更多指的是增加机器。因为当上游服务器不可用时,upstream会自动将服务器摘除,但是当新增服务器时,upstream就做不到了。传统的负载均衡办法,就是能是修改配置,然后重启服务。下面介绍一下动态负载均衡的方式,一种是通过动态重启服务;另外一种是通过代码的方式动态拉取服务器列表。
Consul是一个分布式服务注册与发现系统。这里面使用Consul来管理上游服务器,当服务器启动时将其注册到注册中心去,当服务关闭时从注册中心列表中剔除。这里面需要注意一点的是:当上游服务器关闭时,Consul本身不会自动从列表中剔除,而是需要在服务器关闭前主动向Consul发起删除服务。
Consul有以下特性:
通过Consul可以获取到upstream中的上游服务器列表,下面要做的事情就是生成upstream中的模板了。这里就需要用到Consul-templete,它可以使用HTTP长轮询实现变更触发和配置更改。从而可以根据Consul服务器列表动态生成配置文件,然后去重新启动OpenResty/Nginx即可。
Consul+Consul-templete 就如上面所说的,是一种监听服务器列表变更,然后动态生成upstream模板,重启服务器。
Consul-Server
笔者使用的是MAC,下面所进行的操作都是基于MAC系统的。首先需要安装Consul如下:
安装完成之后,可以通过如下命令启动Consul服务:
启动完成之后,可以通过如下地址:localhost:8500/ui。访问Consul的Web界面:
可以使用HTTP的方式向Consul注册一个服务:
Consul-template
Consul-template的作用是生成upstream配置模板,安装命令如下:
然后在nginx.conf同级目录下创建moguhu_server.ctmpl
重启OpenResty脚本如下:reboot.sh
然后nginx.conf配置如下:
上游服务器
上游服务器upstream中使用的是Spring Boot实现的,其核心代码如下所示:
笔者在实验时,Consul版本的问题,造成在JVM停止时,没有执行删除服务的操作。因此附上下面的pom依赖
测试验证
1、启动Consul
2、启动Consul-template
3、启动2台upstream服务器
然后你会发现在nginx.conf的同级目录下生成了moguhu_server.conf文件,内容如下:
当手动停掉一台服务器时,配置又会变更为如下:
此时reboot.sh脚本会自动触发执行,如下所示:
上面的方式实现动态负载均衡在配置较多的时候会有一些问题,比如配置较多时,OpenResty重启的速度就会变慢。所以通过Lua脚本的方式可以规避掉重启这一步骤。
使用Lua实现时,与上面的组件相比Consul-templete就不需要了。通过Consul的 http://127.0.0.1:8500/v1/catalog/service/moguhu_server 接口就可以获取到服务的列表,如下所示:
这一方式当中主要就是OpenResty里面的相关配置。
OpenResty 配置
upstreams.lua
nginx.conf
上面通过balancer_by_lua_block去动态的设置了,upstream的服务器列表。然后启动OpenResty就可以了。
参考:《亿级流量网站架构核心技术》
⑷ consul修改默认配置后执行命令失效
创建一个 bootstrap.properties 配置文件来配置consul的配置中心相关配置。
consul的配置中心功能可使用,在bootstrap.properties 配置文件中设置, spring.cloud.consul.config.enabled=false 。
仅使用consul的服务注册与发现功能,pom文件中删除spring-cloud-consul-config依赖。仅使用consul的服务注册与发现功能
⑸ 微服务架构系列之–最全配置中心对比(面试随便装)
本文从社区活跃度、产品特点、成功案例、产品缺点等维度,全方位对比Spring Cloud Config、Apollo、Nacos、Disconf、Spring Cloud Consul、Spring Cloud Zookeeper等几款Spring Cloud生态的配置服务器,帮助你选择合适的配置服务器。
一、Spring Cloud Config
GitHub地址
https://github.com/spring-cloud/spring-cloud-config ,Star数1178,官方组件,社区较活跃
开源厂商
Pivotal(Spring官方团队)
产品特点
演示环境
暂无
成功案例
N多,目前用Spring Cloud的大多团队都是用的Spring Cloud Config
缺点
二、Apollo
GitHub地址
https://github.com/ctripcorp/apollo ,Star数11169,社区很活跃
开源厂商
携程
产品特点
成功案例
携程、网易蜂巢、中国平安等,更多公司详见https://github.com/ctripcorp/apollo
演示环境
http://106.12.25.204:8070/
账号/密码:apollo/admin
缺点
暂未发现
三、Nacos
GitHub地址
https://github.com/alibaba/nacos ,Star数3820,社区非常活跃
开源厂商
阿里巴巴
产品特点
成功案例
阿里巴巴、虎牙直播、工商银行软件开发中心、爱奇艺等,更多公司详见https://github.com/alibaba/nacos/issues/273
演示环境
http://console.nacos.io/nacos/index.html
缺点
暂未发现明显缺点
四、Disconf
GitHub地址
https://github.com/knightliao/disconf ,Start数4505,社区活跃度一般
开源厂商
原网络员工,现在蚂蚁金服
产品特点
成功案例
网络、滴滴出行、顺丰、网易等,更多公司详见https://github.com/knightliao/disconf
缺点
最新的版本发布于两年前,有点久了。
五、Spring Cloud Consul
GitHub地址
https://github.com/spring-cloud/spring-cloud-consul ,Star数493,官方组件,社区较活跃
开源厂商
Pivotal(Spring官方团队)
产品特点
成功案例
暂未发现
演示环境
暂无
缺点
六、Spring Cloud Zookeeper
GitHub地址
https://github.com/spring-cloud/spring-cloud-zookeeper ,Star数330,官方组件,社区较活跃
开源厂商
Pivotal(Spring官方团队)
产品特点
演示环境
暂无
成功案例
暂未发现
缺点
其他
如果使用的是Spring Cloud Kubernetes,或者将Spring Cloud应用部署在Kubernetes环境中,还可以选择ConfigMap,这种方式就笔者了解,业界这么玩的还不多,暂时不分析了。已经将Spring Cloud Kubernetes列入博客19年更新名单中了,敬请期待。
结论
⑹ 一、Nacos介绍
6月份阿里开源的Nacos发布了1.0.1版本,从去年7月份第一个release版本到现在一直在默默关注
官方的版本规划为:Nacos从0.8.0开始支持生产可用,1.0版本可大规模生产可用,2.0版本接入k8s、SpringCloud、ServiceMesh、ServerLess
公司目前的项目都是Springcloud,由于eureka2.X的断更、以及Nacos面世,所以自然而然最近就进行了一次试水爬坑,虽然过程艰苦,但是最终效果似乎还不错。
本文主要从以下几点来带大家熟悉下Nacos
Nacos是什么?好像没听过,不要紧。那Eureka听说过吧,在SpringCloud中做服务注册中心组件,类似的还有Zookeeper、Consul。
所以Nacos也是一个注册中心组件咯,当然是,不过 它不仅仅是注册中心 。
Nacos也是一个配置中心 ,比如SpringCloud中的Config,将配置文件版本化管理。
那么Nacos到底是什么呢, 总结为官网一句话就是:
首先要说Nacos的发展历程就要从阿里巴巴的内部产品ConfigServer说起了,因为 Nacos是ConfigServer 的开源实现
早在2008年阿里就开始服务化的进程(那个时候我好像还在上初中啊),在那个时候阿里内部自研的服务发现解决方案就叫做ConfigServer
ConfigServer经历了十年的发展从V1.0的单机版演变为目前对外公布的V4.0集群版。
2018年7月阿里巴巴高级技术专家许真恩(慕义)发布了Nacos首个开源版本V0.1.0,Nacos作为ConfigServer的开源实现截止目前已经更新到了V1.0.1的大版本,并且支持大规模生产版本。
虽然 官方文档 也有介绍,但是语言比较官方,我就用大白话谈一点自己的使用感受。
首先先上一张官方的生态图
除了对于阿里开源生态体系如 Dubbo 等自身的支持,也非常强调融入其它的开源生态,这里就包括 Java 的微服务生态体系 Spring Cloud,Kubernetes/CNCF 云原生生态体系。
Nacos 无缝支持 Spring Cloud,为 Spring Cloud 用户其提供更简便的配置中心和注册中心的解决方案。
Nacos支持目前几乎所有主流的微服务生态体系。
Nacos从官方的介绍上看,就像是SpringCloud中Eureka+Config+Bus+Git+MQ的一个结合体,当然也不能完全这么理解。Nacos是脱胎于阿里内部的ConfigServer,而ConfigServer早在3.0版本就解决了Eureka在1.0版本留下的隐患,所以从技术的更新和迭代角度来看,稳定版本的Nacos将更适合做为微服务体系中的服务注册发现组件,当然了他也不单单只是注册和发现。更多的特性和功能,不如一起搭建试试吧。
Nacos官方手册
⑺ consul 怎么把kv导出到一个指定的文件
方法一:先对结果进行排序分类汇总,复制粘贴排序后的数据,比较方便。
方法二: 进行三维地址引用。
直接在新的excel表输入公式查找,而地址引用原来的表格,自然结果就会在新表了。
例如,在工作薄 book1 中引用工作薄 book2 的 sheet1 。
工作表的 第3行第5列单元格,可以写作 [book2]sheet1!E3。
⑻ tectia client 配置文件路径
1. 相对路径
go run 或者 go build后在配置目录的相对路径上执行
假设当前目录如下:
├─config
│ │ main.go
│ │
│ └─file // 配置文件目录
│ config.ini
│
也就是说无论你是go run或者build后的执行程序,都应该在你执行目录下
有该配置文件路径如file/config.ini
否则就会发生以下错误, 无法读取配置文件
panic: Error:can not read file "./file/config.ini"
// 测试代码
func runOrBuildLoadConfig(){
// 使用库 go get github.com/aWildProgrammer/fconf
c, err := fconf.NewFileConf(" ./file/config.ini")
if err != nil {
panic(err)
}
fmt.Println(c.Int("server.port"))
}
2. 绝对路径
使用绝对路径读取配置文件
如果配置文件动态的话, 具体怎么传入 配置文件路径
使用flag包, go run或者build的执行程序 带上 -config=xxxxx路径
通过配置set/export环境变量, os.Getenv()获取该变量名称对应的值(即路径)
// 测试代码
func useAbsPathLoadConfig(){
// 这是直接硬编码的路径
ff,err := os.OpenFile("D:/GoWorkspace/src/Examples/config/file/config.ini",os.O_RDWR,666)
if err != nil {
panic(err)
}
var buf [100]byte
ff.Read(buf[:])
log.Println(string(buf[:]))
}
3. 网络GET, http ftp等
3.1 通过网络去获取配置文件
e.g http://localhost:8080/config/config.ini
func useNetworkLoadConfig(){
// ... 具体不实现
}
4. 嵌入到应用程序中
go-bindata 把配置文件打包进去
1. go get -u github.com/jteeuwen/go-bindata/...
2. 然后在当前目录执行go install ../..安装到GOPATH/bin目录
3. 使用 go-bindata --prefix=file file/... 将file目录下的文件嵌入,会生成bindata.go
4. go run main.go bindata.go 或者 build成可执行文件执行
// 测试代码
func useBindataLoadConfig(){
data, err := Asset("config.ini")
if err != nil {
panic(err)
}
// 输出 也可以拿来解析
log.Println(string(data))
5. 远程配置中心
5.1 使用远程配置中心去读取配置
通过key/value的方式存储在redis的配置, 配置过多可以使用pipe方式到导入
使用etcd / consul 之类的KV Store 进行动态配置
⑼ 电脑consul环境变量怎么设置和使用
环境变量也是我们系统属性中的一项重要的变量,接下来小编就教大家怎样进行环境变量的配置和使用。
具体如下:
1.首先打开电脑进入到桌面,然后找到我的电脑图标鼠标右击,在打开的菜单中选择属性选项。
然后我们会进入到系统界面我们在这个界面中点击左侧菜单中的高级系统设置选项。
接下来就会打开属性界面,我们点击系统属性窗口上方的高级设置选项,进入到高级设置选项界面之后,就可以点击界面下方的环境变量选项。
2.然后我们就会进入到环境变量窗口,我们在这个窗口下方系统变量中找到path的变量,然后我们鼠标点击选中之后,点击窗口下方的编辑按钮。
3. 接下来我们就会进入到编辑系统变量的窗口,我们在窗口下方便靓值的输入栏的分号后面进行编辑,输入D:\consul;。完成之后我们就可以点击窗口下方的确定按钮了。需要注意的是我们修改变量值的时候一定要在分号后面才可以进行修改,不然就会导致变量的损坏。
4.编辑完成之后我们就可以点击键盘上的WINDOWS图标键加上r键,打开运行窗口之后,在输入栏中输入cmd命令,然后敲击回车运行命令。如果我们在界面中出现了一连串的英文就说明我们已经成功修改了,如果失败了我们就需要重新进行设置。
5. 如果我们成功的进行配置之后我们就可以在最下方输入以下的命令:
consul.exe agent -dev ,consul.exe agent -dev -client 192.168.xx.xx。命令输入完成之后我们就已经可以成功使用了。
以上就是电脑consul环境变量的配置和使用方法。
⑽ f5和consul结合使用
两者可以组合使用。
1、该客户端提供一个服务,比如api或者mysql,另外一个客户端就可以去发现指定服务的服务提供者。通过DNS或者HTTP应用程序可以容易找到所依赖的服务。
2、健康检查consul可以提供健康检查服务。这个信息可以监视集群的健康。可以用来避免将流量发送到不健康的主机。
3、存储。应用程序可以使用consul的层级的储存。比如动态配置,协调服务。直接可以用HTTPAPI来操作。