Redis Cluster提供了一种运行Redis安装的方法,其中数据 在多个Redis节点之间自动分片。
Redis Cluster还在分区期间提供一定程度的可用性,实际上是在某些节点发生故障或无法通信时继续运行的能力。但是,如果发生较大的故障(例如,当大多数主设备不可用时),群集将停止运行。
所以实际上,你对Redis Cluster有什么看法?
- 能够在多个节点之间自动拆分数据集。
- 当节点的子集遇到故障或无法与群集的其余部分通信时,能够继续操作
- 所有的redis节点彼此互联(PING-PONG机制),内部使用二进制协议优化传输速度和带宽。
- 节点的fail是通过集群中超过半数的节点检测失效时才生效。
- 客户端与redis节点直连,不需要中间代理层.客户端不需要连接集群所有节点,连接集群中任何一个可用节点即可
工作方式:
在redis的每一个节点上,都有这么两个东西,一个是插槽(slot),它的的取值范围是:0-16383。还有一个就是cluster,可以理解为是一个集群管理的插件。当我们的存取的key到达的时候,redis会根据crc16的算法得出一个结果,然后把结果对 16384 求余数,这样每个 key 都会对应一个编号在 0-16383 之间的哈希槽,通过这个值,去找到对应的插槽所对应的节点,然后直接自动跳转到这个对应的节点上进行存取操作。
为了保证高可用,redis-cluster集群引入了主从模式,一个主节点对应一个或者多个从节点,当主节点宕机的时候,就会启用从节点。当其它主节点ping一个主节点A时,如果半数以上的主节点与A通信超时,那么认为主节点A宕机了。如果主节点A和它的从节点A1都宕机了,那么该集群就无法再提供服务了。
实际操作
准备环境
192.168.14.10:7000 主服务器
192.168.14.20:7001
192.168.14.30:7002
192.168.14.40:7003
192.168.14.50:7004
192.168.14.60:7005
集群最少有六个节点
六台服务器都进行以下操作
首先我们使用wget拉取tar包
yum -y install gcc gcc-c++ wget
wget http://download.redis.io/releases/redis-3.2.4.tar.gz
tar zxf redis-3.2.4.tar.gz
cd redis-3.2.4
make && make install
ls
将 redis-trib.rb 复制到 /usr/local/bin 目录下
redis-trib.rb是我们cluster集群的管理工具 有创建集群 检查集群等功能
cd src
cp redis-trib.rb /usr/local/bin/
之后 我们建立六个节点
vim redis.conf
port 7000 //端口7000,7002,7003
bind 本机ip //默认ip为127.0.0.1 需要改为其他节点机器可访问的ip 否则创建集群时无法访问对应的端口,无法创建集群
daemonize yes //redis后台运行
pidfile /var/run/redis_7000.pid //pidfile文件对应7000,7001,7002
cluster-enabled yes //开启集群 把注释#去掉
cluster-config-file nodes_7000.conf //集群的配置 配置文件首次启动自动生成 7000,7001,7002
cluster-node-timeout 15000 //请求超时 默认15秒,可自行设置
appendonly yes //aof日志开启 有需要就开启,它会每次写操作都记录一条日志
修改以上参数每个服务器节点对应端口号
配置好之后使用redis-server执行配置文件
redis-server redis.conf
使用ps查看
ps -ef |grep redis
root 16011 1 0 11:15 ? 00:00:05 redis-server 192.168.14.10:7000 [cluster]
root 35353 3097 0 12:26 pts/0 00:00:00 grep --color=auto redis
成功
下面我们在主服务器上操作
安装ruby curl
yum -y install ruby ruby-devel rubygems
yum -y install curl
配置rvm的key
gpg --keyserver hkp://keys.gnupg.net --recv-keys 409B6B1796C275462A1703113804BB82D39DC0E3 7D2BAF1CF37B13E2069D6956105BD0E739499BDB
安装RVM
find / -name rvm
source /usr/local/rvm/scripts/rvm
rvm list known
rvm install 2.4.5
rvm use 2.4.5
rvm remove 2.0.0
安装redis
gem install redis
使用cluster集群管理工具 创建集群
redis-trib.rb create --replicas 1192.168.14.10:7000 192.168.14.20:7001 192.168.14.30:7002 192.168.14.40:7003 192.168.14.50:7004 192.168.14.60:7005