redis-cluster
redis-cluster集群搭建
分布式数据库首要解决把整个数据集按照分区规则映射到多个节点的问题,即把数据集划分到多个节点上,每个节点负责整个数据的一个子集。
常见的分区规则有哈希分区和顺序分区。Redis Cluster
采用哈希分区规则,因此接下来会讨论哈希分区规则。
- 节点取余分区
- 一致性哈希分区(哈希+顺时针取余)
- 虚拟槽分区(redis-cluster采用的方式)
虚拟槽分区巧妙地使用了哈希空间,使用分散度良好的哈希函数把所有的数据映射到一个固定范围内的整数集合,整数定义为槽(slot)。
Redis Cluster槽的范围是0 ~ 16383。
槽是集群内数据管理和迁移的基本单位。采用大范围的槽的主要目的是为了方便数据的拆分和集群的扩展,
每个节点负责一定数量的槽。
搭建redis cluster
redis-cluster集群架构
多个服务端,负责读写,彼此通信,redis指定了16384个槽。
多匹马儿,负责运输数据,马儿分配16384个槽位,管理数据。
ruby的脚本自动就把分配槽位这事做了
0.准备六个节点,三主三从
配置文件分别为:
redis-7000.conf
redis-7001.conf
redis-7002.conf
redis-7003.conf
redis-7004.conf
redis-7005.conf
1.设置6个实例的配置文件
# redis-7000.conf
port 7000 # 端口
daemonize yes # 后台运行
dir "/opt/redis/data" # 数据文件夹
logfile "7000.log" # 日志文件命名
dbfilename "dump-7000.rdb" # 开启RBD持久化
cluster-enabled yes # 开启集群模式
cluster-config-file nodes-7000.conf # 集群内部的配置文件
# cluster-require-full-coverage no #redis cluster需要16384个slot都正常的时候才能对外提供服务,换句话说,只要任何一个slot异常那么整个cluster不对外提供服务。 因此生产环境一般为no
# redis-7001.conf
port 7001
daemonize yes
dir "/opt/redis/data"
logfile "7001.log"
dbfilename "dump-7001.rdb"
cluster-enabled yes
cluster-config-file nodes-7001.conf
# redis-7002.conf
port 7002
daemonize yes
dir "/opt/redis/data"
logfile "7002.log"
dbfilename "dump-7002.rdb"
cluster-enabled yes
cluster-config-file nodes-7002.conf
# redis-7003.conf
port 7003
daemonize yes
dir "/opt/redis/data"
logfile "7003.log"
dbfilename "dump-7003.rdb"
cluster-enabled yes
cluster-config-file nodes-7003.conf
# redis-7004.conf
port 7004
daemonize yes
dir "/opt/redis/data"
logfile "7004.log"
dbfilename "dump-7004.rdb"
cluster-enabled yes
cluster-config-file nodes-7004.conf
# redis-7005.conf
port 7005
daemonize yes
dir "/opt/redis/data"
logfile "7005.log"
dbfilename "dump-7005.rdb"
cluster-enabled yes
cluster-config-file nodes-7005.conf
2.启动6个实例(此时集群还不可用)
[root@localhost conf2]# redis-server redis-7000.conf
[root@localhost conf2]# redis-server redis-7001.conf
[root@localhost conf2]# redis-server redis-7002.conf
[root@localhost conf2]# redis-server redis-7003.conf
[root@localhost conf2]# redis-server redis-7004.conf
[root@localhost conf2]# redis-server redis-7005.conf
3.安装ruby环境
# 下载ruby编译包
wget https://cache.ruby-lang.org/pub/ruby/2.3/ruby-2.3.1.tar.gz
# 解压文件
tar xf ruby-2.3.1.tar.gz
# 释放编译文件,指定安装路径
cd ruby-2.3.1/
./configure --prefix=/opt/ruby/
# 编译安装
make && make install
# 修改环境变量
vim /etc/profile
PATH=/opt/python3/bin:/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/root/bin:/opt/node-v10.15.0-linux-x64/bin:/opt/ruby/bin
source /etc/profile
4.安装ruby操作redis的模块
# 下载
wget http://rubygems.org/downloads/redis-3.3.0.gem
# 安装
gem install -l redis-3.3.0.gem
# 搜索创建redis集群的命令
find /opt -name redis-trib.rb
5.一键创建redis集群
/opt/redis-4.0.12/src/redis-trib.rb create --replicas 1 127.0.0.1:7000 127.0.0.1:7001 127.0.0.1:7002 127.0.0.1:7003 127.0.0.1:7004 127.0.0.1:7005
#--replicas 1 每个主节点,有一个从节点,
6.查看集群状态
redis-cli -p 7000 cluster info
redis-cli -p 7000 cluster nodes
7.测试写入数据
redis-cli -p 7000 -c
# -p 指定端口
# -c 指定开启集群模式