zoukankan      html  css  js  c++  java
  • 单机部署Redis集群

    一、前言

    1、Redis Cluster(Redis集群)简介

    • redis是一个开源的key value存储系统,受到了广大互联网公司的青睐;
    • redis集群是由一系列的主从节点群组成的分布式服务器群,它具有复制、高可用和分片特性。Redis集群不需要sentinel哨兵也能完成节点移除和故障转移的功能。需要将每个节点设置成集群模式,这种集群模式没有中心节点,客户端通过CRC16算法对key进行hash得到一个值,来判断该key存储在哪个主从服务上面,因此就算是某一个主从整个宕机,redis集群也是部分可用的。方便水平扩展,可以根据业务规模随时加减配置;
    • redis集群是没有统一的入口的,客户端(client)连接集群的时候连接集群中的任意节点(node)即可,集群内部的节点是相互通信的(PING-PONG机制),每个节点都是一个redis实例;
    • redis-cluster有一个投票容错机制;如果集群中超过半数的节点投票认为某个节点挂了,那么这个节点就挂了(fail),所以Redis集群至少需要3个节点

    2、Redis集群搭建需要的环境

    • Redis是c开发的,因此安装redis需要c语言的编译环境,即需要安装gcc;
    • Redis集群至少需要3个节点,要保证集群的高可用,需要每个节点都有从节点,也就是备份节点,所以Redis集群至少需要6台服务器,考虑成本问题,这次测试搭建的是伪分布式集群,即一台服务器虚拟运行6个redis实例,修改端口号为(7001-7006),当然实际生产环境的Redis集群搭建和这里是一样的;
    • 安装Ruby,redis3.0和4.0搭建集群的话,需要使用一个工具(脚本文件),这个工具在redis解压文件的源代码里,因为这个工具是一个ruby脚本文件,所以这个工具的运行需要ruby的运行环境,咱们这里使用的是redis 5.0.8(可以不用ruby)

    3、软件版本说明 

    说明
    Linux Server CentOS 7.6
    gcc 4.8.5
    redis 5.0.8
    ruby 2.7.1
    redis-gem 4.2.1

    二、集群搭建具体步骤如下

    1、查看是否安装gcc

    gcc -v  

    如果没有gcc,则需要在线安装,命令如下

    yum install gcc-c++
    

    2、安装配置redis

    下载redis&解压

    官网:https://redis.io/download

    cd /opt
    wget http://download.redis.io/releases/redis-5.0.8.tar.gz
    tar -zxvf redis-5.0.8.tar.gz
    

    编译安装redis

    #进入到redis-5.0.8目录下
    cd redis-5.0.8
    [root@10-7-28-179 redis-5.0.8]# ls
    00-RELEASENOTES  CONTRIBUTING  deps     Makefile   README.md   runtest          runtest-moduleapi  sentinel.conf  tests
    BUGS             COPYING       INSTALL  MANIFESTO  redis.conf  runtest-cluster  runtest-sentinel   src            utils
    
    #Makefile     make相关命令存放处
    #redis.conf   redis配置文件 
    #src             编译后的源文件
    
    [root@10-7-28-179 redis-5.0.8]# make #编译redis源码
    [root@10-7-28-179 redis-5.0.8]# make install PREFIX=/usr/local/redis  #指定redis存放目录
    
    #查看redis目录下的bin目录里面的文件,如下
    [root@10-7-28-179 ~]# cd /usr/local/redis/bin/
    [root@10-7-28-179 bin]# ls
    dump.rdb  redis-benchmark  redis-check-aof  redis-check-rdb  redis-cli  redis.conf  redis-sentinel  redis-server
    

    启动redis,默认启动模式为前端启动,指令如下

    ./redis-server
    

    更改成后台启动,修改redis.conf文件,将daemonize no -> daemonize yes

    vim redis.conf
    ./redis-server redis.conf   #(后台启动)
    

    3、集群搭建

    # 在/usr/local目录下新建redis-cluster目录,用于存放集群节点,命令如下:
    cd /usr/loca
    mkdir redis-cluster
    # 把redis目录下的bin目录所有文件复制到/usr/local/redis-cluster/redis01目录下,redis01目录会自动创建,命令如下:
    cp -r redis/bin/ redis-cluster/redis01
    # 删除redis01目录下的快照文件dump.rdb,并修改该目录下的redis.conf文件,具体修改两处地方:一是端口号port改为7001,二是开启集群创建(cluster-enabled)模式,打开注释即可
    rm -rf redis-cluster/redis01/dump.rdb
    vim redis-cluster/redis01/redis.conf
    [root@10-7-28-179 redis-cluster]# grep 700 redis01/redis.conf
    port 7001
    [root@10-7-28-179 redis-cluster]# grep cluster redis01/redis.conf
    # started as cluster nodes can. In order to start a Redis instance as a
    # cluster node enable the cluster support uncommenting the following:
    cluster-enabled yes
    

    将redis-cluster/redis01文件复制5份到redis-cluster目录下(redis02-redis06),创建6个redis实例,模拟Redis集群到6个节点。然后将其余5个文件下的redis.conf里面的端口号分别修改为7002-7006.

    接着启动所有redis节点,由于一个一个启动太麻烦了,所以在这里创建一个批量启动redis节点的脚本文件,文件名为start-all.sh,文件内容如下:

    cd redis01
    ./redis-server redis.conf
    cd ..
    cd redis02
    ./redis-server redis.conf
    cd ..
    cd redis03
    ./redis-server redis.conf
    cd ..
    cd redis04
    ./redis-server redis.conf
    cd ..
    cd redis05
    ./redis-server redis.conf
    cd ..
    cd redis06
    ./redis-server redis.conf
    cd ..
    

    创建好启动脚本文件之后,需要修改该脚本的权限,使之能够执行,指令如下:

    chmod +x start-all.sh
    

    执行start-all.sh脚本,启动6个redis节点

    至此6个redis节点启动成功,接下来正式开启搭建集群,以上都是准备条件(搭建6个redis实例并启动)

    4、下载安装Ruby

    Ruby官方下载地址:https://www.ruby-lang.org/en/downloads/

    cd /opt/
    wget https://cache.ruby-lang.org/pub/ruby/2.7/ruby-2.7.1.tar.gz
    tar -zxvf ruby-2.7.1.tar.gz
    ./configure -prefix=/usr/local/ruby
    make
    make install
    cd /usr/local/ruby
    cp bin/ruby /usr/local/bin/
    cp bin/gem /usr/local/bin/
    #安装Rubygem redis依赖:

    [root@10-7-28-179 opt]# /usr/local/bin/gem install redis
    Fetching redis-4.2.1.gem
    Successfully installed redis-4.2.1
    Parsing documentation for redis-4.2.1
    Installing ri documentation for redis-4.2.1
    Done installing documentation for redis after 0 seconds
    1 gem installed
    [root@10-7-28-179 opt]# /usr/local/bin/gem list redis gem

    *** LOCAL GEMS ***

    redis (4.2.1)

    *** LOCAL GEMS ***

    将ruby工具(redis-trib.rb)复制到redis-cluster目录下,指令如下:

    cp /opt/redis-5.0.8/src/redis-trib.rb /usr/local/redis-cluster/
    cp /usr/local/redis/redis-cli /usr/local/redis-cluster/

    使用ruby工具文件搭建集群,指令如下:

    [root@10-7-28-179 redis-cluster]# ./redis-trib.rb create --replicas 1 128.1.136.135:7001 128.1.136.135:7002 128.1.136.135:7003 128.1.136.135:7004 128.1.136.135:7005 128.1.136.135:7006
    WARNING: redis-trib.rb is not longer available!
    You should use redis-cli instead.
    
    All commands and features belonging to redis-trib.rb have been moved
    to redis-cli.
    In order to use them you should call redis-cli with the --cluster
    option followed by the subcommand name, arguments and options.
    
    Use the following syntax:
    redis-cli --cluster SUBCOMMAND [ARGUMENTS] [OPTIONS]
    
    Example:
    redis-cli --cluster create 128.1.136.135:7001 128.1.136.135:7002 128.1.136.135:7003 128.1.136.135:7004 128.1.136.135:7005 128.1.136.135:7006 --cluster-replicas 1
    
    To get help about all subcommands, type:
    redis-cli --cluster help
    
    [root@10-7-28-179 redis-cluster]# ./redis-cli --cluster create 128.1.136.135:7001 128.1.136.135:7002 128.1.136.135:7003 128.1.136.135:7004 128.1.136.135:7005 128.1.136.135:7006 --cluster-replicas 1
    Could not connect to Redis at 128.1.136.135:7001: Connection timed out

     

    至此,Redis集群搭建成功!最后一段文字,显示了每个节点所分配到slots(哈希槽),这里总共6个节点,其中3个是从节点,所以3个主节点分别映射了0-5460、5461-10922、10923-16383slots。

    三、集群操作

    以集群方式连接 ,redis客户端通过cluster info查看集群信息,通过cluster nodes查看节点信息

    [root@10-7-28-179 redis-cluster]# cd redis01
    [root@10-7-28-179 redis01]# ./redis-cli -p 7001 -c
    127.0.0.1:7001> ping
    PONG
    127.0.0.1:7001> set str1 1
    OK
    127.0.0.1:7001> set str2 2
    -> Redirected to slot [9547] located at 127.0.0.1:7002
    OK
    127.0.0.1:7002> set str3 3
    -> Redirected to slot [13674] located at 127.0.0.1:7003
    OK
    127.0.0.1:7003> set str4 4
    -> Redirected to slot [1421] located at 127.0.0.1:7001
    OK
    127.0.0.1:7001> cluster info
    cluster_state:ok
    cluster_slots_assigned:16384
    cluster_slots_ok:16384
    cluster_slots_pfail:0
    cluster_slots_fail:0
    cluster_known_nodes:6
    cluster_size:3
    cluster_current_epoch:6
    cluster_my_epoch:1
    cluster_stats_messages_ping_sent:190
    cluster_stats_messages_pong_sent:201
    cluster_stats_messages_sent:391
    cluster_stats_messages_ping_received:196
    cluster_stats_messages_pong_received:190
    cluster_stats_messages_meet_received:5
    cluster_stats_messages_received:391
    127.0.0.1:7001> cluster nodes
    25b57bdc158c7bddb4775a8099ae545d8a8056c0 127.0.0.1:7001@17001 myself,master - 0 1596374102000 1 connected 0-5460
    ac2e50b4f8cd6249348a4f1fbbbdc12577f1619b 127.0.0.1:7004@17004 slave 94857bf92e40c7f769f18fa0d652524f525da3c2 0 1596374103049 4 connected
    aec07d568b5cd760e9b34418a9074529b1220348 127.0.0.1:7003@17003 master - 0 1596374103000 3 connected 10923-16383
    29a5115a4e09e3418d5cdf7b1eeca7863847d3f3 127.0.0.1:7006@17006 slave 25b57bdc158c7bddb4775a8099ae545d8a8056c0 0 1596374104051 6 connected
    94857bf92e40c7f769f18fa0d652524f525da3c2 127.0.0.1:7002@17002 master - 0 1596374103000 2 connected 5461-10922
    8c0e1800606625e849b55546b812bfe0c7a6a7b8 127.0.0.1:7005@17005 slave aec07d568b5cd760e9b34418a9074529b1220348 0 1596374103000 5 connected
    

    PS: -a 密码

         -c 集群方式(要加-c,不然节点之间无法自动跳转)

    redis-cli --cluster help具有以下功能:

    1、 create :创建集群

    2、 check :检查集群

    3、 info :查看集群信息

    4、 fix :修复集群

    5、 reshard :在线迁移slot

    6、 rebalance :平衡集群节点slot数量

    7、 add-node :将新节点加入集群

    8、 del-node :从集群中删除节点

    9、 set-timeout :设置集群节点间心跳连接的超时时间

    10、 call :在集群全部节点上执行命令

    11、 import :将外部redis数据导入集群

    相关链接:https://blog.csdn.net/u014344668/article/details/105848359

                   https://www.javazhiyin.com/26753.html

                   https://stor.51cto.com/art/202004/614940.htm

  • 相关阅读:
    /etc/init.d/functions详解[转]
    把linux可执行程序做成一个服务[转]
    Centos下Subversion 服务器安装配置(转)
    经典面试编程题atoi()实现
    asp.net mvc 模型绑定 从简单类型到泛型集合
    C# 编译器 csc 简单用法
    js 操作文本框中光标位置
    简洁的lambda表达式
    iphone safari不支持position fixed的解决办法
    List排序函数Sort
  • 原文地址:https://www.cnblogs.com/winnerREN/p/13423476.html
Copyright © 2011-2022 走看看