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集群即可。