什么是redis集群?
node
Redis 集群是一个分布式(distributed)、容错(fault-tolerant)的 Redis 实现, 集群能够使用的功能是普通单机 Redis 所能使用的功能的一个子集(subset)。redis
Redis 集群中不存在中心(central)节点或者代理(proxy)节点, 集群的其中一个主要设计目标是达到线性可扩展性(linear scalability)。ruby
Redis 集群为了保证一致性(consistency)而牺牲了一部分容错性: 系统会在保证对网络断线(net split)和节点失效(node failure)具备有限(limited)抵抗力的前提下, 尽量地保持数据的一致性。bash
集群将节点失效视为网络断线的其中一种特殊状况。服务器
集群的容错功能是经过使用主节点(master)和从节点(slave)两种角色(role)的节点(node)来实现的:网络
主节点和从节点使用彻底相同的服务器实现, 它们的功能(functionally)也彻底同样, 但从节点一般仅用于替换失效的主节点。架构
不过, 若是不须要保证“先写入,后读取”操做的一致性(read-after-write consistency), 那么能够使用从节点来执行只读查询。分布式
redis集群架构图:ide
Redis 提供了多种不一样级别的持久化方式:测试
RDB 持久化能够在指定的时间间隔内生成数据集的时间点快照(point-in-time snapshot)。
AOF 持久化记录服务器执行的全部写操做命令,并在服务器启动时,经过从新执行这些命令来还原数据集。 AOF 文件中的命令所有以 Redis 协议的格式来保存,新命令会被追加到文件的末尾。 Redis 还能够在后台对 AOF 文件进行重写(rewrite),使得 AOF 文件的体积不会超出保存数据集状态所需的实际大小。
Redis 还能够同时使用 AOF 持久化和 RDB 持久化。 在这种状况下, 当 Redis 重启时, 它会优先使用 AOF 文件来还原数据集, 由于 AOF 文件保存的数据集一般比 RDB 文件所保存的数据集更完整。
你甚至能够关闭持久化功能,让数据只在服务器运行时存在。
了解 RDB 持久化和 AOF 持久化之间的异同是很是重要的, 如下几个小节将详细地介绍这这两种持久化功能, 并对它们的相同和不一样之处进行说明。
简单来讲:
redis 分为两种文件格式: 1.全量数据(RDB):是把内存中的数据写入磁盘,便于下次读取文件进行加载。 2.增量请求(AOF):是把内存中的数据序列化为操做请求,用于读取文件进行replay获得数据。 redis 存储分为内存储存、磁盘存储和log文件三部分。
服务器配置: 数量:3台 IP:10.200.134.6 10.200.134.8 10.200.134.34 端口:每台服务器起3个端口:6379 6380 6381 cluster:每台服务器建立3个目录:cluster/6379 cluster/6380 cluster/6381 yum install ruby rubygems -y tar zxvf redis-3.0.5.tar.gz mv redis-3.0.5 /usr/local/redis cd /usr/local/redis make MALLOC=libc && make install #redis-3.2.1.zip 安装包在附件,自行下载 unzip redis-3.2.1.zip gem install redis-3.2.1.gem ln -s /usr/local/redis/src/redis-server /usr/bin/ ln -s /usr/local/redis/src/redis-cli /usr/bin/ mkdir -pv /usr/local/redis/cluster/{6379,6380,6381} cp redis.conf cluster/6379/ cp redis.conf cluster/6380/ cp redis.conf cluster/6381/ #3台服务器修改6379 6380 6381下的redis.conf配置文件: daemonize yes #其他两个redis.conf就改下端口为6380 和 6381就能够了,其余是同样的 port 6379 cluster-enabled yes cluster-config-file nodes-6379.conf #3台服务器启动redis redis-server /usr/local/redis/cluster/6379/redis.conf redis-server /usr/local/redis/cluster/6380/redis.conf redis-server /usr/local/redis/cluster/6381/redis.conf #任意1台服务器建立集群 redis-trib.rb create --replicas 1 10.200.134.6:6379 10.200.134.6:6380 10.200.134.6:6381 10.200.134.34:6379 10.200.134.34:6380 10.200.134.34:6381 10.200.134.8:6379 10.200.134.8:6380 10.200.134.8:6381 命令的意义以下: 给定 redis-trib.rb 程序的命令是 create , 这表示咱们但愿建立一个新的集群。 选项 --replicas 1 表示咱们但愿为集群中的每一个主节点建立一个从节点。 以后跟着的其余参数则是实例的地址列表, 咱们但愿程序使用这些地址所指示的实例来建立新集群。 简单来讲, 以上命令的意思就是让 redis-trib 程序建立一个包含三个主节点和三个从节点的集群。 接着, redis-trib 会打印出一份预想中的配置给你看, 若是你以为没问题的话, 就能够输入 yes , redis-trib 就会将这份配置应用到集群当中: >>> Creating cluster Connecting to node 10.200.134.6:6379: OK Connecting to node 10.200.134.6:6380: OK Connecting to node 10.200.134.6:6381: OK >>> Performing hash slots allocation on 3 nodes... Using 3 masters: 10.200.134.6:6379 10.200.134.6:6380 10.200.134.6:6381 ......more >>> Check for open slots... >>> Check slots coverage... [OK] All 16384 slots covered. #检查集群节点: /usr/local/redis/src/redis-trib.rb check 10.200.134.6:6379 #使用redis-cli命令测试redis集群 [root@69_server ~]# redis-cli -c -p 6379 10.200.134.6:6379> set foo bar -> Redirected to slot [12182] located at 10.200.134.6:6380 OK 10.200.134.6:6380> set hello world -> Redirected to slot [866] located at 10.200.134.6:6379 OK 10.200.134.6:6379> get foo -> Redirected to slot [12182] located at 10.200.134.6:6380 "bar" 10.200.134.6:6380> get hello -> Redirected to slot [866] located at 10.200.134.6:6379 "world" redis-cli是集群最基本的支持,依靠 Redis 集群节点来将它转向(redirect)至正确的节点