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 |
5.0.x | k8s-yaml | metadb、engine、hengshi、minio、redis、flink、apm-server |
5.1.x | k8s-yaml | metadb、engine、hengshi、minio、redis、 |
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
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 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 hengshi.yaml
results matching ""
No results matching ""
衡石文档
- 产品功能一览
- 发布说明
- 新手上路
- 安装与启动
- 系统管理员手册
- 数据管理员手册
- 分析人员手册
- 数据查看员手册
- API
- 最佳实践
- 衡石分析平台 API 手册
- 附录