create cluster是指创建或搭建redis集群。
   这里以搭建六个节点的redis集群(redis cluster最少节点为六个节点)为例进行分析。
一、创建步骤:
(1)节点配置需打开cluster配置项,最小关注配置为如下:
    port 7000
    cluster-enabled yes
    cluster-config-file nodes.conf
    cluster-node-timeout 5000
    appendonly yes
(2)在六台机分别启动redis节点:
    $ ./redis-server ./redis.conf 
(3)最后使用运维工具redis-trib.rb创建集群,命令如下:
    $ ./redis-trib.rb create --replicas 1 192.168.0.1:7000 192.168.0.2:7000 192.168.0.3:7000 192.168.0.4:7000 192.168.0.5:7000 192.168.0.6:7000
    其中--replicas 1表示每个主节点必须有一个从节点,剩下的参数是需要加入集群的节点地址。


(4)接着有节点配置(主从关系和负责哈希槽)提示:
    Performing hash slots allocation on 16384 nodes..
    ....
    ....
(5)如果觉得配置没问题,则输入“yes”,否则退出创建程序;
(6)如果输入yes,则等待创建结束,结果要么创建成功,要么创建失败(会提示失改原因)。


二、实现原理
   通过上面步骤可知,真正执行创建工作是第三步执行redis-trib.rb create命令。故对该命令进行分析,得知它由以下几个步骤组成:
(1)检查参数合法性;
(2)生成主从关系,并给主节点分配哈希槽,直到这步还没有真正发命令给redis节点进行配置;
(3)如果满意第(2)步的配置,则开始进行真正地配置,转到(4),否则退出程序;
(4)刷新每个节点配置。对从节点则设置cluster replicate命令,配置主从关系;对主节点则设置cluster addslots命令,添加负责的哈希槽。这里因为从节点还不知道主节点的存在,所以执行cluster replicate命令是失败的,不过这里会忽略这个失败;
(5)给每个节点分配不同的EpochConfig值(递增的),通过cluster set-config-epoch命令设置EpochConfig值,因为(4)对哈希槽进行更新了,故要更新EpochConfig来保证哈希槽配置在全局是一致的(在之前的配置一致性文章里有说明);
(6)通过cluster meet命令相互认识对方。这里通过介绍(用cluster meet命令介绍)第一个节点向其他五个节点来达到相互认识的目的。
(7)因为相互认识对方有一定迟延,故这里需要等待相互认识工作完成。这里通过每个节点的主节点负责哈希槽配置是否一样来判断是否相互认识工作完成。
(8)再执行第(4)步工作,与(4)不同的是,这里对cluster replicate命令执行会成功,因为从节点知道主节点的存在了;
(9)最后检查集群配置是否正常。检查下面三项:
       a、主节点负责哈希槽配置是否每个节点一样
       b、是否有importing或migrating slots
       c、所有哈希槽是否都有一个主节点负责


三、总结
    create cluster其实就是通过redis-trib.rb create命令将毫不相干的redis节点组合成redis集群。