81 lines
2.3 KiB
Bash
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 "=========================================="
|
|
|