学习redis cluster是大家学习分布式数据库的一个很好的案例
我们为什么需要redis cluster集群这样的功能?
并发量:redis单机默认支持10万/s ,如果对并发要求更高,百万/s呢?
数据量:redis单机内存是16-256G,如果业务需要500G呢?
智能客户端知道每一个节点负责的槽的范围
分布式之间每个节点是可以互相通信的,而且每一个节点知道其它节点负责的槽的范围
每个节点都负责数据的读写,因为每个节点都负责整个数据集的一部分,这也是分布式的一个特性
redis cluster架构
节点
meet:节点之间可以互相通信
指派槽
复制:保证高可用,当一个主节点挂了,会启动该主节点的从节点,同时redis cluster没有使用sentinel
redis cluster特性
复制
高可用
分片
配置开启节点
redis-server redis-7000.conf
meet
cluster meet ip port
cluster节点主要配置
指派槽
cluster addslots {0...5461}
主从
cluster replicate node-id
port 7000 daemonize yes dir "/opt/soft/redis/data" logfile "7000.log" dbfilename "dump-7000.rdb" cluster-enabled yes cluster-config-file nodes-7000.conf cluster-require-full-coverage no # 注意上面的所有port端口和下面的总线端口都要开开,否则集群启动失败 # 云服务器上部署需指定公网ip cluster-announce-ip xxx.xxx.xxx.xxx # Redis总线端口,用于与其它节点通信 cluster-announce-bus-port port + 10000
开启集群6个节点服务
redis-server redis-7000.conf
查看集群节点的配置
redis-cli -p 7000 cluster nodes
查看集群节点的信息
redis-cli -p 7000 cluster info
redis-cli -p 7000 cluster meet 公网ip 7001 redis-cli -p 7000 cluster meet 公网ip 7002 redis-cli -p 7000 cluster meet 公网ip 7003 ...04 ...05
start=$1 end=$2 port=$3 for slot in `seq ${start} ${end}` do echo "slot:${slot}" redis-cli -p ${port} cluster addslots ${slot} done
sh addslots.sh 0 5461 7000 sh addslots.sh 5462 10922 7001 sh addslots.sh 10923 16383 7002
redis-cli -p 7003 cluster replicate 99cfeb7aaxxxxc5b5c3a1965b
这个id就是7000端口的Id,通过命令redis-cli -p 7000 cluster nodes
查看redis-cli -p 7003 cluster replicate 7000-c5b5c3a1965b redis-cli -p 7004 cluster replicate 7001-axxxxc5b5c3a1965b redis-cli -p 7005 cluster replicate 7002-b7aaxxxxc5b5c3a1965b
redis-cli -c -p 7003
redis-cli -p 7000 cluster slots
至此,原生安装redis cluster已经大功告成。
wget https://cache.ruby-lang.org/pub/ruby/3.2/ruby-3.2.0-preview1.tar.gz tar xvf ruby-3.2.0.tar.gz cd ruby-3.2.0 ./configure -prefix=/usr/local/ruby make make install ./configure && make && make install wget https://rubygems.org/downloads/redis-4.6.0.gem sudo gem install -l redis-4.6.0.gem sudo gem list -- check redis gem
查看ruby版本
ruby --version
cp /opt/soft/redis/src/redis-trib.rb /usr/local/bin
port 8000 daemonize yes dir "/opt/soft/redis/data" logfile "8000.log" dbfilename "dump-8000.rdb" cluster-enabled yes cluster-config-file nodes-8000.conf cluster-require-full-coverage no protected-mode no # 云服务器上部署需指定公网ip cluster-announce-ip xxx.xxx.xxx.xxx # Redis总线端口,用于与其它节点通信 cluster-announce-bus-port 18000
cd /opt/soft/redis/src/
redis-cli --cluster create xxx:8000 xxxx:8001 ip:8002 4xxxx71:8003 xxxx:8004 xxxx:8005 --cluster-replicas 1
redis-cli --cluster create ip:8000 ip:8001 ip:8002 ip:8003 ip:8004 ip:8005 --cluster-replicas 1