集群规划
redis01操作
创建密钥对
ssh-keygen
ssh-copy-id 10.0.0.52
ssh-copy-id 10.0.0.53
结束之前的redis进程
pkill redis
创建目录
mkdir -p /opt/redis_{6380,6381}/{conf,logs,pid}
mkdir -p /data/redis_{6380,6381}
编写配置文件
cat >/opt/redis_6380/conf/redis_6380.conf<<EOF
bind 10.0.0.51
port 6380
daemonize yes
pidfile "/opt/redis_6380/pid/redis_6380.pid"
logfile "/opt/redis_6380/logs/redis_6380.log"
dbfilename "redis_6380.rdb"
dir "/data/redis_6380/"
appendonly yes
appendfilename "redis.aof"
appendfsync everysec
cluster-enabled yes
cluster-config-file nodes_6380.conf
cluster-node-timeout 15000
EOF
进入目录复制配置文件并更改端口号
cd /opt/
cp redis_6380/conf/redis_6380.conf redis_6381/conf/redis_6381.conf
sed -i 's#6380#6381#g' redis_6381/conf/redis_6381.conf
授权
chown -R redis:redis /opt/redis_*
chown -R redis:redis /data/redis_*
修改system启动方式
cat >/usr/lib/systemd/system/redis-master.service<<EOF
[Unit]
Description=Redis persistent key-value database
After=network.target
After=network-online.target
Wants=network-online.target
[Service]
ExecStart=/usr/local/bin/redis-server /opt/redis_6380/conf/redis_6380.conf --supervised systemd
ExecStop=/usr/local/bin/redis-cli -h $(ifconfig eth0|awk 'NR==2{print $2}') -p 6380 shutdown
Type=notify
User=redis
Group=redis
RuntimeDirectory=redis
RuntimeDirectoryMode=0755
[Install]
WantedBy=multi-user.target
EOF
复制一份给6381并更改端口
cd /usr/lib/systemd/system/
cp redis-master.service redis-slave.service
sed -i 's#6380#6381#g' redis-slave.service
启动测试
systemctl daemon-reload
systemctl start redis-master
systemctl start redis-slave
ps -ef|grep redis
使用rsync传输到其他两个节点
rsync -avz /opt/redis_638* 10.0.0.52:/opt/
rsync -avz /opt/redis_638* 10.0.0.53:/opt/
rsync -avz /usr/lib/systemd/system/redis-*.service 10.0.0.52:/usr/lib/systemd/system/
rsync -avz /usr/lib/systemd/system/redis-*.service 10.0.0.53:/usr/lib/systemd/system/
redis02操作
停掉进程
pkill redis
更改主配置文件的端口号
find /opt/redis_638* -type f -name "*.conf"|xargs sed -i "/bind/s#51#52#g"
修改启动命令的端口号
cd /usr/lib/systemd/system/
sed -i 's#51#52#g' redis-*.service
创建数据目录并授权
mkdir –p /data/redis_{6380,6381}
chown -R redis:redis /opt/redis_*
chown -R redis:redis /data/redis_*
测试启动
systemctl daemon-reload
systemctl start redis-master
systemctl start redis-slave
ps -ef|grep redis
redis03操作
替换掉db01发来的文件中的端口号
pkill redis
find /opt/redis_638* -type f -name "*.conf"|xargs sed -i "/bind/s#51#53#g"
cd /usr/lib/systemd/system/
sed -i 's#51#53#g' redis-*.service
mkdir –p /data/redis_{6380,6381}
chown -R redis:redis /opt/redis_*
chown -R redis:redis /data/redis_*
systemctl daemon-reload
systemctl start redis-master
systemctl start redis-slave
ps -ef|grep redis
集群手动发现节点
1. redis-cli -h 10.0.0.51 -p 6380 CLUSTER MEET 10.0.0.52 6380
2. redis-cli -h 10.0.0.51 -p 6380 CLUSTER MEET 10.0.0.53 6380
3. redis-cli -h 10.0.0.51 -p 6380 CLUSTER MEET 10.0.0.51 6381
4. redis-cli -h 10.0.0.51 -p 6380 CLUSTER MEET 10.0.0.52 6381
5. redis-cli -h 10.0.0.51 -p 6380 CLUSTER MEET 10.0.0.53 6381
6. redis-cli -h 10.0.0.51 -p 6380 CLUSTER NODES
集群手动分配槽位
主节点分配
redis-cli -h 10.0.0.51 -p 6380 cluster addslots {0..5460}
redis-cli -h 10.0.0.52 -p 6380 cluster addslots {5461..10921}
redis-cli -h 10.0.0.53 -p 6380 cluster addslots {10922..16383}
查看集群状态
redis-cli -h 10.0.0.51 -p 6380 cluster nodes
redis-cli -h 10.0.0.51 -p 6380 cluster info
从节点分配复制关系
redis-cli -h 10.0.0.51 -p 6381 CLUSTER REPLICATE 52:6380的id
redis-cli -h 10.0.0.52 -p 6381 CLUSTER REPLICATE 53:6380的id
redis-cli -h 10.0.0.53 -p 6381 CLUSTER REPLICATE 51:6380的id
根据规划分配复制关系
redis-cli -h 10.0.0.51 -p 6381 CLUSTER REPLICATE d7b117d9b70e8b32a4d05130b6be16cfa041c0c9
redis-cli -h 10.0.0.52 -p 6381 CLUSTER REPLICATE 23cb7d71560afe41406fbceeec046385992090e1
redis-cli -h 10.0.0.53 -p 6381 CLUSTER REPLICATE 72bc27bb96cf32d592f3a705cfcdf4d62b63fa18
分配错误
初始化时分配错误
redis-cli -h 10.0.0.51 -p 6380 cluster delslots {0..5460}
但此命令执行后不通知其他节点
最快方法:重新初始化
redis-cli -h 10.0.0.51 -p 6380 cluster reset
redis-cli -h 10.0.0.51 -p 6381 cluster reset
redis-cli -h 10.0.0.52 -p 6380 cluster reset
redis-cli -h 10.0.0.52 -p 6381 cluster reset
redis-cli -h 10.0.0.53 -p 6380 cluster reset
redis-cli -h 10.0.0.53 -p 6381 cluster reset
通用Ruby
Using redis-trib.rb for Redis 4 or 3 type,不支持5.x版本
安装依赖
yum install rubygems -y
gem sources -l #查看源
gem sources -a http://mirrors.aliyun.com/rubygems/ #添加国内阿里源
gem sources --remove http://rubygems.org/ #移除之前的源
gem install redis -v 3.3.3 #安装指定版本的redis插件
还原集群环境
redis-cli -c -h 10.0.0.51 -p 6380 flushall
redis-cli -c -h 10.0.0.52 -p 6380 flushall
redis-cli -c -h 10.0.0.53 -p 6380 flushall
redis-cli -h 10.0.0.51 -p 6380 CLUSTER RESET
redis-cli -h 10.0.0.52 -p 6380 CLUSTER RESET
redis-cli -h 10.0.0.53 -p 6380 CLUSTER RESET
redis-cli -h 10.0.0.51 -p 6381 CLUSTER RESET
redis-cli -h 10.0.0.52 -p 6381 CLUSTER RESET
redis-cli -h 10.0.0.53 -p 6381 CLUSTER RESET
快速部署命令
cd /opt/redis/src/
./redis-trib.rb create --replicas 1 10.0.0.51:6380 10.0.0.52:6380 10.0.0.53:6380 10.0.0.51:6381 10.0.0.52:6381 10.0.0.53:6381
简易版
还原集群环境
redis-cli -c -h 10.0.0.51 -p 6380 flushall
redis-cli -c -h 10.0.0.52 -p 6380 flushall
redis-cli -c -h 10.0.0.53 -p 6380 flushall
redis-cli -h 10.0.0.51 -p 6380 CLUSTER RESET
redis-cli -h 10.0.0.52 -p 6380 CLUSTER RESET
redis-cli -h 10.0.0.53 -p 6380 CLUSTER RESET
redis-cli -h 10.0.0.51 -p 6381 CLUSTER RESET
redis-cli -h 10.0.0.52 -p 6381 CLUSTER RESET
redis-cli -h 10.0.0.53 -p 6381 CLUSTER RESET
快速部署命令
echo "yes"|redis-cli --cluster create 10.0.0.51:6380 10.0.0.52:6380 10.0.0.53:6380 10.0.0.51:6381 10.0.0.52:6381 10.0.0.53:6381 --cluster-replicas 1
查看集群状态
[root@redis01 ~]# redis-cli --cluster info 10.0.0.51:6380
10.0.0.51:6380 (72bc27bb...) -> 0 keys | 5461 slots | 1 slaves.
10.0.0.52:6380 (d7b117d9...) -> 0 keys | 5462 slots | 1 slaves.
10.0.0.53:6380 (23cb7d71...) -> 0 keys | 5461 slots | 1 slaves.
[OK] 0 keys in 3 masters.
0.00 keys per slot on average.