• redis集群部署


     程序运行操作系统版本

    • Linux系统版本:CentOS release 6.7
    • Linux内核版本:2.6.32-573.el6.x86_64

    程序解释运行环境

       Ruby 2.5.1(6个节点中,只需要有一个节点安装Ruby环境)

       Redis 4.0.10

    防火墙策略

         关闭防火墙或者添加防火墙策略  6379 和16379

     服务运行方式

         6个节点上分别启动redis-server,并在其中一个安装有Ruby环境的节点上运行redis-trib.rb脚本,创建集群。

    部署方式:

      在每个服务节点上:

      上传:redis包

      1.      解压redis-4.0.10压缩文件

      tar –xf redis-4.0.10.tar.gz

      2.      进入redis-4.0.10目录,利用该目录下的makefile进行编译安装

      cd redis-4.0.10

      make

      make install

      完成后,在/usr/local/bin目录下会生成下面5个文件,由于该目录属于环境变量路径,在后面的操作中可以直接使用这些文件而不需要再次指定目录。

    文件名

    功能

    redis-benchmark

    性能测试工具

    redis-check-aof

    aof日志文件检测工具

    redis-check-dump

    rdb快照文件检测工具

    redis-cli

    客户端

    redis-server

    服务端

      3.      创建一个目录,用于存放Redis服务器相关文件

      mkdir /home/redis

      4.      在该目录下创建Redis配置文件

      cd /root/redis

      vi redis.conf

      redis.conf文件内容如下:

      port 6379

      bind (改为具体服务器地址)

      cluster-enabled yes

      cluster-config-file "node_6379.conf"     #多个集群节点在一起的话,必须要加端口号

      cluster-node-timeout 5000

      appendonly no

      dbfilename dump.rdb 

      save 900 1                                        # RDB核心规则配置 save <指定时间间隔> <执行指定次数更新操作>,满足条件就将内存中的数据同步到硬盘
      save 300 10
      save 60 10000

      dir "/root/redis"                           #集群数据文件落地位置,尽量放到大一点的目录里面

      pidfile "/root/redis/node_pid.pid"       #/root/redis/这个目录要存在

      daemonize yes

     

     

    安装ruby

      在线安装:# yum install ruby (安装ruby)

           # yum install rubygems(ruby的包管理器)

      离线安装:# tar -zxvf ruby-2.4.1.tar.gz     #先下载ruby-2.5.1.tar.gz

           # ./configure –prefix=/usr/local/ruby -prefix是将ruby安装到指定目录,也可以自定义

           # make && make install    

           # ruby -v

    安装redis库

      在线安装:gem install redis

      离线安装:gem install -l redis     #先下载redis-3.2.1.gem

    这里会报错如下:
    ERROR: While executing gem ... (Gem::Exception)
    Unable to require openssl, install OpenSSL and rebuild ruby (preferred) or use non-HTTPS sources
    或者 ERROR: Loading command: install (LoadError)
    
    cannot load such file -- zlib
    ERROR: While executing gem ... (NoMethodError)
    
    undefined method `invoke_with_build_args' for nil:NilClass
    
    这里的意思代表zlib,openssl没有安装成功,下面是解决这个问题的办法:
    
    首先解决openssl的问题
    1)wget https://www.openssl.org/source/openssl-1.0.2h.tar.gz
    2)tar -xzvf openssl-1.0.2h.tar.gz
    3)cd openssl-1.0.2h
    4)./config -fPIC --prefix=/usr/local/openssl enable-shared
    5)./config -t
    6)make && make install   使用 openssl version 验证是否安装成功
    7)cd ../ruby-2.3.0   (此处目录不定就是进入ruby源代码中)
    8)cd ext/openssl
    9)ruby extconf.rb   提示没有找到ssl.h, 因为出现了错误:openssl/ssl.h:没有那个文件或目录
    10)ruby extconf.rb --with-openssl-include=/usr/local/openssl/include/ --with-openssl-lib=/usr/local/openssl/lib  
    输出如下代表成功:
    
    checking for t_open() in -lnsl... no
    checking for socket() in -lsocket... no
    checking for assert.h... yes
    checking for openssl/ssl.h... yes
    .............................................中间略.............................................
    checking for EVP_CTRL_GCM_GET_TAG in openssl/evp.h... yes
    creating extconf.h
    creating Makefile
    11)cp -r ruby-2.3.0/include /   (将ruby源代码中的include目录拷贝到根目录下面,并且给个权限)
    12)make
    13)make install   至此openssl的问题解决
    
    下面是zlib的问题
    1)cd ../ruby-2.3.0 (此处目录不定就是进入ruby源代码中)
    2)cd ext/zlib
    3)yum install zlib-devel
    3)ruby extconf.rb
    3)make
    4)make install
    
    
    报错
    make: *** No rule to make target `/include/ruby.h', needed by `zlib.o'. Stop. 
    
    处理办法: vim
    /tools/ruby-2.5.1/ext/zlib/Makefile #zlib.o: $(top_srcdir)/include/ruby.h #把这一行替换成下面一行 zlib.o: ../../include/ruby.h

    启动redis服务

      #redis-servce ./redis-6379.conf          #在redis配置文件的根目录下启动

    添加防火墙端口

      #vim /etc/sysconfig/iptables

        -A INPUT -p tcp -m state --state NEW -m tcp --dport 6379 -j ACCEPT

        -A INPUT -p tcp -m state --state NEW -m tcp --dport 16379 -j ACCEPT

      redis集群不仅需要开通redis客户端连接的端口,而且需要开通集群总线端口;集群总线端口为redis客户端连接的端口 + 10000
      如:redis端口为6379,则集群总线端口为16379;故,所有服务器的点需要开通redis的客户端连接端口和集群总线端口

    创建集群

      通过上述步骤,在6个节点上分别启动Redis服务,然后在其中安装有Ruby的服务器节点上,运行Redis安装包中解压出来的集群部署脚本redis-trib.rb

      redis-trib.rb create --replicas 1 具体服务器地址:6379 具体服务器地址:6379 具体服务器地址:6379 具体服务器地址:6379 具体服务器地址:6379 具体服务器地址:6379

           将上面命令中的具体服务器地址替换为各个Redis服务节点的地址。脚本运行后,命令窗口中出现[OK] All 16384 slots covered,代表集群创建成功。6个节点将会以三个主节点、三个从节点的形式运行,每个从节点都会与其对应的主节点保持数据一致。

      注:集群创建以后,修改配置需要重新创建集群(重新建集群的时候需要先删除配置文件中的密码,否则会执行不成功)

     

     

    设置集群密码

    在创建完集群后,需要分别对每一个节点设置相同的密码。使用前面提到的/usr/local/bin目录下的redis-cli访问redis服务器,并热更新密码配置

      redis-cli –h 具体服务器地址 –p 6379

      > config set requirepass password                   #执行完需要输入密码执行master密码设置

      > config set masterauth password

      > config rewrite

    使用ctrl + c退出redis-cli。注意替换部分的节点地址和端口。password替换为节点的实际访问密码。对集群的6个节点均执行上面的命令,为每个节点都设置相同的密码。

     

    检查

      #  redis-cli -h IP***** -c -p 6379         #-c集群模式

      >set key值  value 

      >get  key值   或者   keys *查看所有值(这个只适合刚部署)

      查看集群状态:

      >cluster info       #查看集群的状态

      

      >cluster nodes     #查看集群的节点关系

     

    异常排查

    启动ruby脚本后,若创建集群失败,则

    a) 将所有的redis服务全部停掉,先查看redis的进程id,可以查看指定的pidfile查看进程id也可以使用命令lsof -i:redis端口号查看进程,也可以使用ps -ef | grep redis 来查看进程id,然后使用kill -9杀死该进程,关闭redis实例。

    b) 将redis目录下的nodes.conf和dump.rdb文件删除

    c) 修改redis.conf文件,去掉其中的密码配置项requirepass和masterauth,使节点下次启动时无需密码即可访问,以便建立集群

    d) 重启每台机器上的redis,然后再启动ruby脚本,重新创建集群

    e) 执行3.8.3中的步骤,为集群设置密码

    Redis数据导入导出

    通过redis-dump数据导入导出:

    迁移Redis数据一般有三种方式:

    • 第三方工具:redis-dump、redis-load
    • aof机制,需要开启aof功能
    • rdb存储机制(一般redis集群)

    安装软件:

      由于安装redis-dump需要依赖ruby,且版本大于2.2.2,所以这里需要先升级ruby,我们安装集群时已经安装过ruby,所以可以跳过,如果是安装的哨兵和主从模式的Redis,需要安装ruby,可以参照上面安装步骤安装,这里就不在说明了

    安装redis-dump

    gem install  redis-dump -v
    
    安装完后会生产

    redis-dump导出数据

    redis-dump -u:yourpassword@127.0.0.1:6380 > /tmp/redis-mv.json

    redis-load 导入数据

    cat /tmp/redis-mv.json |redis-load -u :yourpassword@127.0.0.1:6378
    ERROR (Yajl::ParseError): lexical error: invalid bytes in UTF8 string.
              lue":{"maxInactiveInterval":"¬웵0000u0005sru0000u0011jav
                         (right here) ------^
    #如上报错可加参数 -n,不检查 utf-8格式
    cat /tmp/redis-mv.json |redis-load -n -u :yourpassword@127.0.0.1:6378
  • 相关阅读:
    centOS7 完整克隆后网络配置
    索引角度理解innodb/myisam原理
    JUC 7大并发容器原理详解、及使用场景
    MySQL索引列没有走索引?
    Java 各种并发锁 从 synchronized 到 CAS 和 AQS
    JDK1.8 HashMap两种扩容的情况和转红黑树
    开发自己的网上支付案例代码(易宝支付php)
    redis学习基础(二)
    redis使用基础(一)
    直角三角形打印
  • 原文地址:https://www.cnblogs.com/Tang-Yuan/p/9837783.html
Copyright © 2020-2023  润新知