如何在云盘环境下,自动启用运行keydb集群
背景
keydb号称可以重复利用磁盘来节省内存的成本, 如果要启用flash功能的话, 必须使用btrfs或者zfs, 本文介绍基于一种zfs的方案。
大约这样的,制作一个带有keydb的镜像, 然后镜像启动的时候挂载云盘, 初始化zfs, 挂载到keydb的数据目录, 启动keydb进程, 然后再运行集群初始化命令, 一气呵成。
解决方案
首先制作镜像
通过packer先把安装有keydb功能的服务制作好镜像
其次挂载云盘
通过terraform绑定实例和云盘的关系
最后是集群初始化脚本(本文关键步骤)
初始化脚本是通过cloud-init的userdata来进行的, terraform有专门的模块暂不细表.
脚本有个关键的初始化zfs, 如下
代码语言:txt复制zpool create -f keydb raidz ${device_list}
zfs create keydb/data
zfs set mountpoint=/data keydb/data
但是这个device_list在脚本执行的时候, 还没挂载成功, 就会导致脚本失败, keydb没有启用flash特性
解决的思路是加一个检测步骤, 等待块设备ready了, 再执行
代码语言:txt复制while [ ! -b ${device_name} ]; do
sleep 3
echo "wait ${device_name} ready"
done
完整代码如下
代码语言:txt复制while [ ! -b ${device_name} ]; do
sleep 3
echo "wait ${device_name} ready"
done
zpool create -f keydb raidz ${device_list}
zfs create keydb/data
zfs set mountpoint=/data keydb/data
参考
https://unix.stackexchange.com/a/313233
原文链接
https://www.wxhmf.com/posts/how-to-auto-run-keydb-cluster-with-zfs-enabled/