Consul的安装与配置
1、下载安装包:
wget https://releases.hashicorp.com/consul/1.17.1/consul_1.17.1_linux_amd64.zip
2、解压:
unzip consul_1.17.1_linux_amd64.zip
解压完成之后就只有一个执行文件
使用命令
./consul agent -h
可以查看配置的相关参数有哪些,以下是相关参数的配置
-advertise:通知展现地址用来改变我们给集群中的其他节点展现的地址,一般情况下-bind地址就是展现地址
-bootstrap:用来控制一个server是否在bootstrap模式,在一个datacenter中只能有一个server处于bootstrap模式,当一个server处于bootstrap模式时,可以自己选举为raft leader。
-bootstrap-expect:在一个datacenter中期望提供的server节点数目,当该值提供的时候,consul一直等到达到指定sever数目的时候才会引导整个集群,该标记不能和bootstrap公用
-bind:该地址用来在集群内部的通讯,集群内的所有节点到地址都必须是可达的,默认是0.0.0.0
-client:consul绑定在哪个client地址上,这个地址提供HTTP、DNS、RPC等服务,默认是127.0.0.1
-config-file:明确的指定要加载哪个配置文件
-config-dir:配置文件目录,里面所有以.json结尾的文件都会被加载
-data-dir:提供一个目录用来存放agent的状态,所有的agent允许都需要该目录,该目录必须是稳定的,系统重启后都继续存在
-dc:该标记控制agent允许的datacenter的名称,默认是dc1
-encrypt:指定secret key,使consul在通讯时进行加密,key可以通过consul keygen生成,同一个集群中的节点必须使用相同的key
-join:加入一个已经启动的agent的ip地址,可以多次指定多个agent的地址。如果consul不能加入任何指定的地址中,则agent会启动失败,默认agent启动时不会加入任何节点。
-retry-join:和join类似,但是允许你在第一次失败后进行尝试。
-retry-interval:两次join之间的时间间隔,默认是30s
-retry-max:尝试重复join的次数,默认是0,也就是无限次尝试
-log-level:consul agent启动后显示的日志信息级别。默认是info,可选:trace、debug、info、warn、err。
-node:节点在集群中的名称,在一个集群中必须是唯一的,默认是该节点的主机名
-protocol:consul使用的协议版本
-rejoin:使consul忽略先前的离开,在再次启动后仍旧尝试加入集群中。
-server:定义agent运行在server模式,每个集群至少有一个server,建议每个集群的server不要超过5个
-syslog:开启系统日志功能,只在linux/osx上生效
-ui-dir: 提供存放web ui资源的路径,该目录必须是可读的
-pid-file: 提供一个路径来存放pid文件,可以使用该文件进行SIGINT/SIGHUP(关闭/更新)agent
指定secret key,使consul在通讯时进行加密,key可以通过consul keygen生成,同一个集群中的节点必须使用相同的key
consul keygen
集群配置:
服务器ip consul类型 node节点 系统
192.168.43.21 server server-01 centos
192.168.43.20 server server-02 centos
192.168.43.22 server server-03 centos
1、通过TLS传输加密,需要生成证书
#初始化内置CA,在consul目录下输入以下命令 ./consul tls ca create
这样就生成了一个初始化的CA证书,接着我们要创建服务器证书:
#输入以下命令 -dc 请记住使用适当的标志。dc1/consul consul tls cert create -server -dc dc1
输入以上命令之后就会生成四个这样的文件,我们再需要在配置文件中配置一下,在consul目录下创建config/config.json的文件,配置如下
{ "node_name": "server-01", "encrypt": "bny3/IZVs5aNZQb8AvyNnBfFug+L9jlnciPYDL/1ULk=", "ui_config": { "enabled": true }, "addresses": { "https": "192.168.43.21" }, "ports": { "https": 8501 }, "tls": { "defaults": { "verify_incoming": true, "verify_outgoing": true, "ca_file": "/www/server/consul/consul-agent-ca.pem", "cert_file": "/www/server/consul/dc1-server-consul-0.pem", "key_file": "/www/server/consul/dc1-server-consul-0-key.pem" }, "internal_rpc": { "verify_server_hostname": true } } }
配置好之后我们启动主节点服务:
./consul agent -server -server-port=8500 -bind=192.168.43.21 -data-dir=data -config-dir=config -pid-file=master.pid -bootstrap-expect=3 -ui
在 192.168.43.20和192.168.43.22这两个节点服务器中,
分别将这三个生成的证书文件复制到这两个节点对应的consul目录下
同时在这两个节点分别创建config/config.json
{ "node_name": "server-02", "encrypt": "bny3/IZVs5aNZQb8AvyNnBfFug+L9jlnciPYDL/1ULk=", "ui_config": { "enabled": true }, "ports": { "https": 8501 }, "tls": { "defaults": { "verify_incoming": true, "verify_outgoing": true, "ca_file": "/www/server/consul/CA/consul-agent-ca.pem", "cert_file": "/www/server/consul/CA/dc1-server-consul-0.pem", "key_file": "/www/server/consul/CA/dc1-server-consul-0-key.pem" }, "internal_rpc": { "verify_server_hostname": true } } }
然后分别执行以下命令:
#在192.168.43.20节点中
./consul agent -bind=192.168.43.20 -client=192.168.43.20 -data-dir=data -node=server-02 -join=192.168.43.21 -config-dir=config
#在192.168.43.22节点中
./consul agent -bind=192.168.43.22 -client=192.168.43.22 -data-dir=data -node=server-03 -join=192.168.43.21 -config-dir=config
分别加入之后,可以通过
./consul members
查看各自的节点加入情况
设置consul开机自动启动:
touch /usr/lib/systemd/system/consul.service vi /usr/lib/systemd/system/consul.service
#粘贴以下代码到文件中
[Unit]
Description=consul
After=network.target remote-fs.target nss-lookup.target
[Service]
Type=forking
ExecStart=/www/server/consul/start.sh
KillSignal=SIGTERM
[Install]
WantedBy=multi-user.target
编辑start.sh
#!/bin/bash nohup /www/server/consul/consul agent -server -server-port=8500 -bind=192.168.43.21 -data-dir=/www/server/consul/data -config-dir=/www/server/consul/config -pid-file=/www/server/consul/master.pid -bootstrap-expect=3 -ui & echo "consul start"
从节点192.168.43.20:
#!/bin/bash nohup /www/server/consul/consul agent -bind=192.168.43.20 -client=192.168.43.20 -data-dir=/www/server/consul/data -node=server-02 -join=192.168.43.21 -config-dir=/www/server/consul/config & echo "consul start"
从节点:192.168.43.22
#!/bin/bash nohup /www/server/consul/consul agent -bind=192.168.43.22 -client=192.168.43.22 -data-dir=/www/server/consul/data -node=server-03 -join=192.168.43.21 -config-dir=/www/server/consul/config & echo "consul start"
给start.sh添加可执行权限
chmod +x /www/server/consul/start.sh
# 设置自启 systemctl enable consul.service
systemctl daemon-reload
systemctl is-enabled consul.service #查看是否自启
systemctl disable consul.service #取消自启
systemctl daemon-reload