官方Doc and API在这儿: https://www.consul.io/docs/internals/architecture.html
API操作我一般用curl, 这个附一个命令
curl -H "Content-Type: application/json" -X PUT --data '{"Datacenter":"dc1","Node":"[Nodename]"}' http://acadci-consul.ecs.ads.autodesk.com:8500/v1/catalog/deregister
要指定header(-H)来说明发出去的是个json.
consul直接官网下https://www.consul.io/downloads.html, 就是个二进制包, 不用安装, 通常解压到 /usr/local/bin/consul
在同目录下建立consul.json作为配置文件, 配置完成后启动命令是 sudo consul agent -config-file consul.json
Tip: 所有consul用统一版本的, 我第一次用不通版本, 设置了raft_protocal=3 低版本不支持, 一直报错
dc1: 3 server, 1 client
dc2: 1 server
dc1.server1配置如下
{"datacenter": "dc1","data_dir": "/var/lib/consul","log_level": "INFO","node_name": "docker-manager.node","server": true,"ui": true,"bootstrap_expect": 1,"bind_addr": "10.41.113.157","client_addr": "10.41.113.157","retry_interval": "3s","retry_join": ["10.41.113.157","10.148.172.222","110.41.103.31"],"raft_protocol": 3,"enable_debug": false,"rejoin_after_leave": true,"enable_syslog": false
}
确保你的user对/var/lib/consul有写权限: 因为data_dir设置在这里, consul要往里面写data
"log_file": "/var/log/consul/consul.log",可以增加这个设置,指定consul存log到哪里, /var/log/consul/这里目录要事先mkdir, consul自己不会建出来
不能有注释
retry_join 设置的是你的serverURL. 开启consul后自动加入cluster. 我们有三个地址所以都写三个,其实你写一个也行, server直接可以通过8300通信, 加入到同一个cluster(三个URL都是这个cluster地址)
boofstap_expect: 第一个加入cluster的server写1, 其他都写2
node_name: 每个Node都不能一样.
Client 配置略有不同, server=false, bootstrap_expectct=0, 其他都一样:
{"datacenter": "dc1","data_dir": "/var/lib/consul","log_level": "INFO","node_name": "docker5.node","server": false,"ui": true,"bootstrap_expect": 0,"bind_addr": "10.35.234.193","client_addr": "10.35.234.193","retry_join": ["10.41.113.157","10.148.172.222","110.41.103.31"],"retry_interval": "3s","raft_protocol": 3,"enable_debug": false,"rejoin_after_leave": true,"enable_syslog": false
}
然后是dc2的配置, datacenter=dc2, retry_join_wan=[dc1任意一个server的地址OR所有地址]
{"datacenter": "dc2","data_dir": "/var/lib/consul","log_level": "INFO","node_name": "docker4.node","server": true,"ui": true,"bootstrap_expect": 1,"bind_addr": "10.41.103.159","client_addr": "10.41.103.159","retry_join_wan":["10.41.113.157"],"retry_interval": "3s","raft_protocol": 3,"enable_debug": false,"rejoin_after_leave": true,"enable_syslog": false
}
启动命令是 sudo consul agent -config-file xxx.json(或者用参数-config-dir 会读取该目录下所有的.json)
启动会访问任意一个IP:8500你会看到如下, (忽略死掉的那个)
这个来自官方文档的architecture explain 图是个好图, 要看