Chinaunix首页 | 论坛 | 博客
  • 博客访问: 163947
  • 博文数量: 20
  • 博客积分: 0
  • 博客等级: 民兵
  • 技术积分: 221
  • 用 户 组: 普通用户
  • 注册时间: 2015-01-14 18:03
个人简介

做好自己份内事

文章分类

全部博文(20)

文章存档

2019年(1)

2018年(2)

2017年(3)

2016年(3)

2015年(11)

我的朋友

分类: 服务器与存储

2017-12-15 18:16:00

刚刚搭建redis cluster玩玩,网上并没有看到一篇完整的详细过程的文章。

作者:赵晓筱

邮箱:zhao_xiaoxiao@foxmail.com

首先说说我的环境:我用的虚拟机搭建的,一台电脑装了三台虚拟机。nat网络模式。三台虚拟机都是centos6.8。网络完全相通的。不过可能就是宿主机压力有点大。貌似在一个虚拟机里面启动六个redis进程也是可以的。redis-4.0.6.tar.gz;ruby-2.4.3.tar.gz;zlib-1.2.11.tar.gz;openssl-1.1.0.tar.gz;安装包在官网都有,不详细概述了。

三台虚拟机分别每台安装两个redis进程。这个安装过程就不细说了。主要是这个配置文件,redis.conf。里面配置比较多,从源码里面直接拷贝一份到redis的进程的当前目录。redis进程是可以绑定多个ip的。刚刚学习阶段,不要一次修改太多配置。

每个redis进程都绑定两个ip地址,一个是局域网ip地址,一个是127.0.0.1,端口一个进程是6379,一个是6390。

daemonize yes #后台启动

logfile "/usr/local/redis_4.0.6/log/redis_4.0.6.log"#配置日志文件

port 6379#6380,同台机器上端口不能重复。

cluster-enabled yes #开启cluster,去掉注释

cluster-config-file nodes_6379/6380.conf#配置一个文件记录节点信息

cluster-node-timeout 15000#超时时间

appendonly yes
cluster-require-full-coverage :如果将其设置为yes,则默认情况下,如果key的空间的某个百分比未被任何节点覆盖,则集群停止接受写入。 如果该选项设置为no,则即使只处理关于keys子集的请求,群集仍将提供查询。

然后启动每一个redis进程。如果是跨机器的话,记得打开防火墙的对应配置的端口。否则节点之间没有办法通信。同台机器就不需要考虑了,修改防火墙文件/etc/sysconfig/iptables修改端口开放。

redis从3.0版本就支持ruby脚本搭建cluster。脚本路径:src/redis-trib.rb。将脚本拷贝到随便一个进程的路径下,脚本是ruby,所以说ruby安装是必须的。解压源码,.configure prefix=/usr/local/ruby_2.4.3 | make | make install。如果不是安装默认路径,记得修改一些PATH,动态库的路径。否则就会报找不到什么什么的错误。

执行命令:./redis-trib.rb create --replicas 1 192.168.195.133:6379 192.168.195.134:6379 192.168.195.136:6379 192.168.195.136:6380 192.168.195.133:6380 192.168.195.134:6380

其中 --replicas 1 参数告诉命令每个节点创建一个从机。后面的参数是每台机器的ip:port。

ok,第一个问题来了,大致的错误如下:

/usr/local/ruby_2.4.3/lib/ruby/2.4.0/rubygems/core_ext/kernel_require.rb:55:in `require': cannot load such file -- redis (LoadError)

         from /usr/local/ruby_2.4.3/lib/ruby/2.4.0/rubygems/core_ext/kernel_require.rb:55:in `require'

         from ./redis-trib.rb:25:in `

'


提示的意思是ruby缺少连接redis的客户端。ruby提供一个管理ruby包的工具叫gem。在ruby安装路径下bin文件夹中有这个命令;

执行命令:gem install redis --version 4.0.0
{
    后续验证入托有问题,只需要手动下载文件redis-4.0.0.gem
    地址:
    然后手动执行执行安装命令:
    gem install -l ./redis-4.0.0.gem
    就可以解决此问题
}

ok,第二个问题来了,大致错误描述如下:

ERROR:  Loading command: install (LoadError)

    no such file to load -- zlib

大致的意思就是缺少zlib这个库的支持。安装zlib库,.configure prefix=/usr/local/zlib_1.2.11 | make | make install

然后进入ruby源码ext/zlib目录下,执行命令:ruby ./extconf.rb --with-zlib-dir=/usr/local/zlib_1.2.11/。后面的参数是告诉命令zlib的安装路径,默认路径是不需要增加这个参数的。

命令执行就会发现zlib各种库已经找到,如果显示的还是没有找到,就要注意路径以及zlib的安装状态了。正确就会生成一个Makefile。执行make | make install

如下的状态是错误的,后面的no如果是yes就是正确了。

checking for deflateReset() in -lz... no

checking for deflateReset() in -llibz... no

checking for deflateReset() in -lzlib1... no

checking for deflateReset() in -lzlib... no

checking for deflateReset() in -lzdll... no

checking for deflateReset() in -lzlibwapi... no

         make的时候也可能会有错误。错误大致如下:

make: *** No rule to make target `/include/ruby.h', needed by `zlib.o'.  Stop.

提示头文件找不到,看了Makefile。找到这个/include/ruby.h位置,这一行的内容:zlib.o: $(top_srcdir)/include/ruby.h。但是全Makefile没有定义top_srcdir这个变量。所以我直接把这一行注释了。然后就ok了。

okzlib安装搞定了,再次执行gem install redis --version 4.0.0。第二个问题来了,大致如下啊:

ERROR:  While executing gem ... (Gem::Exception)

    Unable to require openssl, install OpenSSL and rebuild ruby (preferred) or use non-HTTPS sources

因为下载使用https协议,所以需要安装opensslok,解压,onfigure prefix=/usr/local/openssl_1.1.0 | make | make install。然后进入ruby源码ext/zlib目录下。ruby ./extconf.rb --with-openssl-dir=/usr/local/ openssl_1.1.0/。后面的参数是告诉命令openssl_的安装路径,默认路径是不需要增加这个参数的。

然后执行命令gem update --system更新一下内容。这一条命令比较慢,需要等一会。然后执行命令:gem install redis --version 4.0.0

正确之后就可以执行命令:

./redis-trib.rb create --replicas 1 192.168.195.133:6379 192.168.195.134:6379 192.168.195.136:6379 192.168.195.133:6380 192.168.195.134:6380 192.168.195.136:6380

>>> Creating cluster

>>> Performing hash slots allocation on 6 nodes...

Using 3 masters:

192.168.195.133:6379

192.168.195.134:6379

192.168.195.136:6379

Adding replica 192.168.195.134:6380 to 192.168.195.133:6379

Adding replica 192.168.195.133:6380 to 192.168.195.134:6379

Adding replica 192.168.195.136:6380 to 192.168.195.136:6379

M: c2d6c79be71964a6e3dccab793f43a763212bdf8 192.168.195.133:6379

   slots:0-5460 (5461 slots) master

M: 470303695e64a2fa319dd05e917cf7524691ecaf 192.168.195.134:6379

   slots:5461-10922 (5462 slots) master

M: f92ad3f8b513b19805b313fc9654e41c43c36044 192.168.195.136:6379

   slots:10923-16383 (5461 slots) master

S: 447b53163e8368479c5fe3a30398746a114e282a 192.168.195.133:6380

   replicates 470303695e64a2fa319dd05e917cf7524691ecaf

S: fcc2c67387bfaebad922cda87409c19770b93544 192.168.195.134:6380

   replicates c2d6c79be71964a6e3dccab793f43a763212bdf8

S: 39e7401593e4f8338e47fb2dba7bfb5ce1b935b4 192.168.195.136:6380

   replicates f92ad3f8b513b19805b313fc9654e41c43c36044

Can I set the above configuration? (type 'yes' to accept):yes

>>> Nodes configuration updated

>>> Assign a different config epoch to each node

>>> Sending CLUSTER MEET messages to join the cluster

Waiting for the cluster to join.......................

之后就是成功标志。实践发现redis版本4和版本3的脚本有两句话的差别,但是那两句话就导致整个集群长时间无法建立成功,就在这里一直点、点、点、点,没完没了。

阅读(1985) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~