Redis集群安装并自动部署

集群规划

交叉式分布式集群

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.
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值