#!/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 "=========================================="