redis 集群安装

redis 集群安装

1、环境

Linux环境:centos7
ip地址:
192.168.24.130
192.168.24.131
192.168.24.132
redis版本:redis-3.2.8.tar.gz

2、安装

2.1 复制文件
$ scp redis-3.2.8.tar.gz basic@192.168.24.130:/home/basic
$ scp redis-3.2.8.tar.gz basic@192.168.24.130:/home/basic
2.2 解压文件
$ tar -zxvf redis-3.2.8.tar.gz 
2.3 编译安装
$ yum -y install gcc gcc-c++
$ cd redis-3.2.8
$ make
$ make install PREFIX=/home/basic/redis-3.2.8
2.4 集群配置
$ netstat -lnp|grep 39690
$ cd /home/basic/redis-3.2.8
$ mkdir cluster-config
$ cd cluster-config
$ mkdir 39690
$ mkdir 39691
$ mkdir 39692
$ cp ../../redis.conf ./39690
$ cp ../../redis.conf ./39691
$ cp ../../redis.conf ./39692

2.5 配置文件修改
#注释掉ip或者设置0.0.0.0都是局域网访问
#bind 127.0.0.1
#端口号
port 39690
 
#指定了记录日志的文件
logfile /home/basic/redis-3.2.8/cluster-conf/39690/redis.log

#redis后台运行
daemonize yes
#pidfile文件对应39690,39691,39692
pidfile /var/run/redis_39690.pid

#该目录要事先创建好,数据目录,数据库的写入会在这个目录。rdb、aof文件也会写在这个目录
dir /home/basic/redis-3.2.8/cluster-conf/39690/
 
#是否开启集群
cluster-enabled yes
 
#集群配置文件的名称,每个节点都有一个集群相关的配置文件,持久化保存集群的信息,
#这个文件并不需要手动配置,这个配置文件有Redis生成并更新,
#每个Redis集群节点需要一个单独的配置文件,请确保与实例运行的系统中配置文件名称不冲突。
cluster-config-file nodes-39690.conf
 
#节点互连超时的阀值。集群节点超时毫秒数
cluster-node-timeout 5000
 
#默认redis使用的是rdb方式持久化,这种方式在许多应用中已经足够用了,
#但是redis如果中途宕机,会导致可能有几分钟的数据丢失,
#根据save来策略进行持久化,Append Only File是另一种持久化方式,可以提供更好的持久化特性,
#Redis会把每次写入的数据在接收后都写入 appendonly.aof 文件,
#每次启动时Redis都会先把这个文件的数据读入内存里,先忽略RDB文件。
appendonly yes
#权限参数设置为no,就是不需要权限验证
protected-mode no
2.6 启动redis

按以下命令依次启动所有redis节点

$ ./redis-server ../cluster-conf/39690/redis.conf &
$ ps -ef |grep redis
2.7 准备redis-trib.rb的运行环境

redis-trib.rb是官方提供的Redis Cluster的管理工具,无需额外下载,默认位于源码包的src目录下,但因该工具是用ruby开发的,所以需要准备相关的依赖环境。
据说安装redis-gem最低需要2.2.2版本的Ruby,而centos7 yum库中默认的是2.0.0,所以此处自己下载了稳定版本Ruby-2.4.5

# 安装ruby
# yum -y install wget
# wget https://cache.ruby-lang.org/pub/ruby/2.4/ruby-2.4.5.tar.gz
# tar -xvf ruby-2.4.5.tar.gz
# cd ruby-2.4.5
# ./configure --prefix=/usr/local/ruby
# make
# make install prefix=/usr/local/ruby
# vi /etc/profile
PATH=/usr/local/ruby/bin:$PATH
export PATH

# 安装redis-3.3.0.gem
# wget http://rubygems.org/downloads/redis-3.3.0.gem
# gem install -l redis-3.3.0.gem

# 或直接执行如下命令安装
# gem install redis
2.8 创建集群

貌似需要使用root用户启动才可以,并且在创建集群之前,要把指定的所有节点的redis服务启动起来。

/home/basic/redis-3.2.8/src/redis-trib.rb create --replicas 1 192.168.24.130:39690 192.168.24.130:39691 192.168.24.130:39692 192.168.24.131:39690 192.168.24.131:39691 192.168.24.131:39692 192.168.24.132:39690 192.168.24.132:39691 192.168.24.132:39692

当提示时输入 yes

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

当看到如下内容时,则成功创建集群

在这里插入图片描述

2.9 验证

在一台服务器上通过客户端登录redis

$ ./redis-cli -c -p 39691
$ > set myKey myValue
$ > exit

在另外一台服务骑上登录进行查看

$ ./redis-cli -c -p 39692
$ > get myKey
$ > myValue
$ > exit

如果可以获取到值则说明集群搭建成功。

3、异常

3.1 使用make编译时报错
make cc Command not found,make: * [adlist.o] Error 127

原因是没有安装gcc gc++环境,执行以下命令即可。

# yum -y install gcc gcc-c++
3.2 make编译时报错
error: jemalloc/jemalloc.h: No such file or directory

原因是jemalloc重载了Linux下的ANSI C的malloc和free函数。解决办法:

$ make MALLOC=libc
3.3 gem install redis时报错
3.3.1 zlib报错
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 库,执行以下代码

# yum install -y zlib-devel
# cd /usr/local/ruby-2.4.5/etc/zlib
# ruby extconf.rb
# vi Makefile
# 将修改zlib文件夹下的Makefile
# zlib.o: $(top_srcdir)/include/ruby.h
# 将 $(top_srcdir) 改为: ../..
# make && make install
3.3.2 ssl报错
ERROR:  While executing gem ... (Gem::Exception)
    Unable to require openssl, install OpenSSL and rebuild ruby (preferred) or use non-HTTPS sources

原因是因为缺少openssl支持

# yum install openssl-devel -y
# cd /usr/local/ruby-2.4.5/ext/openssl
# ruby ./extconf.rb
# vi Makefile
# 在文件顶部添加:top_srcdir = ../..
# make && make install
# 然后在执行 gem install redis
3.4 ruby 进行make install 时报错
 No rule to make target `/include/ruby.h', needed by `zlib.o'.  Stop.

修改ruby-2.4.5/ext/zlib文件夹下的Makefile

# zlib.o: $(top_srcdir)/include/ruby.h
# 将 $(top_srcdir) 改为: ../..
# make && make install

此报错并未在前两个节点解决,在第三个节点不存在该错误,集群管理工具只需要一个节点具备就可以,所以在第三个节点上启动的集群

3.5 停止所有节点后重启集群报错
 Node 192.168.24.130:39690 is not empty. Either the node already knows other nodes (check with CLUSTER NODES) or contains some key in database 0.

原因参考redis学习之集群报错Node is not empty
解决办法,删除各个节点的appendonly.aof,nodes.conf,dump.rdb 文件,然后再次启动redis集群即可。

4、参考文献

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值