网上已经有很多类似教程,我只是简单记录一下其主要过程和遇到的问题。
1 软件准备
虚拟机:centos 7.x
redis版本:4.0.9
ruby版本:ruby 2.4.0p0 (2016-12-24 revision 57164) [x86_64-linux]
软件准备遇到的问题:
安装ruby过程中:
Error running 'requirements_centos_libs_install autoconf automake bison libffi-devel libtool readline-devel sqlite-devel zlib-devel libyaml-devel
openssl-devel',
解决:一顿yum install 缺少的lib
2 redis.conf配置文件
复制出6份redis_8001conf、redis_8002conf、redis_8003conf、redis_8004conf、redis_8005conf、redis_8006conf
为什么要6份呢?因为集群要求(最少3主),如果每个主节点需要1个备份而集群少于6个节点则报错如下:
>>> Creating cluster
*** ERROR: Invalid configuration for cluster creation.
*** Redis Cluster requires at least 3 master nodes.
*** This is not possible with 4 nodes and 1 replicas per node.
*** At least 6 nodes are required.
配置文件每份内容大致如下:
daemonize yes
port 8001
bind 你的ip
pidfile /var/run/redis_8001.pid
dir /data/redis_data/8001
cluster-enabled yes
cluster-config-file nodes_8001.conf
cluster-node-timeout 15000
cluster-require-full-coverage no
appendonly yes
3 启动redis服务
分别启动6个redis服务
$ cd redis/src
$ ./redis-server ../redis_8001.conf
每个redis服务启动成功的话:
11815:C 01 Jun 11:59:32.966 # oO0OoO0OoO0Oo Redis is starting oO0OoO0OoO0Oo
11815:C 01 Jun 11:59:32.966 # Redis version=4.0.9, bits=64, commit=00000000, modified=0, pid=11815, just started
11815:C 01 Jun 11:59:32.966 # Configuration loaded
查询redis进程ps -ef|grep redis,redis进程后有[cluster]标记:
user 11801 1 0 11:59 ? 00:00:02 ./redis-server xxx.xx.xx.xx:8001[cluster]
4 启动redis集群
Redis的实例全部运行之后,还需要redis-trib.rb
工具来完成集群的创建。
redis-trib.rb
二进制文件在Redis包主目录下的src
目录中,运行该工具依赖Ruby(yum -y install ruby rubygems)
环境和gem(gem install redis)
,因此需要提前安装。(引自:https://blog.csdn.net/huwh_/article/details/79242625)
$ cd redis/src
$ ./redis-trib.rb create --replicas 1 ip:8001 ip:8002 ip:8003 ip:8004 ip:8005 ip:8006
成功的话:
此处遇到的问题:
cluster启动报错:
>>> Creating cluster
[ERR] Sorry, can't connect to node xxx.xx.xx.xxx:8001
解决:1、查看redis配置文件bind参数的ip和启动时的命令中的ip是否一致 2、查看redis配置文件有没有添加密码验证,有则取消。3、网上所说的ruby版本过低??
5 验证集群
很简单,测试以集群方式登录某一节点,创建一个key,去另一个节点get等等验证方式。
集群登录节点方式:
$ cs redis/src
$ ./redis-cli -c -h 127.0.0.1 -p 8001
6 集群密码
以上方式创建的集群是无密码的,直接可以拿来用。
给集群添加密码1234 方式如下:
依次登陆每个节点添加集群认证(masterauth)和单个服务自己的密码(requirepass)且要保持一致:
$ redis-cli -c -h 127.0.0.1 -p 8001
> config set masterauth 1234
OK
> config set requirepass 1234
OK
> quit
$ redis-cli -c -h 127.0.0.1 -p 8001 -a 1234
> config rewrite
密码登录集群节点的命令:
redis-cli -c -h 127.0.0.1 -p 8001 -a 1234
7 集群重启遇到的问题
由于服务器重启,之前的redis集群服务未停止。后来在启动集群时,集群可以启动成功,但是新增key值,报错:
CLUSTERDOWN Hash slot not served
解决办法:
修复意外停止的集群,每一个节点执行:redis-trib.rb fix IP:端口