使用docker 安装dragonfly带配置文件(x86和arm)版本
拉取镜像arm镜像:registry.cn-hangzhou.aliyuncs.com/qiluo-images/linux_arm64_dragonfly
拉取镜像x86镜像:registry.cn-hangzhou.aliyuncs.com/qiluo-images/dragonfly
运行cli命令:
docker run -d \--name dragonfly \-p 6379:6379 \registry.cn-hangzhou.aliyuncs.com/qiluo-images/dragonfly \--requirepass="87vhqEneQ5u8"
脚本运行:vi deploy_dragonfly.sh
#!/bin/bash# 定义变量(可修改部分)
CONTAINER_NAME="dragonfly"
HOST_PORT=6379
CONTAINER_PORT=6379
PASSWORD="87vhqEneQ5u8" # 建议从环境变量读取,此处仅为示例
IMAGE="registry.cn-hangzhou.aliyuncs.com/qiluo-images/dragonfly"# 目录配置
DATA_DIR="/data/dragonfly"
CONF_DIR="$DATA_DIR/conf"
LOG_DIR="$DATA_DIR/log"
DATA_VOLUME="$DATA_DIR/data"
SNAPSHOTS_DIR="$DATA_DIR/snapshots"# 检查目录结构
check_dirs() {local dirs=("$DATA_DIR" "$LOG_DIR" "$DATA_VOLUME" "$CONF_DIR" "$SNAPSHOTS_DIR")for dir in "${dirs[@]}"; doif [ ! -d "$dir" ]; thenecho "创建目录: $dir"mkdir -p "$dir" || { echo "目录创建失败!"; exit 1; }chmod -R 755 "$dir"fidone# 设置数据目录权限(Dragonfly 使用 dfly:dfly 用户)chown -R 999:999 "$DATA_VOLUME" "$SNAPSHOTS_DIR" 2>/dev/null || true
}# 检查容器状态
check_container() {if docker ps -a --format '{{.Names}}' | grep -q "^$CONTAINER_NAME$"; thenecho "发现已有容器 [$CONTAINER_NAME],正在清理..."docker rm -f "$CONTAINER_NAME" || { echo "删除旧容器失败!"; exit 1; }fi
}# 创建 Dragonfly 配置文件(flagfile 格式)
create_config() {local config_file="$CONF_DIR/dragonfly.conf"if [ ! -f "$config_file" ]; thenecho "创建 Dragonfly 配置文件(flagfile 格式)..."cat > "$config_file" << EOF
# Dragonfly 配置文件(flagfile 格式)
# 每行一个命令行参数# 认证密码
--requirepass=$PASSWORD# 数据目录
--dir=/data# 日志级别
--loglevel=notice# 快照文件名
--dbfilename=dump.rdb# 快照保存策略
--save=900,1
--save=300,10
--save=60,10000# 内存配置(根据需求调整)
# --maxmemory=16gb
# --maxmemory_policy=allkeys-lru# 网络配置
# --bind=0.0.0.0
# --port=6379# Dragonfly 特定配置
# 线程数(根据CPU核心数调整)
# --proactor_threads=4# 内存分配器
# --memory_allocator=jemalloc
EOFchmod 644 "$config_file"echo "配置文件已创建: $config_file"fi
}# 启动 Dragonfly 容器
start_dragonfly() {echo "正在启动 Dragonfly 容器..."# 使用配置文件启动echo "使用配置文件启动..."docker run -d \--name "$CONTAINER_NAME" \--restart=unless-stopped \--user 999:999 \-p "$HOST_PORT:$CONTAINER_PORT" \-v "$DATA_VOLUME:/data" \-v "$SNAPSHOTS_DIR:/data/snapshots" \-v "$LOG_DIR:/var/log/dragonfly" \-v "$CONF_DIR/dragonfly.conf:/etc/dragonfly/dragonfly.conf" \"$IMAGE" \--flagfile /etc/dragonfly/dragonfly.confif [ $? -ne 0 ]; thenecho "Dragonfly 启动失败!"exit 1fi
}# 验证服务状态
verify_connection() {echo "等待服务启动(10秒)..."sleep 10if command -v redis-cli >/dev/null 2>&1; thenecho "测试连接..."if redis-cli -p "$HOST_PORT" -a "$PASSWORD" ping 2>/dev/null | grep -q "PONG"; thenecho_connection_infoelseecho "连接测试失败,尝试无密码连接..."if redis-cli -p "$HOST_PORT" ping 2>/dev/null | grep -q "PONG"; thenecho "警告: 密码认证未生效,但服务正在运行"echo_connection_infoelsecheck_container_logsfifielseecho "警告: 未找到 redis-cli,跳过连接测试"echo_connection_infofi
}echo_connection_info() {echo "--------------------------------------------------"echo "Dragonfly 启动完成!"echo "容器名称: $CONTAINER_NAME"echo "连接地址: 127.0.0.1:$HOST_PORT"echo "认证密码: $PASSWORD"echo "数据目录: $DATA_VOLUME"echo "快照目录: $SNAPSHOTS_DIR"echo "日志目录: $LOG_DIR"echo "配置目录: $CONF_DIR"echo ""echo "管理命令:"echo " 查看日志: docker logs $CONTAINER_NAME"echo " 进入容器: docker exec -it $CONTAINER_NAME /bin/bash"echo " 停止服务: docker stop $CONTAINER_NAME"echo ""echo "连接示例:"echo " redis-cli -p $HOST_PORT -a $PASSWORD"echo " redis-cli -p $HOST_PORT -a $PASSWORD ping"
}check_container_logs() {echo "连接测试失败,检查容器状态..."if docker ps | grep -q "$CONTAINER_NAME"; thenecho "容器正在运行,但连接失败。查看日志:"docker logs "$CONTAINER_NAME" --tail 20elseecho "容器未运行!详细日志:"docker logs "$CONTAINER_NAME"fiexit 1
}
# 显示 Dragonfly 版本信息
show_version() {echo "获取 Dragonfly 版本信息..."docker exec "$CONTAINER_NAME" /usr/local/bin/dragonfly --version 2>/dev/null || \echo "无法获取版本信息,但服务可能正常运行"
}
# 主流程
main() {echo "开始部署 Dragonfly 服务..."check_dirscreate_configcheck_containerstart_dragonflyverify_connectionshow_version
}
main
赋予执行权限:
chmod +x deploy_dragonfly.sh
配置文件已创建: /data/dragonfly/conf/dragonfly.conf
正在启动 Dragonfly 容器...
使用配置文件启动...
a3ef426247c261ae8fffbff8d8b10a4d8fa1838e3b339e63a4c6998200c24249
等待服务启动(10秒)...
警告: 未找到 redis-cli,跳过连接测试
--------------------------------------------------
Dragonfly 启动完成!
容器名称: dragonfly
连接地址: 127.0.0.1:6379
认证密码: 87vhqEneQ5u8
数据目录: /data/dragonfly/data
快照目录: /data/dragonfly/snapshots
日志目录: /data/dragonfly/log
配置目录: /data/dragonfly/conf管理命令:查看日志: docker logs dragonfly进入容器: docker exec -it dragonfly /bin/bash停止服务: docker stop dragonfly连接示例:redis-cli -p 6379 -a 87vhqEneQ5u8redis-cli -p 6379 -a 87vhqEneQ5u8 ping
获取 Dragonfly 版本信息...
dragonfly v1.32.0-960ddf41c41ce27d5c038856957b4d740629f94b
build time: 2025-08-03 19:28:00
[root@k8s-normal-node01 data]# docker logs dragonfly
I20251011 02:24:25.323156 1 init.cc:127] dragonfly running in opt mode.
I20251011 02:24:25.323275 1 dfly_main.cc:757] Starting dragonfly df-v1.32.0-960ddf41c41ce27d5c038856957b4d740629f94b.--::--. :+*=: =@@@@@@@@= :+*+: %@@@@@@%*=. =@@@@@@@@- .=*%@@@@@@# @@@@@@@@@@@@#+-. .%@@@@#. .-+#@@@@@@@@@@@% -@@@@@@@@@@@@@@@@*:#@@#:*@@@@@@@@@@@@@@@@- :+*********####-%@%%@%-####********++. .%@@@@@@@@@@@@@%:@@@@@@:@@@@@@@@@@@@@@% .@@@@@@@@%*+-: =@@@@= .:-+*%@@@@@@@%. =*+-: ###* .:-+*= %@@% *@@* +@@= :##: :@@: @@ ..
* Logs will be written to the first available of the following paths:
/tmp/dragonfly.*
./dragonfly.*
* For the available flags type dragonfly [--help | --helpfull]
* Documentation can be found at: https://www.dragonflydb.io/docs
I20251011 02:24:25.323401 1 dfly_main.cc:799] maxmemory has not been specified. Deciding myself....
I20251011 02:24:25.323410 1 dfly_main.cc:808] Found 53.76GiB available memory. Setting maxmemory to 43.01GiB
W20251011 02:24:25.323443 1 dfly_main.cc:380] Weird error 1 switching to epoll
I20251011 02:24:25.329108 1 proactor_pool.cc:149] Running 16 io threads
I20251011 02:24:25.335434 1 server_family.cc:1073] Host OS: Linux 5.10.0-136.12.0.88.ctl3.x86_64 x86_64 with 16 threads
I20251011 02:24:25.340073 1 snapshot_storage.cc:186] Load snapshot: Searching for snapshot in directory: "/data"
W20251011 02:24:25.340616 1 server_family.cc:1173] Load snapshot: No snapshot found
I20251011 02:24:25.362972 10 listener_interface.cc:102] sock[35] AcceptServer - listening on 0.0.0.0:6379
I20251011 02:24:26.898734 13 version_monitor.cc:174] Your current version '1.32.0' is not the latest version. A newer version '1.34.1' is now available. Please consider an update.