nginx consul

Posted by Sunday on 2019-09-24

环境说明

主机名 IP 系统 角色
demo18 192.168.10.18 Ubuntu 16.04 server
demo20 192.168.10.20 Ubuntu 16.04 server
demo21 192.168.10.21 Ubuntu 16.04 server

https://www.consul.io/downloads.html
https://github.com/weibocom/nginx-upsync-module
https://github.com/xiaokai-wang/nginx_upstream_check_module

编译nginx

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
cd /usr/local/src/
git clone https://github.com/xiaokai-wang/nginx_upstream_check_module
git clone https://github.com/weibocom/nginx-upsync-module

wget https://openresty.org/download/openresty-nginx-1.13.6.tar.gz
tar xf openresty-1.15.8.2.tar.gz
cd openresty-1.15.8.2


/usr/local/src/openresty-1.13.6.2/bundle/nginx-1.13.6
patch -p1 < /usr/local/src/nginx_module/nginx_upstream_check_module/check_1.12.1+.patch


./configure --prefix=/usr/local/openresty --add-module=/usr/local/src/nginx_module/nginx_upstream_check_module --add-module=/usr/local/src/nginx_module/nginx-upsync-module
make -j 20 && make install

1
2
3
wget https://releases.hashicorp.com/consul/1.6.1/consul_1.6.1_linux_amd64.zip
unzip consul_1.6.1_linux_amd64.zip
mv consul /usr/local/bin/

手动运行集群命令

1
2
3
consul agent -server -bootstrap-expect 3 -ui -node=consul-1 --data-dir=/data/consul -bind=192.168.10.18 -client 0.0.0.0
consul agent -server -bootstrap-expect 3 -ui -node=consul-2 --data-dir=/data/consul -bind=192.168.10.20 -client 0.0.0.0
consul agent -server -bootstrap-expect 3 -ui -node=consul-3 --data-dir=/data/consul -bind=192.168.10.21 -client 0.0.0.0

1
2
3
4
useradd --system --home /data/consul --shell /bin/false consul
mkdir -p /data/consul
chown -R consul:consul /data/consul
mkdir -p /etc/consul.d
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
cat << EOF > /etc/consul.d/consul.json
{
"datacenter": "dc1",
"data_dir": "/data/consul",
"log_level": "INFO",
"node_name": "demo18",
"server": true,
"ui": true,
"bootstrap_expect": 3,
"bind_addr": "192.168.10.18",
"client_addr": "0.0.0.0",
"retry_join": ["192.168.10.21","192.168.10.20"],
"retry_interval": "3s",
"raft_protocol": 3,
"enable_debug": false,
"rejoin_after_leave": true,
"enable_syslog": false
}
EOF

chmod 640 /etc/consul.d/consul.json
chown -R consul:consul /etc/consul.d

https://www.consul.io/docs/agent/options.html#configuration_files
https://www.consul.io/docs/install/performance.html
https://learn.hashicorp.com/consul/datacenter-deploy/deployment-guide

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
cat << EOF > /etc/systemd/system/consul.service 
[Unit]
Description="HashiCorp Consul - A service mesh solution"
Documentation=https://www.consul.io/
Requires=network-online.target
After=network-online.target

[Service]
User=consul
Group=consul
ExecStart=/usr/local/bin/consul agent -config-dir=/etc/consul.d/
ExecReload=/usr/local/bin/consul reload
KillMode=process
Restart=on-failure
LimitNOFILE=65536

[Install]
WantedBy=multi-user.target
EOF

chown -R consul.consul /data/consul /etc/consul.d
systemctl daemon-reload
systemctl restart consul
systemctl enable consul
systemctl status consul
1
2
3
4
5
consul members -http-addr=192.168.10.18:8500
Node Address Status Type Build Protocol DC Segment
demo18 192.168.10.18:8301 alive server 1.6.1 2 dc1 <all>
demo20 192.168.10.20:8301 alive server 1.6.1 2 dc1 <all>
demo21 192.168.10.21:8301 alive server 1.6.1 2 dc1 <all>


curl -X PUT -d ‘{“weight”:10, “max_fails”:2, “fail_timeout”:10, “down”:0}’ http://192.168.10.21:8500/v1/kv/upstreams/pic_backend/192.168.10.21:80
curl -X PUT http://192.168.10.21:8500/v1/kv/upstreams/up1/192.168.10.21:80
curl -X PUT http://192.168.10.18:8500/v1/kv/upstreams/up1/192.168.10.21:83
curl -X PUT http://192.168.10.18:8500/v1/kv/upstreams/up1/192.168.10.18:83

consul info -http-addr=192.168.10.18:8500
consul operator raft list-peers

curl -X PUT http://192.168.1.200:8500/v1/kv/upstreams/api_im_any/192.168.1.43:8882
curl -X PUT http://192.168.1.200:8500/v1/kv/upstreams/api_im_any/192.168.1.46:8882

curl -X PUT http://192.168.1.200:8500/v1/kv/upstreams/api_im_xwx/192.168.1.43:8882
curl -X PUT http://192.168.1.200:8500/v1/kv/upstreams/api_im_xwx/192.168.1.46:8882

curl -X PUT http://192.168.1.91:8500/v1/kv/upstreams/im_test/192.168.1.46:80

curl -X PUT http://192.168.1.200:8500/v1/kv/upstreams/wss_im_xwx/192.168.1.43:8883
curl -X PUT http://192.168.1.200:8500/v1/kv/upstreams/wss_im_xwx/192.168.1.46:8883

curl -X PUT http://192.168.1.200:8500/v1/kv/upstreams/wss_im_any/192.168.1.43:8883
curl -X PUT http://192.168.1.200:8500/v1/kv/upstreams/wss_im_any/192.168.1.46:8883
`

https://wxnacy.com/2018/05/24/nginx-upsync/