实验环境,三台主机均安装redis
第一台redis:192.168.8.5
第二台redis:192.168.8.8
第三台redis:192.168.8.9
先行准备数据目录和安装目录
mkdir -p /opt/redis_cluster/redis_{6380,6381}/{conf,logs,pid}
mkdir -p /data/redis_cluster/redis_{6380,6381}
将软件包拖入xshell中
将软件包解压到 /opt/redis_cluster/下
tar xf redis-5.0.7.tar.gz -C /opt/redis_cluster/
创建链接
ln -s /opt/redis_cluster/redis-5.0.7 /opt/redis_cluster/redis
进入安装目录
cd /opt/redis_cluster/redis
进行编译安装
make && make install
编写redis_6380.conf配置文件
vim /opt/redis_cluster/redis_6380/conf/redis_6380.conf
bind 192.168.8.5
port 6380
daemonize yes
pidfile "/opt/redis_cluster/redis_6380/pid/redis_6380.pid"
logfile "/opt/redis_cluster/redis_6380/logs/redis_6380.log"
dbfilename "redis_6380.rdb"
dir "/data/redis_cluster/redis_6380/"
cluster-enabled yes
cluster-config-file nodes_6380.conf
cluster-node-timeout 15000
进入此目录
cd /opt/redis_cluster/
ls
复制6380到6381的配置文件
cp redis_6380/conf/redis_6380.conf redis_6381/conf/redis_6381.conf
修改6381内的6380为6381
sed -i 's#6380#6381#g' redis_6381/conf/redis_6381.conf
启动6380和6381两项端口服务
redis-server /opt/redis_cluster/redis_6380/conf/redis_6380.conf
redis-server /opt/redis_cluster/redis_6381/conf/redis_6381.conf
netstat -anput | grep redis
查看端口
将主redis的数据目录/opt/redis_cluster/ 复制到两台从主机上
scp -rp /opt/redis_cluster/ root@192.168.8.8:/opt
scp -rp /opt/redis_cluster/ root@192.168.8.9:/opt
进入redis主机2安装redis
cd /opt/redis_cluster/redis
make install
find /opt/redis_cluster/redis_638* -type f -name "*.conf"|xargs sed -i "s#192.168.8.5#192.168.8.8#g"
mkdir -p /data/redis_cluster/redis_{6380,6381}
redis-server /opt/redis_cluster/redis_6380/conf/redis_6380.conf
redis-server /opt/redis_cluster/redis_6381/conf/redis_6381.conf
进入redis主机3安装redis
cd /opt/redis_cluster/redis
make install
find /opt/redis_cluster/redis_638* -type f -name "*.conf"|xargs sed -i "s#192.168.8.5#192.168.8.9#g"
mkdir -p /data/redis_cluster/redis_{6380,6381}
redis-server /opt/redis_cluster/redis_6380/conf/redis_6380.conf
redis-server /opt/redis_cluster/redis_6381/conf/redis_6381.conf
任意进入一台主机进行操作
redis-cli -h 192.168.8.5 -p 6380
CLUSTER MEET 192.168.8.5 6381
CLUSTER MEET 192.168.8.8 6380
CLUSTER MEET 192.168.8.9 6380
CLUSTER MEET 192.168.8.9 6381
CLUSTER MEET 192.168.8.8 6381
CLUSTER NODES
显示所有节点,现在均为master
exit退出在终端外进行查看
cd /data/redis_cluster/
ls
cd redis_6380
cat nodes_6380.conf
redis-cli -h 192.168.8.5 -p 6380 set k1 1 CLUSTER INFO
登录redis
redis-cli -h 192.168.8.5 -p 6380
给主服务器分节点,群集最多支持16384个节点使用
将三台主机三等分
redis-cli -h 192.168.8.5 -p 6380 cluster addslots {0..5460}
redis-cli -h 192.168.8.8 -p 6380 cluster addslots {5461..10922}
redis-cli -h 192.168.8.9 -p 6380 cluster addslots {10923..16383}
redis-cli -h 192.168.8.5 -p 6380
set k1 1
(error) MOVED 12706 192.168.8.9:6380
redis-cli -c -h 192.168.8.5 -p 6380
set k1 1
-> Redirected to slot [12706] located at 192.168.8.9:6380
OK
192.168.8.9:6380> keys *
1) "k1"
redis-cli -c -h 192.168.8.5 -p 6380 get k1
1) "k1"
redis-cli -c -h 192.168.8.5 -p 6380 cluster info
redis-cli -c -h 192.168.8.5 -p 6380 cluster nodes
接下来分配主从
redis-cli -h 192.168.8.5 -p 6381 CLUSTER REPLICATE ad59fe03475d0d6d4697db338e0cc0f7c800890f 第二台主机6380ID
redis-cli -h 192.168.8.8 -p 6381 CLUSTER REPLICATE
0a92ca3606e1066a98039484a6b1892cd0017bfc 第三台主机6380ID
redis-cli -h 192.168.8.9 -p 6381 CLUSTER REPLICATE a44de5c54c039ce3e3796e078441d7c308a9625f 第一台主机6380ID
redis-cli -h 192.168.8.5 -p 6380
redis-cli -h 192.168.8.5 -p 6380 get k1
cd
vim input_key.sh
#!/bin/bash
for i in $(seq 1 1000)
do
redis-cli -c -h 192.168.8.5 -p 6380 set k_${i} v_${i} && echo "set k_${i} is ok"
done
给予权限并执行
chmod +x input_key.sh
./input_key.sh
redis-cli -c -h 192.168.8.5 -p 6380
192.168.8.5:6380> get k_1
"v_1"
192.168.8.5:6380> get k_100
-> Redirected to slot [5541] located at 192.168.8.8:6380
"v_100"
192.168.8.8:6380> get k_1000
-> Redirected to slot [79] located at 192.168.8.5:6380
"v_1000"
keys *
切换主机2查看键值
redis-cli -h 192.168.8.8 -p 6380
192.168.8.8:6380> keys *
192.168.8.8:6380> get k_707
"v_707"
切换回主redis查看k_707
get k_707
-> Redirected to slot [6114] located at 192.168.8.8:6380
"v_707"
切换从主机redis2模拟故障关闭两项服务
查看状态
netstat -anput | grep redis
查看节点信息
redis-cli -c -h 192.168.8.5 -p 6380
192.168.8.5:6380> get k_707
-> Redirected to slot [6114] located at 192.168.8.5:6381
"v_707"
切换主机2启动服务
redis-server /opt/redis_cluster/redis_6380/conf/redis_6380.conf
redis-server /opt/redis_cluster/redis_6381/conf/redis_6381.conf
主机1查看节点,两项服务都为从
主机2变为从
开始进行恢复
redis-cli -h 192.168.8.8 -p 6380 CLUSTER FAILOVER
查看节点
redis-cli -h 192.168.8.5 -p 6380 cluster nodes
自动化部署redis集群
还原手动创建所有内容
注:三台主机都要操作
杀死进程
pkill redis
删除/data/redis_cluster/redis_6380/下所有文件
rm -rf /data/redis_cluster/redis_6380/*
rm -rf /data/redis_cluster/redis_6381/*
查看端口发现不存在
netstat -anput | grep redis
三台主机重新启动redis
redis-server /opt/redis_cluster/redis_6380/conf/redis_6380.conf
redis-server /opt/redis_cluster/redis_6381/conf/redis_6381.conf
显示所有节点
redis-cli -c -h 192.168.8.5 -p 6380 cluster nodes
创建群集MEET,其中均为三台主机IP与节点服务
redis-cli --cluster create --cluster-replicas 1 192.168.8.5:6380 192.168.8.8:6380 192.168.8.9:6380 192.168.8.5:6381 192.168.8.8:6381 192.168.8.9:6381
检查群集完整性
redis-cli --cluster check 192.168.8.5:6380
工具扩容节点
创建节点目录
mkdir -p /opt/redis_cluster/redis_{6390,6391}/{conf,logs,pid}
mkdir -p /data/redis_cluster/redis_{6390,6391}
进入/opt/redis_cluster/
cd /opt/redis_cluster/
复制6380配置文件到6390与6391当作新配置文件
cp redis_6380/conf/redis_6380.conf redis_6390/conf/redis_6390.conf
cp redis_6380/conf/redis_6380.conf redis_6391/conf/redis_6391.conf
修改配置文件内容6380,6381为6390,6391
sed -i 's#6380#6390#g' redis_6390/conf/redis_6390.conf
sed -i 's#6380#6391#g' redis_6391/conf/redis_6391.conf
启动6390和6391
redis-server /opt/redis_cluster/redis_6390/conf/redis_6390.conf
redis-server /opt/redis_cluster/redis_6391/conf/redis_6391.conf
netstat -anput | grep redis
发现节点
redis-cli -c -h 192.168.8.5 -p 6380 cluster meet 192.168.8.5 6390
redis-cli -c -h 192.168.8.5 -p 6380 cluster meet 192.168.8.5 6391
查看节点状态
redis-cli -c -h 192.168.8.5 -p 6380 cluster nodes
分配slots
redis-cli --cluster reshard 192.168.8.5:6390
输入yes等待完成
分配槽位
redis-cli -c -h 192.168.8.5 -p 6380 cluster nodes
查看节点
配置6391 slave 6390:
redis-cli -h 192.168.8.5 -p 6391 cluster replicate a5349495c8b6208884b88f45eca9d4ae906ce392
a5349495c8b6208884b88f45eca9d4ae906ce392为6390id
工具收缩节点
1365 给redis1的6380
redis-cli --cluster reshard 192.168.8.5:6390
输入需要移动的节点数量
输入redis1的6380id
再输入redis1的6390id
done
输入yes等待结束
接下这两个重复以上操作
节点数为1366
节点id为redis2节点6380id
源为redis1 6390id
节点数为1365
节点id为redis3节点6380id
源为redis1 6390id
遗忘节点id分别为6390和6391的id
redis-cli -c -h 192.168.8.5 -p 6380 cluster forget a5349495c8b6208884b88f45eca9d4ae906ce392
redis-cli -c -h 192.168.8.5 -p 6380 cluster forget fd9e594990c56ade80df312ca910cb646f1535b7
查看节点状态
redis-cli -c -h 192.168.8.5 -p 6380 cluster nodes
由此可见节点不复存在