chmod +x start-all.sh
chmod +x start-all.sh    以 sh 结尾的文件是linux/unix下的shell脚本文件

创建6个redis实例(6个节点)并启动
要搭建集群的话,需要使用1个工具(脚本文件),这个
工具在redis解压文件的源码里,因为这个工具是一个ruby脚本文件,所以这个工具的运行需要ruby的运行环境,所以需要安装ruby
yum install ruby

redis 和 ruby 的版本最好保持一致
cp redis-trib.rb /usr/local/redis-cluster  将ruby工具复制到redis-cluster目录下
cp redis-trib.rb /usr/local/redis-cluster

使用该脚本文件搭建集群,指令如下,之前的6个节点,其中3个是从节点,所以3个主节点分别映射了0-5460、5461-10922、10933-16383solts。根据自己服务器ip输入对应地址

./redis-trib.rb create --replicas 1 47.106.219.251:7001 47.106.219.251:7002 47.106.219.251:7003 47.106.219.251:7004 47.106.219.251:7005 47.106.219.251:7006

最后连接集群节点,连接任意一个即可  redis01/redis-cli -p 7001 -c,一定要加上-c,不然节点之间是无法自动跳转的,如下图可以看到,存储的数据(key-value)是均匀分配到不同的节点的

查看当前集群信息  cluster info
查看集群里有多少个节点 cluster nodes

redis 是一种典型的no-sql 即非关系型数据库,存储key-value键值对,工作在memory中,
所以适合做cache,尤其是lnmp架构应用层如php-fpm或者是tomcat到mysql之间,做一个cache以减轻db的压力
,因为有相当一部分数据,只是简单的key-value对应关系,而且在实际的业务中常常在短时间内迅速变动,如果用关系型数据库mysql之类存储,会大大增加对db的访问,导致db的负担很重,因为所有的require中的大部分最后都要汇聚到db
所以如果想要业务稳定,那么解决db的压力,就是关键,所以现在大部分的解决方案就是在db层之上的各级使用多级的no-sql,像memcache redis等 来为db提供缓冲
redis有相对的数据持久化的方案,由两种方式构成aof&rdb

aof 是文件,rdb是一种快照机制,redis工作在内存中,rdb就是每隔一段时间,对内存中的数据做一次快照,保存在rdb文件中,而且redis的主从同步可以实现异步,也是由于rdb的机制,他在做快照时会fork出一个子进程,由子进程来做快照,父进程完全处理请求,毫不影响,很适合数据的备份



redis集群实现方案
1 twitter开发的twemproxy
2 豌豆荚开发的codis
3 redis官方的redis-cluster

 redis-cluster是三个里性能最强大的 因为他使用去中心化的思想 使用hash slot方式 将16348个hash slot 覆盖到所有节点上 对于存储的每个key值 使用CRC16(KEY)&16348=slot 得到他对应的hash slot 并在访问key时就去找他的hash slot在哪一个节点上 然后由当前访问节点从实际被分配了这个hash slot的节点去取数据, 节点之间使用轻量协议通信 减少带宽占用 性能很高 自动实现负载均衡与高可用 自动实现failover  并且支持动态扩展 官方已经玩到可以1000个节点 实现的复杂度低 总之个人比较喜欢这个架构 因为他的去中心化思想免去了proxy的消耗 是全新的思路

redis集群是一个可以在多个redis节点之间使用数据共享的设施installation,不支持那些需要同时处理多个键的redis命令
redis集群通过区分partition来提供一定程度的可用性availability;即使集群中有一部分节点失效或者无法进行通讯,集群也可以继续处理命令请求

redis集群提供了以下2个好处
1 将数据自动切分split到多个节点的能力
2 当集群中的一部分节点失效或者无法进行通讯时,仍然可以继续处理命令请求的能力


所有的redis节点彼此互联(ping-pong机制),内部使用二进制协议优化传输速度和带宽

Redis集群中内置了 16384 个哈希槽,当需要在 Redis 集群中放置一个 key-value 时,redis 先对key 使用 crc16 算法算出一个结果,然后把结果对 16384 求余数,这样每个 key 都会对应一个编号在 0-16383 之间的哈希槽,redis 会根据节点数量大致均等的将哈希槽映射到不同的节点

启动脚本 start-all.sh

########################################
搭建集群,是通过linux命令来实现,先搭建单机redis,复制6份,改端口号

./redis1/redis-cli -c -h 192.168.37.131 -p 7001 ,其中-c表示以集群方式连接redis,-h指定ip地址,-p指定端口号

-c 表示以集群方式链接redis,-h指定ip地址,-p指定端口号