Memcached教程FG018-Memcached集群扩容缩容与在线迁移实战
本文详细介绍Memcached集群扩容缩容与在线迁移方案,包括扩容缩容原理、集群扩容实施、集群缩容实施、在线迁移方案、数据迁移策略以及生产环境扩缩容最佳实践。风哥教程参考Memcached官方文档Cluster Management、Scaling等章节内容。
目录大纲
Part01-基础概念与理论知识
1.1 Memcached扩容缩容原理
1.2 Memcached扩容策略分析
1.3 Memcached缩容策略分析
Part02-生产环境规划与建议
2.1 Memcached扩容规划方案
2.2 Memcached缩容规划方案
2.3 Memcached迁移方案规划
Part03-生产环境项目实施方案
3.1 Memcached集群扩容实施
3.2 Memcached集群缩容实施
3.3 Memcached在线迁移实施
Part04-生产案例与实战讲解
4.1 Memcached扩容实战案例
4.2 Memcached缩容实战案例
4.3 Memcached迁移实战案例
Part05-风哥经验总结与分享
5.1 Memcached扩缩容经验
5.2 Memcached迁移经验总结
5.3 Memcached扩缩容最佳实践
Part01-基础概念与理论知识
1.1 Memcached扩容缩容原理
Memcached集群扩容缩容是指动态调整集群节点数量以适应业务需求变化。更多视频教程www.fgedu.net.cn。扩容通常是因为内存不足、QPS压力大或需要提高可用性;缩容通常是因为资源过剩、业务量下降或成本优化。Memcached本身不支持自动扩缩容,需要通过客户端或代理层实现。
扩缩容的核心挑战是数据迁移和一致性哈希重分布。学习交流加群风哥微信: itpux-com。当增加或减少节点时,一致性哈希环会重新分布,导致部分Key需要迁移到新节点。如果处理不当,会导致大量缓存失效,引发缓存雪崩。因此扩缩容需要谨慎规划和执行。
1.2 Memcached扩容策略分析
Memcached扩容策略:垂直扩容,增加单个节点的内存大小;水平扩容,增加节点数量扩展集群。垂直扩容简单但受限于单机资源,水平扩容可无限扩展但需要处理数据分布问题。生产环境通常采用水平扩容,配合一致性哈希实现数据分布。from Memcached视频:www.itpux.com。
1.3 Memcached缩容策略分析
Memcached缩容策略:平滑缩容,逐步减少节点上的数据后下线;快速缩容,直接下线节点接受缓存失效。平滑缩容对业务影响小但耗时长,快速缩容简单但可能导致大量缓存失效。缩容前需要评估对业务的影响,选择合适的缩容策略。更多学习教程公众号风哥教程itpux_com。
# echo “stats” | nc 192.168.1.101 11211 | grep -E ‘curr_items|bytes|limit_maxbytes’
STAT bytes 53687091200
STAT curr_items 5000000
STAT limit_maxbytes 64424509440
Part02-生产环境规划与建议
2.1 Memcached扩容规划方案
Memcached扩容规划要点:容量评估,评估当前内存使用率和增长趋势;节点规划,确定新增节点的数量和配置;网络规划,规划新节点的网络配置和连接;客户端配置,更新客户端的节点列表;监控告警,配置新节点的监控告警;回滚预案,制定扩容失败的回滚方案。学习交流加群风哥QQ113257174。
# cat > /memcached/app/config/expansion_plan.conf << 'EOF'
# Memcached扩容规划配置
# from:www.itpux.com.qq113257174.wx:itpux-com
# web: http://www.fgedu.net.cn
# 当前节点
CURRENT_NODES=192.168.1.101:11211,192.168.1.102:11211,192.168.1.103:11211
# 扩容后节点
EXPANDED_NODES=192.168.1.101:11211,192.168.1.102:11211,192.168.1.103:11211,192.168.1.104:11211,192.168.1.105:11211
# 新节点配置
NEW_NODE_MEMORY=65536
NEW_NODE_CONNECTIONS=65535
NEW_NODE_THREADS=8
# 扩容时间窗口
EXPANSION_WINDOW=02:00-06:00
# 虚拟节点数
VIRTUAL_NODES=160
EOF
> # Memcached扩容规划配置
> # from:www.itpux.com.qq113257174.wx:itpux-com
> # web: http://www.fgedu.net.cn
>
> # 当前节点
> CURRENT_NODES=192.168.1.101:11211,192.168.1.102:11211,192.168.1.103:11211
>
> # 扩容后节点
> EXPANDED_NODES=192.168.1.101:11211,192.168.1.102:11211,192.168.1.103:11211,192.168.1.104:11211,192.168.1.105:11211
>
> # 新节点配置
> NEW_NODE_MEMORY=65536
> NEW_NODE_CONNECTIONS=65535
> NEW_NODE_THREADS=8
>
> # 扩容时间窗口
> EXPANSION_WINDOW=02:00-06:00
>
> # 虚拟节点数
> VIRTUAL_NODES=160
> EOF
2.2 Memcached缩容规划方案
Memcached缩容规划要点:资源评估,评估缩容后的资源是否满足业务需求;节点选择,选择合适的节点进行缩容;数据迁移,规划待缩容节点的数据迁移;客户端更新,更新客户端的节点列表;监控调整,调整监控告警配置;应急预案,制定缩容失败的应急预案。from Memcached视频:www.itpux.com。
2.3 Memcached迁移方案规划
Memcached迁移方案规划:迁移时机,选择业务低峰期进行迁移;迁移方式,选择在线迁移或停机迁移;数据同步,规划数据同步方案;切换方案,制定平滑切换方案;回滚方案,制定迁移失败的回滚方案;验证方案,制定迁移后的验证方案。更多视频教程www.fgedu.net.cn。
Part03-生产环境项目实施方案
3.1 Memcached集群扩容实施
实施Memcached集群扩容操作。学习交流加群风哥微信: itpux-com。
# cat > /memcached/app/scripts/cluster_expansion.sh << 'EOF'
#!/bin/bash
# cluster_expansion.sh
# from:www.itpux.com.qq113257174.wx:itpux-com
# web: http://www.fgedu.net.cn
echo “===== Memcached集群扩容开始 =====”
# 新节点信息
NEW_NODES=(“192.168.1.104” “192.168.1.105”)
PORT=11211
# 1. 检查新节点连通性
echo “1. 检查新节点连通性…”
for NODE in “${NEW_NODES[@]}”; do
if ping -c 1 $NODE > /dev/null 2>&1; then
echo ” [正常] $NODE 可达”
else
echo ” [异常] $NODE 不可达!”
exit 1
fi
done
# 2. 在新节点启动Memcached
echo “2. 在新节点启动Memcached…”
for NODE in “${NEW_NODES[@]}”; do
echo ” 启动 $NODE 上的Memcached…”
ssh root@$NODE “systemctl start memcached”
if [ $? -eq 0 ]; then
echo ” [成功] $NODE Memcached启动成功”
else
echo ” [失败] $NODE Memcached启动失败”
exit 1
fi
done
# 3. 验证新节点服务
echo “3. 验证新节点服务…”
for NODE in “${NEW_NODES[@]}”; do
STATS=$(echo “stats” | nc $NODE $PORT)
if [ -n “$STATS” ]; then
echo ” [正常] $NODE 服务正常”
else
echo ” [异常] $NODE 服务异常”
exit 1
fi
done
# 4. 更新客户端配置
echo “4. 更新客户端配置…”
echo ” 请更新应用客户端配置,添加新节点”
echo ” 新节点列表: ${NEW_NODES[*]}”
# 5. 验证扩容效果
echo “5. 验证扩容效果…”
echo ” 扩容前节点数: 3″
echo ” 扩容后节点数: 5″
echo ” 总内存增加: 128GB”
echo “===== Memcached集群扩容完成 =====”
EOF
# chmod +x /memcached/app/scripts/cluster_expansion.sh
> #!/bin/bash
> # cluster_expansion.sh
> # from:www.itpux.com.qq113257174.wx:itpux-com
> # web: http://www.fgedu.net.cn
>
> echo “===== Memcached集群扩容开始 =====”
>
> # 新节点信息
> NEW_NODES=(“192.168.1.104” “192.168.1.105”)
> PORT=11211
>
> # 1. 检查新节点连通性
> echo “1. 检查新节点连通性…”
> for NODE in “${NEW_NODES[@]}”; do
> if ping -c 1 $NODE > /dev/null 2>&1; then
> echo ” [正常] $NODE 可达”
> else
> echo ” [异常] $NODE 不可达!”
> exit 1
> fi
> done
>
> # 2. 在新节点启动Memcached
> echo “2. 在新节点启动Memcached…”
> for NODE in “${NEW_NODES[@]}”; do
> echo ” 启动 $NODE 上的Memcached…”
> ssh root@$NODE “systemctl start memcached”
> if [ $? -eq 0 ]; then
> echo ” [成功] $NODE Memcached启动成功”
> else
> echo ” [失败] $NODE Memcached启动失败”
> exit 1
> fi
> done
>
> # 3. 验证新节点服务
> echo “3. 验证新节点服务…”
> for NODE in “${NEW_NODES[@]}”; do
> STATS=$(echo “stats” | nc $NODE $PORT)
> if [ -n “$STATS” ]; then
> echo ” [正常] $NODE 服务正常”
> else
> echo ” [异常] $NODE 服务异常”
> exit 1
> fi
> done
>
> # 4. 更新客户端配置
> echo “4. 更新客户端配置…”
> echo ” 请更新应用客户端配置,添加新节点”
> echo ” 新节点列表: ${NEW_NODES[*]}”
>
> # 5. 验证扩容效果
> echo “5. 验证扩容效果…”
> echo ” 扩容前节点数: 3″
> echo ” 扩容后节点数: 5″
> echo ” 总内存增加: 128GB”
>
> echo “===== Memcached集群扩容完成 =====”
> EOF
[root@fgedu101 ~]# chmod +x /memcached/app/scripts/cluster_expansion.sh
3.2 Memcached集群缩容实施
实施Memcached集群缩容操作。from Memcached视频:www.itpux.com。
# cat > /memcached/app/scripts/cluster_reduction.sh << 'EOF'
#!/bin/bash
# cluster_reduction.sh
# from:www.itpux.com.qq113257174.wx:itpux-com
# web: http://www.fgedu.net.cn
echo “===== Memcached集群缩容开始 =====”
# 待缩容节点
REMOVE_NODES=(“192.168.1.104” “192.168.1.105”)
PORT=11211
# 1. 检查待缩容节点状态
echo “1. 检查待缩容节点状态…”
for NODE in “${REMOVE_NODES[@]}”; do
STATS=$(echo “stats” | nc $NODE $PORT)
ITEMS=$(echo “$STATS” | grep “curr_items” | awk ‘{print $3}’)
echo ” $NODE 当前Key数量: $ITEMS”
done
# 2. 更新客户端配置
echo “2. 更新客户端配置…”
echo ” 请先更新应用客户端配置,移除待缩容节点”
echo ” 待移除节点: ${REMOVE_NODES[*]}”
read -p ” 客户端配置已更新?(y/n): ” CONFIRM
if [ “$CONFIRM” != “y” ]; then
echo ” 缩容已取消”
exit 0
fi
# 3. 等待数据迁移
echo “3. 等待数据迁移…”
echo ” 等待5分钟让客户端完成数据重新分布…”
sleep 300
# 4. 验证节点数据量
echo “4. 验证节点数据量…”
for NODE in “${REMOVE_NODES[@]}”; do
STATS=$(echo “stats” | nc $NODE $PORT)
ITEMS=$(echo “$STATS” | grep “curr_items” | awk ‘{print $3}’)
echo ” $NODE 当前Key数量: $ITEMS”
done
# 5. 停止节点服务
echo “5. 停止节点服务…”
for NODE in “${REMOVE_NODES[@]}”; do
echo ” 停止 $NODE 上的Memcached…”
ssh root@$NODE “systemctl stop memcached”
echo ” [完成] $NODE Memcached已停止”
done
echo “===== Memcached集群缩容完成 =====”
EOF
# chmod +x /memcached/app/scripts/cluster_reduction.sh
> #!/bin/bash
> # cluster_reduction.sh
> # from:www.itpux.com.qq113257174.wx:itpux-com
> # web: http://www.fgedu.net.cn
>
> echo “===== Memcached集群缩容开始 =====”
>
> # 待缩容节点
> REMOVE_NODES=(“192.168.1.104” “192.168.1.105”)
> PORT=11211
>
> # 1. 检查待缩容节点状态
> echo “1. 检查待缩容节点状态…”
> for NODE in “${REMOVE_NODES[@]}”; do
> STATS=$(echo “stats” | nc $NODE $PORT)
> ITEMS=$(echo “$STATS” | grep “curr_items” | awk ‘{print $3}’)
> echo ” $NODE 当前Key数量: $ITEMS”
> done
>
> # 2. 更新客户端配置
> echo “2. 更新客户端配置…”
> echo ” 请先更新应用客户端配置,移除待缩容节点”
> echo ” 待移除节点: ${REMOVE_NODES[*]}””
> read -p ” 客户端配置已更新?(y/n): ” CONFIRM
> if [ “$CONFIRM” != “y” ]; then
> echo ” 缩容已取消”
> exit 0
> fi
>
> # 3. 等待数据迁移
> echo “3. 等待数据迁移…”
> echo ” 等待5分钟让客户端完成数据重新分布…”
> sleep 300
>
> # 4. 验证节点数据量
> echo “4. 验证节点数据量…”
> for NODE in “${REMOVE_NODES[@]}”; do
> STATS=$(echo “stats” | nc $NODE $PORT)
> ITEMS=$(echo “$STATS” | grep “curr_items” | awk ‘{print $3}’)
> echo ” $NODE 当前Key数量: $ITEMS”
> done
>
> # 5. 停止节点服务
> echo “5. 停止节点服务…”
> for NODE in “${REMOVE_NODES[@]}”; do
> echo ” 停止 $NODE 上的Memcached…”
> ssh root@$NODE “systemctl stop memcached”
> echo ” [完成] $NODE Memcached已停止”
> done
>
> echo “===== Memcached集群缩容完成 =====”
> EOF
[root@fgedu101 ~]# chmod +x /memcached/app/scripts/cluster_reduction.sh
3.3 Memcached在线迁移实施
实施Memcached在线迁移操作。更多视频教程www.fgedu.net.cn。
# cat > /memcached/app/scripts/online_migration.sh << 'EOF'
#!/bin/bash
# online_migration.sh
# from:www.itpux.com.qq113257174.wx:itpux-com
# web: http://www.fgedu.net.cn
echo “===== Memcached在线迁移开始 =====”
# 源节点和目标节点
SRC_NODE=”192.168.1.100″
DST_NODE=”192.168.1.200″
PORT=11211
# 1. 检查目标节点
echo “1. 检查目标节点…”
STATS=$(echo “stats” | nc $DST_NODE $PORT)
if [ -n “$STATS” ]; then
echo ” [正常] 目标节点服务正常”
else
echo ” [异常] 目标节点服务异常”
exit 1
fi
# 2. 更新客户端配置(双写阶段)
echo “2. 更新客户端配置…”
echo ” 请更新客户端配置,同时写入源节点和目标节点”
echo ” 源节点: $SRC_NODE”
echo ” 目标节点: $DST_NODE”
# 3. 数据迁移提示
echo “3. 数据迁移…”
echo ” Memcached数据存储在内存中,无法直接迁移”
echo ” 建议采用以下方案:”
echo ” – 双写:新数据同时写入源和目标”
echo ” – 预热:从数据库预热关键数据到目标节点”
echo ” – 切换:验证后切换到目标节点”
# 4. 验证迁移效果
echo “4. 验证迁移效果…”
SRC_ITEMS=$(echo “stats” | nc $SRC_NODE $PORT | grep “curr_items” | awk ‘{print $3}’)
DST_ITEMS=$(echo “stats” | nc $DST_NODE $PORT | grep “curr_items” | awk ‘{print $3}’)
echo ” 源节点Key数量: $SRC_ITEMS”
echo ” 目标节点Key数量: $DST_ITEMS”
echo “===== Memcached在线迁移完成 =====”
EOF
# chmod +x /memcached/app/scripts/online_migration.sh
> #!/bin/bash
> # online_migration.sh
> # from:www.itpux.com.qq113257174.wx:itpux-com
> # web: http://www.fgedu.net.cn
>
> echo “===== Memcached在线迁移开始 =====”
>
> # 源节点和目标节点
> SRC_NODE=”192.168.1.100″
> DST_NODE=”192.168.1.200″
> PORT=11211
>
> # 1. 检查目标节点
> echo “1. 检查目标节点…”
> STATS=$(echo “stats” | nc $DST_NODE $PORT)
> if [ -n “$STATS” ]; then
> echo ” [正常] 目标节点服务正常”
> echo ” [异常] 目标节点服务异常”
> exit 1
> fi
>
> # 2. 更新客户端配置(双写阶段)
> echo “2. 更新客户端配置…”
> echo ” 请更新客户端配置,同时写入源节点和目标节点”
> echo ” 源节点: $SRC_NODE”
> echo ” 目标节点: $DST_NODE”
>
> # 3. 数据迁移提示
> echo “3. 数据迁移…”
> echo ” Memcached数据存储在内存中,无法直接迁移”
> echo ” 建议采用以下方案:”
> echo ” – 双写:新数据同时写入源和目标”
> echo ” – 预热:从数据库预热关键数据到目标节点”
> echo ” – 切换:验证后切换到目标节点”
>
> # 4. 验证迁移效果
> echo “4. 验证迁移效果…”
> SRC_ITEMS=$(echo “stats” | nc $SRC_NODE $PORT | grep “curr_items” | awk ‘{print $3}’)
> DST_ITEMS=$(echo “stats” | nc $DST_NODE $PORT | grep “curr_items” | awk ‘{print $3}’)
> echo ” 源节点Key数量: $SRC_ITEMS”
> echo ” 目标节点Key数量: $DST_ITEMS”
>
> echo “===== Memcached在线迁移完成 =====”
> EOF
[root@fgedu101 ~]# chmod +x /memcached/app/scripts/online_migration.sh
Part04-生产案例与实战讲解
4.1 Memcached扩容实战案例
某电商平台Memcached扩容实战案例:背景,电商大促前需要扩容Memcached集群;方案,从3节点扩展到5节点,每节点64GB内存;实施,低峰期添加2个新节点,更新客户端配置;效果,总内存从192GB增加到320GB,QPS承载能力提升67%。学习交流加群风哥微信: itpux-com。
4.2 Memcached缩容实战案例
某游戏公司Memcached缩容实战案例:背景,业务量下降,资源利用率低;方案,从5节点缩减到3节点;实施,先更新客户端配置,等待数据重新分布后下线节点;效果,节省2台服务器资源,成本降低40%。from Memcached视频:www.itpux.com。
4.3 Memcached迁移实战案例
某金融公司Memcached迁移实战案例:背景,机房搬迁需要迁移Memcached集群;方案,在新机房部署集群,采用双写+预热方案迁移;实施,新数据双写,关键数据预热,验证后切换;效果,迁移过程零停机,业务无感知。更多学习教程公众号风哥教程itpux_com。
Part05-风哥经验总结与分享
5.1 Memcached扩缩容经验
在多年生产环境实践中,总结出以下Memcached扩缩容经验:提前规划,根据业务增长趋势提前规划扩容;选择时机,在业务低峰期进行扩缩容操作;充分测试,扩缩容前在测试环境充分验证;监控告警,扩缩容后密切监控集群状态;回滚预案,准备好扩缩容失败的回滚方案。from Memcached视频:www.itpux.com。
5.2 Memcached迁移经验总结
Memcached迁移经验总结:双写方案,新数据同时写入源和目标节点;预热方案,从数据库预热关键数据;灰度切换,先切换部分流量验证;监控验证,迁移后密切监控业务指标;文档记录,记录迁移过程和问题,积累经验。更多视频教程www.fgedu.net.cn。
5.3 Memcached扩缩容最佳实践
Memcached扩缩容最佳实践总结:容量规划要充分,预留足够的增长空间;操作流程要规范,制定详细的操作手册;测试验证要充分,确保方案可行;监控告警要完善,及时发现异常;应急预案要准备,确保故障能快速恢复。学习交流加群风哥QQ113257174。
通过本文的学习,读者应该掌握了Memcached集群扩容缩容与在线迁移的方法和最佳实践。在实际生产环境中,需要根据业务特点制定合适的扩缩容方案,确保Memcached集群稳定可靠运行。from Memcached视频:www.itpux.com。
本文由风哥教程整理发布,仅用于学习测试使用,转载注明出处:http://www.fgedu.net.cn/10327.html
