1. 环境准备
要使用 SOFARegistry,需要先准备好基础环境,SOFARegistry 依赖以下环境:
- Linux/Unix/Mac
- JDK8
- 需要采用 Apache Maven 3.2.5 或者以上的版本来编译
2. 资源配额
- cpu: 4c
- memory: 8G
- disk: 50G
3. 两种部署模式
- 集成部署模式
- 将 meta/data/session 三个角色打包集成在一个 jvm 里运行,可单机或集群部署,部署简单。
- 独立部署模式
- 将 meta/data/session 三个角色分开部署,每个角色都可以单机或集群部署,可根据实际情况为每个角色部署不同的数量。
- 生产环境建议使用这种部署模式。
4. 配置参数
SOFARegistry 的部署,依赖于一些公共参数
properties | environment | 默认值 | 作用 |
---|---|---|---|
nodes.localDataCenter | x | DefaultDataCenter | 集群名,多个注册中心公用同一个数据库用到 |
nodes.localRegion | x | DEFAULT_ZONE | 逻辑 region, 创建多组 session |
jdbc.url | JDBC_URL | 必填 | 数据库地址 |
jdbc.username | JDBC_USERNAME | 必填 | 数据库用户名 |
jdbc.password | JDBC_PASSWORD | 必填 | 数据库密码 |
properties 可以写在 registry-all/conf/application.properties 中, kubernetes 下部署也可以使用 configmap 进行文件挂载
5. 打包
jar
release 页面 下载最新的 registry-all.tgz 包
tar -zxvf registry-all.tgz
cd registry-all
或者从源码打包
git clone https://github.com/sofastack/sofa-registry.git
cd sofa-registry
mvn clean package -Pserver-release -Dmaven.test.skip=true
cp ./server/distribution/all/target/registry-all.tgz <somewhere>
cd <somewhere>
tar -zxvf registry-all.tgz
cd registry-all
image
image 托管于 https://hub.docker.com/r/sofaregistry/sofaregistry
或者从源码 build: 修改 Makefile 中 image 的 repository
git clone https://github.com/sofastack/sofa-registry.git
cd sofa-registry
mvn clean package -Dmaven.test.skip=true
make image_build
make image_push
6. 集成部署模式
集成部署模式,是将 meta/data/session 三个角色打包集成在一个 JVM 里运行,可单机或集群部署, 不建议大规模使用
6.1 jar 单机部署
集成部署的单机部署模式可以直接参考快速开始-服务端部署部分。
6.2 jar 集群部署
- 解压 registry-all.tgz,并修改配置文件
集群部署,即搭建 2 台以上的集群,建议至少使用 3 台(注意:目前不支持在同一台机器部署多个 SOFARegistry,因此您必须有 3 台不同的机器)。在每一台机器上的部署方法同上:
cp ./server/distribution/all/target/registry-all.tgz <somewhere>
cd <somewhere>
tar -zxvf registry-all.tgz
cd registry-all
区别是每台机器在部署时需要修改 registry-all/conf/application.properties 配置, 组成同一个注册中心的多台机器需要配置相同的数据库和nodes.localDataCenter
nodes.localDataCenter=DefaultDataCenter
nodes.localRegion=DEFAULT_ZONE
jdbc.url = jdbc:mysql://127.0.0.1:3306/registrymetadb?useUnicode=true&characterEncoding=utf8
jdbc.username = root
jdbc.password = root
- 启动 registry-integration
每台机器都修改以上配置文件后,按照“单机部署”的步骤去启动 registry-integration 即可。
sh bin/integration/start.sh
6.3 docker 集群部署
客户端和 SOFARegistry 需要同一个三层网络内,因此利用 docker 部署需要使用 host network 可以通过配置文件挂载的方式进行部署,也可以通过环境变量传递的方式 同时需要添加 REGISTRY_APP_NAME=integration 进入集成模式,在一个 jvm 里启动 3 个角色
image 中, registry-all.tgz 的解压地址在 registry-distribution/registry-all
, 配置需要挂载到正确的目录
docker run -e REGISTRY_APP_NAME=integration \
--name=sofa-registry --rm --net=host \
-v $PWD/conf/:/registry-distribution/registry-all/conf/ \
-e JDBC_URL=jdbc:mysql://172.17.0.1:3306/registrymetadb
-e JDBC_USERNAME=root
-e JDBC_PASSWORD=root
sofaregistry/sofaregistry:6.1.4
7. 独立部署模式
独立部署模式,是将 meta/data/session 三个角色分开部署,每个角色都可以单机或集群部署,可根据实际情况为每个角色部署不同的数量,生产环境推荐使用这种部署模式。
以下介绍 332 模式(即 3 台 meta + 3 台 data + 2 台 session)的部署步骤。
7.1 jar 集群部署
- 解压 registry-all.tgz,并修改配置文件 集群部署,即搭建 2 台以上的集群,建议至少使用 3 台(注意:目前不支持在同一台机器部署多个 SOFARegistry,因此您必须有 3 台不同的机器)。在每一台机器上的部署方法同上:
cp ./server/distribution/all/target/registry-all.tgz <somewhere>
cd <somewhere>
tar -zxvf registry-all.tgz
cd registry-all
application.properties 配置, 组成同一个注册中心的多台机器需要配置相同的数据库和nodes.localDataCenter
nodes.localDataCenter=DefaultDataCenter
nodes.localRegion=DEFAULT_ZONE
jdbc.url = jdbc:mysql://127.0.0.1:3306/registrymetadb?useUnicode=true&characterEncoding=utf8
jdbc.username = root
jdbc.password = root
7.1.1 meta 部署
sh bin/meta/start.sh
7.1.2 data 部署
sh bin/data/start.sh
7.1.3 session 部署
sh bin/session/start.sh
7.2 docker 集群部署
客户端和 SOFARegistry 需要同一个三层网络内,因此利用 docker 部署需要使用 host network 可以通过配置文件挂载的方式进行部署,也可以通过环境变量传递的方式 同时需要添加 REGISTRY_APP_NAME=integration 进入集成模式,在一个 jvm 里启动 3 个角色
image 中, registry-all.tgz 的解压地址在 registry-distribution/registry-all
, 配置需要挂载到正确的目录
7.2.1 meta 启动
docker run -e REGISTRY_APP_NAME=meta \
--name=sofa-registry --rm --net=host \
-v $PWD/conf/:/registry-distribution/registry-all/conf/ \
-e JDBC_URL=jdbc:mysql://172.17.0.1:3306/registrymetadb
-e JDBC_USERNAME=root
-e JDBC_PASSWORD=root
sofaregistry/sofaregistry:6.1.4
7.2.2 data 启动
docker run -e REGISTRY_APP_NAME=data \
--name=sofa-registry --rm --net=host \
-v $PWD/conf/:/registry-distribution/registry-all/conf/ \
-e JDBC_URL=jdbc:mysql://172.17.0.1:3306/registrymetadb
-e JDBC_USERNAME=root
-e JDBC_PASSWORD=root
sofaregistry/sofaregistry:6.1.4
7.2.3 session 启动
docker run -e REGISTRY_APP_NAME=session \
--name=sofa-registry --rm --net=host \
-v $PWD/conf/:/registry-distribution/registry-all/conf/ \
-e JDBC_URL=jdbc:mysql://172.17.0.1:3306/registrymetadb
-e JDBC_USERNAME=root
-e JDBC_PASSWORD=root
sofaregistry/sofaregistry:6.1.4
7.3 kubernetes
SOFARegistry 使用 kustomize 来进行配置渲染 下载源码
git clone git@github.com:sofastack/sofa-registry.git
configmap-patch.yaml 和 db-secret-patch.yaml 中是传给每个角色的配置 修改对应配置,使用 kustomize 渲染得到部署用到的 yaml
kustomize build docker/kube/sofa-registry/overlays/standalone-dc2
同时需要申请 loadbalancer 挂载 session ip 的 9603 端口
8. 状态检查
确认运行状态:对每一台机器,都可访问三个角色提供的健康监测 api,或查看日志 logs/registry-startup.log
# 查看meta角色的健康检测接口:(3台机器,有1台是Leader,其他2台是Follower)
$ curl http://$META_IP:9615/health/check
{"success":true,"message":"..."}
# 查看data角色的健康检测接口:
$ curl http://$DATA_IP:9622/health/check
{"success":true,"message":"..."}
# 查看session角色的健康检测接口:
$ curl http://$SESSION_IP:9603/health/check
{"success":true,"message":"..."}