157Consul 1.8.5 在Linux CentOS 7上搭建集群例子,含修改server端口号,访问控制
Posted zhangchao19890805
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了157Consul 1.8.5 在Linux CentOS 7上搭建集群例子,含修改server端口号,访问控制相关的知识,希望对你有一定的参考价值。
概要
本文用了三台物理机,分别是A、B、C。操作系统是 Linux CentOS 7
物理机A:172.31.130.124
物理机B:172.31.130.125
物理机C:172.31.130.129
这个集群主要干了下面三件事:
-
三台机器上分别搭载了三个server节点、三个agent节点。为了解决端口冲突,修改了server节点的端口号。agent节点使用默认端口号,这样方便Java或其他开发代码的业务节点连接。
-
做了访问控制,防止无关人员调用接口,或者使用consul自带的管理界面。
-
agent节点配置了 consul watch 功能,可以动态监控到服务节点的变化,和KV数据库的变化。
具体步骤
一、检查环境变量
如果您能够确保机器上从来没有安装过 consul,可以跳过这一步骤。否则建议执行此步骤。
假如您以前安装过consul,那么系统的环境变量里面可能有以前consul的配置,需要您先删除以前的环境变量,再进行安装,否则有可能因为环境变量冲突,导致安装失败。
查看所有的环境变量:
/root$ env
LOGNAME=root
CLASSPATH=.:/opt/jdk1.8.0_191/lib:/opt/jdk1.8.0_191/jre/lib
# 此处结果省略
或者您也可以利用 grep 配合 env 命令:
env|grep consul
一般和consul 有关的环境变量都含有 consul 字符串,您可以找到相关环境变量,在配置文件中删除。
二、配置server 节点集群
1、物理机A上,创建 /root/consul/
文件夹,把从consul 官网上下载的 consul 二进制文件上传到 /root/consul
文件夹中。
2、物理机A上,编辑 /root/.bashrc
文件,在文件末尾加上如下代码
# consul path
export PATH=/root/consul:$PATH
3、关闭连接物理机A的客户端,重新连接服务器,在服务器输入命令:
/root$ consul -v
Consul v1.8.5
Revision 1e03567d3
Protocol 2 spoken by default, understands 2 to 3 (agent will automatically use protocol >2 when speaking to compatible agents)
这是显示版本的命令,如果系统回显consul版本信息,说明环境变量配置正确。
4、物理机A上,文件夹 /root/consul/
中创建 consul.d 和 data_dir 两个文件夹,然后按照下面的组织方式创建好文件。其中consul是已经上传好的二进制文件。
consul.d (文件夹)
|
+-- consul-acl.json
+-- port.json
data_dir (文件夹)
stop.sh
start.sh
consul
5、物理机A上,修改 /root/consul/stop.sh
和 /root/consul/start.sh
两个文件
stop.sh
#!/bin/bash
echo "Stopping consul"
consul leave -token=yourtoken -http-addr=http://127.0.0.1:18500
start.sh
nohup consul agent \\
-server \\
-ui \\
-bootstrap-expect=1 \\
-node=agent-one \\
-bind=172.31.130.124 \\
-config-dir=/root/consul/consul.d \\
-data-dir=/root/consul/data_dir \\
-client=0.0.0.0 \\
-retry-join=172.31.130.125:18301 \\
-retry-join=172.31.130.129:18301 \\
-config-dir=/root/consul/consul.d > /data0/out/consul.out &
echo "start"
这是物理机A的配置,-retry-join 用了另外两台物理机B和C的IP和端口号。-bind 是本机IP。
如果配置物理机B,这里改成A和C的IP和端口号。
如果配置物理机C,这里改成A和B的IP和端口号。
6、物理机A上,修改 /root/consul/consul.d/consul-acl.json
和 /root/consul/consul.d/port.json
两个文件
/root/consul/consul.d/consul-acl.json 配置访问控制策略,acl.tokens.master 中是访问的token,所有restful API和UI都需要token才能访问。这里的 token 是用户自己随机生成的字符串,并且必须保密。
{
"acl": {
"enabled" : true,
"default_policy" : "deny",
"down_policy" : "extend-cache",
"enable_token_persistence": true,
"tokens" :{
"master": "yourtoken"
}
}
}
/root/consul/consul.d/port.json 这个文件是为了修改掉默认端口号,方便server和agent放在同一台物理机上。
{
"connect": {
"enabled": true
},
"ports": {
"http": 18500 ,
"dns": 18600,
"grpc": 18400,
"serf_lan": 18301,
"serf_wan": 18302,
"server": 18300
}
}
7、另外两条物理机B和C也如法炮制,需要注意在第5步的时候要针对IP做修改。每台机器上进入 /root/consul
文件夹,执行代码 sh start.sh
,就可以启动集群了。
三、配置agent集群
1、物理机A上,创建 /root/consul-client/
文件夹,把从consul 官网上下载的 consul 二进制文件上传到 /root/consul-client
文件夹中。
2、物理机A上,文件夹 /root/consul-client/
中创建 consul.d 和 data_dir 两个文件夹,然后按照下面的组织方式创建好文件。其中consul是已经上传好的二进制文件。
consul.d (文件夹)
|
+-- consul-acl.json
+-- watch.json
data_dir (文件夹)
stop.sh
start.sh
consul
3、物理机A上,修改 /root/consul-client/stop.sh
和 /root/consul-client/start.sh
两个文件
/root/consul-client/stop.sh
#!/bin/bash
echo "Stopping consul-client"
/root/consul-client/consul leave -token=yourtoken
/root/consul-client/start.sh
#!/bin/bash
echo "Start yqlw-consul-client"
nohup /root/consul-client/consul agent \\
-node=client-one \\
-bind=172.31.130.124 \\
-data-dir=/root/consul-client/data_dir \\
-client=0.0.0.0 \\
-retry-join=172.31.130.124:18301 \\
-retry-join=172.31.130.125:18301 \\
-retry-join=172.31.130.129:18301 \\
-config-dir=/root/consul-client/consul.d > /data0/out/consul-client.out &
echo "start"
-bind是配置本地IP,-retry-join 是三台服务器的IP和端口号。-node是节点名称。
4、物理机A上,修改 /root/consul-client/consul.d/consul-acl.json
文件
文件内容如下:
{
"acl": {
"enabled" : true,
"default_policy" : "deny",
"down_policy" : "extend-cache",
"enable_token_persistence": true,
"tokens": {
"default": "yourtoken"
}
}
}
5、物理机A上,修改 /root/consul-client/consul.d/watch.json
文件
文件内容如下:
{
"watches": [
{
"type": "service",
"service": "relationship",
"handler_type": "http",
"http_handler_config": {
"path": "http://127.0.0.1:8090/centGateway/readConsulService",
"method": "GET",
"header": { },
"timeout": "10s",
"tls_skip_verify": false
}
},
{
"type": "key",
"key": "ignoreapi",
"handler_type": "http",
"http_handler_config": {
"path": "http://127.0.0.1:8090/centGateway/readConsulService",
"method": "GET",
"header": { },
"timeout": "10s",
"tls_skip_verify": false
}
}
]
}
watches 数组中,第一个对象是监控relationship服务,第二个对象是监控 KV 数据库中特定的键值对。
第一个对象:
“type”: “service” 监控的类型是服务。
“service”: “relationship” 服务名称是 relationship。
“handler_type”: “http” 如果监控到变化就发出http请求。
“http_handler_config” 发出的http请求的具体配置。
第二个对象:
“type”: “key” 监控的是KV数据库中的键值对。
“key”: “ignoreapi” 监控键是 ignoreapi 的取值变化。
其他配置同第一个对象
6、另外两条物理机B和C也如法炮制,需要注意在第3步上修改本地IP。每台机器上进入 /root/consul-client
文件夹,执行代码 sh start.sh
,就可以启动集群了。
7、浏览器输入 http://172.31.130.124 :18500/ 就可以查看consul控制台了。第一次进入需要输入token。
以上是关于157Consul 1.8.5 在Linux CentOS 7上搭建集群例子,含修改server端口号,访问控制的主要内容,如果未能解决你的问题,请参考以下文章