A股上市公司传智教育(股票代码 003032)旗下技术交流社区北京昌平校区

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

本帖最后由 西安Java组 于 2018-3-1 22:02 编辑


Redis集群

1        第一种方式(主从复制)
        1.1        概述
                redis的复制功能是支持多个数据库之间的数据同步。一类是主数据库(master)一类是从数据库(slave),主数据库可以进行读写操作,当发生写操作的时候自动将数据同步到从数据库,而从数据库一般是只读的,并接收主数据库同步过来的数据,一个主数据库可以有多个从数据库,而一个从数据库只能有一个主数据库。通过redis的复制功能可以很好的实现数据库的读写分离,提高服务器的负载能力。主数据库主要进行写操作,而从数据库负责读操作。
        1.2        搭建步骤
                1). 创建第一个redis的实例作为主数据库,端口号为默认的6379,并将其更改成后台启动
                2). 创建第二个redis的实例作为从数据库,端口号为6380,并且更改其配置文件,指定其主节点的ip地址以及端口号
                        slaveof  192.168.80.128  6379

                3). 启动两个redis的实例
                给主节点使用set命令存储数据
               
                在从节点使用get上获取数据
               
                使用set命令在从节点上存储数据
                 

        因为从节点只负责进行读操作,因此不能存储数据! 经过我们的测试,我们发现主从复制这种集群我们已经搭建成功了!
        
        
2        第二种方式(分片集群)
        2.1        概述
        Redis Cluster本身提供了自动将数据分散到Redis Cluster不同节点的能力,分区实现的关键点问题包括:将数据自动地打散到不同的节点,使得不同节点的存储数据相对均匀;
        原理图如下:
           
        架构细节:
        (1)所有的redis节点彼此互联(PING-PONG机制),内部使用二进制协议优化传输速度和带宽.
        (2)节点的fail是通过集群中超过半数的节点检测失效时才生效.
        (3)客户端与redis节点直连,不需要中间proxy层.客户端不需要连接集群所有节点,连接集群中任何一个可用节点即可
        (4)redis-cluster把所有的物理节点映射到[0-16383]slot上,cluster 负责维护node<->slot<->value
        Redis 集群中内置了 16384 个哈希槽,当需要在 Redis 集群中放置一个 key-value 时,redis 先对 key 使用 crc16 算法算出一个结果,然后把结果对 16384 求余数,这样每个 key 都会对应一个编号在 0-16383 之间的哈希槽,redis 会根据节点数量大致均等的将哈希槽映射到不同的节点.

        2.2        搭建步骤
        2.2.1 使用ruby脚本搭建集群。需要ruby的运行环境。安装ruby
                1). yum install ruby
                2). yum install rubygems
                3). 安装ruby脚本运行使用的包。gem install redis-3.0.0.gem
               
        
        2.2.2 创建6个redis的实例,更改每一个节点的端口号以及cluster-enabled为yes(表示支持集群)
                cluster-enabled  yes

                端口号分别为: 7001 , 7002 , 7003 , 7004 , 7005 , 7006
               
        2.2.3启动6个redis的实例
               

        2.2.4        使用./redis-trib.rb脚本设置其集群节点的关联关系
        
                ./redis-trib.rb create –replicas 1 192.168.80.128:7001 192.168.80.128:7002 192.168.80.128:7003 192.168.80.128:7004 192.168.80.128:7005 192.168.80.128:7006
               
               
        2.2.5 使用redis-cli链接集群
                 
               
               
        2.3        添加主节点
        1). 创建一个节点
               
        2). 启动该节点
               
        3). 使用redis-trib.rb把7007节点纳入到集群中
                ./redis-trib.rb add-node 192.168.80.128:7007 192.168.80.128:7001
               
               
               
        4). 链接集群节点查看集群节点信息:
               
                通过查询节点信息,我们发现7007节点的确已经被添加到集群中了,但是7007节点没有槽位信息,因此我们需要为其分配槽位信息!
               
        5). 给7007分配槽位
                ./redis-trib.rb reshard 192.168.80.128:7001
               
               
                链接集群节点查看槽位分配信息:
               
               
               
                如果可以看到上述信息,说明主节点槽位分配成功!
               
2.4        添加从节点
        1). 创建一个节点
            
        2). 启动改节点
        
        3). 使用redis-trib.rb脚本把该节点添加到集群中:格式===?./redis-trib.rb add-node --slave --master-id 主节点id 添加节点的ip和端口 集群中已存在节点ip和端口
                ./redis-trib.rb add-node --slave --master-id 5d514ad261a661a9f25723795a096e7784cfa395 192.168.80.128:7008 192.168.80.128:7001
                 
        4). 链接集群查看节点信息:
               
                如果可以看到上述信息说明添加成功!
               
2.5        删除从节点
        1). 直接使用redis-trib.rb脚本删除指定的从节点
                ./redis-trib.rb del-node 192.168.80.128:7001 383bfde78ea820554fc2bee115bc9a31e265baeb
               
        2). 链接集群,查看删除信息
               
        通过查看节点的信息,我们发现7008节点的确已经被删除了!
        
2.6        删除主节点
        使用redis-trib.rb脚本删除
                ./redis-trib.rb del-node 127.0.0.1:7005 5d514ad261a661a9f25723795a096e7784cfa395
         
        在删除主节点的时候,报错了!因为主节点上存在槽位,因此不能直接进行删除!我们就需要将其操作给分配出去,然后在进行删除!具体的操作分配可以参考笔记上面的槽位分配命令!



2 个回复

倒序浏览
我来占层楼啊  
回复 使用道具 举报
谢谢老师分享
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马