Consul基础

介绍

安装

CentOS7

1
2
3
4
$ cd /usr/local
$ wget https://releases.hashicorp.com/consul/1.4.0/consul_1.4.0_linux_amd64.zip
$ unzip consul_1.4.0_linux_amd64.zip
$ ./consul -v

MacOS

1
$ brew install consul

Docker

1
2
3
4
5
6
$ docker pull progrium/consul
$ docker run -p 8400:8400 -p 8500:8500 -p 8600:53/udp -h node1 progrium/consul -server -bootstrap
##### 访问 HTTP 接口
$ curl localhost:8500/v1/catalog/nodes
##### dig来和DNS接口进行交互
$ dig @0.0.0.0 -p 8600 node1.node.consul

访问:http://localhost:8500/ui

运维

运行Agent

开发模式启动

1
$ ./consul agent -dev

agent 启动之后输出的主要信息包括:

字段 说明
Version 版本号
Node ID 节点ID
Node name 节点名称
Datacenter Datacenter名称
Server Agent 是否以 server 的形式启用
Client Addr Client 使用的地址和端口
Cluster Addr 在 Cluster 各个 agent 通信使用的地址和端口
Encrypt 是否加密

服务模式启动

1
2
3
$ mkdir /etc/consul.d
$ echo '{"service": {"name": "web", "tags": ["rails"], "port": 80}}' >/etc/consul.d/web.json
$ ./consul agent -server -bootstrap-expect 1 -data-dir /tmp/consul -node=hdp1 -bind=10.10.0.248 -config-dir /etc/consul.d -client 0.0.0.0 -ui

允许远程访问

1
$ xxx -client 0.0.0.0 -ui

访问 http://IP:8500/ui/

停止

Ctrl+C

查看集群成员信息

1
$ ./consul members

加入集群

1
$ ./consul join IP地址

启动时自动加入集群

1
2
3
$ ./consul agent -atlas-join \
-atlas=ATLAS_USERNAME/infrastructure \
-atlas-token="YOUR_ATLAS_TOKEN"

配置健康检查

1
$

获取节点的最新信息

1
$ curl localhost:8500/v1/catalog/nodes

配置集群

主机名 IP 备注
-
-
-

Consul-创建RPM包

安装依赖包

1
2
$ cd /root
$ yum -y install rpmdevtools unzip

建立文件夹树

1
2
3
4
5
$ rpmdev-setuptree
$ mkdir -p consul-1.1.0/etc/consul.d
$ mkdir -p consul-1.1.0/var/lib/consul
$ mkdir -p consul-1.1.0/etc/systemd/system
$ mkdir -p consul-1.1.0/usr/bin

下载解压consul

1
2
3
$ curl -O https://releases.hashicorp.com/consul/1.1.0/consul_1.1.0_linux_amd64.zip
$ unzip consul_1.1.0_linux_amd64.zip
$ mv consul consul-1.1.0/usr/bin/

创建客户端配置文件

1
2
3
4
5
6
7
8
9
10
11
$ cat << 'EOF' > consul-1.1.0/etc/consul.d/config.json
{
"server": false,
"data_dir": "/var/lib/consul",
"log_level": "INFO",
"enable_syslog": true,
"start_join": ["192.168.0.11"],
"bind_addr": "192.168.0.11",
"client_addr": "192.168.0.11"
}
EOF

创建Service文件

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
$ cat << 'EOF' > consul-1.1.0/etc/systemd/system/consul.service
[Unit]
Description=consul agent
Requires=network-online.target
After=network-online.target

[Service]
EnvironmentFile=-/etc/sysconfig/consul
Environment=GOMAXPROCS=2
Restart=on-failure
ExecStart=/usr/bin/consul agent -config-dir=/etc/consul.d -data-dir /var/lib/consul -rejoin
ExecReload=/bin/kill -HUP $MAINPID
KillSignal=SIGTERM

[Install]
WantedBy=multi-user.target
EOF

打包

1
2
$ tar czf consul-1.1.0.tar.gz consul-1.1.0
$ mv consul-1.1.0.tar.gz rpmbuild/SOURCES/

创建spec文件

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
$ cat << 'EOF' > rpmbuild/SPECS/consul_1.1.0_linux_amd64.spec
%define debug_package %{nil}
Name: consul
Version: 1.1.0
Release: 1%{?dist}
Summary: Consul is a tool for service discovery and configuration.
Group: System Environment/Daemons
SOURCE0: consul-1.1.0.tar.gz
License: MPLv2.0
URL: https://www.consul.io
BuildRoot: %{_tmppath}/%{name}-%{version}
%description
Consul is a tool for service discovery and configuration.
%prep
%setup
%build
%install
rm -rf "$RPM_BUILD_ROOT"
mkdir -p "$RPM_BUILD_ROOT"
cp -R * "$RPM_BUILD_ROOT"
%clean
rm -rf $RPM_BUILD_ROOT
%files
%dir /var/lib/consul
%dir /etc/consul.d
/usr/bin/consul
/etc/systemd/system/consul.service
/etc/consul.d/config.json
EOF

创建RPM包

1
$ rpmbuild -ba rpmbuild/SPECS/consul_1.1.0_linux_amd64.spec

rpm包的路径:/root/rpmbuild/RPMS/x86_64/consul-1.1.0-1.el7.centos.x86_64.rpm

测试

安装

1
$ rpm -ivh /root/rpmbuild/RPMS/x86_64/consul-1.1.0-1.el7.centos.x86_64.rpm

修改客户端配置文件

修改/etc/consul.d/config.json中的ip地址为实际ip地址

测试服务

1
2
3
4
$ systemctl enable consul
$ systemctl start consul
$ systemctl status consul
$ systemctl stop consul

参考

坚持原创技术分享,您的支持将鼓励我继续创作!