zoukankan      html  css  js  c++  java
  • Redis随笔(四)Centos7 搭redis3.2.9集群-3主3从的6个节点服务

    1、虚拟机环境

    使用的Linux环境已经版本:

    Centos 7   64位系统

    主机ip

    192.168.56.180

    192.168.56.181

    192.168.56.182

    每台服务器是11从,实验3台服务器课成为33从。

    Redis安装的项目目录、日志、配置文件等都存放在/root/svr/目录下。

    2、下载相关的安装包以及解压

    首先在192.168.56.180机器操作:

    cd /root/svr
    wget http://download.redis.io/releases/redis-3.2.9.tar.gz
    tar -zxvf redis-3.2.9.tar.gz
    

     3、安装

    /root/svr/redis-3.2.9/目录下执行:

    make install PREFIX=/root/svr/redis-3.2.9
    

     4、配置信息

    创建集群配置、log日志、数据所在的文件夹

    cd /root/svr/redis-3.2.9/
    mkdir cluster-conf
    

     创建集群端口文件夹:

    cd cluster-conf
    mkdir 7777
    mkdir 8888
    

     复制配置文件/root/svr/redis-3.2.9/cluster-conf/7777目录下:

    cp /root/svr/redis-3.2.9/redis.conf  /root/svr/redis-3.2.9/cluster-conf/7777
    

    修改7777目录下redis.conf配置文件

    注意:找到相应的信息修改,或者把修改的信息全部注释掉,重新添加下面信息到头部,有利于以后修改和查看)

    #注释掉ip或者设置0.0.0.0都是局域网访问
    #bind 127.0.0.1
    #端口号
    port 7777
    
    #指定了记录日志的文件
    logfile "/root/svr/redis-3.2.9/cluster-conf/7777/redis.log"
    
    #该目录要事先创建好,数据目录,数据库的写入会在这个目录。rdb、aof文件也会写在这个目录
    dir /root/svr/redis-3.2.9/cluster-conf/7777/
    
    #是否开启集群
    cluster-enabled yes
    
    #集群配置文件的名称,每个节点都有一个集群相关的配置文件,持久化保存集群的信息,
    #这个文件并不需要手动配置,这个配置文件有Redis生成并更新,
    #每个Redis集群节点需要一个单独的配置文件,请确保与实例运行的系统中配置文件名称不冲突。
    cluster-config-file nodes.conf
    
    #节点互连超时的阀值。集群节点超时毫秒数
    cluster-node-timeout 5000
    
    #默认redis使用的是rdb方式持久化,这种方式在许多应用中已经足够用了,
    #但是redis如果中途宕机,会导致可能有几分钟的数据丢失,
    #根据save来策略进行持久化,Append Only File是另一种持久化方式,可以提供更好的持久化特性,
    #Redis会把每次写入的数据在接收后都写入 appendonly.aof 文件,
    #每次启动时Redis都会先把这个文件的数据读入内存里,先忽略RDB文件。
    appendonly yes
    

     复制7777目录下redis.conf8888并修改端口及存储路径

    cp /root/svr/redis-3.2.9/cluster-conf/7777/redis.conf /root/svr/redis-3.2.9/cluster-conf/8888 
    

     5、使用scp复制安装和配置好的redis复制到其他服务器上

    已经在192.168.56.180机器配置好,复制到181182机器

    在两台新机器上创建文件夹

    mkdir /root/svr
    

     复制:

    scp -r /root/svr/redis-3.2.9 root@192.168.56.181:/root/svr/
    #输入181机器密码即可传输数据。
    
    scp -r /root/svr/redis-3.2.9 root@192.168.56.182:/root/svr/
    #输入182机器密码即可传输数据。
    

     6、启动3台机器的redis

    3台机器执行启动方式:

    /root/svr/redis-3.2.9/bin/redis-server /root/svr/redis-3.2.9/cluster-conf/7777/redis.conf &
    /root/svr/redis-3.2.9/bin/redis-server /root/svr/redis-3.2.9/cluster-conf/8888/redis.conf &
    

     查看状态是否:

    ps -ef|grep redis
    

     

    7、创建集群

    /root/svr/redis-3.2.9/src/redis-trib.rb create --replicas 1 192.168.56.180:7777 192.168.56.180:8888 192.168.56.181:7777 192.168.56.181:8888 192.168.56.182:7777 192.168.56.182:8888
    

    无法创建,提示错误信息:

    提示错误,是没有安装ruby这个插件,因为redis

    集群创建的程序文件redis-trib,rb是由ruby来编写的,需要安装:

    yum install ruby
    

     安装ruby完毕接着执行上面的创建集群命令

    报错。这时候需要安装一些和rubyreids相关程序包和类库

    yum install rubygems
    gem install reids
    

     

    报错,提示ruby版本需要大于2.2.2版本。CentOS7 yum库中ruby的版本支持到 2.0.0,可gem 安装redis需要最低是2.2.2

    需要安装个高版本的ruby

    #安装curl
    yum install curl
    #安装rvm
    #gpg2 --keyserver hkp://keys.gnupg.net --recv-keys D39DC0E3
    #curl -L get.rvm.io | bash -s stable
    #source /usr/local/rvm/scripts/rvm
    

     

    查看rvm库中已知的ruby版本

    rvm list known
    

     

    安装一个ruby版本

    rvm install 2.4.0
    

     

    使用一个ruby版本

    rvm use  2.4.0
    

     卸载一个已知版本

    rvm remove 2.0.0
    

     查看现在版本

    ruby --version
    

     

    在重新安装ruby相关的redis就可以了

    gem install redis
    

     

    更新ruby版本、移除旧版本、重新安装reids完毕。接着执行上面的创建集群命令

    还是出现错误:提示连接不上节点:

    这时候需要排查一下错误:

    第一:服务器是否关闭防火墙

    systemctl status firewalld.service  #查看防火墙
    systemctl stop firewlld.service    #关闭防火墙
    

     

    (我这边已经关闭)

    第二:是否所有的节点都启动

    ps -ef|grep redis
    

     

    我这边都已经启动并且正常运行

    第三:服务器之间是否ping

    ping 192.168.56.180

    ping 192.168.56.181

    ping 192.168.56.182

    (我这边都能正常ping通过)

    第四:是否可以telnet ip port  连接上

    yum install telnet
    telbet 192.168.56.180 7777
    

     出现错误:提示redis是受保护的,需要身份验证才可以进行:

    这个问题解决可以有两种方法解决:

    (1)修改配置文件redis.conf的权限参数设置为no,就是不需要权限验证

    protected-mode no
    

     

    (2)修改配置文件redis.conf的权限设置安全密码(密码自定义设置)

    requirepass “111111”   #权限密码
    

     

    我这里是第一解决方法,不需要权限,先kill启动的6redis进程,在修改配置文件。在启动reidis服务。

    接着执行上面的创建集群命令。

    创建集群启动成功。

     

    8、测试redis集群

    #登录客户端
    ./redis-cli -c -p 7777(或者8888)   #-c 参数:表示使用集群模式连接
    

    在192.168.56.181:7777服务set值

     

    在192.168.56.182:8888服务上get

     9、数据解析

    完整搭建起来,管理的集群以及主从关联都在nodes.conf文件中生成的,我这边集群节点的生成配置文件数据显示

    主/从                   节点id                       ip     prot   slot槽范围     槽数量     m/s   主从等比例  附近信息(如果是主节点记录为复制功能,如果是从节点,关联相应的主节点id)
    
    M: 3f0d98eebfa18364a95ce7a578865ba7a3ef4493 192.168.56.180:7777 slots:0-5460 (5461 slots) master 1 additional replica(s)
    S: 54a525c670ad92a45dccfa92164c0a5f220a10bc 192.168.56.180:8888 slots: (0 slots) slave replicates 078973835bb8a36aeef272c2e243a9d9d733ea96
    
    M: 078973835bb8a36aeef272c2e243a9d9d733ea96 192.168.56.181:7777 slots:5461-10922 (5462 slots) master 1 additional replica(s)
    S: 4e13f9dca80c63079e536b17eaa81cef8fcba624 192.168.56.182:8888 slots: (0 slots) slave replicates 3c0fa46c14e6d25c7e7b01079162baec86bd88e9
    
    M: 3c0fa46c14e6d25c7e7b01079162baec86bd88e9 192.168.56.182:7777 slots:10923-16383 (5461 slots) master 1 additional replica(s)
    S: d507f34a7dab6dc512a82427e3731967f5a69101 192.168.56.181:8888 slots: (0 slots) slave replicates 3f0d98eebfa18364a95ce7a578865ba7a3ef4493
    

     当节点挂了,nodes.conf会记录新的数据

    当主节点挂了,因为集群会一直在监听集群中的主从节点的状态。加入一个主节点挂了,集群监听机制检查到,会对主节点的槽(数据)进行迁移,按照投票机制将主节点关联的从节点进行选举出一个充当主节点,因为我这里一个主节点关联一个从节点,所以只能是那个充当。

    10、扩展知识

    (1)持久层的配置和原理:rdb和aof

    (2)哨兵、数据字段迁移、键空间迁移、在线迁移、redis-trib.rb的详解

    (3)集群节点添加,删除

    (4)Jedis客户端对集群的数据操作:set、list、key/value、hash等

    (5)将key值执行CRC16算法对18384个槽进行取模

    (6)压测.........

  • 相关阅读:
    oozie的简易安装
    flume监控一个linux指定的一个文件夹的文件信息
    FastDFS图片服务器java后台的简单调用
    java对象与json互转
    final关键字详解
    文件压缩和解压缩工具类
    web上下文监听器ServletContextListener
    基本类型的相互转换
    用java代码在创建hbase表时指定region的范围
    String类的一些常用操作方法
  • 原文地址:https://www.cnblogs.com/c-xiaohai/p/8296396.html
Copyright © 2011-2022 走看看