Redis
Redis
版本:redis-4.0.10.tar.gz
Redis 群集特性
分布式
Redis集群是一个由多个Redis服务器组成的分布式网络服务器群,集群中的各个服务器被称为节点(node),这些节点会相互连接并进行通信。分布式的Redis集群没有中心节点,所以用户不必担心某个节点会成为整个集群的性能瓶颈
复制
Redis 集群的每个节点都有两种角色可选,一个是主节点(master node),另一个是从节点(slave node),其中主节点用于储存数据,而从节点则是某个主节点的复制品。当用户需要处理更多请求的时候,可以添加从节点以扩展系统的读性能
分片
集群将整个数据库分为 16384 个槽(slot),所有键都属于这 16384 个槽的其中一个,计算键 key属于哪个槽的公式为 slot_number = crc16(key) %16384
,其中 crc16 为 16 位的循环冗余校验和函数。集群中的每个主节点都可以处理 0 个至 16384 个槽,当16384 个槽都有某个节点在负责处理时,集群进入上线状态,并开始处理客户端发送的数据命令请求
Redis-Cluster
- Redis Cluster提供了一种运行Redis安装的方法,其中数据 在多个Redis节点之间自动分片。
- Redis Cluster还在分区期间提供一定程度的可用性,实际上是在某些节点发生故障或无法通信时继续运行的能力。
如果发生较大的故障(例如,当大多数主设备不可用时),群集将停止运行。(一半以上的实例不可用时群集将停止运行)
- Redis Cluster有什么用?
- 能够在多个节点之间自动拆分数据集。
- 当节点的子集遇到故障或无法与群集的其余部分通信时,能够继续操作。
Redis Cluster TCP Port
每个Redis群集节点都需要打开两个TCP连接。用于为客户端提供服务的普通Redis TCP端口,例如6379,加上通过向数据端口添加10000获得的端口
IP Addresss | Master Nodes | Slave Nodes |
---|---|---|
10.200.1.69 | TCP:7000 | TCP:7001 |
10.200.1.70 | TCP:7000 | TCP:7001 |
10.200.2.69 | TCP:7000 | TCP:7001 |
10.200.2.70 | TCP:7000 | TCP:7001 |
创建群集
安装 Redis 软件
# 下载 Redis 软件
wget http://download.redis.io/releases/redis-4.0.10.tar.gz
# 安装编译工具及 Redis 软件
yum -y install make gcc
tar -zxvf redis-4.0.10.tar.gz
# 创建文件夹及配置文件
cd redis-4.0.10 && make
mkdir cluster-conf data logs
cp redis.conf cluster-conf/7000.conf
cp redis.conf cluster-conf/7001.conf
群集配置文件
# Redis 监听端口
port 7000
# 如果是,则在特定Redis实例中启用Redis群集支持。否则,实例像往常一样作为独立实例启动
cluster-enabled yes
# 尽管有此选项的名称,但这不是用户可编辑的配置文件,而是每次发生更改时Redis群集节点自动保持群集配置(基本上是状态)的文件
cluster-config-file nodes_7000.conf
# Redis群集节点不可用的最长时间,不会被视为失败。
cluster-node-timeout 15000
# 是否启用AOF模式
appendonly yes
appendfilename "appendonly.aof"
创建群集
如果使用的是Redis 5,Redis Cluster命令行实用程序redis-cli
,可用于创建新群集,检查或重新硬化现有群集等等。
Redis版本3或4,有一个名为redis-trib.rb
工具。您可以src
在Redis源代码分发的目录中。你需要安装redis
gem才能运行redis-trib
。
# Redis 5
redis-cli --cluster create 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 \
--cluster-replicas 1
# Redis 3 or 4
# 安装 ruby 和 rubygems 环境
yum -y install ruby rubygems
# 上传搭建 Redis 群集的ruby脚本(可能会报版本过低的错误)
gem install redis-4.0.2.gem
# 安装 rvm(http://rvm.io/)
gpg --keyserver hkp://keys.gnupg.net --recv-keys 409B6B1796C275462A1703113804BB82D39DC0E3 7D2BAF1CF37B13E2069D6956105BD0E739499BDB
\curl -sSL https://get.rvm.io | bash -s stable
# 查看 rvm 管理的 ruby 版本
rvm list known
rvm install 2.4.1 --default
ruby --version
#input:ruby 2.4.1p111 (2017-03-22 revision 58053) [x86_64-linux]
# 再安装一遍 ruby 脚本
gem install redis-4.0.2.gem
# 使用此方法时不要给redis设置密码,可以在群集建立后再设置密码
redis-trib.rb create --replicas 1 10.200.1.69:7000 10.200.1.69:7001 10.200.1.70:7000 10.200.1.70:7001 10.200.2.69:7000 10.200.2.69:7001 10.200.2.70:7000 10.200.2.70:7001
连接 Redis 群集
连接群集使用-C
选项
[root@gglc-redis01 redis-4.0.10]# src/redis-cli -c -h 10.200.1.69 -p 7000 -a tccuser
Warning: Using a password with '-a' option on the command line interface may not be safe.
10.200.1.69:7000> set name tcc
-> Redirected to slot [5798] located at 10.200.1.70:7000
OK
10.200.1.69:7000> get name
-> Redirected to slot [5798] located at 10.200.1.70:7000
"tcc"