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

这个集群主要干了下面三件事:

  1. 三台机器上分别搭载了三个server节点、三个agent节点。为了解决端口冲突,修改了server节点的端口号。agent节点使用默认端口号,这样方便Java或其他开发代码的业务节点连接。

  2. 做了访问控制,防止无关人员调用接口,或者使用consul自带的管理界面。

  3. 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端口号,访问控制的主要内容,如果未能解决你的问题,请参考以下文章

阿里云linux安装Consul启动

consul 入门

Linux Centos7 上安装consul

搭建 consul 集群

阿里云环境下安装consul

linux安装consul集群