matrixone集群搭建、启停、高可用扩缩容和连接数据库

1. 部署 Kubernetes 集群

由于 MatrixOne 的分布式部署依赖于 Kubernetes 集群,因此我们需要一个 Kubernetes 集群。本篇文章将指导你通过使用 Kuboard-Spray 的方式搭建一个 Kubernetes 集群。

准备集群环境

对于集群环境,需要做如下准备:

  • 3 台虚拟机
  • 操作系统使用 CentOS 7.9 (需要允许 root 远程登入):其中两台作为部署 Kubernetes 以及 MatrixOne 相关依赖环境的机器,另外一台作为跳板机,来搭建 Kubernetes 集群。
  • 外网访问条件。3 台服务器都需要进行外网镜像拉取。

各个机器情况分布具体如下所示:

Host内网 IPmemCPUDiskRole
kuboardspray192.168.40.1292G2C50G跳板机
master0192.168.40.1308G2C50Gmaster etcd
node0192.168.40.1318G2C50Gworker
跳板机部署 Kuboard Spray

Kuboard-Spray 是用来可视化部署 Kubernetes 集群的一个工具。它会使用 Docker 快速拉起一个能够可视化部署 Kubernetes 集群的 Web 应用。Kubernetes 集群环境部署完成后,可以将该 Docker 应用停掉。

跳板机环境准备
  1. 安装 Docker:由于会使用到 Docker,因此需要具备 Docker 的环境。使用以下命令在跳板机安装并启动 Docker:

  • [root@matrix1 ~]# yum install -y docker...Installed:docker.x86_64 2:1.13.1-210.git7d71120.el7.centos                                                                                                                                                                                       Dependency Installed:PyYAML.x86_64 0:3.10-11.el7                                             atomic-registries.x86_64 1:1.22.1-33.gitb507039.el7_8                                audit-libs-python.x86_64 0:2.8.5-4.el7                                    checkpolicy.x86_64 0:2.5-8.el7                                          container-selinux.noarch 2:2.119.2-1.911c772.el7_8                                   container-storage-setup.noarch 0:0.11.0-2.git5eaf76c.el7                  containers-common.x86_64 1:0.1.40-11.el7_8                              docker-client.x86_64 2:1.13.1-210.git7d71120.el7.centos                              docker-common.x86_64 2:1.13.1-210.git7d71120.el7.centos                   fuse-overlayfs.x86_64 0:0.7.2-6.el7_8                                   fuse3-libs.x86_64 0:3.6.1-4.el7                                                      libcgroup.x86_64 0:0.41-21.el7                                            libnl.x86_64 0:1.1.4-3.el7                                              libseccomp.x86_64 0:2.3.1-4.el7                                                      libsemanage-python.x86_64 0:2.5-14.el7                                    libxml2-python.x86_64 0:2.9.1-6.el7_9.6                                 libyaml.x86_64 0:0.1.4-11.el7_0                                                      oci-register-machine.x86_64 1:0-6.git2b44233.el7                          oci-systemd-hook.x86_64 1:0.2.0-1.git05e6923.el7_6                      oci-umount.x86_64 2:2.5-3.el7                                                        policycoreutils-python.x86_64 0:2.5-34.el7                                python-IPy.noarch 0:0.75-6.el7                                          python-backports.x86_64 0:1.0-8.el7                                                  python-backports-ssl_match_hostname.noarch 0:3.5.0.1-1.el7                python-chardet.noarch 0:2.2.1-3.el7                                     python-dateutil.noarch 0:1.5-7.el7                                                   python-dmidecode.x86_64 0:3.12.2-4.el7                                    python-ethtool.x86_64 0:0.8-8.el7                                       python-inotify.noarch 0:0.9.4-4.el7                                                  python-ipaddress.noarch 0:1.0.16-2.el7                                    python-pytoml.noarch 0:0.1.14-1.git7dea353.el7                          python-requests.noarch 0:2.6.0-10.el7                                                python-setuptools.noarch 0:0.9.8-7.el7                                    python-six.noarch 0:1.9.0-2.el7                                         python-syspurpose.x86_64 0:1.24.54-1.el7.centos                                      python-urllib3.noarch 0:1.10.2-7.el7                                      setools-libs.x86_64 0:3.3.8-4.el7                                       slirp4netns.x86_64 0:0.4.3-4.el7_8                                                   subscription-manager.x86_64 0:1.24.54-1.el7.centos                        subscription-manager-rhsm.x86_64 0:1.24.54-1.el7.centos                 subscription-manager-rhsm-certificates.x86_64 0:1.24.54-1.el7.centos                 usermode.x86_64 0:1.111-6.el7                                             yajl.x86_64 0:2.0.4-4.el7                                              Dependency Updated:libxml2.x86_64 0:2.9.1-6.el7_9.6                                                                                                                                                                                                       Complete!
    [root@matrix1 ~]#
  • 启动 Docker:

  1. [root@matrix1 ~]# systemctl start docker
    [root@matrix1 ~]# systemctl status docker
    ● docker.service - Docker Application Container EngineLoaded: loaded (/usr/lib/systemd/system/docker.service; disabled; vendor preset: disabled)Active: active (running) since Sun 2024-06-30 14:41:59 CST; 7s agoDocs: http://docs.docker.comMain PID: 1574 (dockerd-current)CGroup: /system.slice/docker.service├─1574 /usr/bin/dockerd-current --add-runtime docker-runc=/usr/libexec/docker/docker-runc-current --default-runtime=docker-runc --exec-opt native.cgroupdriver=systemd --userland-proxy-path=/usr/libexec/docker/docker-pro...└─1579 /usr/bin/docker-containerd-current -l unix:///var/run/docker/libcontainerd/docker-containerd.sock --metrics-interval=0 --start-timeout 2m --state-dir /var/run/docker/libcontainerd/containerd --shim docker-contain...Jun 30 14:41:58 matrix1 dockerd-current[1574]: time="2024-06-30T14:41:58.634779358+08:00" level=info msg="libcontainerd: new containerd process, pid: 1579"
    Jun 30 14:41:59 matrix1 dockerd-current[1574]: time="2024-06-30T14:41:59.703080121+08:00" level=info msg="Graph migration to content-addressability took 0.00 seconds"
    Jun 30 14:41:59 matrix1 dockerd-current[1574]: time="2024-06-30T14:41:59.703739657+08:00" level=info msg="Loading containers: start."
    Jun 30 14:41:59 matrix1 dockerd-current[1574]: time="2024-06-30T14:41:59.718884838+08:00" level=info msg="Firewalld running: true"
    Jun 30 14:41:59 matrix1 dockerd-current[1574]: time="2024-06-30T14:41:59.830237459+08:00" level=info msg="Default bridge (docker0) is assigned with an IP address 172.17.0.0/16. Daemon option --bip can be used to se...rred IP address"
    Jun 30 14:41:59 matrix1 dockerd-current[1574]: time="2024-06-30T14:41:59.920855799+08:00" level=info msg="Loading containers: done."
    Jun 30 14:41:59 matrix1 dockerd-current[1574]: time="2024-06-30T14:41:59.934864505+08:00" level=info msg="Daemon has completed initialization"
    Jun 30 14:41:59 matrix1 dockerd-current[1574]: time="2024-06-30T14:41:59.934882667+08:00" level=info msg="Docker daemon" commit="7d71120/1.13.1" graphdriver=overlay2 version=1.13.1
    Jun 30 14:41:59 matrix1 systemd[1]: Started Docker Application Container Engine.
    Jun 30 14:41:59 matrix1 dockerd-current[1574]: time="2024-06-30T14:41:59.939275261+08:00" level=info msg="API listen on /var/run/docker.sock"
    Hint: Some lines were ellipsized, use -l to show in full.
    [root@matrix1 ~]# 

环境准备完成后,即可部署 Kuboard-Spray。

部署 Kuboard-Spray

执行以下命令安装 Kuboard-Spray:

docker run -d \
  --privileged \
  --restart=unless-stopped \
  --name=kuboard-spray \
  -p 80:80/tcp \
  -v /var/run/docker.sock:/var/run/docker.sock \
  -v ~/kuboard-spray-data:/data \
  eipwork/kuboard-spray:latest-amd64

如果由于网络问题导致镜像拉取失败,可以使用下面的备用地址:

docker run -d \
  --privileged \
  --restart=unless-stopped \
  --name=kuboard-spray \
  -p 80:80/tcp \
  -v /var/run/docker.sock:/var/run/docker.sock \
  -v ~/kuboard-spray-data:/data \
  swr.cn-east-2.myhuaweicloud.com/kuboard/kuboard-spray:latest-amd64

[root@matrix1 ~]# 
[root@matrix1 ~]# docker run -d \
>   --privileged \
>   --restart=unless-stopped \
>   --name=kuboard-spray \
>   -p 80:80/tcp \
>   -v /var/run/docker.sock:/var/run/docker.sock \
>   -v ~/kuboard-spray-data:/data \
>   swr.cn-east-2.myhuaweicloud.com/kuboard/kuboard-spray:latest-amd64
Unable to find image 'swr.cn-east-2.myhuaweicloud.com/kuboard/kuboard-spray:latest-amd64' locally
Trying to pull repository swr.cn-east-2.myhuaweicloud.com/kuboard/kuboard-spray ... 
latest-amd64: Pulling from swr.cn-east-2.myhuaweicloud.com/kuboard/kuboard-spray
ea362f368469: Pull complete 
636fbe294837: Pull complete 
bcb263fe9fc0: Pull complete 
133925842376: Pull complete 
f9907baf1cbd: Pull complete 
d3d64ec180f1: Pull complete 
594bc063528e: Pull complete 
5f0f5889b777: Pull complete 
318b2c0b8be2: Pull complete 
6688ab11c694: Pull complete 
66f4821ea7aa: Pull complete 
aa3656288b68: Pull complete 
f5db20e99051: Pull complete 
23f5c52b3f3b: Pull complete 
5ca3615631ef: Pull complete 
5a2591af1183: Pull complete 
7c36194da55b: Pull complete 
ef958a4b714c: Pull complete 
Digest: sha256:f40480879b4e7e6f975a091054f8a5fa10ad5c275227c083195258b9efef81ed
Status: Downloaded newer image for swr.cn-east-2.myhuaweicloud.com/kuboard/kuboard-spray:latest-amd64
327344604aec6d28508b07d9380bcb7826c3469591faf7530e6fb4bdacab7f25
[root@matrix1 ~]# 
[root@matrix1 ~]# docker ps
CONTAINER ID        IMAGE                                                                COMMAND             CREATED             STATUS              PORTS                NAMES
327344604aec        swr.cn-east-2.myhuaweicloud.com/kuboard/kuboard-spray:latest-amd64   "./kuboard-spray"   3 minutes ago       Up 3 minutes        0.0.0.0:80->80/tcp   kuboard-spray
[root@matrix1 ~]# 

执行完成后,即可在浏览器输入 http://1.13.2.100(跳板机 IP 地址 192.168.40.129)打开 Kuboard-Spray 的 Web 界面,输入用户名 admin,默认密码 Kuboard123,即可登录 Kuboard-Spray 界面,如下所示:

登录之后,即可开始部署 Kubernetes 集群。

可视化部署 Kubernetes 集群

登录 Kuboard-Spray 界面之后,即可开始可视化部署 Kubernetes 集群。

导入 Kubernetes 相关资源包

安装界面会通过在线下载的方式,下载 Kubernetes 集群所对应的资源包,以实现离线安装 Kubernetes 集群。

  1. 点击资源包管理,选择对应版本的 Kubernetes 资源包下载:

    下载 spray-v2.18.0b-2_k8s-v1.23.17_v1.24-amd64 版本

 2.点击导入后,选择加载资源包,选择合适的下载源,等待资源包下载完成。

3.此时会 pull 相关的镜像依赖:

 4.镜像资源包拉取成功后,返回 Kuboard-Spray 的 Web 界面,可以看到对应版本的资源包已经导入完成。

安装 Kubernetes 集群

本章节将指导你进行 Kubernetes 集群的安装。

  1. 选择集群管理,选择添加集群安装计划

  2. 在弹出的对话框中,定义集群的名称,选择刚刚导入的资源包的版本,再点击确定。如下图所示:

集群规划

按照事先定义好的角色分类,Kubernetes 集群采用 1 master + 1 worker +1 etcd 的模式进行部署。

在上一步定义完成集群名称,并选择完成资源包版本,点击确定之后,接下来可以直接进入到集群规划阶段。

  1. 选择对应节点的角色和名称:

填写完所有的角色之后,点击保存。接下来就可以准备安装 Kubernetes 集群了。

开始安装 Kubernetes 集群

在上一步填写完成所有角色,并保存后,点击执行,即可开始 Kubernetes 集群的安装。

  1. 如下图所示,点击确定,开始安装 Kubernetes 集群:

 

  • 安装 Kubernetes 集群时,会在对应节点上执行 ansible 脚本,安装 Kubernetes 集群。整体事件会根据机器配置和网络不同,需要等待的时间不同,一般情况下需要 5 ~ 10 分钟。

    Note: 如果出现错误,你可以看日志的内容,确认是否是 Kuboard-Spray 的版本不匹配,如果版本不匹配,请更换合适的版本。

  • 安装完成后,到 Kubernetes 集群的 master 节点上执行 kubectl get node

[root@matrix1 opt]# kubectl get node
NAME      STATUS   ROLES                  AGE   VERSION
master0   Ready    control-plane,master   49m   v1.23.17
node0     Ready    <none>                 48m   v1.23.17
[root@matrix1 opt]# 

  • 命令结果如上图所示,即表示 Kubernetes 集群安装完成。

  • 在 Kubernetes 的每个节点上调整 DNS 路由表。请在每台机器上执行以下命令,查找包含 169.254.25.10 的 nameserver,并删除该记录。(该记录可能影响各个 Pod 之间的通信效率,如果不存在这条记录则无需更改)

     
vim /etc/resolve.conf

2. 部署 helm

Helm 是一个用于管理 Kubernetes 应用程序的包管理工具。它通过使用 chart(预先配置的安装包资源)来简化应用程序的部署和管理过程。类似于 Ubuntu 的 APT 和 CentOS 的 YUM,Helm 提供了一种便捷的方式来安装、升级和管理 Kubernetes 应用程序。

在安装 Minio 之前,我们需要先安装 Helm,因为 Minio 的安装过程依赖于 Helm。以下是安装 Helm 的步骤:

Note: 本章节均是在 master0 节点操作。

  1. 下载 helm 安装包:

yum install -y wget wget https://get.helm.sh/helm-v3.10.2-linux-amd64.tar.gz
#如果在国内的网络受限环境下,可以换以下国内镜像地址
wget https://mirrors.huaweicloud.com/helm/v3.10.2/helm-v3.10.2-linux-amd64.tar.gz[root@matrix1 opt]# wget https://mirrors.huaweicloud.com/helm/v3.10.2/helm-v3.10.2-linux-amd64.tar.gz
--2024-06-30 16:34:14--  https://mirrors.huaweicloud.com/helm/v3.10.2/helm-v3.10.2-linux-amd64.tar.gz
Resolving mirrors.huaweicloud.com (mirrors.huaweicloud.com)... 124.70.125.167, 124.70.125.153
Connecting to mirrors.huaweicloud.com (mirrors.huaweicloud.com)|124.70.125.167|:443... connected.
HTTP request sent, awaiting response... 200 
Length: 14564021 (14M) [application/octet-stream]
Saving to: ‘helm-v3.10.2-linux-amd64.tar.gz’100%[===============================================================================================================================================================================================>] 14,564,021  7.95MB/s   in 1.7s   2024-06-30 16:34:16 (7.95 MB/s) - ‘helm-v3.10.2-linux-amd64.tar.gz’ saved [14564021/14564021][root@matrix1 opt]# 

解压并安装:

tar -zxf helm-v3.10.2-linux-amd64.tar.gz
mv linux-amd64/helm /usr/local/bin/helm

验证版本,查看是否安装完成:

[root@matrix1 opt]# helm version
version.BuildInfo{Version:"v3.10.2", GitCommit:"50f003e5ee8704ec937a756c646870227d7c8b58", GitTreeState:"clean", GoVersion:"go1.18.8"}
[root@matrix1 opt]# 

出现上面所示版本信息即表示安装完成。

3. CSI 部署

CSI 为 Kubernetes 的存储插件,为 MinIO 和 MarixOne 提供存储服务。本章节将指导你使用 local-path-provisioner 插件。

Note: 本章节均是在 master0 节点操作。

  1. 使用下面的命令行,安装 CSI:

wget https://github.com/rancher/local-path-provisioner/archive/refs/tags/v0.0.23.zip
unzip v0.0.23.zip
cd local-path-provisioner-0.0.23/deploy/chart/local-path-provisioner
helm install --set nodePathMap[0].paths[0]="/opt/local-path-provisioner",nodePathMap[0].node=DEFAULT_PATH_FOR_NON_LISTED_NODES  --create-namespace --namespace local-path-storage local-path-storage ./[root@matrix1 local-path-provisioner]# helm install --set nodePathMap[0].paths[0]="/opt/local-path-provisioner",nodePathMap[0].node=DEFAULT_PATH_FOR_NON_LISTED_NODES  --create-namespace --namespace local-path-storage local-path-storage ./
NAME: local-path-storage
LAST DEPLOYED: Sun Jun 30 16:39:41 2024
NAMESPACE: local-path-storage
STATUS: deployed
REVISION: 1
TEST SUITE: None
NOTES:
You can create a hostpath-backed persistent volume with a persistent volume claim like this:apiVersion: v1
kind: PersistentVolumeClaim
metadata:name: local-path-pvc
spec:accessModes:- ReadWriteOncestorageClassName: local-pathresources:requests:storage: 2Gi
[root@matrix1 local-path-provisioner]#

安装成功后,命令行显示如下所示:

--启动需设置代理访问docker.io,pod才能正常启动,否则会出现ImagePullBackOff状态

[root@master0 ~]# kubectl get pod -n local-path-storage
NAME                                                        READY   STATUS    RESTARTS   AGE
local-path-provisioner-7b65754f87-qtxh9                     1/1     Running   0          75m
local-path-storage-local-path-provisioner-d5bb7f8c9-6vx2t   1/1     Running   0          121m
[root@master0 ~]# 

  • Note: 安装完成后,该 storageClass 会在 worker 节点的 "/opt/local-path-provisioner" 目录提供存储服务。你可以修改为其它路径。

  • 设置缺省 storageClass

  • [root@master0 ~]# kubectl patch storageclass local-path -p '{"metadata": {"annotations":{"storageclass.kubernetes.io/is-default-class":"true"}}}'
    storageclass.storage.k8s.io/local-path patched
    [root@master0 ~]#
  • 设置缺省成功后,命令行显示如下:

     
[root@master0 ~]# kubectl get storageclass
NAME                   PROVISIONER                                               RECLAIMPOLICY   VOLUMEBINDINGMODE      ALLOWVOLUMEEXPANSION   AGE
local-path (default)   cluster.local/local-path-storage-local-path-provisioner   Delete          WaitForFirstConsumer   true                   128m
[root@master0 ~]# 

4. MinIO 部署

MinIO 的作用是为 MatrixOne 提供对象存储。本章节将指导你部署一个单节点的 MinIO。

Note: 本章节均是在 master0 节点操作。

安装启动

  1. 安装并启动 MinIO 的命令行如下:

helm repo add minio https://charts.min.io/      --此处需要科学代理
mkdir minio_ins && cd minio_ins
helm fetch minio/minio
ls -lth
tar -zxvf minio-5.2.0.tgz # 这个版本可能会变,以实际下载到的为准
cd ./minio/kubectl create ns mostoragehelm install minio \
--namespace mostorage \
--set resources.requests.memory=512Mi \
--set replicas=1 \
--set persistence.size=10G \
--set mode=standalone \
--set rootUser=rootuser,rootPassword=rootpass123 \
--set consoleService.type=NodePort \
--set image.repository=minio/minio \
--set image.tag=latest \
--set mcImage.repository=minio/mc \
--set mcImage.tag=latest \
-f values.yaml minio/minio------
在另一个窗口查看Pod状态
[root@master0 ~]# kubectl get pod -n mostorage
NAME                     READY   STATUS             RESTARTS   AGE
minio-687bb684cf-dd2dm   0/1     Pending            0          5m1s
minio-post-job-xmtv5     0/1     ImagePullBackOff   0          5m1s
[root@master0 ~]#------------以上helm install minio若失败,请设置科学代理,然后手动下载[root@master0 minio]# ctr images pull docker.io/minio/minio:latest
docker.io/minio/minio:latest:                                                     resolved       |++++++++++++++++++++++++++++++++++++++| 
index-sha256:fce0a90a37bb2887c850b68b61a0ac8ac02ea218b58eaea96bb7ca69eb503e20:    done           |++++++++++++++++++++++++++++++++++++++| 
manifest-sha256:684e14551216844918d4a3adcc658d0abad23c82d6a1f45e01f93930dc40d135: done           |++++++++++++++++++++++++++++++++++++++| 
layer-sha256:89a0c37fd9fdf857a59d8a13dac438d7124896ede0ff8b8ca77900a8663c5d94:    done           |++++++++++++++++++++++++++++++++++++++| 
config-sha256:f79e6d2493d206ce9aa1590cf9c52832544177d079a0b10986622c6e0b3dfae2:   done           |++++++++++++++++++++++++++++++++++++++| 
layer-sha256:a04e04efb6ef734885409c59529ee99f639717edcba8f2ee59b54ad6afe9cc9b:    done           |++++++++++++++++++++++++++++++++++++++| 
layer-sha256:a46a1d2a9b0cc0049f687085af311facd6dcb387c180d1b51ac13556bc1aaabf:    done           |++++++++++++++++++++++++++++++++++++++| 
layer-sha256:96c348a402f7273ba2f9c51da2943d13b9b933c540123c4b19c3c16a20e22e00:    done           |++++++++++++++++++++++++++++++++++++++| 
layer-sha256:b5d424d4526b84cd1df76478a233b34d626ae304aacf4912be5b51df87d39272:    done           |++++++++++++++++++++++++++++++++++++++| 
layer-sha256:f95d01c1144213af71abe44e9f34486023cd69ea8a6ad1ea8abd5ff33c0d7d18:    done           |++++++++++++++++++++++++++++++++++++++| 
layer-sha256:8229baddc9b6f5b48e897ac287fe3a10879d4fd5941b340f88aeac0dfd1646e0:    done           |++++++++++++++++++++++++++++++++++++++| 
layer-sha256:93907da5dcbda9d637dff022141528596dec554bcc88581605a2811353fced86:    done           |++++++++++++++++++++++++++++++++++++++| 
elapsed: 66.0s                                                                    total:  52.0 M (806.3 KiB/s)                                     
unpacking linux/amd64 sha256:fce0a90a37bb2887c850b68b61a0ac8ac02ea218b58eaea96bb7ca69eb503e20...
done: 2.001848684s
[root@master0 minio]# ctr images ls
REF                                              TYPE                                                      DIGEST                                                                  SIZE     PLATFORMS                                                         LABELS 
docker.io/minio/minio:latest                     application/vnd.oci.image.index.v1+json                   sha256:fce0a90a37bb2887c850b68b61a0ac8ac02ea218b58eaea96bb7ca69eb503e20 54.2 MiB linux/amd64,linux/arm64,linux/ppc64le,linux/s390x,unknown/unknown -      
docker.io/rancher/local-path-provisioner:v0.0.23 application/vnd.docker.distribution.manifest.list.v2+json sha256:db1a3225290dd8be481a1965fc7040954d0aa0e1f86a77c92816d7c62a02ae5c 13.3 MiB linux/amd64,linux/arm,linux/arm64,linux/s390x                     -      
[root@master0 minio]# ---以上下载成功之后,再查看Pod状态正常[root@master0 ~]# kubectl get pod -n mostorage
NAME                     READY   STATUS      RESTARTS   AGE
minio-687bb684cf-dd2dm   1/1     Running     0          18m
minio-post-job-xmtv5     0/1     Completed   0          18m
[root@master0 ~]# NAME: minio
LAST DEPLOYED: Sun May  7 19:07:18 2024
NAMESPACE: mostorage
STATUS: deployed
REVISION: 1
TEST SUITE: None
NOTES:
MinIO can be accessed via port 9000 on the following DNS name from within your cluster:
minio.mostorage.svc.cluster.localTo access MinIO from localhost, run the below commands:1. export POD_NAME=$(kubectl get pods --namespace mostorage -l "release=minio" -o jsonpath="{.items[0].metadata.name}")2. kubectl port-forward $POD_NAME 9000 --namespace mostorageRead more about port forwarding here: http://kubernetes.io/docs/user-guide/kubectl/kubectl_port-forward/You can now access MinIO server on http://localhost:9000. Follow the below steps to connect to MinIO server with mc client:1. Download the MinIO mc client - https://min.io/docs/minio/linux/reference/minio-mc.html#quickstart2. export MC_HOST_minio-local=http://$(kubectl get secret --namespace mostorage minio -o jsonpath="{.data.rootUser}" | base64 --decode):$(kubectl get secret --namespace mostorage minio -o jsonpath="{.data.rootPassword}" | base64 --decode)@localhost:90003. mc ls minio-local

目前为止,Minio 已经成功安装完毕。在后续的 MatrixOne 安装过程中,MatrixOne 将直接通过 Kubernetes 的 Service(SVC)与 Minio 进行通信,无需进行额外的配置。

然而,如果您希望从 localhost 连接到 Minio,可以执行以下命令行来设置 POD_NAME 变量,并将 mostorage 连接到 9000 端口:

export POD_NAME=$(kubectl get pods --namespace mostorage -l "release=minio" -o jsonpath="{.items[0].metadata.name}")
nohup kubectl port-forward --address 0.0.0.0 $POD_NAME -n mostorage 9000:9000 &

启动后,使用 http://118.195.255.252:32001/   http://192.168.40.30:32001/ 即可登录 MinIO 的页面,创建对象存储的信息。如下图所示,账户密码即上述步骤中 --set rootUser=rootuser,rootPassword=rootpass123 设置的 rootUser 和 rootPassword:

登录完成后,你需要创建对象存储相关的信息:

点击 Bucket > Create Bucket,在 Bucket Name 中填写 Bucket 的名称 minio-mo。填写完成后,点击右下方按钮 Create Bucket

5. MatrixOne 集群部署

本章节将指导你部署 MatrixOne 集群。

Note: 本章节均是在 master0 节点操作。

安装 MatrixOne-Operator

MatrixOne Operator 是一个在 Kubernetes 上部署和管理 MatrixOne 集群的独立软件工具。你可以从项目的 Release 列表中选择最新的 Operator Release 安装包进行安装。

按照以下步骤在 master0 上安装 MatrixOne Operator。我们将为 Operator 创建一个独立的命名空间 matrixone-operator

  1. 添加 matrixone-operator 地址到 helm 仓库:

  • helm repo add matrixone-operator https://matrixorigin.github.io/matrixone-operator
    
  • 更新仓库:

  • helm repo update
    
  • 查看 MatrixOne Operator 版本:

  • helm search repo matrixone-operator/matrixone-operator --versions --devel
    
  • 指定发布版本安装 MatrixOne Operator:

helm install matrixone-operator matrixone-operator/matrixone-operator --version <VERSION> --create-namespace --namespace matrixone-operator

Note

参数 VERSION 为要部署的 MatrixOne Operator 的版本号,如 1.0.0-alpha.2。

安装命令输出如下:

[root@master0 ~]# helm repo add matrixone-operator https://matrixorigin.github.io/matrixone-operator
"matrixone-operator" has been added to your repositories
[root@master0 ~]# helm repo update
Hang tight while we grab the latest from your chart repositories...
...Successfully got an update from the "minio" chart repository
...Successfully got an update from the "matrixone-operator" chart repository
...Successfully got an update from the "stable" chart repository
Update Complete. ⎈Happy Helming!⎈
[root@master0 ~]# [root@master0 ~]# helm search repo matrixone-operator/matrixone-operator --versions --devel
NAME                                    CHART VERSION   APP VERSION     DESCRIPTION                  
matrixone-operator/matrixone-operator   1.2.0-alpha.4   0.1.0           Matrixone Kubernetes Operator
matrixone-operator/matrixone-operator   1.2.0-alpha.3   0.1.0           Matrixone Kubernetes Operator
matrixone-operator/matrixone-operator   1.2.0-alpha.2   0.1.0           Matrixone Kubernetes Operator
matrixone-operator/matrixone-operator   1.2.0-alpha.1   0.1.0           Matrixone Kubernetes Operator
matrixone-operator/matrixone-operator   1.1.0-alpha4    0.1.0           Matrixone Kubernetes Operator
matrixone-operator/matrixone-operator   1.1.0-alpha3    0.1.0           Matrixone Kubernetes Operator
matrixone-operator/matrixone-operator   1.1.0-alpha2    0.1.0           Matrixone Kubernetes Operator
matrixone-operator/matrixone-operator   1.1.0-alpha1    0.1.0           Matrixone Kubernetes Operator
matrixone-operator/matrixone-operator   1.1.0-alpha.5   0.1.0           Matrixone Kubernetes Operator
matrixone-operator/matrixone-operator   1.0.0-rc4       0.1.0           Matrixone Kubernetes Operator
matrixone-operator/matrixone-operator   1.0.0-rc3       0.1.0           Matrixone Kubernetes Operator
matrixone-operator/matrixone-operator   1.0.0-rc1       0.1.0           Matrixone Kubernetes Operator
matrixone-operator/matrixone-operator   1.0.0-alpha.2   0.1.0           Matrixone Kubernetes Operator
matrixone-operator/matrixone-operator   1.0.0-alpha.1   0.1.0           Matrixone Kubernetes Operator
matrixone-operator/matrixone-operator   0.8.0-alpha.7   0.1.0           Matrixone Kubernetes Operator
matrixone-operator/matrixone-operator   0.8.0-alpha.6   0.1.0           Matrixone Kubernetes Operator
matrixone-operator/matrixone-operator   0.8.0-alpha.5   0.1.0           Matrixone Kubernetes Operator
matrixone-operator/matrixone-operator   0.8.0-alpha.4   0.1.0           Matrixone Kubernetes Operator
matrixone-operator/matrixone-operator   0.8.0-alpha.3   0.1.0           Matrixone Kubernetes Operator
matrixone-operator/matrixone-operator   0.8.0-alpha.2   0.1.0           Matrixone Kubernetes Operator
matrixone-operator/matrixone-operator   0.8.0-alpha.1   0.1.0           Matrixone Kubernetes Operator
matrixone-operator/matrixone-operator   0.7.0-alpha.10  0.1.0           Matrixone Kubernetes Operator
matrixone-operator/matrixone-operator   0.7.0-alpha.9   0.1.0           Matrixone Kubernetes Operator
matrixone-operator/matrixone-operator   0.7.0-alpha.8   0.1.0           Matrixone Kubernetes Operator
matrixone-operator/matrixone-operator   0.7.0-alpha.7   0.1.0           Matrixone Kubernetes Operator
matrixone-operator/matrixone-operator   0.7.0-alpha.6   0.1.0           Matrixone Kubernetes Operator
matrixone-operator/matrixone-operator   0.7.0-alpha.4   0.1.0           Matrixone Kubernetes Operator
matrixone-operator/matrixone-operator   0.7.0-alpha.1   0.1.0           Matrixone Kubernetes Operator
[root@master0 ~]# [root@master0 ~]# 
[root@master0 ~]# helm install matrixone-operator matrixone-operator/matrixone-operator --version 1.2.0-alpha.4 --create-namespace --namespace matrixone-operator
NAME: matrixone-operator
LAST DEPLOYED: Sun Jun 30 19:22:47 2024
NAMESPACE: matrixone-operator
STATUS: deployed
REVISION: 1
TEST SUITE: None
[root@master0 ~]# 

安装成功后,使用以下命令确认安装状态:

 
[root@master0 ~]# kubectl get pod -n matrixone-operator
NAME                                  READY   STATUS             RESTARTS   AGE
matrixone-operator-689c764687-mq9qq   0/1     ImagePullBackOff   0          8m11s
[root@master0 ~]#---此时发现容器状态不正常,经排查,需要手工下载镜像[root@master0 ~]# ctr images pull docker.io/matrixorigin/matrixone-operator:1.2.0-alpha.4
docker.io/matrixorigin/matrixone-operator:1.2.0-alpha.4:                          resolved       |++++++++++++++++++++++++++++++++++++++| 
index-sha256:3449f7da9d66e0a9d53ceae26651972ce1bb33dc5befbb240f727603aad345eb:    done           |++++++++++++++++++++++++++++++++++++++| 
manifest-sha256:947fc84af9b4735daf7addd5b99437da106a7cc879a4b224f402804635c9741f: done           |++++++++++++++++++++++++++++++++++++++| 
layer-sha256:b2ce0e0660777651a7a188ae1128acc61d01aca10a035a8b1faa2cdd8bbf0785:    done           |++++++++++++++++++++++++++++++++++++++| 
layer-sha256:058cf3d8c2ba04ad7c064698c08c5e886a8623c0ad6171b8d72684253534417d:    done           |++++++++++++++++++++++++++++++++++++++| 
layer-sha256:07ec09b9cc86ffd85201d9dfcc77dfe322277f7581a00d5cdf16a53ee5ab3a70:    done           |++++++++++++++++++++++++++++++++++++++| 
layer-sha256:b6824ed73363f94b3b2b44084c51c31bc32af77a96861d49e16f91e3ab6bed71:    done           |++++++++++++++++++++++++++++++++++++++| 
config-sha256:b708604d77e24d699c7b279e9a2e670f028bf3d40f752cb1f845ed5b6bf3baa0:   done           |++++++++++++++++++++++++++++++++++++++| 
layer-sha256:7c12895b777bcaa8ccae0605b4de635b68fc32d60fa08f421dc3818bf55ee212:    done           |++++++++++++++++++++++++++++++++++++++| 
layer-sha256:da7816fa955ea24533c388143c78804c28682eef99b4ee3723b548c70148bba6:    done           |++++++++++++++++++++++++++++++++++++++| 
layer-sha256:9aee425378d2c16cd44177dc54a274b312897f5860a8e78fdfda555a0d79dd71:    done           |++++++++++++++++++++++++++++++++++++++| 
layer-sha256:33e068de264953dfdc9f9ada207e76b61159721fd64a4820b320d05133a55fb8:    done           |++++++++++++++++++++++++++++++++++++++| 
layer-sha256:e8d9a567199d7a318c875f2558a679ba8a924f817afacbb428afc3ffe6be6828:    done           |++++++++++++++++++++++++++++++++++++++| 
layer-sha256:5664b15f108bf9436ce3312090a767300800edbbfd4511aa1a6d64357024d5dd:    done           |++++++++++++++++++++++++++++++++++++++| 
layer-sha256:27be814a09ebd97fac6fb7b82d19f117185e90601009df3fbab6f442f85cd6b3:    done           |++++++++++++++++++++++++++++++++++++++| 
layer-sha256:4aa0ea1413d37a58615488592a0b827ea4b2e48fa5a77cf707d0e35f025e613f:    done           |++++++++++++++++++++++++++++++++++++++| 
elapsed: 69.5s                                                                    total:  36.7 M (541.1 KiB/s)                                     
unpacking linux/amd64 sha256:3449f7da9d66e0a9d53ceae26651972ce1bb33dc5befbb240f727603aad345eb...
done: 5.29385549s
[root@master0 ~]# --下载成功之后,查看容器状态正常[root@master0 ~]# kubectl get pod -n matrixone-operator
NAME                                  READY   STATUS    RESTARTS   AGE
matrixone-operator-689c764687-mq9qq   1/1     Running   0          17m
[root@master0 ~]#

如上代码行所示,对应 Pod 状态均正常。

创建 MatrixOne 集群

  1. 首先创建 MatrixOne 的命名空间:

NS="mo-hn"
kubectl create ns ${NS}[root@master0 ~]# NS="mo-hn"
[root@master0 ~]# kubectl create ns ${NS}
namespace/mo-hn created
[root@master0 ~]# 
[root@master0 ~]# kubectl -n mo-hn create secret generic minio --from-literal=AWS_ACCESS_KEY_ID=rootuser --from-literal=AWS_SECRET_ACCESS_KEY=rootpass123
secret/minio created
[root@master0 ~]#[root@master0 ~]# ctr images pull docker.io/matrixorigin/matrixone:nightly-c4407d78
docker.io/matrixorigin/matrixone:nightly-c4407d78:                                resolved       |++++++++++++++++++++++++++++++++++++++| 
index-sha256:c123cad9436bdaf0641bdfbefc5da05c42577b8859b7dd138d787556fa579512:    done           |++++++++++++++++++++++++++++++++++++++| 
manifest-sha256:b167a43fef28e1239a3378316d5f318dc037e2cff8e1043b5a3bdfe2394cbe57: done           |++++++++++++++++++++++++++++++++++++++| 
layer-sha256:d1341bb53a135a9b51ffe909af579f84a79ad38b438837414f9afa52b9b57235:    done           |++++++++++++++++++++++++++++++++++++++| 
config-sha256:070652e99addc538f205051071725de8c23f20475a5d2abc60ce69ab4d79b5ab:   done           |++++++++++++++++++++++++++++++++++++++| 
layer-sha256:7646c8da332499ae416b15479ce832db32e39a501c662e24324f595509a0d3db:    done           |++++++++++++++++++++++++++++++++++++++| 
layer-sha256:95ebdc05ff3cb64cd57db62e506ee900eaa7838820d4650401ddabc77fb75031:    done           |++++++++++++++++++++++++++++++++++++++| 
layer-sha256:3da6ad6565f150d7e8b3110859c8b9fd93fabe7e56f335d0b611f19d768164e1:    done           |++++++++++++++++++++++++++++++++++++++| 
elapsed: 63.5s                                                                    total:  130.3  (2.1 MiB/s)                                       
unpacking linux/amd64 sha256:c123cad9436bdaf0641bdfbefc5da05c42577b8859b7dd138d787556fa579512...
done: 5.396124061s      
[root@master0 ~]#
[root@master0 ~]# ctr images ls|grep matrixone
docker.io/matrixorigin/matrixone-operator:1.2.0-alpha.4 application/vnd.oci.image.index.v1+json                   sha256:3449f7da9d66e0a9d53ceae26651972ce1bb33dc5befbb240f727603aad345eb 36.7 MiB  linux/amd64,linux/arm64,unknown/unknown                           -      
docker.io/matrixorigin/matrixone:nightly-c4407d78       application/vnd.oci.image.index.v1+json                   sha256:c123cad9436bdaf0641bdfbefc5da05c42577b8859b7dd138d787556fa579512 131.0 MiB linux/amd64,linux/arm64,unknown/unknown                           -      
[root@master0 ~]# 修改好mo.yaml文件之后
执行如下[root@master0 ~]# kubectl apply -f mo.yaml
matrixonecluster.core.matrixorigin.io/mo created
[root@master0 ~]# --执行如下命令
[root@master0 minio]# kubectl get pods -n mo-hn
NAME       READY   STATUS              RESTARTS   AGE
mo-log-0   0/1     ContainerCreating   0          19s
mo-log-1   0/1     ContainerCreating   0          18s
mo-log-2   0/1     ContainerCreating   0          18s
[root@master0 minio]#等待2分钟,状态如下:
[root@master0 minio]# kubectl get pods -n mo-hn
NAME             READY   STATUS    RESTARTS   AGE
mo-tn-0          1/1     Running   0          2m1s
mo-log-0         1/1     Running   0          3m35s
mo-log-1         1/1     Running   0          3m34s
mo-log-2         1/1     Running   0          3m34s
mo-tp-cn-5jxxr   1/1     Running   0          69s
[root@master0 minio]# 
  • 自定义 MatrixOne 集群的 yaml 文件,编写如下 mo.yaml 的文件:

  • 其中,用户名和密码使用在创建 MinIO 集群时设置的 rootUserrootPassword

  • 执行以下命令,部署 MatrixOne 集群:

6. 连接 MatrixOne 集群

为了连接 MatrixOne 集群,您需要将对应服务的端口映射到 MatrixOne 节点上。以下是使用 kubectl port-forward 连接 MatrixOne 集群的指导:

  • 只允许本地访问:
 
nohup kubectl  port-forward -nmo-hn svc/mo-tp-cn 6001:6001 &
  • 指定某台机器或者所有机器访问:
nohup kubectl  port-forward -nmo-hn --address 0.0.0.0 svc/mo-tp-cn 6001:6001 &

在指定允许本地访问指定某台机器或者所有机器访问后,你可以使用 MySQL 客户端连接 MatrixOne:

 
# 使用 'mysql' 命令行工具连接到MySQL服务
# 使用 'kubectl get svc/mo-tp-cn -n mo-hn -o jsonpath='{.spec.clusterIP}' ' 获取Kubernetes集群中服务的集群IP地址
# '-h' 参数指定了MySQL服务的主机名或IP地址
# '-P' 参数指定了MySQL服务的端口号,这里是6001
# '-uroot' 表示用root用户登录
# '-p111' 表示初始密码是111
mysql -h $(kubectl get svc/mo-tp-cn -n mo-hn -o jsonpath='{.spec.clusterIP}') -P 6001 -uroot -p111
mysql: [Warning] Using a password on the command line interface can be insecure.
Welcome to the MySQL monitor.  Commands end with ; or \g.
Your MySQL connection id is 163
Server version: 8.0.30-MatrixOne-v1.1.1 MatrixOneCopyright (c) 2000, 2023, Oracle and/or its affiliates.Oracle is a registered trademark of Oracle Corporation and/or its
affiliates. Other names may be trademarks of their respective
owners.Type 'help;' or '\h' for help. Type '\c' to clear the current input statement.mysql>

使用dbever连接matrixone数据库,分布式的 MatrixOne 集群搭建连接完成。

启动与停服下线

本篇文档将介绍如何启停分布式 MatrixOne 集群。

本篇文档所介绍到的升级环境将基于 MatrixOne 分布式集群部署的环境。

集群停止下线

要停止 MatrixOne 集群,只需停止业务的读写操作,然后直接关闭服务器即可。关闭的顺序为:首先关闭 node0 节点,接着关闭 master0 节点,最后关闭 Kuboard-Spray 节点。

集群重启上线

要重新启动 MatrixOne 集群,建议按照以下硬件启动顺序:首先启动 Kuboard-Spray 节点,接着启动 master0 节点,最后启动 node0 节点。

在硬件启动完成后,k8s 会自动进行恢复。同时,MatrixOne 和 minio 相关服务也会自动恢复,无需人工干预。但是,需要注意的是,Kuboard-Spray 节点的 Docker 不会自动恢复,需要手动启动 Kuboard-Spray 服务。

检查 K8s 状态

在操作 k8s 的 master0 节点上,可以检查 k8s 集群节点的状态。

正常情况下,所有节点的状态应该为 Ready。如果某些节点状态异常,就需要进一步排查原因。

 
kubectl get node
# 如非ready状态,则需要进一步排查节点的情况
# kubectl describe node ${NODE_NAME}

以下是状态代码图示示例:

检查 MinIO 状态

在操作 k8s 的 master0 节点上,可以检查 MinIO 的状态。

硬件启动后,MinIO 也会自动恢复,可以使用以下命令检查 MinIO 状态:

 
NS="mostorage"
kubectl get pod -n${NS}

以下是状态代码图示示例:

检查 MatrixOne 集群及组件状态

检查 MatrixOneCluster 状态

首先,要检查 MatrixOne 集群是否正常。MatrixOne 集群对应自定义资源类型 MatrixOneCluster。可以使用以下命令来检查 MatrixOneCluster 的状态:

 
MO_NAME="mo"
NS="mo-hn"
kubectl get matrixonecluster -n${NS} ${MO_NAME}

正常情况下,状态应该为 Ready。如果状态为 NotReady,则需要进一步排查问题。以下是状态图示例:

查看 MatrixOne 集群状态详细信息

如果 MatrixOne 集群状态不正常,可以使用以下命令来查看详细信息:

 
kubectl describe matrixonecluster -n${NS} ${MO_NAME}

检查 TNSet/CNSet/LogSet 状态

当前 MatrixOne 集群的组件主要有:TN、CN、Log Service,分别对应的自定义资源类型 TNSet、CNSet、LogSet。这些对象均由 MatrixOneCluster 控制器生成。

可以使用以下命令来检查各组件的状态,以 TN 为例:

 
SET_TYPE="tnset"
NS="mo-hn"
kubectl get ${SET_TYPE} -n${NS}

以下是状态代码图示示例:

检查 Pod 状态

可以直接检查 MO 集群中生成的原生 k8s 对象,来确认集群的健康程度。一般情况下,通过对 Pod 的状态确认即可:

 
NS="mo-hn"
kubectl get pod -n${NS}

以下是状态代码图示示例:

一般来说,Running 状态即为正常状态。但也有少数例外的情况,例如状态为 Running,但 MO 集群实际上不正常,例如无法通过 MySQL Client 连接 MO 集群。此时,可以进一步排查 Pod 的日志是否有异常信息输出:

 
NS="mo-hn"
POD_NAME="[上述返回pod的名称]" # 例如mo-tp-cn-3
kubectl logs ${POD_NAME} -n${NS}

如果状态为非 Running,例如 Pending,可以通过查看 Pod 状态中的事件(event)来确认异常原因。例如,由于集群资源无法满足 mo-tp-cn-3 的申请,这个 Pod 无法被调度,处于 Pending 状态。在这个例子中,可以通过扩容节点资源来解决。

 
kubectl describe pod ${POD_NAME} -n${NS}

以下是状态代码图示示例:

集群扩缩容

本篇文档将介绍 MatrixOne 集群如何进行扩缩容,并包括 Kubernetes 集群本身的扩缩容与 MatrixOne 的各个服务的扩缩容。

本篇文档所介绍到的环境将基于 MatrixOne 分布式集群部署的环境。

何时需要进行扩容/缩容

为了确定是否需要对 MatrixOne 服务进行扩缩容,用户需要监控 MatrixOne 集群所在的节点和相关组件对应的 Pod 所使用的资源。你可以使用 kubectl top 命令来完成此操作。更详细的操作步骤可以参考健康检查与资源监控。

一般情况下,如果发现节点或者 Pod 的资源使用率超过了 60% 并且持续一段时间,可能需要考虑进行扩容以应对负载高峰。此外,如果根据业务指标观察到高的 TPS 请求量,也需要考虑进行扩容操作。

Kubernetes 扩缩容

由于 MatrixOne 分布式版本的基础硬件资源都是通过 Kubernetes 来进行管理和分配的,因此整个集群的硬件节点扩缩容均是由 Kubernetes 完成的。

Kubernetes 可以通过 kuboard spray 图形化管理页面来完成节点的扩缩容,详细教程可参见 kuboard spray 的官方文档。

你需要在该集群中增加了一个工作节点,整体的硬件配置资源如下表所示:

Host内网 IPmemCPUDiskRole
kuboardspray192.168.40.1292G2C50G跳板机
master0192.168.40.1308G2C50Gmaster etcd
node0192.168.40.1318G2C50Gworker
node1192.168.40.1328G2C50Gworker

image-20230509113818093

MatrixOne 各服务的扩缩容

服务的扩缩容,指的是 MatrixOne 集群中核心的组件服务,例如,对 Log Service、TN、CN 等进行扩缩容。

根据 MatrixOne 的架构特点,这些服务节点情况如下:

  • Log Service 仅有 3 个节点。
  • TN 仅有 1 个节点。
  • CN 节点数目灵活。

因此,Log Service、TN 的节点只能垂直扩缩容,CN 节点可同时水平扩缩容和垂直扩缩容。

水平扩缩容

水平扩缩容,指的是服务的副本数增加或减少。可通过修改 MatrixOne Operator 启动 yaml 文件中的 .spec.[component].replicas 字段的值,完成服务副本数的更改。

  1. 使用如下命令修改 yaml 文件中的 .spec.[component].replicas 字段的值:

     
  • kubectl edit matrixonecluster ${mo_cluster_name} -n${mo_ns}
    
  • 进入编辑模式:

     
  • tp:replicas: 2 #例如,扩容是由原来的 1 个 CN 更改为 2 个 CN
    #其他内容忽略    
    

    Note

    缩容也可参考上述步骤,更改 replicas 的字段值。

  • 编辑完成 replicas 个数保存退出后,MatrixOne Operator 将会自动启动一个新的 CN。你可以通过以下命令观察新的 CN 状态:

     
  1. [root@master0 ~]# kubectl get pods -n mo-hn      
    NAME                                  READY   STATUS    RESTARTS     AGE
    matrixone-operator-6c9c49fbd7-lw2h2   1/1     Running   2 (8h ago)   9h
    mo-tn-0                               1/1     Running   0            11m
    mo-log-0                              1/1     Running   0            12m
    mo-log-1                              1/1     Running   0            12m
    mo-log-2                              1/1     Running   0            12m
    mo-tp-cn-0                            1/1     Running   0            11m
    mo-tp-cn-1                            1/1     Running   0            63s[root@master0 ~]# kubectl get pods -n mo-hn      
    NAME                                  READY   STATUS    RESTARTS     AGE
    mo-tn-0                               1/1     Running   0            11m
    mo-log-0                              1/1     Running   0            12m
    mo-log-1                              1/1     Running   0            12m
    mo-log-2                              1/1     Running   0            12m
    mo-tp-cn-5jxxr                        1/1     Running   0            11m
    mo-tp-cn-6xjki                        1/1     Running   0            63s
    

另外,Kubernetes 的 SVC 会自动保证 CN 的负载均衡,用户连接的 connection 会被均匀的分配到不同的 CN 上。你可以通过 MatrixOne 内置的 system_metrics.server_connections 表查看每个 CN 上的 connection 个数。

垂直扩缩容

垂直扩缩容,指的是对单个组件服务副本本身所需要的资源,例如,对 CPU 或内存进行调整。

  1. 使用如下命令修改对应组件的 .spec.[component].resources 中的 requestslimits 配置,示例如下:

     
  • kubectl edit matrixonecluster ${mo_cluster_name} -n${mo_ns}
    
  • 进入编辑模式:

     
  1. metadata:name: mo# 中间内容省略
    spec:tp:resources:requests:cpu: 1memory: 2Gilimits:cpu: 1memory: 2Gi
    ...
    # 其他内容省略
    

Node 调度

默认情况下,Matrixone-operator 不会为每个组件的 Pod 配置拓扑规则,而是使用 Kubernetes 默认的调度器根据每个 Pod 的资源请求进行调度。如果需要设置特定的调度规则,例如将 cn 组件调度到特定的两个节点 node0 和 node1 上,可以按照以下步骤进行操作:

  1. node0node1 设置标签。

  2. 在 MatrixOne 集群中设置 nodeSelector,使服务能够调度到对应的节点上。

  3. (可选)在 MatrixOne 集群中设置 TopologySpread 字段,以实现服务在节点之间的均匀分布。

  4. 在 MatrixOne 集群中设置副本数 replicas

设置节点标签
  1. 执行以下命令,需要查看集群节点的情况:

     
  • [root@master0 ~]# kubectl get node
    NAME      STATUS   ROLES                  AGE   VERSION
    master0   Ready    control-plane,master   47h   v1.23.17
    node0     Ready    <none>                 47h   v1.23.17
    node1     Ready    <none>                 65s   v1.23.17
    
  • 根据上述返回的结果和实际需求,你可以为节点打上标签,参见下面的代码示例:

     
  • NODE="[待打上标签的节点]" # 根据上述结果,有可能是 ip、也可能是主机名、或者别名,例如 10.0.0.1、host-10-0-0-1、node01,那么设置 NODE="node0"
    LABEL_K="mo-role" # 标签的 key,可按需定义,也可以直接用示例
    LABEL_V="mo-cn" # 标签的 value,可按需定义,也可以直接用示例kubectl label node ${NODE} ${LABEL_K}=${LABEL_V}
    
  • 在本篇案例中,你也可以写成以下两条语句:

     
  • kubectl label node node0 "mo-role"="mo-cn"
    kubectl label node node1 "mo-role"="mo-cn"
    
  • 使用下面的命令,确认节点标签是否已打上:

     
  • [root@master0 ~]# kubectl get node node0 --show-labels | grep mo_role     
    node0   Ready    <none>   47h   v1.23.17   beta.kubernetes.io/arch=amd64,beta.kubernetes.io/os=linux,kubernetes.io/arch=amd64,kubernetes.io/hostname=node0,kubernetes.io/os=linux,mo_role=mo_cn
    [root@master0 ~]# kubectl get node node1 --show-labels | grep mo_role
    node1   Ready    <none>   7m25s   v1.23.17   beta.kubernetes.io/arch=amd64,beta.kubernetes.io/os=linux,kubernetes.io/arch=amd64,kubernetes.io/hostname=node1,kubernetes.io/os=linux,mo_role=mo_cn
    
  • 执行以下命令,可以按需删除标签:

     
  1. kubectl label node ${NODE} ${LABEL_K}-
    
设置服务调度规则、均匀分布、副本数
  1. 执行以下命令,查看目前的 Pod 在多个节点上的分配情况:

     
  • [root@master0 mo]# kubectl get pod -nmo-hn -owide
    NAME         READY   STATUS    RESTARTS   AGE   IP              NODE    NOMINATED NODE   READINESS GATES
    mo-tn-0      1/1     Running   0          34m   10.234.60.120   node0   <none>           2/2
    mo-log-0     1/1     Running   0          34m   10.234.168.72   node1   <none>           2/2
    mo-log-1     1/1     Running   0          34m   10.234.60.118   node0   <none>           2/2
    mo-log-2     1/1     Running   0          34m   10.234.168.73   node1   <none>           2/2
    mo-tp-cn-0   1/1     Running   0          33m   10.234.168.75   node1   <none>           2/2
    
  • 根据上述输出和实际需求可以看出目前只有 1 个 CN,我们需要为 CN 组件进行调度规则的设置。我们将在 MatrixOne 集群对象的属性中进行修改。在调度范围内均匀分布的规则下新的 CN 会被调度到 node0 上。执行以下命令以进入编辑模式:

     
  • mo_ns="mo-hn"
    mo_cluster_name="mo" # 一般名称为 mo,根据部署时 matrixonecluster 对象的 yaml 文件中的 name 指定,也可以通过 kubectl get matrixonecluster -n${mo_ns} 来确认
    kubectl edit matrixonecluster ${mo_cluster_name} -n${mo_ns}
    
  • 在编辑模式下,根据上述场景,我们将设置 CN 的副本数为 2,并且在标签为 mo-role:mo-cn 的节点上进行调度,实现在调度范围内的均匀分布。我们将使用 spec.[component].nodeSelector 来指定具体组件的标签选择器。以下是示例的编辑内容:

     
  • metadata:name: mo
    # 中间内容省略
    spec:
    # 中间内容省略tp:# 设置副本数replicas: 2# 设置调度规则nodeSelector:mo-role: mo-cn# 设置在调度范围内均匀分布topologySpread:- topology.kubernetes.io/zone- kubernetes.io/hostname
    # 其他内容省略
    
  • 更改生效后,执行下面的命令,可以查看两个 CN 已经分别在两个节点上:

     
  1. [root@master0 ~]# kubectl get pod -nmo-hn -owide      
    NAME         READY   STATUS    RESTARTS        AGE     IP              NODE    NOMINATED NODE   READINESS GATES
    mo-tn-0      1/1     Running   1 (2m53s ago)   3m6s    10.234.168.80   node1   <none>           2/2
    mo-log-0     1/1     Running   0               3m40s   10.234.168.78   node1   <none>           2/2
    mo-log-1     1/1     Running   0               3m40s   10.234.60.122   node0   <none>           2/2
    mo-log-2     1/1     Running   0               3m40s   10.234.168.77   node1   <none>           2/2
    mo-tp-cn-0   1/1     Running   0               84s     10.234.60.125   node0   <none>           2/2
    mo-tp-cn-1   1/1     Running   0               86s     10.234.168.82   node1   <none>           2/2
    

需要注意的是,上述示例中的配置会使得集群中的 Pod 在 topology.kubernetes.io/zonekubernetes.io/hostname 这两个维度上实现均匀分布。在 topologySpread 中指定的标签键是有顺序的。在上面的示例中,Pod 首先在可用区维度上均匀分布,然后在每个可用区内的 Pod 再均匀地分布到该区域内的节点上。

使用 topologySpread 功能可以提高集群的可用性,降低由于单点或区域性故障而破坏集群中的大多数副本的可能性。但这也增加了调度的要求,需要确保集群在每个区域内都有足够的资源可用。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/pingmian/40828.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

mysql在windows下的安装

一&#xff0c;软件安装 只修改开头的系统盘 二&#xff0c;环境变量配置 找到MySQL安装目录对应的bin目录复制路径粘贴过来 三&#xff0c;cmd

SSL/CA 证书及其相关证书文件解析

在当今数字化的时代&#xff0c;网络安全变得至关重要。SSL&#xff08;Secure Socket Layer&#xff09;证书和CA&#xff08;Certificate Authority&#xff09;证书作为保护网络通信安全的重要工具&#xff0c;发挥着关键作用。 一、SSL证书 SSL证书是数字证书的一种&…

SSM少儿读者交流系-计算机毕业设计源码20005

摘要 随着信息技术的发展和互联网的普及&#xff0c;少儿读者之间的交流方式发生了革命性的变化。通过使用Java编程语言&#xff0c;可以实现系统的高度灵活性和可扩展性。而SSM框架的采用&#xff0c;可以提供良好的开发结构和代码管理&#xff0c;使系统更加稳定和易于维护。…

同方威视受邀盛装亮相2024长三角快递物流展(杭州)助力行业物畅其流

同方威视技术股份有限公司携安全检测产品和综合解决方案&#xff0c;盛装亮相2024长三角快递物流展&#xff08;杭州&#xff09; 展位号&#xff1a;3C馆A07-1 时间&#xff1a;2024年7月8-10日 地址&#xff1a;杭州国际博览中心&#xff08;浙江省杭州市萧山区奔竞大道35…

【CSAPP】-linklab实验

目录 实验目的与要求 实验原理与内容 实验步骤 实验设备与软件环境 实验过程与结果&#xff08;可贴图&#xff09; 实验总结 实验目的与要求 1.了解链接的基本概念和链接过程所要完成的任务。 2.理解ELF目标代码和目标代码文件的基本概念和基本构成 3.了解ELF可重定位目…

STM32F1+HAL库+FreeTOTS学习2——STM32移植FreeRTOS

STM32F1HAL库FreeTOTS学习2——STM32移植FreeRTOS 获取FreeRTOS源码创建工程窥探源码移植 上期我们认识了FreeRTOS&#xff0c;对FreeRTOS有了个初步的认识&#xff0c;这一期我们来上手移植FreeRTOS到STM32上。 获取FreeRTOS源码 进入官网&#xff1a;https://www.freertos.o…

Frrouting快速入门——OSPF组网(一)

FRR简介 FRR是FRRouting的简称&#xff0c;是一个开源的路由交换软件套件。其作者源自老牌项目quaga的成员&#xff0c;也可以算是quaga的新版本。 使用时一般查看此文档&#xff1a;https://docs.frrouting.org/projects/dev-guide/en/latest/index.html FRR支持的协议众多…

网络爬虫(一)深度优先爬虫与广度优先爬虫

1. 深度优先爬虫&#xff1a;深度优先爬虫是一种以深度为优先的爬虫算法。它从一个起始点开始&#xff0c;先访问一个链接&#xff0c;然后再访问该链接下的链接&#xff0c;一直深入地访问直到无法再继续深入为止。然后回溯到上一个链接&#xff0c;再继续深入访问下一个未被访…

HarmonyOS APP应用开发项目- MCA助手(Day02持续更新中~)

简言&#xff1a; gitee地址&#xff1a;https://gitee.com/whltaoin_admin/money-controller-app.git端云一体化开发在线文档&#xff1a;https://developer.huawei.com/consumer/cn/doc/harmonyos-guides-V5/agc-harmonyos-clouddev-view-0000001700053733-V5注&#xff1a;…

【Sping Boot2】笔记

Spring Boot 2入门 如何创建一个Spring Boot的Web例子&#xff1f;1.如何创建一个Spring Boot项目1.1 使用Maven构建一个Spring Boot 2项目1.1.1创建Maven工程注&#xff1a;Maven项目结构&#xff1a; 1.1.2引入SpingBoot相关依赖依赖注意事项&#xff1a; 1.1.3创建主类1.1.4…

VIM介绍

VIM&#xff08;Vi IMproved&#xff09;是一种高度可配置的文本编辑器&#xff0c;用于有效地创建和更改任何类型的文本。它是从 vi 编辑器发展而来的&#xff0c;后者最初是 UNIX 系统上的一个文本编辑器。VIM 以其键盘驱动的界面和强大的文本处理能力而闻名&#xff0c;是许…

Python学习之小游戏--坦克大作战

今天跟视频学习了Python实现坦克大作战小游戏&#xff0c;挺有意思的&#xff0c;一起来玩吧~ 按空格发射子弹&#xff0c;上下左右键实现移动&#xff0c;ESC键无限复活。 import pygame,time,random from pygame.sprite import Sprite SCREEN_WIDTH800 SCREEN_HEIGHT500 BG…

Vue3中为Ant Design Vue中Modal.confirm自定义内容

在一次业务开发时代码时&#xff0c;碰到了一种既想要Modal.confirm样式&#xff0c;又想要定制其content内容的情况。 大部分情况下&#xff0c;使用Modal.method()这种方式时&#xff0c;可能content内容固定都是字符串&#xff0c;那如果想要做更高级的交互怎么办&#xff…

【Git-驯化】一文学会git配置用户信息,git config用法细节

【Git-驯化】一文学会git配置用户信息&#xff0c;git config用法细节 本次修炼方法请往下查看 &#x1f308; 欢迎莅临我的个人主页 &#x1f448;这里是我工作、学习、实践 IT领域、真诚分享 踩坑集合&#xff0c;智慧小天地&#xff01; &#x1f387; 免费获取相关内容文档…

Sourcecodester Fantastic Blog CMS v1.0 SQL 注入漏洞(CVE-2022-28512)

前言 CVE-2022-28512 是一个存在于 Sourcecodester Fantastic Blog CMS v1.0 中的 SQL 注入漏洞。攻击者可以通过 "/fantasticblog/single.php" 中的 id 参数注入恶意 SQL 查询&#xff0c;从而获得对数据库的未经授权的访问和控制。 漏洞详细信息 漏洞描述: 该漏…

工具发送formdata请求 Multipartfile 接收

1.需求&#xff1a; 接收到 (Multipartfile file 文件 》使用工具转发到别的请求&#xff0c;将文件传到别的接口 主要代码&#xff1a; InputStreamResource inputstreamResource new InputstreamResource(file.getInputstream(), file.getoriginalfilename());MultiReso…

全网都在疯传的最新蓝海风口项目!

最近全网都在疯传这种视频&#xff0c;想必兄弟们都见到过了&#xff01; 大家看这个号&#xff0c;1天的时间&#xff0c;2个作品&#xff0c;第2个直接就爆了&#xff0c;昨天看点赞还是3.8w&#xff0c;今天已经10w了&#xff0c;这是妥妥的风口啊&#xff01; 大家有没有想…

应用在灯带Type-C接口上的PD SINK协议芯片ECP5701/ECP5702获取充电器的5V、9V、12V、15V、20V供电

方案背景 近日&#xff0c;欧盟就统一充电器接口的提案达成了一项政治协议&#xff0c;其中规定了在欧盟地区销售的所有手机或其他便携式中小型电子设备必须采用统一的USB Type-C接口。这项决定意味着未来将会有更多的产品强制性地使用TYPE-C充电接口。 在这个背景下&#xf…

wordpress 付费主题modown分享,可实现资源付费

该主题下载地址 下载地址 简介 Modown是基于Erphpdown 会员下载插件开发的付费下载资源、付费下载源码、收费附件下载、付费阅读查看隐藏内容、团购下载的WordPress主题&#xff0c;一款针对收费付费下载资源/付费查看内容/付费阅读/付费视频/VIP会员免费下载查看/虚拟资源售…

在Linux上查找文件的2个好用的命令

1. locate xx &#xff08;查找带xx字符的所有文件或目录&#xff09; 在终端输入命令 locate lua&#xff0c;可以看到&#xff0c;所有带lua字符的文件或目录都会被搜索出来。 2. find / -name xx &#xff08;查找名为xx的文件或目录&#xff09; 在终端输入命令 find …