前言:
由于网关将使用负载均衡进行解压,搭建多个服务器站点,所有学习了Consul服务发现,分享下自己在搭建中所遇到的问题 以及过程分享
前期准备:
- 由于本人公司电脑硬件硬盘比较差 ,只准备了两台机器
机器Ip 及端口 | 端口号 | 客户端类型 | 节点/服务名称 |
192.168.1.78 | 8500 | Sever | c1(Leader) |
192.168.1.78 | 8520 | Server | c2 |
192.168.1.21 | 8500 | Server | c3 |
192.168.1.78 | 8510 | Client | cc1(节点客户端) |
- Consul 官网文件下载: https://www.consul.io/downloads
- 新建4个文件夹{ Consul_First_Server,Consul_second_Server,Consul_Third_Client,Consul_21_Server } ,用来存放每个服务端的配置文件以及数据data文件(也可设置环境变量Consul,避免Consul.exe复制到多个文件夹)
- 在Conf文件夹下新建 server.json 用于存放配置文件,根目录下新建 c_sbuild.bat 命令执行文件
{ "datacenter":"dc1", "primary_datacenter":"dc1", "bootstrap_expect":1, "start_join":[ "192.168.1.21", "192.168.1.78:8321" ], "retry_join":[ "192.168.1.21", "192.168.1.78:8321" ], "advertise_addr": "192.168.1.78", "bind_addr": "192.168.1.78", "client_addr":"192.168.1.78", "server":true, "connect":{ "enabled":true }, "node_name":"c1", "ui": false, "data_dir":"./data/", "enable_script_checks":false, "enable_local_script_checks":true, "log_file":"./log/", "encrypt":"krCysDJnrQ8dtA7AbJav8g==", "acl":{ "enabled":true, "default_policy":"deny", "enable_token_persistence":true, "tokens":{ "master":"ac24b0d7-5535-40cc-8696-073462acc6c7" } } }
{ "datacenter":"dc1", "primary_datacenter":"dc1", "advertise_addr": "192.168.1.78", "bind_addr": "192.168.1.78", "client_addr":"192.168.1.78", "server":true, "connect":{ "enabled":true }, "node_name":"c2", "ui": false, "data_dir":"./data/", "enable_script_checks":false, "enable_local_script_checks":true, "log_file":"./log/", "log_level":"info", "log_rotate_bytes":100000000, "log_rotate_duration":"24h", "encrypt":"krCysDJnrQ8dtA7AbJav8g==", "ports":{ "http": 8520, "dns": 8620, "server": 8320, "serf_lan": 8321, "serf_wan": 8322 }, "acl":{ "enabled":true, "default_policy":"deny", "enable_token_persistence":true, "tokens":{ "master":"ac24b0d7-5535-40cc-8696-073462acc6c7" } } }
{ "datacenter":"dc1", "primary_datacenter":"dc1", "advertise_addr": "192.168.1.21", "bind_addr": "192.168.1.21", "client_addr":"192.168.1.21", "server":true, "connect":{ "enabled":true }, "node_name":"c2", "ui": false, "data_dir":"./data/", "enable_script_checks":false, "enable_local_script_checks":true, "log_file":"./log/", "log_level":"info", "log_rotate_bytes":100000000, "log_rotate_duration":"24h", "encrypt":"krCysDJnrQ8dtA7AbJav8g==", "acl":{ "enabled":true, "default_policy":"deny", "enable_token_persistence":true, "tokens":{ "master":"ac24b0d7-5535-40cc-8696-073462acc6c7" } } }
{
"datacenter":"dc1", "primary_datacenter":"dc1", "advertise_addr": "192.168.1.78", "start_join":[ "192.168.1.21", "192.168.1.78:8321", "192.168.1.78:8301" ], "retry_join":[ "192.168.1.21", "192.168.1.78:8321", "192.168.1.78:8301" ], "bind_addr":"192.168.1.78", "server":false, "node_name":"cc1", "client_addr":"192.168.1.78", "connect":{ "enabled":true }, "data_dir":"./data/", "log_file":"./log/", "log_level":"info", "log_rotate_bytes":100000000, "log_rotate_duration":"24h", "ui":true, "enable_script_checks":false, "enable_local_script_checks":true, "disable_remote_exec":true, "acl":{ "enabled":true, "default_policy":"deny", "enable_token_persistence":true, "tokens":{ "master":"ac24b0d7-5535-40cc-8696-073462acc6c7" } }, "encrypt":"krCysDJnrQ8dtA7AbJav8g==", "ports":{ "http": 8510, "dns": 8610, "server": 8310, "serf_lan": 8311, "serf_wan": 8312 } }
附:其中同机器 主要设置了 port参数 以来启动不同端口的服务端
c_sbuild.bat文件内容如下:
consul agent -config-file ./conf/server.json
pause
启动服务
- 在Consul_second_Server 文件夹下执行c_sbuild.bat 启动c2
- 在Consul_21_Server 文件夹下执行c_sbuild.bat 启动c3
- 在Consul_First_Server 文件夹下执行c_sbuild.bat 启动c1
- 最后启动Client端
然后启动结果,发现一个错误 经过百度查看官方文档发现是由于没有创建agent-token导致
此时 我们在192.168.1.78:8520 这台客户端上请求创建agent-token ;
这里使用了postman,因为我们配置该客户端时没有配置ui界面 过程和结果如下
得到获取到的agent-token 配置到每个客户端,然后照上述执行顺序依次执行c_sbuild.bat文件重启客户端 (在重启客户端之前,记得要用Ctrl+c 关闭客户端哦 ,否则可能会有进程在后台执行)
服务启动最终结果
此时可以打开ui界面 http://192.168.1.78:8510/ 发现我们3个Server 端 与1个Client端已经 集群在上面了 此时Leader 已经通过自动选举到c3,这里我使用的是谷歌浏览器 安装了 ModHeader 这个请求头插件 小伙伴可以自行安装
当然我们也可以在请求
GET /v1/catalog/nodes HTTP/1.1
Host: 192.168.1.78:8520(任意客户端地址都可)
X-Consul-Token: ac24b0d7-5535-40cc-8696-073462acc6c7
同时我们也能通过输入终端指令来查看集群成员状态 如下
也可查看详细成员信息 如下
KeyValue集群测试
首先我们在ui KeyValue界面上创建一个Key:WebApplication1Configure,内容可以随便填啦 此时我们访问的是192.168.1.78:8510 的客户端ui 下面请求则换不同端口请求
然后在任意一客户端请求,请求请求结果如下,当然kv也需要附加上token请求头哦,这里value是加过密的所以你可以看不同客户端上加密字符串是否一致
至此 集群已成功
分隔线-----------------------------------------------------------------------------------------------------------------------------------------------------
下个随笔 Ocelot 网关搭建、服务发现配置与 客户端Consul注册