setup-redis-replication.sh 2.3 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980
  1. #!/bin/bash
  2. # Redis主从复制配置脚本
  3. # 用途:配置Redis主从复制
  4. set -e
  5. MASTER_IP="172.16.0.67"
  6. SLAVE_IP="172.16.0.68"
  7. REDIS_PASSWORD="Hzdyjs@123456"
  8. echo "=========================================="
  9. echo "Redis主从复制配置脚本"
  10. echo "=========================================="
  11. # 检查当前机器IP
  12. CURRENT_IP=$(hostname -I | awk '{print $1}')
  13. echo "当前机器IP: $CURRENT_IP"
  14. if [ "$CURRENT_IP" = "$MASTER_IP" ]; then
  15. echo "配置主节点 (Master)..."
  16. # 1. 配置主节点redis.conf
  17. REDIS_CONF="/etc/redis.conf"
  18. if [ ! -f "$REDIS_CONF" ]; then
  19. REDIS_CONF="/etc/redis/redis.conf"
  20. fi
  21. # 备份原配置
  22. cp "$REDIS_CONF" "${REDIS_CONF}.backup.$(date +%Y%m%d_%H%M%S)"
  23. # 修改配置
  24. sed -i "s/^# bind 127.0.0.1/bind 0.0.0.0/" "$REDIS_CONF"
  25. sed -i "s/^# requirepass.*/requirepass $REDIS_PASSWORD/" "$REDIS_CONF"
  26. sed -i "s/^# masterauth.*/masterauth $REDIS_PASSWORD/" "$REDIS_CONF"
  27. # 2. 重启Redis
  28. systemctl restart redis
  29. sleep 3
  30. echo "主节点配置完成!"
  31. elif [ "$CURRENT_IP" = "$SLAVE_IP" ]; then
  32. echo "配置从节点 (Slave)..."
  33. # 1. 配置从节点redis.conf
  34. REDIS_CONF="/etc/redis.conf"
  35. if [ ! -f "$REDIS_CONF" ]; then
  36. REDIS_CONF="/etc/redis/redis.conf"
  37. fi
  38. # 备份原配置
  39. cp "$REDIS_CONF" "${REDIS_CONF}.backup.$(date +%Y%m%d_%H%M%S)"
  40. # 修改配置
  41. sed -i "s/^# bind 127.0.0.1/bind 0.0.0.0/" "$REDIS_CONF"
  42. sed -i "s/^# requirepass.*/requirepass $REDIS_PASSWORD/" "$REDIS_CONF"
  43. sed -i "s/^# replicaof.*/replicaof $MASTER_IP 6379/" "$REDIS_CONF"
  44. sed -i "s/^# masterauth.*/masterauth $REDIS_PASSWORD/" "$REDIS_CONF"
  45. # 2. 重启Redis
  46. systemctl restart redis
  47. sleep 3
  48. # 3. 验证主从状态
  49. echo "验证主从复制状态..."
  50. redis-cli -a "$REDIS_PASSWORD" INFO replication | grep -E "role|master_host|master_port|master_link_status"
  51. echo "从节点配置完成!"
  52. else
  53. echo "错误:当前机器IP ($CURRENT_IP) 不在配置范围内"
  54. exit 1
  55. fi
  56. echo "=========================================="
  57. echo "使用以下命令测试主从复制:"
  58. echo "主节点: redis-cli -a $REDIS_PASSWORD set test_key 'test_value'"
  59. echo "从节点: redis-cli -a $REDIS_PASSWORD get test_key"
  60. echo "=========================================="