zoukankan      html  css  js  c++  java
  • 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
  • 相关阅读:
    cf B. Sereja and Suffixes
    cf E. Dima and Magic Guitar
    cf D. Dima and Trap Graph
    cf C. Dima and Salad
    最短路径问题(floyd)
    Drainage Ditches(网络流(EK算法))
    图结构练习—BFSDFS—判断可达性(BFS)
    Sorting It All Out(拓扑排序)
    Power Network(最大流(EK算法))
    Labeling Balls(拓扑)
  • 原文地址:https://www.cnblogs.com/Tang-Yuan/p/9837783.html
Copyright © 2011-2022 走看看