• 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。

        

  • 相关阅读:
    计算机存储的大小端模式解析
    栈的存储结构和常见操作(c 语言实现)
    一道 google曾出过的笔试题:编程实现对数学一元多项式的相加和相乘操作(1)
    线性链表其他种类(静态,双向,循环)的存储结构和常见操作
    用户手势检测-GestureDetector使用详解
    android Socket 编程
    Android 网络请求get/post工具类:NetUtil
    使用Memcached提高.NET应用程序的性能
    基于OCS实现高速缓存
    如何加快网站访问速度
  • 原文地址:https://www.cnblogs.com/brady-wang/p/11451734.html
Copyright © 2020-2023  润新知