架构的流程
1、如何开启cluster呢
我们需要每个节点的
cluster-enabled: yes #启用redis-cluster
2、进行meet
交换消息,找到每个节点
3、指派槽
redis-cluser特性:复制、高可用、分片
现在我们来实现三个master和三个slave
安装方式有两种:原生命令安装、官方工具安装
原生命令安装(理解架构用的):
1、配置redis 配置文件自己创建
1 2 3 4 5 6 7 8 9 |
port ${port} 端口 daemonize yes 是否守护进程 dir "/opt/redis/redis/data" 路径 dbfilename "dump-${port}.rdb" rdb文件 logfile "${port}.log" 日志文件 cluster-enabled yes 重点:开启cluster集群 cluster-config-file nodes-${port}.conf 添加自己的配置文件 cluster-node-timeout 15000 节点超时时间,故障转移 cluster-require-full-coverage no 一个节点出问题,选yes集群就不能用了,所以推荐no |
如果都在一台主机上,可以用一个小命令快速替换
1 2 3 4 5 |
sed 's/7000/7001/g' redis-7000.conf > redis-7001.conf sed 's/7000/7002/g' redis-7000.conf > redis-7002.conf sed 's/7000/7003/g' redis-7000.conf > redis-7003.conf sed 's/7000/7004/g' redis-7000.conf > redis-7004.conf sed 's/7000/7005/g' redis-7000.conf > redis-7005.conf |
开启每个节点
1 2 3 4 5 6 |
redis-server redis-7000.conf redis-server redis-7001.conf redis-server redis-7002.conf redis-server redis-7003.conf redis-server redis-7004.conf redis-server redis-7005.conf |
查看是否启动成功
1 |
ps -ef | grep redis |
ps -ef 用来查看所有进程,grep用来查找 可以正则
注意:如果我们在这个时候set hello world ,他会告诉我们集群不可用(下线状态)。因为我们没有分配槽,继续。。。
redis-cli -p 7000 cluster nodes 查看所有节点
redis-cli -p 7000 cluster info 查看集群信息
2、相互通信meet
在7000节点输入,一个节点输入即可,完成互通
1 |
cluster meet ip port |
1 2 3 4 5 |
redis-cli -h 127.0.0.1 -p 7000 cluster meet 127.0.0.1 7001 redis-cli -h 127.0.0.1 -p 7000 cluster meet 127.0.0.1 7002 redis-cli -h 127.0.0.1 -p 7000 cluster meet 127.0.0.1 7003 redis-cli -h 127.0.0.1 -p 7000 cluster meet 127.0.0.1 7004 redis-cli -h 127.0.0.1 -p 7000 cluster meet 127.0.0.1 7005 |
现在set key value,还是下线状态,继续…
3、分配槽
cluster addslots slot [slot …]
1 2 3 |
redis-cli -h 127.0.0.1 -p 7000 cluster addslots {0...5461} redis-cli -h 127.0.0.1 -p 7001 cluster addslots {5462...10922} redis-cli -h 127.0.0.1 -p 7002 cluster addslots {10923...16383} |
太麻烦了
我们简单设置一个脚本 addslot.sh,先打印出来槽
1 2 3 4 5 6 7 |
start=$1 起始槽 end=$2 结束槽 port=$3 端口 for slot in 'seq ${start} ${end}' do echo "slot${slot}:" done |
执行 sh addslot.sh 0 4096 7000 可以工作
写分配槽代码
1 2 3 4 5 6 7 8 |
start=$1 起始槽 end=$2 结束槽 port=$3 端口 for slot in 'seq ${start} ${end}' do echo "slot${slot}:" redis-cli -p ${port} cluster addslots ${slot} done |
执行
因为我们需要3个master和3个slave,所以我们只需分配三个master槽即可。
1 2 3 |
sh addslot.sh 0 5461 7000 sh addslot.sh 5462 10922 7001 sh addslot.sh 10923 16383 7002 |
下面刚执行完7000的槽
4、设置主从
cluster replicate node-id
node-id 节点id
获取节点id用
1 |
redis-cli -p 7000 cluster nodes |
进入slave节点,绑定主节点
1 2 3 |
redis-cli -h 127.0.0.1 -p 7003 cluster replicate ${node-id-7000} redis-cli -h 127.0.0.1 -p 7004 cluster replicate ${node-id-7001} redis-cli -h 127.0.0.1 -p 7005 cluster replicate ${node-id-7002} |
redis-cli -p 7000 cluster slots 可以查看槽的分配
官方工具安装(推荐):
Redis Cluster 在5.0之后取消了ruby脚本 redis-trib.rb的支持(手动命令行添加集群的方式不变),集合到redis-cli里,避免了再安装ruby的相关环境。直接使用redis-clit的参数–cluster 来取代。为方便自己后面查询就说明下如何使用该命令进行Cluster的创建和管理,关于Cluster的相关说明可以查看官网。
这是一个Ruby脚本
所以我们要下载安装ruby,然后安装ruby客户端,安装redis-trib.rb
下载
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 |
wget https://cache.ruby-lang.org/pub/ruby/2.7/ruby-2.7.1.tar.gz tar -xvf ruby-2.7.1.tar.gz ./configure -prefix=/usr/local/ruby make make intall cd /usr/local/ruby cp bin/ruby /usr/local/bin cp bin/gem /usr/local/bin |
安装客户端
1 2 3 4 5 |
wget https://rubygems.org/gems/rubygems-update-3.1.3.gem gem install -l redis-3.3.0.gem gem list --check redis gem |
上面的两个代码我们可以写到一个脚本里
ruby.sh
1 2 3 4 5 6 7 8 9 10 |
wget https://cache.ruby-lang.org/pub/ruby/2.7/ruby-2.7.1.tar.gz tar -xvf ruby-2.7.1.tar.gz ./configure -prefix=/usr/local/ruby make make intall wget https://rubygems.org/gems/rubygems-update-3.1.3.gem gem install -l redis-3.3.0.gem gem list --check redis gem |
安装redis-trib.rb
1 |
cp ${redis_home}/src/redis-trib.rb /usr/local/bin |
使用
首先还是先准备好,6个节点
1 2 3 4 5 6 |
redis-server redis-7000.conf redis-server redis-7001.conf redis-server redis-7002.conf redis-server redis-7003.conf redis-server redis-7004.conf redis-server redis-7005.conf |
现在使用redis-trib.rb创建集群
5.0以上版本
1 |
redis-cli --cluster create --replicas 1 127.0.0.1:8000 127.0.0.1:8001 127.0.0.1:8002 127.0.0.1:8003 127.0.0.1:8004 127.0.0.1:8005 |
5.0以下版本
1 |
./redis-trib.rb create --replicas 1 127.0.0.1:8000 127.0.0.1:8001 127.0.0.1:8002 127.0.0.1:8003 127.0.0.1:8004 127.0.0.1:8005 |
–replicas 1 为每个主节点设置几个从节点。如果需要一个master有两个slave你就可以写2
小技巧:liunx命令:如果我们要杀死以前的配置
打印进程号
1 ps -ef | grep redis-server | grep 700 | awk '{print $2}'awk 就是可以在里面输入命令
杀死他们
1 ps -ef | grep redis-server | grep 700 | awk '{print $2}' | xargs kill
看看我们set的命令,槽的分配