zoukankan      html  css  js  c++  java
  • CentOS搭建Redis集群

    集群原理-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 会根据节点数量大致均等的将哈希槽映射到不同的节点

     

     redis-cluster投票:容错

     

    (1)领着投票过程是集群中所有master参与,如果半数以上master节点与master节点通信超过(cluster-node-timeout),认为当前master节点挂掉.

    (2):什么时候整个集群不可用(cluster_state:fail)? 

        a:如果集群任意master挂掉,且当前master没有slave.集群进入fail状态,也可以理解成集群的slot映射[0-16383]不完成时进入fail状态. ps : redis-3.0.0.rc1加入cluster-require-full-coverage参数,默认关闭,打开集群兼容部分失败.

        b:如果集群超过半数以上master挂掉,无论是否有slave集群进入fail状态.

      ps:当集群不可用时,所有对集群的操作做都不可用,收到((error) CLUSTERDOWN The cluster is down)错误

    1.搭建集群需要的环境

    搭建集群需要使用到官方提供的ruby脚本。

    需要安装ruby的环境。

    安装ruby

    yum install ruby

    yum install rubygems

    redis集群管理工具redis-trib.rb

    [root@bogon ~]# cd redis-3.0.0

    [root@bogon redis-3.0.0]# cd src

    [root@bogon src]# ll *.rb

    -rwxrwxr-x. 1 root root 48141 Apr  1 07:01 redis-trib.rb

    [root@bogon src]# 

    redis-trib.rb脚本需要的ruby包:

    需要上传到linux服务。

    安装ruby的包:

    gem install redis-3.0.0.gem

    [root@bogon ~]# gem install redis-3.0.0.gem 

    Successfully installed redis-3.0.0

    1 gem installed

    Installing ri documentation for redis-3.0.0...

    Installing RDoc documentation for redis-3.0.0...

     gem下载地址http://download.csdn.net/detail/u012599988/8597787

    2.集群的搭建

    第一步:创建6redis实例,端口号从7001~7006

    先创建个目录

     

    dump.rdb是快照形式把状态保存,另一种是aof保存命令的。

    第二步:修改redis的配置文件

     

    1、修改端口号

    2打开cluster-enable前面的注释。

     

    接下来复制6个节点

    说明:

    redis集群至少需要3个主节点,每个主节点有一个从节点总共6个节点

    replicas指定为1表示每个主节点有一个从节点

    别忘了吧6个节点的端口号都改了

    第三步:把创建集群的ruby脚本复制到redis-cluster目录下。

    然后需要把Redis src目录下的 redis-trib.rb集群管理工具复制到Redis-cluster下面

    第四步:启动6redis实例

    写个脚本批量启动6个redis节点

    startall的脚本内容

    设置为可执行的文件

    同理可以创建个关闭集群的脚本

    第五步:创建集群。

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

    [root@bogon redis-cluster]# ./redis-trib.rb create --replicas 1 192.168.188.131:7001 192.168.188.131:7002 192.168.188.131:7003 192.168.188.131:7004 192.168.188.131:7005 192.168.188.131:7006
    >>> Creating cluster
    Connecting to node 192.168.188.131:7001: OK  
    Connecting to node 192.168.188.131:7002: OK
    Connecting to node 192.168.188.131:7003: OK
    Connecting to node 192.168.188.131:7004: OK
    Connecting to node 192.168.188.131:7005: OK
    Connecting to node 192.168.188.131:7006: OK
    >>> Performing hash slots allocation on 6 nodes... 连接6个节点成功
    Using 3 masters:                                                 7001-7003作为主节点
    192.168.188.131:7001
    192.168.188.131:7002                                    
    192.168.188.131:7003
    Adding replica 192.168.188.131:7004 to 192.168.188.131:7001                   7004作为7001的从节点
    Adding replica 192.168.188.131:7005 to 192.168.188.131:7002                   7005作为7002的从节点
    Adding replica 192.168.188.131:7006 to 192.168.188.131:7003                   7006作为7003的从节点
    M: 5a8523db7e12ca600dc82901ced06741b3010076 192.168.188.131:7001
    slots:0-5460 (5461 slots) master                  给7001主节点分配0-5460 的槽
    M: bf6f0929044db485dea9b565bb51e0c917d20a53 192.168.188.131:7002
    slots:5461-10922 (5462 slots) master    给7002主节点分配5461-10922 的槽
    M: c5e334dc4a53f655cb98fa3c3bdef8a808a693ca 192.168.188.131:7003
    slots:10923-16383 (5461 slots) master 给7003主节点分配10923-16383 的槽
    S: 2a61b87b49e5b1c84092918fa2467dd70fec115f 192.168.188.131:7004     7004,7005,7006是从节点槽和主节点的一样,从节点是备份用的
    replicates 5a8523db7e12ca600dc82901ced06741b3010076
    S: 14848b8c813766387cfd77229bd2d1ffd6ac8d65 192.168.188.131:7005
    replicates bf6f0929044db485dea9b565bb51e0c917d20a53
    S: 3192cbe437fe67bbde9062f59d5a77dabcd0d632 192.168.188.131:7006
    replicates c5e334dc4a53f655cb98fa3c3bdef8a808a693ca
    Can I set the above configuration? (type 'yes' to accept): yes
    >>> Nodes configuration updated
    >>> Assign a different config epoch to each node
    >>> Sending CLUSTER MEET messages to join the cluster
    Waiting for the cluster to join.....
    >>> Performing Cluster Check (using node 192.168.188.131:7001)
    M: 5a8523db7e12ca600dc82901ced06741b3010076 192.168.188.131:7001
    slots:0-5460 (5461 slots) master
    M: bf6f0929044db485dea9b565bb51e0c917d20a53 192.168.188.131:7002
    slots:5461-10922 (5462 slots) master
    M: c5e334dc4a53f655cb98fa3c3bdef8a808a693ca 192.168.188.131:7003
    slots:10923-16383 (5461 slots) master
    M: 2a61b87b49e5b1c84092918fa2467dd70fec115f 192.168.188.131:7004
    slots: (0 slots) master
    replicates 5a8523db7e12ca600dc82901ced06741b3010076
    M: 14848b8c813766387cfd77229bd2d1ffd6ac8d65 192.168.188.131:7005
    slots: (0 slots) master
    replicates bf6f0929044db485dea9b565bb51e0c917d20a53
    M: 3192cbe437fe67bbde9062f59d5a77dabcd0d632 192.168.188.131:7006
    slots: (0 slots) master
    replicates c5e334dc4a53f655cb98fa3c3bdef8a808a693ca
    [OK] All nodes agree about slots configuration.
    >>> Check for open slots...
    >>> Check slots coverage...
    [OK] All 16384 slots covered.
    [root@bogon redis-cluster]#

    3.测试集群

    [root@bogon redis-cluster]# redis01/redis-cli -h 192.168.188.131 -p 7002 -c    -h是指定ip -p指定端口 -c代表要连接集群

    注:连集群的时候必须加-c,否则set的时候会出现(error)MOVED的错误

    192.168.188.131:7002>
    [root@bogon redis-cluster]# redis01/redis-cli -h 192.168.188.131 -p 7002 -c
    192.168.188.131:7002> set a 100
    -> Redirected to slot [15495] located at 192.168.188.131:7003
    OK
    192.168.188.131:7003>

     4.图形化界面客户端

    只支持单机版,不支持集群。可以在开发的时候连接单机版,生产环境换成集群

  • 相关阅读:
    hdu 1711Number Sequence
    hdu 4911Inversion
    DataView数据变化的各种状态
    c#中的dataview数据视图的sort属性进行排序,用rowfilter属性进行筛选,完成学生档案信息的显示。
    DataView.RowFilter筛选DataTable中的数据
    C# 递归产生树
    treeview递归绑定的两种方法
    C#递归加载树
    c# DropDownList 下拉框实现树形导航
    C# ComboBox 下拉显示层次(树)
  • 原文地址:https://www.cnblogs.com/zuge/p/5997112.html
Copyright © 2011-2022 走看看