zoukankan      html  css  js  c++  java
  • redis集群安装2

     

    概要:本文主要介绍如何在Centos7中单机搭建redis集群三主三从,按照本文绝对可以实现该需求,至于先搭建单机版主要为了方便理解redis集群,为下一步开发或生产上redis集群做铺垫。同时本人在搭建过程中也做了点总结,希望对没有接触过redis集群或刚接触redis集群的小伙伴有些许帮助,同时也建议在查看本文前能先了解redis单节点的部署。下面进入正题。

    1、使用yum安装所需要的工具

    yum -y install wget vim tcl gcc make

    2、下载redis并解压

    cd /usr/local

    wget http://download.redis.io/releases/redis-3.2.8.tar.gz         (获取redis)

    tar -zxvf redis-3.2.8.tar.gz

    3、编译安装redis源文件

        cd redis-3.2.8

        make    (若安装报错,可以改为这一句:make MALLOC=libc)

        make install

            (如果 /usr/local/bin/ 文件夹内没有 redis-server 那几个文件,就从 /usr/local/redis-3.2.8/src/ 中拷贝过去,命令:cp         redis-server redis-cli redis-sentinel redis-trib.rb redis-benchmark redis-check-aof redis-check-rdb /usr/local/bin/)

    4、配置内核参数(可以省略)

        --配置 vm.overcommit_memory 为1,这可以避免数据被截断

            systcl -w vm.overcommit_memory=1

    5、创建多实例的文件夹

        cd /usr/local/

        mkdir cluster

        cd cluster

        mkdir 7000 7001 7002  8001 8002 8003 

    6、修改配置文件

        vim /usr/local/redis/redis.conf

        bind  0.0.0.0   (0.0.0.0表示所有节点都可以访问该redis)

        protected-mode no 

        daemonize yes (设置后台运行redis)

        cluster-enabled yes(开启集群,把#去掉)

        cluster-node-timeout 15000 (设置请求超时时间,默认为15秒,可以自行修改)

        appendonly yes (aop日志开启,会每次进行写操作都记录一条日志)

        --根据不同的端口需要设置的地方

            port 7000

            pidfile /var/run/redis_7000.pid

            dbfilename dump_7000.rdb

            appendfilename "appendonly_7000.aof"

            cluster-config-file nodes_7000.conf

    7、复制配置文件到各个实例文件夹,并且对相应的端口号和参数进行配置。

        cp -f /usr/local/redis/redis.conf   /usr/local/cluster/7000/

        cp -f /usr/local/redis/redis.conf   /usr/local/cluster/7001/

        cp -f /usr/local/redis/redis.conf   /usr/local/cluster/7002/

        cp -f /usr/local/redis/redis.conf   /usr/local/cluster/8001/

        cp -f /usr/local/redis/redis.conf   /usr/local/cluster/8002/

        cp -f /usr/local/redis/redis.conf   /usr/local/cluster/8003/

    8、启动各个节点

        redis-server /usr/local/cluster/7000/redis.conf

                                  ...

        redis-server /usr/local/cluster/8003/redis.conf

        --使用ps -ef|grep redis | grep cluster查看是否都启动成功,ip和端口号是否都正确。

    9、安装ruby、redis环境

    yum -y install ruby rubygems

    gpg2 --keyserver hkp://keys.gnupg.net --recv-keys D39DC0E3

    curl -L get.rvm.io | bash -s stable

    source /usr/local/rvm/scripts/rvm

    rvm install ruby-2.3.3   (此过程耗时过长,耐心等待~)

    rvm use 2.3.3 --default

    gem install redis

    10、创建集群

        (redis官方提供了redis-trib.rb 这个工具,就在解压目录src目录中,第3步中已将它复制到/usr/local/bin目录中,可以直接在命令行中使用,如果没复制的话自行复制过去即可)

        redis-trib.rb create --replicas 1 127.0.0.1:7000 127.0.0.1:7001 127.0.0.1:7002 127.0.0.1:8001 127.0.0.1:8002 127.0.0.1:8003   (redis-trib.rb创建集群时会尝试连接列出来的redis节点,如果这里报错你就要检查一下你列出来的redis节点是否都正常运行或者所有节点直接是否都网络互通)

        留意一下屏幕,会有一句(type 'yes' or accept),输入yes,回车。(意思是:接受自主分配三主三从)

        如果最后出现

          >>> Check for open slots...

          >>> Check slots coverage...

        说明搭建成功。

    11、验证集群

    redis-cli -h 127.0.0.1 -c -p 7000  (加参数 -c 可以连接到集群,因为redis.conf将bind改为了ip地址,所以 -h 不可以省略)

    连接到7000端口使用set存测试值

    再连接到7001端口取值,redis集群可用

    提示:在使用cli连接到redis后可以使用info replication命令来查看主从关系等信息。

    12、其余测试

    搭建完成后可以做些其余测试,比如在主节点A上存数据,看数据是存到A节点内还是会随机存到任一主节点?

    再比如down掉主节点A,看A的从节点是否会抢占A节点等等。

    这篇文章只是给大家入了个门,保证了该集群是可用的,但几乎所有redis的配置都是默认的。接下来一篇文章研究的重心就放在了如何调优和redis集群在生产上的应用。

    13、总结(必看):

    1. redis集群至少33
    2. Redis 集群没有使用一致性hash, 而是引入了哈希槽的概念,Redis 集群有16384个哈希槽,每个key通过CRC16校验后对16384取模来决定放置哪个槽.集群的每个节点负责一部分hash槽。如果是33从,A挂了的话从节点A1就会顶替A来掌管它的哈希槽,如果A1再挂了,其哈希槽就会没有节点来掌管,即cluster就会不可用。
    3. 写操作会随机到3个主节点上,即使是在从节点上进行的写操作,也会被随机重定向到某个主节点中,在主节点上操作也一样会随机重定向到一个中,当然覆盖原有key除外。
    4. 数据是分开存储的,主节点不进行数据的相互同步与复制,数据的复制发生在主节点和其从节点之间。
    5. 数据a存在节点A中,在节点B中查找数据a,redis会自动重定向到节点A中进行查找
    6. Redis 并不能保证数据的强一致性. 这意味这在实际中集群在特定的条件下可能会丢失写操作。比如写入A节点的数据,A在同步给从节点A1的过程中A出现宕机,这样未同步过去的数据就出现了丢失的情况。

         7、默认主节点A宕机后从节点A1成为master,但当A重新启用后并不会重新抢占为master。

        

  • 相关阅读:
    批量新增百万条数据 十百万条数据
    sqlserver 组内排序
    EF ++属性会更新实体
    Entity Framework Core: A second operation started on this context before a previous operation completed
    abp Cannot access a disposed object. A common cause of this error is disposing
    abp xunit Can not register IHostingEnvironment. It should be a non-abstract class. If not, it should be registered before.”
    hangfire enqueued but not processing(hangfire 定时任务入队列但不执行)
    EF 更新实体 The instance of entity type 'BabyEvent' cannot be tracked because another instance
    datatable to entiy list 不支持可空类型和枚举类型
    webapi 设置不显示接口到swaggerUI
  • 原文地址:https://www.cnblogs.com/brady-wang/p/11451734.html
Copyright © 2011-2022 走看看