• 分享知识-快乐自己:redis集群搭建


    Redis介绍:

    1、开源的NoSql数据库

    2、C语言编写

    3、基于内存运行,并且支持持久化

    4、Key value存储

    5、是主流的Nosql数据库之一

    Redis优点:

    1、内存使用方面,表现优异

    2、数据读写快速高效

    3、持久化性能相比其他Nosql数据库要好

    4、扩展性和移植性强

    5、分布式中不可或缺的一员

    Redis 安装(单个):点我下载redis包   点我下载redis客户端

    安装依赖:

    yum install gcc-c++ 
    
    安装!

    1):解压redis包到指定目录

    [root@admin tools]# tar -zxvf redis-3.2.10.tar.gz -C ../redis/

    2):进入redis的解压目录输入make

    3):安装 make install  PREFIX="安装路径" 

    如果在安装的位置看到一个bin目录 说明安装成功了。

    可能会出现的问题:

    1):如果make报错

    make[1]: 进入目录“/software/redis-3.2.10/src”
    CC adlist.o
    /bin/sh: cc: 未找到命令
    make[1]: *** [adlist.o] 错误 127
    make[1]: 离开目录“/software/redis-3.2.10/src”
    make: *** [all] 错误 2
    
    问题 少cc组件!

    解决办法:

    yum install gcc-c++ 
    安装!

    1-1):如果yum安装过程中出现镜像的问题

    解决办法:

    1、清空自带的yum源

    rm -rf /etc/yum.repos.d/*

    2、创建本地yum源

    vim /etc/yum.repos.d/xx.repo

    后缀名必须是以 repo结尾的!
    xx是文件名,自拟!

    3、编辑文件xx.repo

    [local]
    name=local
    baseurl=file:///mnt
    gpgcheck=0

    4、挂载光盘 光盘的挂载点必须是 上面的baseurl

    mount /dev/cdrom /mnt/

    只有挂载只有才有 /mnt/目录

    5、实现永久挂载光盘

    vim /etc/fstab

    在文件中的最后一行输入

    /dev/cdrom /mnt iso9660 defaults 0 0

    6、让文件立即生效

    mount -a

    可以使用yum了。

    2):如果遇到 CC adlist.o

    In file included from adlist.c:34:0:
    zmalloc.h:50:31: 致命错误:jemalloc/jemalloc.h:没有那个文件或目录
    #include <jemalloc/jemalloc.h>

    解决办法:

    make MALLOC=libc

    解决完错误 重新 make 就 OK 了。

    4):启动 redis

    5):redis 连接测试

      打开新的创建 进入redis的命令行模式

      注意另一个启动redis的窗口,现在不能关闭。

    6):修改 配置redis.conf文件 后台运行

    修改pid的文件位置:

    修改 bind 添加主机 IP 连接客户端:之后重启redis服务

    测试连接:

     

    7):关闭 redis 服务

    Redis Cluster集群设计:

      Redis集群搭建的方式有多种,例如使用zookeeper等,但从redis3.0之后版本支持Redis-Cluster集群,Redis-Cluster采用无中心结构,每个节点保存数据和整个集群状态,每个节点都和其他所有节点连接。

    其redis-cluster架构图如下:

    结构特点:

    1、所有的redis节点彼此互联(PING-PONG机制),内部使用二进制协议优化传输速度和带宽。

    2、节点的fail是通过集群中超过半数的节点检测失效时才生效。

    3、客户端与redis节点直连,不需要中间proxy层。客户端不需要连接集群所有节点,连接集群中任何一个可用节点即可。

    4、redis-cluster把所有的物理节点映射到[0-16383]slot上(不一定是平均分配),cluster负责维护node<->slot<->value。

    5、Redis集群预分好16384个桶,当需要在 Redis 集群中放置一个 key-value 时,根据 CRC16(key) mod 16384的值,决定将一个key放到哪个桶中。

    redis cluster节点分配:

    假如现在有三个主节点分别是:A, B, C三个节点,它们可以是一台机器上的三个端口,也可以是三台不同的服务器。

    那么,采用哈希槽 (hash slot)的方式来分配16384个slot的话,它们三个节点分别承担的slot区间是:

    节点A覆盖0-5460;

    节点B覆盖5461-10922;

    节点C覆盖10923-16383.

    获取数据:

    如果存入一个值,按照redis cluster哈希槽的算法: CRC16('key')%16384 = 6782。 那么就会把这个 key 的存储分配到节点B上了。

    同样,当我连接(A,B,C)任何一个节点想获取'key'这个key时,也会这样的算法,然后内部跳转到B节点上获取数据。 

    新增一个主节点:

    新增一个节点D,redis cluster的这种做法是从各个节点的前面各拿取一部分slot到D上,我会在接下来的实践中实验。大致就会变成这样:

    节点A覆盖1365-5460

    节点B覆盖6827-10922

    节点C覆盖12288-16383

    节点D覆盖0-1364,5461-6826,10923-12287

    同样删除一个节点也是类似,移动完成后就可以删除这个节点了。

    Redis Cluster主从模式(选举和容错)

    Redis Cluster为了保证数据的高可用性,加入了主从模式,一个主节点对应一个或多个从节点,主节点提供数据存取,从节点则是从主节点拉取数据备份,当这个主节点挂掉后,就会从从节点选取一个来充当主节点,从而保证集群不会挂掉。

    上面那个例子里, 集群有ABC三个主节点, 如果这3个节点都没有加入从节点,如果B挂掉了,我们就无法访问整个集群了。A和C的slot也无法访问。

    所以我们在集群建立的时候,一定要为每个主节点都添加从节点, 比如像这样, 集群包含主节点A、B、C, 以及从节点A1、B1、C1, 那么即使B挂掉系统也可以继续正确工作。

    B1节点替代了B节点,所以Redis集群将会选择B1节点作为新的主节点,集群将会继续正确地提供服务。 当B重新开启后,它就会变成B1的从节点。

    不过需要注意,如果节点B和B1同时挂了,Redis集群就无法继续正确地提供服务了。

    Redis 安装(集群)

    Redis伪分布式集群搭建在一台服务器上搭建6个redis!

    1):首先关闭上一个的 redis 服务。

    [root@admin bin]# ./redis-cli -h 192.168.31.206 -p 6379 shutdown

    2):清除dump.rdb文件

    rm -rf dump.rdb

    3):创建一个集群文件夹

    [root@admin opt]# mkdir redis-cluster

    4):集群文件夹中创建6个redis目录

    [root@admin redis-cluster]# mkdir redis01 redis02 redis03 redis04 redis05 redis06

     

    5):把之前的 redis/bin 分别拷贝到6个redis目录下 、把之前的redis.conf 文件拷贝到bin下

    1、先将之前的 redis bin 拷贝到 redis01下;redis.conf 拷贝到 bin 下

    [root@admin opt]# cp -r ./redis/redis-3.2.10/bin ./redis-cluster/redis01/
    [root@admin opt]# cp -r ./redis/redis-3.2.10/redis.conf ./redis-cluster/redis01/bin/

    2、修改 redis.conf 文件【集群设置】

    注意6379端口对应的这个集群设置 不要取消注释,方便后续演示单机版操作!

    3、修改redis.conf文件中的port端口

    4、修改 bind IP 地址

    5、依次拷贝 redis01下的bin  到 redis02-redis06 中

    [root@admin redis-cluster]# cp -r redis01/bin ./redis02/
    [root@admin redis-cluster]# cp -r redis01/bin ./redis03/
    [root@admin redis-cluster]# cp -r redis01/bin ./redis04/
    [root@admin redis-cluster]# cp -r redis01/bin ./redis05/
    [root@admin redis-cluster]# cp -r redis01/bin ./redis06/

    6、依次修改 redis-02-redis06  bin/redis.conf 中的port端口号

       分别为:7002  7003  7004  7005  7006

    [root@admin redis-cluster]# vim redis02/bin/redis.conf 
    [root@admin redis-cluster]# vim redis03/bin/redis.conf 
    [root@admin redis-cluster]# vim redis04/bin/redis.conf 
    [root@admin redis-cluster]# vim redis05/bin/redis.conf 
    [root@admin redis-cluster]# vim redis06/bin/redis.conf 

    7、写个批处理文件一次把所有的redis启动

    start-all.sh:

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

    stop-all.sh:

    cd redis01/bin/
    ./redis-cli -h 192.168.31.206 -p 7001 shutdown
    cd ../../
    cd redis02/bin/
    ./redis-cli -h 192.168.31.206 -p 7002 shutdown
    cd ../../
    cd redis03/bin/
    ./redis-cli -h 192.168.31.206 -p 7003 shutdown
    cd ../../
    cd redis04/bin/
    ./redis-cli -h 192.168.31.206 -p 7004 shutdown
    cd ../../
    cd redis05/bin/
    ./redis-cli -h 192.168.31.206 -p 7005 shutdown
    cd ../../
    cd redis06/bin/
    ./redis-cli -h 192.168.31.206 -p 7006 shutdown
    cd ../../

    8、启动集群测试

    [root@admin redis-cluster]# ./start-all.sh
    -bash: ./start-all.sh: 权限不够
    [root@admin redis-cluster]# chmod 700 start-all.sh 
    [root@admin redis-cluster]# ./start-all.sh 
    [root@admin redis-cluster]# ps -ef|grep redis

    停止:(开启后 这里先不用关闭  可省略此步骤)

    [root@admin redis-cluster]# ./stop-all.sh
    -bash: ./stop-all.sh: 权限不够
    [root@admin redis-cluster]# chmod 700 stop-all.sh 
    [root@admin redis-cluster]# ./stop-all.sh 

    6):安装ruby Ruby可以把我们所有的redis连接在一起

    yum  install  ruby

    redis-3.0.0.gem  这个文件放在 redis-cluster 目录下即可!

    yum  install  redis-3.0.0.gem
    或者
    gem  install  redis-3.0.0.gem

    7):安装集群

    ./redis-trib.rb  create --replicas 1 192.168.31.206:7001 192.168.31.206:7002 192.168.31.206:7003 192.168.31.206:7004 192.168.31.206:7005 192.168.31.206:7006

     如果没有 redis-trib.rb  点我提供好了

    8):测试集群

    客户端也成功连接:

  • 相关阅读:
    【python】超有用的集合类collections,不来了解一下?
    【pytest】teardown里的yield和addfinalizer
    听过N次还是不会之:浏览器输入url后到底经历了什么
    web-UI自动化必会技能—xpath轴,了解一下?
    想在java接口自动化里用上Python的requests?这样做就可以了
    web自动化多次打开浏览器嫌烦?打开一次浏览器,pytest有个招
    【web系统UI自动化】关于UI自动化的总结
    【接口自动化】selenium库也有大用场(获取cookie)
    【python开发】迈出第一步,这可能是我唯一一次的Python开发了
    angular9的学习(八)组件的内置api
  • 原文地址:https://www.cnblogs.com/mlq2017/p/10107628.html
Copyright © 2020-2023  润新知