1.脚本如下
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114
|
RED='\033[0;31m' GREEN='\033[0;32m' YELLOW='\033[0;33m' NC='\033[0m'
TOTAL_STEPS=18 current_step=0
show_progress() { current_step=$((current_step + 1)) percentage=$((current_step * 100 / TOTAL_STEPS)) printf "${YELLOW}[%3d%%] ${GREEN}步骤 %2d: %s${NC}\n" $percentage $current_step "$1" }
echo -e "${GREEN}开始安装和配置Redis主从集群${NC}"
show_progress "安装Redis依赖" yum install -y gcc tcl
echo -e "${YELLOW}第一部分: 安装单机Redis${NC}"
show_progress "下载Redis" cd /tmp wget -O redis-6.2.4.tar.gz "https://dlink.host/1drv/aHR0cHM6Ly8xZHJ2Lm1zL3UvcyFBZ1NYRUpYME43RzliMTV6M2ItTlFza3RCdE0_ZT1RdXZjSGI.tar.gz"
show_progress "解压Redis" tar -xvf redis-6.2.4.tar.gz
show_progress "进入Redis目录" cd redis-6.2.4
show_progress "编译和安装Redis" make && make install
show_progress "修改Redis配置" sed -i 's/bind 127.0.0.1/bind 0.0.0.0/' redis.conf sed -i 's/databases 16/databases 1/' redis.conf
echo -e "${YELLOW}第二部分: 配置Redis主从集群${NC}"
show_progress "创建目录" cd /tmp mkdir -p 7001 7002 7003
show_progress "拷贝配置文件" echo 7001 7002 7003 | xargs -t -n 1 cp redis-6.2.4/redis.conf
show_progress "修改配置文件" sed -i -e 's/6379/7001/g' -e 's/dir .\//dir \/tmp\/7001\//g' 7001/redis.conf sed -i -e 's/6379/7002/g' -e 's/dir .\//dir \/tmp\/7002\//g' 7002/redis.conf sed -i -e 's/6379/7003/g' -e 's/dir .\//dir \/tmp\/7003\//g' 7003/redis.conf
show_progress "修改IP配置" REDIS_IP=$(hostname -I | awk '{print $1}') printf '%s\n' 7001 7002 7003 | xargs -I{} -t sed -i "1a replica-announce-ip $REDIS_IP" {}/redis.conf
show_progress "启动Redis实例" redis-server 7001/redis.conf & redis-server 7002/redis.conf & redis-server 7003/redis.conf &
sleep 5
show_progress "配置主从关系" redis-cli -p 7002 slaveof $REDIS_IP 7001 redis-cli -p 7003 slaveof $REDIS_IP 7001
show_progress "检查主从状态" redis-cli -p 7001 info replication
show_progress "测试主节点写入" redis-cli -p 7001 set num 123
show_progress "测试从节点读取" redis-cli -p 7002 get num redis-cli -p 7003 get num
show_progress "测试从节点写入(应该失败)" redis-cli -p 7002 set num 666 redis-cli -p 7003 set num 888
show_progress "显示集群信息" echo -e "${GREEN}Redis集群信息:${NC}" echo -e "${YELLOW}主节点: $REDIS_IP:7001${NC}" echo -e "${YELLOW}从节点1: $REDIS_IP:7002${NC}" echo -e "${YELLOW}从节点2: $REDIS_IP:7003${NC}"
show_progress "安装和配置完成" echo -e "${GREEN}Redis主从集群安装和配置完成!${NC}" echo -e "${YELLOW}要停止Redis,请运行: ${NC}redis-cli -p 7001 shutdown && redis-cli -p 7002 shutdown && redis-cli -p 7003 shutdown"
|
2.测试
执行下列操作以测试:
利用redis-cli连接7001,执行set num 123
利用redis-cli连接7002,执行get num,再执行set num 666
利用redis-cli连接7003,执行get num,再执行set num 888
可以发现,只有在7001这个master节点上可以执行写操作,7002和7003这两个slave节点只能执行读操作。