美文网首页我爱编程
Redis高可用之Redis Cluster配置

Redis高可用之Redis Cluster配置

作者: resolvewang | 来源:发表于2018-05-22 21:49 被阅读257次

    以前讲过通过Redis Sentinel做高可用,在Redis3.0之后,Redis增加了Redis Cluster高可用方案,该方案采用虚拟槽进行数据分区存储。由于本文的目标是记录其高可用配置方法,所以对于原理不会做过多阐述。

    准备节点

    Redis Cluster一般由多个节点组成,它的高可用方案需要至少6个节点,这和Kubernetes高可用方案的节点要求相同。为了方便,我们直接在一台机器上通过修改端口,开6个Redis实例来配置Redis Cluster。

    首先在Redis目录中新建一个conf目录,然后在该目录新建名为redis-6379.conf的文件,输入下面内容

    port 6379 # 节点端口
    cluster-enabled yes # 开启集群模式
    cluster-node-timeout 15000  # 节点超时时间
    cluster-config-file "node-6379.conf" #Redis 实例启动后自己创建的集群配置文件
    

    redis-6379.conf其它配置和Redis默认配置一样,可以根据需要修改。为了方便观察节点细节,我这里并没设置daemonize: yes

    我们再将该文件复制5份,重命名为redis-{port}.conf,这里port我分别取[6380, 6384]

    然后通过redis-server conf/redis-{port}.conf命令把这6个实例都启动。

    然后通过客户端查看集群状态,这里我查看连接端口为6380的节点

    redis-cli -h 127.0.0.1 -p 6380
    cluster nodes

    返回的信息如下

    127.0.0.1:6380> cluster nodes
    11ac34be26cbaca9924610f05a15d6a844769a15 :6380 myself,master - 0 0 0 connected

    从上述信息可以看出目前Redis每个节点只能识别出自己的信息,6个节点都不知道对方的存在

    节点握手

    节点握手是集群通信的第一步,Redis节点采用Gossip协议进行通信。 我们还是先连接到任意一个节点,我这里还是以6380为例,然后让其和另外五个节点建立连接

    cluster meet 127.0.0.1 6379 # 其他端口就省略不写了

    现在我们再连接任意客户端,通过cluster nodes查看集群节点,可以看到6个节点的信息了。

    这个时候集群还处于下线状态,还不能对外提供服务

    set test hello
    (error) CLUSTERDOWN Hash slot not served

    这时候通过cluster info可以看到集群状态为fail,并且cluster_slots_assigned也为0,即表示被分配的槽是0。

    分配槽

    Redis集群把所有数据映射到2^14个槽中,每个key会映射到一个固定的槽,只有节点分配了槽,才能响应和槽关联的命令(主要是数据读写)。手动为节点分配槽的方式如下

    redis-cli -h 127.0.0.1 -p 6379 cluster addslots {0..5461}

    上述语句为端口为6379的节点设置范围为[0, 5461]的槽,注意这里是两个.

    我们再对63806381执行相同操作。将剩下的三个节点用于前三个节点的从节点,通过cluster replicate nodeID命令完成。

    首先我们使用客户端连接6382,然后输入cluster nodes查看当前Cluster信息,可以看到各个节点的node_id,我想把6382作为6379的从节点,6379的node_id为4949c5731b0ba9050279b4d84359b4b0acafaeab,那么执行下面命令

    cluster replicate 4949c5731b0ba9050279b4d84359b4b0acafaeab

    剩下两个执行一样的命令,便可以完成槽的分配了。注意,一定要把0~16383这个范围的槽分满,否则集群会一直处于fail状态

    此时,集群便可以对外提供服务了。

    使用redis-trib.rb自动创建集群

    如果节点太多,手动配置集群的工作量就会非常大,Redis官方提供了基于Ruby的自动化集群配置工具。

    • 安装Ruby
    • tar vxf ruby-2.3.1.tar.gz
    • cd ruby-2.3.1
    • ./configure -prefix=/usr/local/ruby
    • make
    • make install
    • cd /usr/local/ruby
    • sudo cp bin/ruby /usr/local/bin
    • sudo cp bin/gem /usr/local/bin
    • 安装rubygem redis依赖
    • 将redis server目录中的redis-trib.rb文件拷贝到/usr/local/bin目录下,或者给将redis server path添加到环境变量中
    • 准备节点,我们直接复用上文提到的节点。需要先把它们都停掉,然后删除集群配置文件: rm -rf nodes*,然后再重新启动
    • 创建集群
      • redis-trib.rb create --replicas 1 127.0.0.1:6379 127.0.0.1:6380 127.0.0.1:6382 127.0.0.1:6383 127.0.0.1:6384 127.0.0.1:6381: 这里--replicas表示每个主节点slave的个数。在执行该命令的时候,命令终端会询问你是否同意继续,输入yes继续
    • redis-trib.rb check 127.0.0.1 6379: 检查集群是否创建成功。该命令也可以用于检测手动创建的集群
    • 注意,redis节点地址必须是不包含任何槽或者数据的节点,否则集群创建会失败

    参考

    Redis开发与运维

    相关文章

      网友评论

        本文标题:Redis高可用之Redis Cluster配置

        本文链接:https://www.haomeiwen.com/subject/dpmkjftx.html