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

       离线安装可能会报:gem没有,执行:yum install rubygems 

 

这里会报错如下:
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":"¬웵0000\u0005sr\u0000\u0011jav
                     (right here) ------^
#如上报错可加参数 -n,不检查 utf-8格式
cat /tmp/redis-mv.json |redis-load -n -u :yourpassword@127.0.0.1:6378

 

posted @ 2018-10-23 17:30  82年的加多宝  阅读(794)  评论(1编辑  收藏  举报