Files
hzdyjs/docs/部署文档/生产环境双机部署方案/部署脚本/setup-redis-replication.sh
T
2025-11-27 00:02:01 +08:00

81 lines
2.3 KiB
Bash

#!/bin/bash
# Redis主从复制配置脚本
# 用途:配置Redis主从复制
set -e
MASTER_IP="172.16.0.67"
SLAVE_IP="172.16.0.68"
REDIS_PASSWORD="Hzdyjs@123456"
echo "=========================================="
echo "Redis主从复制配置脚本"
echo "=========================================="
# 检查当前机器IP
CURRENT_IP=$(hostname -I | awk '{print $1}')
echo "当前机器IP: $CURRENT_IP"
if [ "$CURRENT_IP" = "$MASTER_IP" ]; then
echo "配置主节点 (Master)..."
# 1. 配置主节点redis.conf
REDIS_CONF="/etc/redis.conf"
if [ ! -f "$REDIS_CONF" ]; then
REDIS_CONF="/etc/redis/redis.conf"
fi
# 备份原配置
cp "$REDIS_CONF" "${REDIS_CONF}.backup.$(date +%Y%m%d_%H%M%S)"
# 修改配置
sed -i "s/^# bind 127.0.0.1/bind 0.0.0.0/" "$REDIS_CONF"
sed -i "s/^# requirepass.*/requirepass $REDIS_PASSWORD/" "$REDIS_CONF"
sed -i "s/^# masterauth.*/masterauth $REDIS_PASSWORD/" "$REDIS_CONF"
# 2. 重启Redis
systemctl restart redis
sleep 3
echo "主节点配置完成!"
elif [ "$CURRENT_IP" = "$SLAVE_IP" ]; then
echo "配置从节点 (Slave)..."
# 1. 配置从节点redis.conf
REDIS_CONF="/etc/redis.conf"
if [ ! -f "$REDIS_CONF" ]; then
REDIS_CONF="/etc/redis/redis.conf"
fi
# 备份原配置
cp "$REDIS_CONF" "${REDIS_CONF}.backup.$(date +%Y%m%d_%H%M%S)"
# 修改配置
sed -i "s/^# bind 127.0.0.1/bind 0.0.0.0/" "$REDIS_CONF"
sed -i "s/^# requirepass.*/requirepass $REDIS_PASSWORD/" "$REDIS_CONF"
sed -i "s/^# replicaof.*/replicaof $MASTER_IP 6379/" "$REDIS_CONF"
sed -i "s/^# masterauth.*/masterauth $REDIS_PASSWORD/" "$REDIS_CONF"
# 2. 重启Redis
systemctl restart redis
sleep 3
# 3. 验证主从状态
echo "验证主从复制状态..."
redis-cli -a "$REDIS_PASSWORD" INFO replication | grep -E "role|master_host|master_port|master_link_status"
echo "从节点配置完成!"
else
echo "错误:当前机器IP ($CURRENT_IP) 不在配置范围内"
exit 1
fi
echo "=========================================="
echo "使用以下命令测试主从复制:"
echo "主节点: redis-cli -a $REDIS_PASSWORD set test_key 'test_value'"
echo "从节点: redis-cli -a $REDIS_PASSWORD get test_key"
echo "=========================================="