Logo
Mate 使用手册

介绍 #

DBPlusEngine-Mate 是为 DBPlusEngine-Proxy 打造的注册中心,可以帮助用户以更加云原生的方式管理 DBPlusEngine-Proxy,易运维同时也节约资源,为 SRE 和 DBA 提供符合操作的体验。

特性 #

目前 Mate 支持以下特性

  • 支持高可用

目前的 Mate 使用主备模式支持高可用架构。

  • 支持订阅事件

Mate 使用类似 Zookeeper 的 ZNode 结构存储数据,DBPlusEngine-Proxy 通过和 Mate 建立双向 GRPC 流交互,并订阅相关路径的事件。当有事件产生时,Mate 将会给所有订阅者发送事件。

  • 支持多种后端数据持久化

Mate 支持使用 kubernettes 的 ConfigMap,对象存储,MySQL,PostgreSQL 进行数据持久化。

  • 支持不同的部署方式

Mate 支持在虚拟机和 kubernetes 中部署。

架构 #

Mate 架构 #

Mate架构图

  • 工作原理 Mate 在启动的时候会向 backend 中的固定位置写入值,根据 “先到先得” 原则,先写成功的 Mate 会成为主节点提供服务,同时 Mate 也会周期性的更新信息。

Proxy 连接 Mate架构图 #

Proxy 连接 Mate架构图

  • 工作原理 DBPlusEngine-Proxy 启动时,会通过 Mate 的接口获取当前的主节点信息,根据获取到的主节点信息访问 Mate 的服务接口,如果获取不到,会周期性的一直获取主节点,直到获取到为止。

部署 #

虚拟机中部署 #

Proxy 连接 Mate架构图

说明:

  1. DBPlusEngine-Prxoy 会通过内网 LB 地址获取到所有 Mate 实例的信息,然后通过返回的信息拼接 Mate Leader 的 RPC 地址,最终和 RPC 地址建立连接。
  2. DBPlusEngine-Proxy 所在的主机 IP 需要与 Mate 所在的主机 IP 互通。
  3. 如果在私有化环境下不能创建 LB, 可使用以下方案: a. 部署 keepalived + vip b. 将 DBPlusEngine-Proxy 的配置文件 server.yaml 中的 server-lists 配置项更改为 机器1 ip:9090, 机器2 ip:9090 , 如以下
...
mode:
  type: Cluster
  repository:
    type: ZooKeeper
    props:
      namespace: governance_ds
      server-lists: 192.168.0.1:9090,192.168.0.2:9090
...

安装 #

sudo rpm -ivh sphereex-mate*.rpm

说明:RPM 包会创建以下文件

文件描述
/etc/sphereex-mate/mate.confMate 的配置文件,主要包含启动时的命令行参数
/usr/lib/systemd/system/sphereex-mate.serviceMate 的服务配置文件,由 systemd 管理
/usr/local/sphereex-mate/mateMate 的可执行文件
/usr/local/sphereex-mate/mate-cliMate 的运维工具,主要用于对当前 Mate 存储的 key 的 操作

前置步骤

  1. 安装完 Mate RPM 包后,需要执行如下命令使 Mate 服务生效
systemctl daemon-reload #只需运行一次
  1. 在启动 Mate 之前需要按实际情况修改 /etc/sphereex-mate/mate.conf 配置文件。 如使用 MySQL 数据库选举 leader 并作为 Mate 持久化数据的存储的配置如下:
ARGS="-db-leader \
-mysql-backend \
-db-host=127.0.0.1 \
-db-port=13306 \
-db-user=root \
-db-password=123456 \

启动 #

sudo systemctl start sphereex-mate
  • Mate 默认会启动如下端口
端口描述
21510Mate GRPC 服务端口,DBPlusEngine-Proxy 会最终与此端口通信
21511Mate GRPC-Web 端口,为预留端口
9090Mate metrics 端口, DBPlusEngine-Proxy 会通过此端口获取 Mate 的实例信息
  • 查看状态
sudo systemctl status sphereex-mate
  • 关闭
sudo systemctl stop sphereex-mate
  • 卸载
sudo rpm -e sphereex-mate
  • 配置 DBPlusEngine-Proxy

DBPlusEngine-Proxy 使用 Mate 需要做如下配置:

...
mode:
  type: Cluster
  repository:
    type: SphereEx:MATE
    props:
      namespace: governance_ds
      server-lists: ${LB IP}:9090 

将 ${LB IP} 替换为实际LB 的 IP 地址。

  • 参数列表
参数类型默认值描述
-grpc-addr字符串:21510GRPC 服务监听地址
-grpc-web-addr字符串:21511GRPC Web 服务监听地址
-metrics-addr字符串:9090指标服务监听地址,DBPlusEngine-Proxy 会使用该地址获取当前正在运行的 Mate leader 信息
-kube-leader布尔值false是否通过 kubernetes 选举 leader
-obs-leader布尔值false是否通过对象存储选举 leader
-db-leader布尔值false是否通过数据库选举 leader
-kube-backend布尔值false是否使用 kubernetes 中的 configmap 持久化数据
-obs-backend布尔值false是否使用对象存储持久化数据
-pg-backend布尔值false是否使用 PostgreSQL 持久化数据
-mysql-backend布尔值false是否使用 MySQL 持久化数据
-null-backend布尔值false是否数据只保留到内存,此参数没有实际意义,仅在测试中使用
-rate整数0限制 GRPC 服务中一元 GRPC 方法的速率,默认为 0,代表不限制
-kube-backend-name字符串mate-backend数据持久化到 kubernetes 中 configmap 的名称
-obs-access-key字符串""指定连接对象存储的 access-key
-obs-secret-key字符串""指定连接对象存储的 secret-key
-obs-endpoint字符串""指定连接对象存储的地址
-obs-region字符串""指定对象存储中 bucket 所在的区域,可以不填
-obs-bucket字符串""指定对象存储中使用的 bucket
-obs-ssl布尔值false连接对象存储时是否启用 ssl
-db-host字符串""指定数据库地址
-db-port字符串""指定数据库端口
-db-user字符串""指定连接数据库的用户名
-db-password字符串""指定连接数据库的密码
-db-dbname字符串""指定连接的数据库名称
-zap-log-level字符串info日志级别,可以是 ‘debug’, ‘info’, ’error’

Kubernetes 中部署 #

Proxy 连接 Mate架构图

DBPlusEngine-Proxy 会通过 Service 地址获取到所有 Mate 实例的信息,然后通过返回的信息拼接 Mate Leader 的 RPC 地址,最终和 RPC 地址建立连接。 说明

  1. DBPlusEngine-Proxy 会通过 Service 获取到所有 Mate POD 的信息,然后通过返回的信息拼接 Mate Leader 的 RPC 地址,最终和 RPC 地址建立连接。
  2. DBPlusEngine-Proxy 的 POD IP 需要与 Mate 的 POD IP 互通

安装 #

前置步骤

  1. 在安装 Mate 之前需要按实际情况修改 Chart 的 values.yaml 文件。 如使用 kubernetes 选举 leader, s3 作为 Mate 持久化数据的存储的配置如下:
...

kubeLeader:
  ## @param kubeLeader.enabled 是否启用在 kubernetes 中使用 Lease 选举主节点
  enabled: true

nullBackend:
  ## @param nullBackend.enabled 是否设置为使用内存模式, 此模式只为测试使用
  enabled: false

kubeBackend:
  ## @param kubeBackend.enabled 是否启用 kubeBackend, 数据持久化到 kubernetes 的 configmap
  enabled: false
  ## @param kubeBackend.backendName configmap 的名称
  backendName: "mate-backend"

obsBackend:
  ## @param obsBackend.enabled 是否启用 obsBackend,数据持久化到对象存储
  enabled: true
  ## @param obsBackend.accessKey 对象存储的认证 access key
  accessKey: "AKIAXRZPPZNGWHZDZX1Z"
  ## @param obsBackend.secretKey 对象存储的认证 secret key
  secretKey: "1Reu8cOyTLl57jccjLMSTh5qFOH3Rayx0R2UWCUd"
  ## @param obsBackend.endpoint 对象存储的地址
  endpoint: "s3.amazonaws.com"
  ## @param obsBackend.bucket 对象存储中 bucket 的名称
  bucket: "mate-test-chaos"
  ## @param obsBackend.region 对象存储中 bucket 的区域
  region: ""
  ## @param obsBackend.useSSL 访问对象存储是否启用 ssl
  useSSL: true

...

运行以下命令安装

helm install release-name dbplusengine-mate [-n namespace]

将创建如下资源

资源描述
deploymentMate 的 deployment,默认副本数为 2
serviceMate 的 service,默认暴露 21510, 9090 端口
secret如果 imagePullAccount.enabled,将创建

配置 DBPlusEngine-Proxy DBPlusEngine-Proxy 使用 Mate 需要做如下配置:

...
mode:
  type: Cluster
  repository:
    type: SphereEx:MATE
    props:
      namespace: governance_ds
      server-lists: ${Service Name}:9090 

将 ${Service Name} 替换为实际 ServiceName 的名称。

卸载 #

运行以下命令卸载

helm delete release-name

参数列表 #

Helm Chart 参数列表

参数默认值描述
replicas2Mate 副本数
image.repositoryuhub.service.ucloud.cn/cloud-ops/mateMate 镜像名
image.taglatestMate 镜像tag
image.pullPolicyAlways镜像拉取策略
imagePullAccount.enabledfalse是否根据认证信息自动创建 secret
imagePullAccount.username""私有仓库认证用户名
imagePullAccount.password""私有仓库认证密码
imagePullSecrets.enabledtrue是否使用已存在的私有仓库认证 secrets
imagePullSecrets.secrets[0].name""指定已存在的私有仓库认证 secret 名称
resources{}Mate 需要的资源
podTemplateAnnotations{}Pod template 的注解
grpcAddr:21510grpc server 的监听地址
grpcWebAddr:21511grpc web server 的监听地址
metricsAddr:9090metrics server 的监听地址
kubeLeader.enabledtrue是否启用在 kubernetes 中使用 Lease 选举主节点
nullBackend.enabledfalse是否设置为使用内存模式, 此模式只为测试使用
kubeBackend.enabledtrue是否启用 kubeBackend, 数据持久化到 kubernetes 的 configmap
kubeBackend.backendNamemate-backendconfigmap 的名称
obsBackend.enabledfalse是否启用 obsBackend,数据持久化到对象存储
obsBackend.accessKey""对象存储的认证 access key
obsBackend.secretKey""对象存储的认证 secret key
obsBackend.endpoint""对象存储的地址
obsBackend.bucket""对象存储中 bucket 的名称
obsBackend.region""对象存储中 bucket 的区域
obsBackend.useSSLfalse访问对象存储是否启用 ssl
dbBackend.enabledfalse是否启用 dbBackend, 数据持久化到数据库
dbBackend.kind.mysqltrue是否使用 mysql 数据库
dbBackend.kind.pgfalse是否使用 postgresql 数据库
dbBackend.host""数据库地址
dbBackend.user""数据库认证用户名
dbBackend.password""数据库认证密码
dbBackend.db""数据库名称

MateCli 使用说明 #

介绍 #

MateCli 实现了类似 Zookeeper 的 zkCli.sh 功能,可以交互式的查询到 Mate 内部存储的数据,以提升 Mate 的可维护性。

交互式命令 #

前提

虚拟机中部署执行以下命令进入交互式终端,例如

# /mate-cli -mate-addr 127.0.0.1:9090
Mate[/]>  

Kubernetes 中部署需要进入到容器中执行以下命令进入交互式终端,例如

❯ kubectl exec -it -n ss mate-sphereex-dbplusengine-mate-d569b4b69-9zhbk sh
kubectl exec [POD] [COMMAND] is DEPRECATED and will be removed in a future version. Use kubectl exec [POD] -- [COMMAND] instead.
/ # ./mate-cli -mate-addr 127.0.0.1:9090
Mate[/]>  

说明: -mate-addr 参数需要替换成实际地址

  1. ls 执行下面命令
ls

cli-ls

执行下面命令, 递归显示所有 key

ls -r

cli-ls-r

  1. cd

执行下面命令,切换到某个节点

cd /tm/nodes/compute_nodes/online/proxy/

cli-cd

  1. put

执行下面命令,创建 key

put /ts/a c

cli-put

  1. get

执行下面命令,查看 key

get /ts/a

cli-get

  1. stat

执行下面命令,查看 key 的元信息

stat /ts/a

cli-stat

  1. delete

执行下面命令,删除 key

delete /ts/a

cli-del

  1. pwd

执行下面命令,查看当前路径

pwd

cli-pwd

  1. help

执行下面命令,查看帮助信息

help

cli-help

执行下面命令查看具体命令的帮助信息

put -h

cli-put-h

  1. exit

执行下面命令退出终端

exit