1.1. 部署前准备

1.根据版本获取 k8s 部署配置文件。

安装版本 部署文件 组件依赖
3.x k8s-yaml metadb、engine、hengshi zookeeper
4.0.x k8s-yaml metadb、engine、hengshi、minio、zookeeper
4.1.x k8s-yaml metadb、engine、hengshi、minio、redis、flink、zookeeper
4.2.x k8s-yaml metadb、engine、hengshi、minio、redis、flink、zookeeper
4.3.x k8s-yaml metadb、engine、hengshi、minio、redis、flink、zookeeper
4.4.x k8s-yaml metadb、engine、hengshi、minio、redis、flink、zookeeper
4.5.0 ~ 4.5.6 k8s-yaml metadb、engine、hengshi、minio、redis、flink
4.5.7 ~ 4.5.x(x>7) k8s-yaml metadb、engine、hengshi、minio、redis、flink、apm-server

2.导入离线镜像 修改image地址

wget https://download.hengshi.com/releases/hengshi-sense-xxx.tar.gz
docker load -i hengshi-sense-xxx.tar.gz

说明:
除gpdb的镜像地址不同,其余组件均替换为导入的离线镜像tag eg. image: hengshi-sense:5.0-20231103-dp-427c5f image: gpdb:x.x.x
k8s/helm环境需要将镜像推送到集群所使用的镜像仓库,如registry、harbor、阿里云镜像仓库、腾讯云镜像仓库

3.替换gpdb.yaml中的$(POD_NAMESPACE) 变量为当前namespace, 比如 hengshi

sed -i 's/$(POD_NAMESPACE)/hengshi/'

4.修改pvc

  • 修改 storageClassName: xxx, 为当前集群的storageclass
  • 修改 storage: xxx 为各个服务的存储大小
  • doris引擎请修改doris.yaml
metadb.yaml
gpdb.yaml
redis.yaml
minio.yaml
flink.yaml

5.指定namespace, 比如hengshi

kubectl create namespace hengshi

1.2. engine

1.2.1. 部署engine

如需修改 gpdb 的密码, 需要在两处修改:

  • gpdb.yaml
    GREENPLUM_PWD: hengshi202020
    GREENPLUM_QUERY_PWD: query202020
    GREENPLUM_ETL_PWD: etl202020
    
  • configmap.yaml
    HS_ENGINE_PWD: hengshi202020
    ENGINE_QUERY_PASSWORD: query202020
    ENGINE_ETL_PASSWORD: etl202020
    

初始化,并启动engine。

kubectl -n hengshi apply -f gpdb.yaml 
kubectl -n hengshi exec -it master-0 -- /entrypoint.sh -m initsystem
kubectl -n hengshi exec -it master-0 -- /entrypoint.sh -m startsystem

说明:
doris引擎yaml: doris.yaml 无需initsystem和startsystem操作

1.2.2. 部署其余组件

参考下列部署清单YAML文件。

kubectl -n hengshi apply -f configmap.yaml
kubectl -n hengshi apply -f service.yaml
kubectl -n hengshi apply -f metadb.yaml
kubectl -n hengshi apply -f minio.yaml
kubectl -n hengshi apply -f redis.yaml
kubectl -n hengshi apply -f flink.yaml
kubectl -n hengshi apply -f hengshi.yaml
kubectl -n hengshi apply -f ingress.yaml

说明:
configmap.yaml hengshi配置文件
service.yaml 集群内部通信以及对外暴露的service文件
ingress.yaml 根据需要决定是否部署ingress

1.2.3. 对外暴露hengshi服务

hengshi提供对外访问的示例配置,可根据需要选择其中之一即可。

nodePort

通过nodePort方式暴露hengshi服务 ( 默认,如果没有配置ingress,则可使用service对外暴露的nodePort端口对外提供服务 ) 。

例如以下示例中的8080所对应集群的nodePort映射端口。

apiVersion: v1
kind: Service
metadata:
  name: hengshi
spec:
  selector:
    hsapp: hengshi-sense
    hsrole: hengshi
  ports:    
  - protocol: TCP
    name: "8080"
    port: 8080
    targetPort: 8080
  - protocol: TCP
    name: "5005"
    port: 5005
    targetPort: 5005
  type: NodePort

ingress

通过ingress方式对外暴露hengshi服务 ( 可选 )。

apiVersion: networking.k8s.io/v1
kind: Ingress
metadata:
  name: hengshi-sense
  namespace: hengshi-sense
  annotations:
    ingress.kubernetes.io/force-ssl-redirect: "false"
    nginx.ingress.kubernetes.io/proxy-connect-timeout: "90"
    nginx.ingress.kubernetes.io/proxy-send-timeout: "90"
    nginx.ingress.kubernetes.io/proxy-read-timeout: "90"
spec:
  ingressClassName: nginx
  rules:
    - host: xxxx.hengshi.com
      http:
        paths:
          - path: /
            pathType: Prefix
            backend:
              service:
                name: hengshi-sense
                port:
                  number: 8080

说明:
ingressClassName: 请修改当前集群的ingressClass
host: 公网域名

1.3. 基本运维操作

1.3.1. 安全停止数据库服务

参考以下命令停止metadb和engine。

kubectl -n hengshi exec -it metadb-0 -- /docker-entrypoint.sh stop metadb single
kubectl -n hengshi exec -it master-0 -- /entrypoint.sh -m stopsystem

1.3.2. 重启engine

参考以下命令重启engine。

kubectl -n hengshi exec -it master-0 -- /entrypoint.sh gpstop -r

1.3.3. 清理日志

运行过程中,HENGSHI SENSE会产生运行日志,这些日志需要定时清理释放存储空间。下面示例是清理内部数据库的滚动日志的命令。

kubectl -n hengshi exec -it master-0 -- /bin/bash
crontab -e # 将下面定时语句写入进去后保存退出
0 0 * * * /opt/hengshi/bin/clean_engine.sh -t -r -c -g -p   
*/5 * * * * /opt/hengshi/bin/clean_engine.sh -l

1.3.4. 扩容engine

1.修改 StatefulSet/segment

kubectl -n hengshi edit StatefulSet/segment
  • SEGMENTS字段填写扩容后所有segment 的appname (比如2个扩容到4个)
  • StatefulSet/segment 的 replicas: 改到扩容后所有segment数
apiVersion: v1
kind: ConfigMap
metadata:
  name: greenplum
data:
  MASTER: "master-0"
  SEGMENTS: |  #4个segment的列表
    segment-0
    segment-1
    segment-2
    segment-3
...
apiVersion: apps/v1
kind: StatefulSet
metadata:
  name: segment
spec:
  replicas: 4 #例如扩容后为4个segment
  • 然后 kubectl -n hengshi apply -f gpdb.yaml
  • 然后等待所有新增和旧有segement pod的状态都变成running

2.写 new_host_file (新增segment列表, 比如原有2个segment(0,1), 现扩容到4个segment(0,1,2,3))

kubectl -n hengshi exec -it master-0 /bin/bash
cd /opt/hsdata/ && mkdir expand && cd expand
cat < new_host_file
segment-2
segment-3
EOF

3.执行扩容操作

kubectl -n hengshi exec -it master-0 /bin/bash
cd /opt/hsdata/expand
psql postgres -c "create database expand"
gpexpand -f new_host_file  -D expand
  >y
  >0 #然后会生成 gpexpand_inputfile_yyyymmdd_xxxxxx 文件
gpexpand -i gpexpand_inputfile_yyyymmdd_xxxxxx -D expand

如果扩容失败,可参考以下命令回滚engine。

kubectl -n hengshi exec -it master-0 /bin/bash
cd /opt/hsdata/expand
gpstart -aR
gpexpand -r -D expand

1.3.5. engine数据迁移

1.旧engine数据导出

# dump db data
kubectl exec -it $old-gp /bin/bash
source $HS_HOME/engine-cluster
pg_dumpall > /opt/hsdata/engine.back.sql
exit

2.copy 数据到新机器

# cp db data
kubectl cp $old-gp:/opt/hsdata/engine.back.sql engine.back.sql
kubectl cp engine.back.sql $master-0:/opt/hsdata/engine.back.sql

3.导入数据到新环境

# load db data
kubectl exec -it $master-0 /bin/bash
source $HS_HOME/engine-cluster
psql postgres < /opt/hsdata/engine.back.sql
rm /opt/hsdata/engine.back.sql

1.4. 部署单机版 (POC)

1.修改配置文件为单机配置

执行前确保 configmap.yaml, hengshi.yaml 等配置文件与 config_to_single.sh 在同一个目录下。

./config_to_single.sh

2.部署引擎

参考 引擎部署

3.部署其余组件

参考下列部署清单YAML文件。

kubectl -n hengshi apply -f configmap.yaml
kubectl -n hengshi apply -f service.yaml
kubectl -n hengshi apply -f metadb.yaml
kubectl -n hengshi apply -f minio.yaml
kubectl -n hengshi apply -f redis.yaml
kubectl -n hengshi apply -f flink.yaml
kubectl -n hengshi apply -f hengshi.yaml

results matching ""

    No results matching ""

    容器部署 helm部署(可选)