最近项目需要配置redis集群以提高项目可靠性,网上很多教程,主要参考这个在这里就当做个笔记吧
1.下载redis安装包,下载ruby安装包(虽然可以用yum install ruby直接安装,但是经常会出现安装的版本太低还是需要手动安装的情况),然后就是编译安装这两个安装包了解压进入安装包,./configure ,make && make install
之后安装yum install rubygems
gem install redis
2.新建6个目录,分别以端口为目录名,然后把编译结果复制到6个文件夹底下,redis集群要求必须有3个master,6台节点,所以需要6个,只有三个节点无法启动成功。
3.修改配置文件
主要修改这几个,其中主要是端口号相关的东西,然后复制到不同的目录(机器上)
bind 172.16.0.71
port 9001
daemonize yes
pidfile /var/run/redis_9001.pid
logfile ./9001.log
dir ./data
cluster-enabled yes
cluster-config-file nodes-9001.conf
cluster-node-timeout 15000
修改完配置后就可以到各个目录逐一启动服务了,启动结果如图所示:
可以看出,没有配置集群状态的机器后面是没有带[cluster]这个后缀的。
4.启动集群
原本的命令./redis-trib.rb create --replicas 1 172.16.0.71:9001 172.16.0.71:9002 废弃了,提示改用redis-cli
WARNING: redis-trib.rb is not longer available!
You should use redis-cli instead.
All commands and features belonging to redis-trib.rb have been moved to redis-cli.
In order to use them you should call redis-cli with the --cluster
option followed by the subcommand name, arguments and options.
Use the following syntax:
redis-cli --cluster SUBCOMMAND [ARGUMENTS] [OPTIONS]
Example:
redis-cli --cluster create 172.16.0.71:9001 172.16.0.71:9002 --cluster-replicas 1
然后执行以下命令就可以顺利启动集群了。
./redis-cli --cluster create 172.16.0.71:9001 172.16.0.71:9002 172.16.0.71:9003 172.16.0.71:9004 172.16.0.71:9005 172.16.0.71:9006 --cluster-replicas 1
然后连接集群中的一台机器:
[root@spider01 9001]# ./redis-cli -h 172.16.0.71 -p 9003
172.16.0.71:9003> set hello zillo
(error) MOVED 866 172.16.0.71:9001
172.16.0.71:9003> keys *
出现报错,百度发现是连接集群少了一个-c命令,改用./redis-cli -c -h 172.16.0.71 -p 9003就可以顺利设置键值对了。
集群配置成功。
几个简单集群查看命令:
集群
cluster info :打印集群的信息
cluster nodes :列出集群当前节点的相关信息。
有些参数是可以动态配置的,但是集群状态下是不可用的
单机状态下可以通过,config set xxx来配置,
通过config get 查看支持动态修改的配置信息:
参考博客:Redis 集群搭建详细指南 - Mafly - 博客园
https://www.cnblogs.com/mafly/p/redis_cluster.html
----------------redis4.0集群安装及简单运维---------------
1.4 使用redis-trib.rb连接集群
./redis-trib.rb create --replicas 1 192.168.6.1:22400 192.168.6.1:22401 192.168.6.2:22400 192.168.6.2:22401 192.168.6.3:22400 192.168.6.3:22401 启动集群,注意这个是有顺序的,最好将master和slave放在不同的机器上,命令中默认为一个master接一个slave,也就是奇数为master,偶数为slave。要使用redis-trib.rb,需要安装ruby环境和rubygems工具,具体的网上搜一下,有很多教程。
1.4.1常见报错:
节点数不足:上面replicas 1 是指定副本数为1,如果不指定的话会报错节点数不足。
集群节点不为空,redis集群启动时需要每个节点的数据库为空库状态,如果有一个节点存有数据则会报错节点不为空,可以客户端连接上服务器然后通过flushall 来清空数据库,最好顺便执行cluster reset来重置节点的集群状态(最好所有服务节点都执行一下以上命令)。
集群启动成功后可以通过cluster nodes查看集群节点状态,通过cluster info查看集群状态。启动成功如下图所示
1.5 节点退出重连
如果是slave 节点的话,挂掉一段时间内重启是能够被集群自动发现的,主节点挂掉的话重启后需要手动添加节点到集群中。
使用./redis-trib.rb add-node 192.168.6.2:22400(重启的节点) 192.168.1.22400(集群中节点)将节点添加到集群中,但是这样会以master的方式加入,redis节点中的数据没有丢失,如图所示
可以看到原来的slave变成了master,所以正确的方式应该是把宕机的几点以slave的方式添加为原来节点的slave,也就是主从调换了。启动节点后需要将其清空,flushall 然后cluster reset 重置节点状态,这样才能让集群接受节点的加入。使用命令
redis-trib.rb add-node --slave --master-id f413fb7e6460308b17cdb71442798e1341b56cbc(要同步的masterID) 192.168.6.7:22400(重启的节点) 192.168.6.7:22401(集群中任意节点) 将节点添加到集群。
----------------------