zoukankan      html  css  js  c++  java
  • redis3.0集群搭建

    可以考虑三个不同主机建立主节点,第四台主机上面建立三个不同端口的从节点。用以防止整个集群down掉,提高可用性。

    ----------------------------------------------------------------------------------------------------------

    Redis集群是Redis提供的分布式数据库方案,集群通过分片(sharding)来进行数据共享,并提供复制和故障转移功能。

    Redis集群的重新分片操作是由Redis的集群管理软件redis-trib负责执行的,Redis提供了进行重新分片所需的所有命令,而redis-trib则通过向源节点和目标节点发送命令来进行重新分片操作。

    Redis集群中的节点分为主节点和从节点,其中主节点用于处理槽,而从节点则用于复制某个主节点。

    通过执行redis> MONITOR 命令 ,客户端可以将自己变为一个监视器,实时地接收并打印出服务器当前处理的命令请求的相关信息。

    一、安装redis(略)和支持组件

    yum install ruby rubygems -y

    gem install redis    #安装redis 的api 接口

    二、配置redis

    redis-common.conf:

     1 #GENERAL  
     2 daemonize yes
     3 tcp-backlog 511  
     4 timeout 0  
     5 tcp-keepalive 0  
     6 loglevel notice  
     7 databases 16  
     8 dir /opt/redis/redis/data  
     9 slave-serve-stale-data yes  
    10 #slave只读  
    11 slave-read-only yes  
    12 #not use default  
    13 repl-disable-tcp-nodelay yes  
    14 slave-priority 100  
    15 #打开aof持久化  
    16 appendonly yes  
    17 #每秒一次aof写  
    18 appendfsync everysec  
    19 #关闭在aof rewrite的时候对新的写操作进行fsync  
    20 no-appendfsync-on-rewrite yes  
    21 auto-aof-rewrite-min-size 64mb  
    22 lua-time-limit 5000  
    23 #requirepass uuzz
    24 #打开redis集群  
    25 cluster-enabled yes  
    26 #节点互连超时的阀值  
    27 cluster-node-timeout 5000
    28 cluster-migration-barrier 1  
    29 slowlog-log-slower-than 10000  
    30 slowlog-max-len 128  
    31 notify-keyspace-events ""  
    32 hash-max-ziplist-entries 512  
    33 hash-max-ziplist-value 64  
    34 list-max-ziplist-entries 512  
    35 list-max-ziplist-value 64  
    36 set-max-intset-entries 512  
    37 zset-max-ziplist-entries 128  
    38 zset-max-ziplist-value 64  
    39 activerehashing yes  
    40 client-output-buffer-limit normal 0 0 0  
    41 client-output-buffer-limit slave 256mb 64mb 60  
    42 client-output-buffer-limit pubsub 32mb 8mb 60  
    43 hz 10  
    44 aof-rewrite-incremental-fsync yes 


    redis-6661.conf:

     1 #包含通用配置  
     2 include /opt/redis/redis-common.conf
     3 #监听tcp端口  
     4 port 6661
     5 #最大可用内存  
     6 maxmemory 1024m  
     7 #内存耗尽时采用的淘汰策略:  
     8 # volatile-lru -> remove the key with an expire set using an LRU algorithm  
     9 # allkeys-lru -> remove any key accordingly to the LRU algorithm  
    10 # volatile-random -> remove a random key with an expire set  
    11 # allkeys-random -> remove a random key, any key  
    12 # volatile-ttl -> remove the key with the nearest expire time (minor TTL)  
    13 # noeviction -> don't expire at all, just return an error on write operations  
    14 maxmemory-policy allkeys-lru  
    15 #aof存储文件  
    16 appendfilename "appendonly-6661.aof"  
    17 #rdb文件,只用于动态添加slave过程  
    18 dbfilename dump-6661.rdb
    19 #cluster配置文件(启动自动生成)  
    20 cluster-config-file nodes-6661.conf  
    21 #部署在同一机器的redis实例,把auto-aof-rewrite搓开,防止瞬间fork所有redis进程做rewrite,占用大量内存
    22 auto-aof-rewrite-percentage 80-100
    23 logfile "/opt/redis/log/redis-6661.log"

    三、启动redis(略)并创建集群

    redis-trib.rb create --replicas 1 10.1.1.28:6661 10.1.1.28:7771 10.1.1.29:8881 10.1.1.29:9991 10.1.1.28:6662 10.1.1.28:7772 10.1.1.29:8882 10.1.1.29:9992

    执行以上命令后redis-trib会打印出一份预想中的配置给你看, 如果你觉得没问题的话, 就可以输入 yes , redis-trib 就会将这份配置应用到集群当中。选项 --replicas 1 表示我们希望为集群中的每个主节点创建1个从节点.

    注意:同一组redis实例中的主和从如果全部挂掉的话,整个集群将会down,进行读写操作时将会提示如下:

    (error) CLUSTERDOWN The cluster is down

    输入 yes 并按下回车确认之后, 集群就会将配置应用到各个节点, 并连接起(join)各个节点 —— 也即是让各个节点开始互相通讯
     
    检测集群是否正常:
    #redis-trib.rb check  10.1.1.28:6661
     
    查看集群中的master
    #redis-cli -c -h 10.1.1.28 -p 6661 cluster nodes|grep master
     
    查看集群中的slave
     
    四、快速删除集群节点
    1、停掉该端口上的redis实例
    2、删除redis-6661.conf 中cluster-config-file  nodes-6661.conf指定的/opt/redis/data/nodes-6661.conf节点信息文件
     
    五、附redis cluster命令行命令
    集群(cluster)
    CLUSTER INFO 打印集群的信息
    CLUSTER NODES 列出集群当前已知的所有节点(node),以及这些节点的相关信息。 
    节点(node)
    CLUSTER MEET <ip> <port> 将 ip 和 port 所指定的节点添加到集群当中,让它成为集群的一份子。
    CLUSTER FORGET <node_id> 从集群中移除 node_id 指定的节点。
    CLUSTER REPLICATE <node_id> 将当前节点设置为 node_id 指定的节点的从节点。
    CLUSTER SAVECONFIG 将节点的配置文件保存到硬盘里面。
    槽(slot)
    CLUSTER ADDSLOTS <slot> [slot ...] 将一个或多个槽(slot)指派(assign)给当前节点。
    CLUSTER DELSLOTS <slot> [slot ...] 移除一个或多个槽对当前节点的指派。
    CLUSTER FLUSHSLOTS 移除指派给当前节点的所有槽,让当前节点变成一个没有指派任何槽的节点。
    CLUSTER SETSLOT <slot> NODE <node_id> 将槽 slot 指派给 node_id 指定的节点,如果槽已经指派给另一个节点,那么先让另一个节点删除该槽>,然后再进行指派。
    CLUSTER SETSLOT <slot> MIGRATING <node_id> 将本节点的槽 slot 迁移到 node_id 指定的节点中。
    CLUSTER SETSLOT <slot> IMPORTING <node_id> 从 node_id 指定的节点中导入槽 slot 到本节点。
    CLUSTER SETSLOT <slot> STABLE 取消对槽 slot 的导入(import)或者迁移(migrate)。
    键 (key)
    CLUSTER KEYSLOT <key> 计算键 key 应该被放置在哪个槽上。
    CLUSTER COUNTKEYSINSLOT <slot> 返回槽 slot 目前包含的键值对数量。
    CLUSTER GETKEYSINSLOT <slot> <count> 返回 count 个 slot 槽中的键。
     
     
     
     参考资料:https://redis.io/topics/config (redis.conf官方配置)
                   http://www.redis.cn/topics/cluster-tutorial.html (redis cluster官方文档)
                   http://www.aboutyun.com/thread-7155-1-1.html
                   http://www.blogchong.com/post/redis_20141225.html
                   http://www.cnblogs.com/Eivll0m/p/4869786.html
     
     
     
  • 相关阅读:
    CORS详解
    JBoss 系列九十九:Rest WebService jBPM 6 集成演示样例
    atitit。浏览器缓存机制 and 微信浏览器防止缓存的设计 attilax 总结
    4G时代来临,运营商为谁搭台献唱?
    Pascal&#39;s Triangle II
    cocos2d-x 3.6版连连看载入资源
    SlidingMenu导入编译用法--Eclipse和IDEA
    【解决】hive动态添加partitions不能超过100的问题
    AngularJS clone directive 指令复制
    AndroidStudio文件夹结构视图讲解
  • 原文地址:https://www.cnblogs.com/wjoyxt/p/4897824.html
Copyright © 2011-2022 走看看