微信黑魔法-专注解决微信开发周边,小程序,公众号,微信机器人等技术分享

How to Auto Run Keydb Cluster With Zfs Enabled

如何在云盘环境下,自动启用运行keydb集群

背景

keydb号称可以重复利用磁盘来节省内存的成本, 如果要启用flash功能的话, 必须使用btrfs或者zfs, 本文介绍基于一种zfs的方案。

大约这样的,制作一个带有keydb的镜像, 然后镜像启动的时候挂载云盘, 初始化zfs, 挂载到keydb的数据目录, 启动keydb进程, 然后再运行集群初始化命令, 一气呵成。

解决方案

首先制作镜像

通过packer先把安装有keydb功能的服务制作好镜像

其次挂载云盘

通过terraform绑定实例和云盘的关系

最后是集群初始化脚本(本文关键步骤)

初始化脚本是通过cloud-init的userdata来进行的, terraform有专门的模块暂不细表. 脚本有个关键的初始化zfs, 如下

zpool create -f keydb raidz ${device_list}
zfs create keydb/data
zfs set mountpoint=/data keydb/data

但是这个device_list在脚本执行的时候, 还没挂载成功, 就会导致脚本失败, keydb没有启用flash特性 解决的思路是加一个检测步骤, 等待块设备ready了, 再执行

while [ ! -b ${device_name} ]; do
    sleep 3
    echo "wait ${device_name} ready"
done

完整代码如下

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/