This is an automated email from the ASF dual-hosted git repository.
spacewander pushed a commit to branch master
in repository https://gitbox.apache.org/repos/asf/apisix.git
The following commit(s) were added to refs/heads/master by this push:
new 6a898ccfd feat(zookeeper): support zookeeper service discovery (#6751)
6a898ccfd is described below
commit 6a898ccfd8fc48e6da2c3dfa2177b297aa5091b1
Author: 帅进超 <[email protected]>
AuthorDate: Thu Apr 7 08:52:10 2022 +0800
feat(zookeeper): support zookeeper service discovery (#6751)
---
.licenserc.yaml | 1 +
docs/assets/images/apisix-seed.svg | 3 +
docs/en/latest/config.json | 1 +
docs/en/latest/discovery/zookeeper.md | 144 ++++++++++++++++++++++++++++++++++
4 files changed, 149 insertions(+)
diff --git a/.licenserc.yaml b/.licenserc.yaml
index 58acb3d71..13fb94f59 100644
--- a/.licenserc.yaml
+++ b/.licenserc.yaml
@@ -30,6 +30,7 @@ header:
- '**/*.pb.go'
- '.github/'
- 'conf/mime.types'
+ - '**/*.svg'
# Exclude CI env_file
- 'ci/pod/**/*.env'
# eyes has some limitation to handle git pattern
diff --git a/docs/assets/images/apisix-seed.svg
b/docs/assets/images/apisix-seed.svg
new file mode 100644
index 000000000..efbbd85bd
--- /dev/null
+++ b/docs/assets/images/apisix-seed.svg
@@ -0,0 +1,3 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN"
"http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd">
+<svg xmlns="http://www.w3.org/2000/svg"
xmlns:xlink="http://www.w3.org/1999/xlink" version="1.1" width="696px"
height="322px" viewBox="-0.5 -0.5 696 322" content="<mxfile
host="Electron" modified="2022-04-06T06:59:12.753Z"
agent="5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML,
like Gecko) draw.io/17.2.4 Chrome/96.0.4664.174 Electron/16.1.0
Safari/537.36" etag="EIuzhafJhPGGY3TEwK1M"
version="17.2.4" type="device& [...]
diff --git a/docs/en/latest/config.json b/docs/en/latest/config.json
index e29a3d250..6ea5784bd 100644
--- a/docs/en/latest/config.json
+++ b/docs/en/latest/config.json
@@ -208,6 +208,7 @@
"discovery/consul_kv",
"discovery/nacos",
"discovery/eureka",
+ "discovery/zookeeper",
"discovery/kubernetes"
]
},
diff --git a/docs/en/latest/discovery/zookeeper.md
b/docs/en/latest/discovery/zookeeper.md
new file mode 100644
index 000000000..3adf52dc9
--- /dev/null
+++ b/docs/en/latest/discovery/zookeeper.md
@@ -0,0 +1,144 @@
+---
+title: zookeeper
+---
+
+<!--
+#
+# Licensed to the Apache Software Foundation (ASF) under one or more
+# contributor license agreements. See the NOTICE file distributed with
+# this work for additional information regarding copyright ownership.
+# The ASF licenses this file to You under the Apache License, Version 2.0
+# (the "License"); you may not use this file except in compliance with
+# the License. You may obtain a copy of the License at
+#
+# http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+# See the License for the specific language governing permissions and
+# limitations under the License.
+#
+-->
+
+## Service Discovery Via Zookeeper
+
+`Zookeeper` service discovery needs to rely on the
[apisix-seed](https://github.com/api7/apisix-seed) project.
+
+### How `apisix-seed` Works
+
+
+
+`apisix-seed` completes data exchange by watching the changes of `etcd` and
`zookeeper` at the same time.
+
+The process is as follows:
+
+1. `APISIX` registers an upstream and specifies the service discovery type as
`zookeeper` to `etcd`.
+2. `apisix-seed` watches the resource changes of `APISIX` in `etcd` and
filters the discovery type and obtains the service name.
+3. `apisix-seed` binds the service to the `etcd` resource and starts watching
the service in zookeeper.
+4. The client registers the service with `zookeeper`.
+5. `apisix-seed` gets the service changes in `zookeeper`.
+6. `apisix-seed` queries the bound `etcd` resource information through the
service name, and writes the updated service node to `etcd`.
+7. The `APISIX` worker watches `etcd` changes and refreshes the service node
information to the memory.
+
+### Setting `apisix-seed` and Zookeeper
+
+The configuration steps are as follows:
+
+1. Start the Zookeeper service
+
+```bash
+docker run -itd --rm --name=dev-zookeeper -p 2181:2181 zookeeper:3.7.0
+```
+
+2. Download and compile the `apisix-seed` project.
+
+```bash
+git clone https://github.com/api7/apisix-seed.git
+cd apisix-seed
+go build
+```
+
+3. Modify the `apisix-seed` configuration file, config path `conf/conf.yaml`.
+
+```bash
+etcd: # APISIX ETCD Configure
+ host:
+ - "http://127.0.0.1:2379"
+ prefix: /apisix
+ timeout: 30
+
+discovery:
+ zookeeper: # Zookeeper Service Discovery
+ hosts:
+ - "127.0.0.1:2181" # Zookeeper service address
+ prefix: /zookeeper
+ weight: 100 # default weight for node
+ timeout: 10 # default 10s
+```
+
+4. Start `apisix-seed` to monitor service changes
+
+```bash
+./apisix-seed
+```
+
+### Setting `APISIX` Route and Upstream
+
+Set a route, the request path is `/zk/*`, the upstream uses zookeeper as
service discovery, and the service name
+is `APISIX-ZK`.
+
+```shell
+curl http://127.0.0.1:9080/apisix/admin/routes/1 \
+-H 'X-API-KEY: edd1c9f034335f136f87ad84b625c8f1' -X PUT -i -d '
+{
+ "uri": "/zk/*",
+ "upstream": {
+ "service_name": "APISIX-ZK",
+ "type": "roundrobin",
+ "discovery_type": "zookeeper"
+ }
+}'
+```
+
+### Register Service and verify Request
+
+1. Service registration using Zookeeper CLI
+
+- Register Service
+
+```bash
+# Login Container
+docker exec -it ${CONTAINERID} /bin/bash
+# Login Zookeeper Client
+oot@ae2f093337c1:/apache-zookeeper-3.7.0-bin# ./bin/zkCli.sh
+# Register Service
+[zk: localhost:2181(CONNECTED) 0] create /zookeeper/APISIX-ZK
'{"host":"127.0.0.1:1980","weight":100}'
+```
+
+- Successful Response
+
+```bash
+Created /zookeeper/APISIX-ZK
+```
+
+2. Verify Request
+
+- Request
+
+```bash
+curl -i http://127.0.0.1:9080/zk/hello
+```
+
+- Response
+
+```bash
+HTTP/1.1 200 OK
+Connection: keep-alive
+Content-Type: text/html; charset=utf-8
+Date: Tue, 29 Mar 2022 08:51:28 GMT
+Server: APISIX/2.12.0
+Transfer-Encoding: chunked
+
+hello
+```