consule的server和client的问题
来源:10-11 编码实战: 改造账号系统service

成龙哥哥
2019-05-27
问题一:不需要启动client
老师启动了三个consule服务节点分别是
docker run --name consul1 -d -p 8500:8500 -p 8300:8300 -p 8301:8301 -p 8302:8302 -p 8600:8600 consul agent -server -bootstrap-expect 2 -ui -bind=0.0.0.0 -client=0.0.0.0
docker run --name consul2 -d -p 8501:8500 consul agent -server -ui -bind=0.0.0.0 -client=0.0.0.0 -join 172.17.0.2
docker run --name consul3 -d -p 8502:8500 consul agent -server -ui -bind=0.0.0.0 -client=0.0.0.0 -join 172.17.0.2
这三个节点都是server,不需要启动client吗
问题二
consule运行的机器,是否最好只运行consule,为了保证consule的稳定吗?
问题三
这句话没太理解
-client 指定consul绑定在哪个client地址上,这个地址可提供HTTP、DNS、RPC等服务,默认是127.0.0.1
“指定consul绑定在哪个client地址上”,什么是client地址,是本机?网卡?,还是其他运行了consule的机器
问题四
运行go程序,使用的是
go run xxx.go --registry=consule
那里可以查到参数的文档说明
在
–registry=consule
中,consule是固定的吗。
这样的服务注册消息是如何发出的
{
"ID": "userServiceId", //服务id
"Name": "userService", //服务名
"Tags": [ //服务的tag,自定义,可以根据这个tag来区分同一个服务名的服务
"primary",
"v1"
],
"Address": "127.0.0.1",//服务注册到consul的IP,服务发现,发现的就是这个IP
"Port": 8000, //服务注册consul的PORT,发现的就是这个PORT
"EnableTagOverride": false,
"Check": { //健康检查部分
"DeregisterCriticalServiceAfter": "90m",
"HTTP": "http://www.baidu.com", //指定健康检查的URL,调用后只要返回20X,consul都认为是健康的
"Interval": "10s" //健康检查间隔时间,每隔10s,调用一次上面的URL
}
}
怎么指定里面字段的值呢
问题五
我在两台机器上,部署了相同的用户注册的接口,用户注册接口分别注册到了两个consule上,就会有两个consule的ip地址。
那这样的话,对外的单点是谁呢?是否要引入新的负载均衡软件。
还是说一种业务服务(比如用户注册),只注册到统同一个consule上?
其他的业务继续细分拆解部署到不同的机器上,就会出现很多的ip。
比如
用户注册业务 在 consule为127.x.x.1 和 consule为127.x.x.2的机器上
文件上传业务 在 consule为127.x.x.2 和 consule为127.x.x.3 的机器上
文件下载业务 在 consule为127.x.x.3 和 consule为127.x.x.4 的机器上
这样前端开发和后端管理岂不是要疯了。
我的开发方向在 pc客户端,web前端,后端java,php,node,go等语言,开发方式比较传统。为了给自己充电,购买了您的课程,微服务也是初次尝试,思维有所局限,还望老师指点迷津??。
1回答
-
1. consul集群可以不用启动client.client节点主要的作用是将外部所有的rpc请求转发到server节点,
另外也做一些分摊server节点压力的工作,比如定期对已注册的server做健康检测, 或者合并相同请求后再转发到server节点等.
2. 机器资源充裕的话当然最好是最好独立部署consul集群了,保证consul有充足的资源正常提供服务.而consul部署在docker容器中的话,很多时候就避免不了相同的机器节点也会部署其他的服务.一般来说这样也不会有太大影响,毕竟consul是一个集群,超过半数节点能正常工作的话,集群也就能正常提供服务.
3. -client可以理解为对外开放的一个地址,我们外部服务要注册到上面时会用到的一个地址.比如你consul所在的机器除了127.0.0.1,还有个内网地址192.168.1.100;如果-client=127.0.0.1的话,那么外部就没办法通过192.168.1.100来访问consul.所以一般我们会设置为-client=0.0.0.0, 这样无论是通过127.0.0.1还是192.168.1.100都能够访问consul了.
4. --registry这个参数是go-micro框架提供的配置参数, --registry可以是etcd, mdns, consul, kubernetes等等,这些值是固定(预置)好的.可以参考下这里:https://github.com/micro/go-micro/tree/master/registry 以及 https://github.com/micro/go-plugins/tree/master/registry (具体详细的文档我也没找到);服务注册的逻辑都是在这里面实现的.
5. consul本身是一个集群,通过不同ip来进行服务注册之后,其实注册的数据都是在集群内部共享的.所以不存在你说的这个问题,简单来说,用户注册/上传/下载这些服务,只需要随机或者固定往consul集群的其中一个ip注册即可,不需要根据业务进行啥ip区分.consul集群只有一个,简单点,所有业务只用同一个consul ip来注册也行.032019-05-29
相似问题