-
Notifications
You must be signed in to change notification settings - Fork 4
Elastic Scaling Compaction With K8s
本文档演示了如何使用k8s实现远程Compact集群的弹性伸缩。
1.已经部署好的 k8s
2.预定义的私有dns或写入hosts
<私有镜像源的ip> registry.mytopling.in
<node01的ip> node01.mytopling.in
<node02的ip> node02.mytopling.in
<instance-1的ip> mytopling-instance-1.mytopling.in
<instance-2的ip> mytopling-instance-2.mytopling.in
实际的 k8s 节点数量可以超过 2。这里使用了两个节点接受请求,这是保证集群的 compact 请求消息接受器多活的最少数量。 只要node1 和 node2 之一在线,dcompact的请求就会轮流发送到每个节点上活跃的 dcompact 容器。
社区版用户可以使用如下命令在 registry.mytopling.in 上导入镜像:
docker pull registry.cn-guangzhou.aliyuncs.com/topling/dcompact-community:v0.0.1
docker tag registry.cn-guangzhou.aliyuncs.com/topling/dcompact-community:v0.0.1 registry.mytopling.in:5000/topling/dcompact-community:v0.0.1
docker pull registry.cn-guangzhou.aliyuncs.com/topling/nginx-labour:v0.0.1
docker tag registry.cn-guangzhou.aliyuncs.com/topling/nginx-labour:v0.0.1 registry.mytopling.in:5000/topling/nginx-labour:v0.0.1
企业版用户可以按照如下方式在 registry.mytopling.in 上导入镜像:
# 下载
docker load < dcompact-enterprise.tar.gz # dcompact-enterprise.tar.gz 联系客服获取
docker tag dcompact-enterprise:v0.0.1 registry.mytopling.in:5000/topling/dcompact-enterprise:v0.0.1
docker pull registry.cn-guangzhou.aliyuncs.com/topling/nginx-labour:v0.0.1
docker tag registry.cn-guangzhou.aliyuncs.com/topling/nginx-labour:v0.0.1 registry.mytopling.in:5000/topling/nginx-labour:v0.0.1
在每个 node 上执行
curl registry.mytopling.in:5000/v2/_catalog
测试本地 registry 是否已配置成功
如果得到形如
{"repositories":["topling/dcompact-community","topling/forward-nginx"]}
说明配置成功
如果得到
Error response from daemon: Get "https://10.6.0.13:5000/v2/": http: server gave HTTP response to HTTPS client
说明本地 registry 没有配置。
此时应当修改 /etc/docker/daemon.json
// 内容应当形如
{
"exec-opts": ["native.cgroupdriver=systemd"],
"insecure-registries": ["registry.mytopling.in:5000"],
"registry-mirrors": ["https://ud6340vz.mirror.aliyuncs.com"]
}
按照上文的格式将 "insecure-registries": ["registry.mytopling.in:5000"],
加入第一级
在k8s控制节点上执行
kubectl -f mytopling-depoly/Elastic-Dcompact/k8s/dcompact-community.yaml
# 企业版用户使用
# kubectl -f mytopling-depoly/Elastic-Dcompact/k8s/dcompact-enterprise.yaml
启动服务
服务启动后几分钟,可以查看效果
kubectl get hpa
应当打印形如:
NAME REFERENCE TARGETS MINPODS MAXPODS REPLICAS AGE
dcompact-hpa Deployment/dcompact-deployment 3%/80% 2 10 2 38m
表示服务正常启动
如果 TARGETS 出现<unknown>
字样可能是监控相关未安装
可以使用kubectl -f mytopling-depoly/Elastic-Dcompact/k8s/metrics-server-components.yaml
安装HA相关服务
我们可以看到,dcompact 容器的最大值为10,可以调整 mytopling-depoly/Elastic-Dcompact/k8s/dcompact-community.yaml
中弹性伸缩部分配置:
apiVersion: autoscaling/v1
kind: HorizontalPodAutoscaler
metadata:
name: dcompact-hpa
labels:
app: dcompact
spec:
scaleTargetRef:
apiVersion: apps/v1
kind: Deployment
name: dcompact-deployment
minReplicas: 2 # 最小 Node 数量
maxReplicas: 10 # 最大 Node 数量
targetCPUUtilizationPercentage: 80 # 目标 CPU 使用率
查看使用的 dcompact-*.yaml
修改容器中的配置:
resources:
limits:
cpu: 16
memory: 32G
上述配置中限制每个POD使用16个核心和32G内存,如果您的node实例低于16核心,dcompact 服务无法启动。此时应当按照物理机核心数修改配置数量。
本章(6.x)在两台 MyTopling 主机上(主库和从库所在主机)分别运行一遍
uname -a
如果低于5.14,可以使用如下指令升级:
sudo yum install elrepo-release -y
# 注意安装完内核后修改默认内核并重启
sudo yum -y --disablerepo="*" --enablerepo="elrepo-kernel" install kernel-ml
修改默认启动内核的指令:
# 查看已安装内核列表
grubby --info=ALL | grep -E "^kernel|^index"
# 按照上一条打印的列表修改默认内核,最新安装的内核一般为0
grubby --set-default-index=<新的内核index>
reboot
grep discard /etc/fstab
如果 mount 未开启 discard,SSD/NVMe 盘的写操作会大幅降速
为两台主机关闭防火墙和 selinux
sudo setenforce 0
sudo sed -i 's/SELINUX=enforcing/SELINUX=disabled/g' /etc/selinux/config
sudo systemctl disable --now firewalld
# 对应 powertools, RHEL8 需要自行安装相应仓库以安装 gflags
sudo yum install yum-utils -y
sudo yum config-manager --set-enabled powertools
sudo yum install libaio gflags libcurl nfs-utils liburing -y
sudo yum install -y snappy zlib bzip2 lz4
假设 /disk1
为格式化并挂载后的磁盘
在 mytopling-instance-1
上执行
mkdir -p /mnt/mynfs/datadir/mytopling-instance-1
在 mytopling-instance-2
上执行
mkdir -p /mnt/mynfs/datadir/mytopling-instance-2
两台主机分别执行:
echo "/mnt/mynfs *(rw,async,no_root_squash,fsid=1)" >> /etc/exports
# 增加服务器线程数
sudo sed -i 's|#\[nfsd\]|\[nfsd\]|g' /etc/nfs.conf
sudo sed -i 's/# threads=8/threads=64/g' /etc/nfs.conf
sudo systemctl enable --now nfs-server
映射共享磁盘到对应位置,和程序安装位置相同,或者自行挂载磁盘到 /mnt/mynfs
sudo mkdir /mnt/mynfs
# 如果你的磁盘不是 /disk1,将 disk1 换成你的nvme磁盘实际挂载位置
# 或者直接将磁盘挂载到 /mnt/mynfs 也可以, 这时不需要追加内容到 fstab
sudo bash -c "echo '/disk1 /mnt/mynfs none defaults,bind 0 0'" >> /etc/fstab
mount -a
mytopling-rhel8-haswell.tar.gz
文件,社区版可自行编译
企业版请联系客服获取。 安装 mytopling:
# 运行完之后 /mnt/mynfs/opt/ 下应该是 MyTopling 的程序文件
tar xf mytopling-rhel8-haswell.tar.gz -C /mnt/mynfs/opt
这里提供使用弹性伸缩时的 MyTopling 主从配置。 调用下面指令启动两个数据库:
sudo bash /mnt/mynfs/opt/mytopling-depoly/Elastic-Dcompact/community/start-mytopling-instance-1.sh
sudo bash /mnt/mynfs/opt/mytopling-depoly/Elastic-Dcompact/community/start-mytopling-instance-2.sh
# 企业版用户使用
# sudo bash mytopling-depoly/Elastic-Dcompact/enterprise/start-mytopling-instance-1.sh
# sudo bash mytopling-depoly/Elastic-Dcompact/enterprise/start-mytopling-instance-2.sh
注意 mytopling-instance-1和mytopling-instance-2 两台服务器都使用了 dcompact服务,所以他们
上述配置中的 dcompact 服务器可以给更多的 MyTopling 实例提供服务,注意保证每个 MyTopling 实例的 json 配置文件中的 insatnce-name 在使用同一 dcompact 的集群中全局唯一。