redis集群部署(redis-cluster)

什么是redis集群?

    Redis 集群是一个分布式(distributed)、容错(fault-tolerant)的 Redis 实现, 集群可以使用的功能是普通单机 Redis 所能使用的功能的一个子集(subset)。

Redis 集群中不存在中心(central)节点或者代理(proxy)节点, 集群的其中一个主要设计目标是达到线性可扩展性(linear scalability)。

Redis 集群为了保证一致性(consistency)而牺牲了一部分容错性: 系统会在保证对网络断线(net split)和节点失效(node failure)具有有限(limited)抵抗力的前提下, 尽可能地保持数据的一致性。

     集群将节点失效视为网络断线的其中一种特殊情况。


     集群的容错功能是通过使用主节点(master)和从节点(slave)两种角色(role)的节点(node)来实现的:

主节点和从节点使用完全相同的服务器实现, 它们的功能(functionally)也完全一样, 但从节点通常仅用于替换失效的主节点。

不过, 如果不需要保证“先写入,后读取”操作的一致性(read-after-write consistency), 那么可以使用从节点来执行只读查询。


      redis集群架构图:


134caad7-0591-3edd-9162-6ae43d068333.jpg


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)至正确的节点


你可能感兴趣的:(redis,集群)