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

news2024/10/5 17:21:12

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 Engine
       Loaded: loaded (/usr/lib/systemd/system/docker.service; disabled; vendor preset: disabled)
       Active: active (running) since Sun 2024-06-30 14:41:59 CST; 7s ago
         Docs: http://docs.docker.com
     Main 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:
    - ReadWriteOnce
  storageClassName: local-path
  resources:
    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 mostorage

helm 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.local

To 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 mostorage

Read 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#quickstart

  2. 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:9000

  3. 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-dn-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 MatrixOne

Copyright (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内网 IP外网 IPmemCPUDiskRole
kuboardspray10.206.0.61.13.2.1002G2C50G跳板机
master010.206.134.8118.195.255.2528G2C50Gmaster etcd
node010.206.134.141.13.13.1998G2C50Gworker
node110.206.134.16129.211.211.298G2C50Gworker

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
    

另外,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: 1
            memory: 2Gi
          limits:
            cpu: 1
            memory: 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.coloradmin.cn/o/1880089.html

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

相关文章

25 防火墙基础操作

1 防火墙进入WEB页面操作 华三防火墙的默认用户:admin/密码:admin 将IP地址改在同一网段的信息 在防火墙的管理地址 GE/0/0/1&#xff1a;192.168.0.1 主机的地址是:192.168.0.101 思考一下为什么Ping不通 security-zone name Management import interface GigabitEthernet1/…

Git安装与使用及整合IDEA使用的详细教程

1. 版本控制软件介绍 版本控制软件提供完备的版本管理功能&#xff0c;用于存储、追踪目录&#xff08;文件夹&#xff09;和文件的修改历史&#xff0c;是软件开发者的必备工具&#xff0c;是软件公司的基础设施。版本控制软件的最高目标&#xff0c;是支持软件公司的配置管理…

2 z变换与离散时间傅里叶变换

目录 序列的z变换 z变换的定义 常用典型序列的z变换 序列类型与z变换的收敛域 序列的分类 X(z)的极点与收敛域 单边序列 双边序列 z变换的性质 线性 序列移位 单边序列 双边序列 z域尺度变换 序列乘以n 复共轭序列的z变换 初值定理 终值定理 时域卷积定理 …

Suno体验记录

五月初的时候初体验了一下Suno v3&#xff0c;当时整体觉得还不错&#xff0c;操作简单&#xff0c;生成快&#xff0c;歌曲也算好听。当时就截止到这里了。最近发现有了一些新的更新&#xff0c;觉得可以整理记录一下。 1. 简单介绍 免费用户一天50积分&#xff08;不累计&a…

python 压缩数据

requests 是 Python 中一个非常流行的 HTTP 库&#xff0c;用于发送各种 HTTP 请求。下面是一个使用 requests 库发送简单 GET 请求和 POST 请求的示例&#xff1a; 首先&#xff0c;确保你已经安装了 requests 库。如果还没有安装&#xff0c;可以使用 pip 进行安装&#xff…

在线教育项目(一):如何防止一个账号多个地方登陆

使用jwt做验证&#xff0c;使用账号作为redis中的key,登录的时候生成token放到redis中&#xff0c;每次申请资源的时候去看token 有没有变&#xff0c;因为token每次登录都会去覆盖&#xff0c;只要第二次登录token就不一样了

【接口自动化测试】第四节.实现项目核心业务的单接口自动化测试

文章目录 前言一、登录单接口自动化测试 1.1 登录单接口文档信息 1.2 登录成功 1.3 登录失败&#xff08;用户名为空&#xff09;二、数据驱动的实现 2.1 json文件实现数据驱动总结 前言 一、登录单接口自动化测试 1.1 登录单接口文档信息 需求&#xff1…

实验6 形态学图像处理

1. 实验目的 ①掌握数字图像处理中&#xff0c;形态学方法的基本思想&#xff1b; ②掌握膨胀、腐蚀、开运算、闭运算等形态学基本运算方法&#xff1b; ③能够利用形态学基本运算方法&#xff0c;编程实现图像去噪&#xff0c;边界提取等功能。 2. 实验内容 ①调用Matlab /…

数据资产铸就市场竞争优势:运用先进的数据分析技术,精准把握市场脉搏,构建独特的竞争优势,助力企业实现市场领先地位,赢得持续成功

目录 一、引言 二、数据资产的重要性 三、先进数据分析技术的应用 1、大数据分析技术 2、人工智能与机器学习 3、数据可视化技术 四、精准把握市场脉搏 1、深入了解客户需求 2、预测市场趋势 3、优化资源配置 五、构建独特的竞争优势 1、定制化产品和服务 2、精准营…

计算机网络原理及应用

第一章 计算机网络概述 【1】局域网 局域网是指在某一区域内由多台计算机互联而成的计算机通信网络。 【1】互通 两个网络之间可以交换数据。 第二章 计算机网络的体系结构 【1】语义 何时发出何种控制信息&#xff0c;完成何种动作以及做出何种响应。 【2】简述网络协…

1Panel运维利器:功能详解与实操指南

官网地址:https://1panel.cn/ 1Panel简介 1Panel是杭州飞致云信息科技有限公司旗下产品&#xff0c;是一款现代化、开源的Linux服务器运维管理面板&#xff0c;于2023年3月推出。 名称&#xff1a;1Panel开源Linux面板 所属公司&#xff1a;杭州飞致云信息科技有限公司 编写语…

【C++】————string基础用法及部分函数底层实现

作者主页&#xff1a; 作者主页 本篇博客专栏&#xff1a;C 创作时间 &#xff1a;2024年6月30日 前言&#xff1a; 本文主要介绍STL容器之一 ---- string&#xff0c;在学习C的过程中&#xff0c;我们要将C视为一个语言联邦&#xff08;摘录于Effective C 条款一&#x…

智能旅行规划的未来:大模型与形式化验证的融合

我们在做旅行规划时面对众多的目的地选择、复杂的交通连接、预算限制以及个人偏好等多重因素&#xff0c;即使是最有经验的旅行者也可能会陷入选择困境。传统的旅行规划方法往往依赖于人工操作&#xff0c;这不仅耗时耗力&#xff0c;而且难以保证计划的最优性和可执行性。 本…

Linux——/etc/passwd文件含义,grep,cut

/etc/passwd文件含义 作用 - 记录用户账户信息&#xff1a;共分为7段&#xff0c;使用冒号分割 含义 - 文件内容意义&#xff1a;账户名&#xff1a;密码代号x&#xff1a;UID&#xff1a;GID&#xff1a;注释&#xff1a;家目录&#xff1a;SHELL - 第7列/sbin/nologin&#x…

sheng的学习笔记-AI-聚类(Clustering)

ai目录 sheng的学习笔记-AI目录-CSDN博客 基础知识 什么是聚类 在“无监督学习”(unsupervised learning)中&#xff0c;训练样本的标记信息是未知的&#xff0c;目标是通过对无标记训练样本的学习来揭示数据的内在性质及规律&#xff0c;为进一步的数据分析提供基础。此类学…

WAIC2024 | 华院计算邀您共赴2024年世界人工智能大会,见证未来科技革新

在智能时代的浪潮汹涌澎湃之际&#xff0c;算法已成为推动社会进步的核心力量。作为中国认知智能技术的领军企业&#xff0c;华院计算在人工智能的广阔天地中&#xff0c;不断探索、创新&#xff0c;致力于将算法的潜力发挥到极致。在过去的时日里&#xff0c;华院计算不断探索…

昇思25天学习打卡营第7天|模型训练

模型训练 模型训练一般分为四个步骤&#xff1a; 构建数据集。定义神经网络模型。定义超参、损失函数及优化器。输入数据集进行训练与评估。 前面几天依次学习了前面几个步骤的操作&#xff0c;今天继续学习模型训练。 数据集和神经网络模型这个前面已经有详细的介绍。准确…

力扣SQL50 连续出现的数字 distinct

Problem: 180. 连续出现的数字 &#x1f468;‍&#x1f3eb; 力扣官解 Code SELECT DISTINCTl1.Num AS ConsecutiveNums FROMLogs l1,Logs l2,Logs l3 WHEREl1.Id l2.Id - 1AND l2.Id l3.Id - 1AND l1.Num l2.NumAND l2.Num l3.Num ;

线程安全问题(二)——死锁

死锁 前言可重入锁逻辑 两个线程两把锁&#xff08;死锁&#xff09;死锁的特点多个线程多把锁&#xff08;哲学家就餐问题&#xff09;总结 前言 在前面的文章中&#xff0c;介绍了锁的基本使用方式——锁 在上一篇文章中&#xff0c;通过synchronized关键字进行加锁操作&am…

只需10分钟1条,全是原创精美视频,拆分8个步骤详细讲解!

不少朋友在问如何快速学习剪辑视频&#xff0c;网上还有很多在收几百到几千学费。其实所有的付费&#xff0c;都是认知与信息差。 这篇文章我直接讲干货&#xff0c;内容不多&#xff0c;大概3分钟可以看完。所有步骤都是富哥亲测的内容&#xff0c;每条视频长达1分钟以上&…