redis 集群搭建


  • Redis集群 安装、命令、API 
  • window 安装 redis
  • java Jedis api:redis集群api JedisCluster、redis连接池api JedisPool
  • Redis 集群搭建、Spring Data Redis使用

  • redis 集群搭建

  • redis报错信息:CLUSTERDOWN Hash slot not served 和 Not all 16384 slots are covered by nodes


建议:
1.首先需要确定Redis集群多少个Redis节点。
  一般推荐至少集群3个或3个以上的Redis节点。
  原因:集群中只有2个Redis节点的话,因为集群之间当有某一个Redis节点失效了的话,
	是需要集群中超过半数的Redis节点进行投票判断该某个Redis节点是否失效了,所以如果只有集群中只有2个Redis节点的话,
	其中一个Redis节点失效了之后,只剩下一个有效节点的话,是无法达到“超过半数的Redis节点进行投票判断”的条件的,
	所以要求在搭建Redis集群中应至少集群3个或3个以上的Redis节点才符合要求。

2.确定Redis集群中每个“主”Redis节点都应该至少拥有一个“从”Redis节点以上,那么不仅能保证“从”Redis节点随时备份“主”Redis节点中的数据,
  并且能保证当“主”Redis节点失效了之后,会有对应的一个“从”Redis节点加入到Redis集群中,替代失效的“主”Redis节点,
  否则整个Redis集群就会缺少部分数据库数据,而无法达到真正集群的效果和要求。

3.因为至少需要配置 3个“主”Redis节点,而每个“主”Redis节点还需要配置 1个“从”Redis节点,所以一共需要配置 6个Redis节点,
  而每个Redis节点都部署在不同的服务器上的话,则需要6台服务器,也即6台虚拟机。
1.准备步骤
	根据官方搭建Redis群集的要求,至少需要3个主节点,因此在生产环境上一般来说3个主节点应该对应3台机器,然后每个主节点对应一个从节点,
	那么便有3个从节点,对应的是需要另外3台机器,因此最终3台主节点+3台从节点需要有6台机器。

	1.此处使用3台机器搭建redis伪集群
		192.168.88.100、192.168.88.101、192.168.88.102
		此处每台机器中分别配置部署2个redis节点,因此3台机器便有6个redis节点,模拟3台主节点+3台从节点。
		注意:没有手动指定哪台机器中的redis节点就是主或者从,是通过redis集群的自动分配哪台机器下的redis节点为主或者为从。
	2.官网 https://redis.io/download 下载最新稳定版 redis-5.0.5.tar.gz
 	3.环境准备
		1.第一步:每台机器 执行下面安装命令
			yum -y install ruby ruby-devel rubygems rpm-build
	  		gem install redis

	 	2.第二步:如果执行 gem install redis 报错如下:
			Fetching: redis-4.1.2.gem (100%)
			ERROR:  Error installing redis:
        				redis requires Ruby version >= 2.3.0.
		  原因:此处要求Ruby 的版本大于等于 2.3.0,而已安装的Ruby 版本较低,因此更新Ruby 版本。查看ruby版本命令:ruby --version。
		  解决:1.安装curl:yum install curl
		            2.可查看官网首页得知 查询最新安装命令。rvm官网:https://rvm.io/
				1.安装 GPG keys:gpg2 --recv-keys 409B6B1796C275462A1703113804BB82D39DC0E3 7D2BAF1CF37B13E2069D6956105BD0E739499BDB
				2.安装 rvm命令:可以是 \curl -sSL https://get.rvm.io | bash -s stable 或者是 curl -L get.rvm.io | bash -s stable
					下载两个文件rvm-1.29.8.tgz(1.2M大小)、rvm-1.29.8.tgz.asc(833B大小)
				3.rvm会继续自动解压和安装,无需自己手动继续解压安装。rvm默认安装在 /usr/local/rvm 目录下。
				4.刷新重新加载后即可执行rvm命令:source /usr/local/rvm/scripts/rvm
		            3.查看ruby版本:ruby --version
		            4.查看rvm库中已知的ruby版本:rvm list known
		            5.更新Ruby:
				1.rvm list known命令显示出的列表里面的ruby 版本都可以拿来安装。
				2.此处安装Ruby版本按照报错信息中的要求,安装大于等于2.3.0版本Ruby即可:rvm install 2.3.0 
				3.查看ruby版本命令:ruby --version
					此时打印出 ruby 2.3.0p0 (2015-12-25 revision 53290) [x86_64-linux]。
					表示2.3.0版本已安装成功,此时再次执行 gem install redis。
				4.如果此时查看ruby版本还不是最新安装的版本的话,可执行下面的命令
					1.使用最新安装的ruby版本:rvm use 2.3.0
					2.设置ruby默认版本:rvm use 2.3.0 --default
					3.卸载一个已知的旧版本:rvm remove 2.0.0

2.如果是 每台机器都部署 一个以上或多个redis节点的话,相当于搭建伪集群,那么可以使用以下安装方式。每台机器 都执行如下步骤进行 安装&配置。
	1.每台机器 解压、编译安装
		tar -zxvf redis-5.0.5.tar.gz -C /usr/local
	 	cd /usr/local
	  	mv redis-5.0.5 redis
	 	cd /usr/local/redis
	 	make && make install

	2.每台机器 安装完成后,/usr/local/bin目录下会自动生成如下文件。保证该目录下 不存在dump.rdb 和 appendonly.aof 两个持久化数据文件,保证数据库是干净的空的。
		redis-benchmark
		redis-check-aof
		redis-check-rdb
		redis-cli
		redis-sentinel -> redis-server
		redis-server
 
	3.每台机器的 /usr/local目录下 创建一个redis-cluster的文件夹。
		1.第一台机器 /usr/local/redis-cluster目录下创建 2个分别叫做redis01、redis02的文件夹。
			mkdir -p /usr/local/redis-cluster/redis01
			mkdir -p /usr/local/redis-cluster/redis02
			cp -r /usr/local/bin /usr/local/redis-cluster/redis01 
			cp -r /usr/local/bin /usr/local/redis-cluster/redis02 
		2.第二台机器 /usr/local/redis-cluster目录下创建 2个分别叫做redis03、redis04的文件夹。
			mkdir -p /usr/local/redis-cluster/redis03
			mkdir -p /usr/local/redis-cluster/redis04
			cp -r /usr/local/bin /usr/local/redis-cluster/redis03 
			cp -r /usr/local/bin /usr/local/redis-cluster/redis04  
		3.第三台机器 /usr/local/redis-cluster目录下创建 2个分别叫做redis05、redis06的文件夹。
			mkdir -p /usr/local/redis-cluster/redis05
			mkdir -p /usr/local/redis-cluster/redis06
			cp -r /usr/local/bin /usr/local/redis-cluster/redis05 
			cp -r /usr/local/bin /usr/local/redis-cluster/redis06 
		4.最终每台机器下的 /usr/local/redis-cluster/redis01~redis06 中都有一个 bin文件夹,该文件夹都包含以下文件
			redis-benchmark
			redis-check-aof
			redis-check-rdb
			redis-cli
			redis-sentinel -> redis-server
			redis-server

	4.每台机器下 把 /usr/local/redis 下的 redis.conf 拷贝到 /usr/local/redis-cluster/redis01~redis06 的bin目录下
 		cd /usr/local/redis
		cp redis.conf /usr/local/redis-cluster/redis01/bin
		cp redis.conf /usr/local/redis-cluster/redis02/bin
		cp redis.conf /usr/local/redis-cluster/redis03/bin
		cp redis.conf /usr/local/redis-cluster/redis04/bin
		cp redis.conf /usr/local/redis-cluster/redis05/bin
		cp redis.conf /usr/local/redis-cluster/redis06/bin
 
	5.修改每台机器下的 /usr/local/redis-cluster/redis01~redis06 的bin目录下的 redis.conf
		vim /usr/local/redis-cluster/redis01~redis06 的bin目录下的 redis.conf 
		下面对应的是3台机器(每台机器2个redis节点,一共3主+3从,下面配置为IP:端口号)
			192.168.88.100:7001 
			192.168.88.100:7002 
			192.168.88.101:7003 
			192.168.88.101:7004 
			192.168.88.102:7005 
			192.168.88.102:7006

		1.修改69行:bind 本机实际IP,不能为127.0.0.1
		2.修改92行:
			第一台机器:vim /usr/local/redis-cluster/redis01/bin/redis.conf 的 port端口为 7001
				   vim /usr/local/redis-cluster/redis02/bin/redis.conf 的 port端口为 7002
			第二台机器:vim /usr/local/redis-cluster/redis03/bin/redis.conf 的 port端口为 7003
				   vim /usr/local/redis-cluster/redis04/bin/redis.conf 的 port端口为 7004
			第三台机器:vim /usr/local/redis-cluster/redis05/bin/redis.conf 的 port端口为 7005
				   vim /usr/local/redis-cluster/redis06/bin/redis.conf 的 port端口为 7006
		3.修改136行:把 daemonize no 修改为 daemonize yes,代表后台启动redis
		4.修改158行:配置 pidfile /var/run/redis_端口号.pid
		5.修改699行:配置 appendonly yes 开启AOF模式。并且会在/usr/local/redis-cluster/redis01~redis06的bin目录下自动创建 appendonly.aof文件。
		  第729行 默认配置 appendfsync everysec
		    Redis支持3种不同的模式: 
			no:不即时同步,由操作系统控制何时刷写到磁盘上,这种模式速度最快; 
			always:每次只写日志,速度较慢,但最安全; 
			everysec:每秒钟同步一次,折中的方案。
			默认的模式是“everysec”,它通常是在速度和数据安全之间折中的方法。如果你可以控制操作系统在Redis需要的时候去刷写缓冲区那可以使用“no”模式,
			能够提供更好的性能(但如果你能接受一些数据丢失,可以考虑默认的持久化模式–快照方式),相反,使用“always”模式很慢,
			但是它比“everysec”模式要安全一点。如果不确定,就使用“everysec”。
		5.修改832行:取消默认被注释的cluster-enabled yes,代表开启集群模式
		6.修改840行:取消默认被注释的同时并且配置 cluster-config-file nodes-端口号.conf
			    并且会在/usr/local/redis-cluster/redis01~redis06的bin目录下自动创建 nodes-端口号.conf文件。
		7.修改846行:取消默认被注释的cluster-node-timeout 15000,代表请求超时默认15秒
 
	6.每台机器下的启动每个redis节点服务器,通过执行 redis-server 命令,同时指定加载 redis.conf
			cd /usr/local/redis-cluster/redis01/bin
			./redis-server redis.conf
			cd /usr/local/redis-cluster/redis02/bin
			./redis-server redis.conf

			cd /usr/local/redis-cluster/redis03/bin
			./redis-server redis.conf
			cd /usr/local/redis-cluster/redis04/bin
			./redis-server redis.conf

			cd /usr/local/redis-cluster/redis05/bin
			./redis-server redis.conf
			cd /usr/local/redis-cluster/redis06/bin
			./redis-server redis.conf

	7.查看每台机器上的2个redis节点是否启动成功
		ps aux|grep redis

redis 集群搭建_第1张图片

 	7.全部机器下把 /usr/local/redis/src 下的 redis-trib.rb 拷贝到 /usr/local/redis-cluster 目录下
		cd /usr/local/redis/src
		cp redis-trib.rb /usr/local/redis-cluster

redis 集群搭建_第2张图片

	8.只需要到其中一台机器,比如1机下的 主redis节点 执行以下命令即可搭建起集群模式
		1.有两种部署集群的命令,根据redis版本而定使用哪一种。
		  因为redis 5.0以上的版本开始使用redis-cli作为创建集群的命令,其使用C语言实现集群安装部署,而redis 5.0以下使用ruby语言集群安装部署。
				1.redis 5.0以上的版本
					通过 1机下的 主redis节点 /usr/local/redis-cluster/redis01/bin目录下 redis-cli  即可进行搭建Redis集群
					cd /usr/local/redis-cluster/redis01/bin
					./redis-cli --cluster create 192.168.88.100:7001 192.168.88.100:7002 192.168.88.101:7003 192.168.88.101:7004 192.168.88.102:7005 192.168.88.102:7006 --cluster-replicas 1	
				2.redis 5.0以下的版本
					通过 1机下的 /usr/local/redis-cluster目录下 redis-trib.rb  即可进行搭建Redis集群
					cd /usr/local/redis-cluster
					./redis-trib.rb create --replicas 1 192.168.88.100:7001 192.168.88.100:7002 192.168.88.101:7003 192.168.88.101:7004 192.168.88.102:7005 192.168.88.102:7006
				3.安装过程中会询问是否安装,输入yes继续安装下去

		 2.命令参数详解:
				1.“--replicas 1”命令中的“1”:表示每个“主”Redis节点服务器后面都有1个“从”Redis节点服务器。
		  		2.命令后面还要拼接上所有每个的Redis节点服务器的“IP:端口”,每个“IP:端口”之间使用空格隔开。

		3.部署报错信息:
					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 192.168.88.100:7001 192.168.88.100:7002 192.168.88.101:7003 192.168.88.101:7004 192.168.88.102:7005 192.168.88.102:7006 --cluster-replicas 1
					To get help about all subcommands, type:
					redis-cli --cluster help
			原因:因为redis 5.0以上的版本开始使用redis-cli作为创建集群的命令,其使用C语言实现集群安装部署,不再使用ruby语言集群安装部署
			解决:使用 /usr/local/bin 目录下的 redis-cli命令
			      执行 ./redis-cli --cluster create 192.168.88.100:7001 192.168.88.100:7002 192.168.88.101:7003 192.168.88.101:7004 192.168.88.102:7005 192.168.88.102:7006 --cluster-replicas 1	

 
3.如果是 每台机器都仅部署一个redis节点的话,可以使用以下安装方式。每台机器 都执行如下步骤进行 安装&配置。
	1.每台机器 解压、编译安装
		tar -zxvf redis-5.0.5.tar.gz -C /usr/local
	 	cd /usr/local
	  	mv redis-5.0.5 redis
	 	cd /usr/local/redis
	 	make && make install

	2.每台机器 安装完成后,/usr/local/bin目录下会自动生成如下文件。保证该目录下 不存在dump.rdb 和 appendonly.aof 两个持久化数据文件,保证数据库是干净的空的。
		redis-benchmark
		redis-check-aof
		redis-check-rdb
		redis-cli
		redis-sentinel -> redis-server
		redis-server

	3.把 /usr/local/redis/src 下的 redis-trib.rb 拷贝到 /usr/local/bin目录下
	  把 /usr/local/redis 下的 redis.conf 拷贝到 /usr/local/bin目录下
		cd /usr/local/redis/src
		cp redis-trib.rb /usr/local/bin
		cd /usr/local/redis
		cp redis.conf /usr/local/bin

	4.修改每台机器下的 /usr/local/bin 目录下的 redis.conf
		vim /usr/local/bin/redis.conf
		下面对应的是6台机器(每台机器2个redis节点,一共3主+3从,下面配置为IP:端口号)
			192.168.88.100:6379
			192.168.88.101:6379
			192.168.88.102:6379
			192.168.88.103:6379
			192.168.88.104:6379
			192.168.88.105:6379
 
		1.修改69行:bind 本机实际IP,不能为127.0.0.1
		2.修改92行:每台机器依然默认为 port 6379 即可
		3.修改136行:把 daemonize no 修改为 daemonize yes,代表后台启动redis
		4.修改158行:默认配置 pidfile /var/run/redis_6379.pid 即可
		5.修改699行:配置 appendonly yes 开启AOF模式。并且会在/usr/local/bin目录下自动创建 appendonly.aof文件。
		  第729行 默认配置 appendfsync everysec
		    Redis支持3种不同的模式: 
			no:不即时同步,由操作系统控制何时刷写到磁盘上,这种模式速度最快; 
			always:每次只写日志,速度较慢,但最安全; 
			everysec:每秒钟同步一次,折中的方案。
			默认的模式是“everysec”,它通常是在速度和数据安全之间折中的方法。如果你可以控制操作系统在Redis需要的时候去刷写缓冲区那可以使用“no”模式,
			能够提供更好的性能(但如果你能接受一些数据丢失,可以考虑默认的持久化模式–快照方式),相反,使用“always”模式很慢,
			但是它比“everysec”模式要安全一点。如果不确定,就使用“everysec”。
		5.修改832行:取消默认被注释的cluster-enabled yes,代表开启集群模式
		6.修改840行:取消默认被注释的同时并且配置 cluster-config-file nodes-6379.conf
			    并且会在/usr/local/bin目录下自动创建 nodes-6379.conf文件。
		7.修改846行:取消默认被注释的cluster-node-timeout 15000,代表请求超时默认15秒


	5.每台机器启动redis,通过执行 每台机器下的 /usr/local/bin 目录下的 redis-server 命令,同时指定加载 /usr/local/bin 目录下的 redis.conf
		cd /usr/local/bin
		./redis-server redis.conf
		ps aux|grep redis
 
	6.只需要到其中一台机器,比如1机下的 主redis节点 执行以下命令即可搭建起集群模式
		  	1.第一步:cd /usr/local/bin
			2.第二步:
				有两种部署集群的命令,根据redis版本而定使用哪一种。
				因为redis 5.0以上的版本开始使用redis-cli作为创建集群的命令,其使用C语言实现集群安装部署,而redis 5.0以下使用ruby语言集群安装部署。
				1.redis 5.0以上的版本
					通过 1机下的 主redis节点 /usr/local/bin目录下 redis-cli  即可进行搭建Redis集群
					./redis-cli --cluster create 192.168.88.100:6379 192.168.88.101:6379 192.168.88.102:6379 192.168.88.103:6379 192.168.88.104:6379 192.168.88.105:6379 --cluster-replicas 1	
				2.redis 5.0以下的版本
					通过 1机下的 /usr/local/bin目录下 redis-trib.rb  即可进行搭建Redis集群
					./redis-trib.rb create --replicas 1 192.168.88.100:6379 192.168.88.101:6379 192.168.88.102:6379 192.168.88.103:6379 192.168.88.104:6379 192.168.88.105:6379

		  		3.命令参数详解:
					1.redis默认端口:6379 
					2.“--replicas 1”命令中的“1”:表示每个“主”Redis节点服务器后面都有1个“从”Redis节点服务器。
		  			3.命令后面还要拼接上所有每个的Redis节点服务器的“IP:端口”,每个“IP:端口”之间使用空格隔开。

				4.报错信息:
					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 192.168.88.100:6379 192.168.88.101:6379 192.168.88.102:6379 192.168.88.103:6379 192.168.88.104:6379 192.168.88.105:6379 --cluster-replicas 1
					To get help about all subcommands, type:
					redis-cli --cluster help
				   原因:因为redis 5.0以上的版本开始使用redis-cli作为创建集群的命令,其使用C语言实现集群安装部署,不再使用ruby语言集群安装部署
				   解决:使用 /usr/local/bin 目录下的 redis-cli命令
				         执行 ./redis-cli --cluster create 192.168.88.100:6379 192.168.88.101:6379 192.168.88.102:6379 192.168.88.103:6379 192.168.88.104:6379 192.168.88.105:6379 --cluster-replicas 1	

			3.第三步:安装过程中会询问是否安装,输入yes继续安装下去

4.redis-cli命令的用法
	1.redis-cli -c -h {IP} -p {PORT}  # -c 表示连接集群节点
		1.使用/usr/local/redis-cluster/redis01~redis06的bin目录下的rendis-cli 或者 /usr/local/bin目录下的rendis-cli 
		  都可以连接 Redis集群下的任意一个Redis节点服务器 然后进行 正常的存储/获取数据。
	
		2.redis-cli -p 端口 -c:
			1.默认连接到127.0.0.1:端口
			2.redis-cli -p 7001~7006中的任意一个端口。
			3.-c:表示进行集群链接。

		3.redis-cli -p “主”Redis节点服务器的端口 -c:
			每个“主”Redis节点服务器已分配好哈希槽slot,自动把键值对存储到“哈希槽slot所映射到的”那个“主”Redis节点服务器中。
 
		4.redis-cli -p “从”Redis节点服务器的端口 -c:
			每个“从”Redis节点服务器 都不拥有任何的哈希槽slot,所以往“从”Redis节点服务器中存储数据时,
			会自动转为把键值对存储到“哈希槽slot所映射到的”那个“主”Redis节点服务器中。

		5.redis-cli -c -h IP -p 端口 则是指定连接某个redis节点

	2.redis-cli --cluster check IP:端口 检查集群状态,只需要填写其中一个redis节点的IP:端口即可
	3.新增redis节点到集群中
		1.往集群中添加redis主节点:redis-cli --cluster add-node {新节点IP}:{新节点端口} {任意集群节点IP}:{对应端口} 
		2.往集群中的已存在redis主节点添加redis从节点:redis-cli --cluster add-node {新节点IP}:{新节点端口} {任意集群节点IP}:{对应端口} --cluster-slave --cluster-master-id {要添加从节点的主节点ID} 
 		  使用 redis-cli --cluster check命令即可查看每个redis节点的信息,其中便可以查看到每个redis节点的ID。
		  比如说下面的信息中的c037625159e8e3bc5fc1252df6a74ed7310223b2即为这个redis主节点的ID
			M: c037625159e8e3bc5fc1252df6a74ed7310223b2 192.168.88.100:7001
   			slots:[0-5460] (5461 slots) master

5.测试集群:
	1.比如说 192.168.88.100:7001 是其中一个redis主节点,那么通过 redis-cli -c -h 192.168.88.100 -p 7001 进入操作界面。
	2.执行存储命令 set gzp nagisa 然后执行获取命令 get gzp 得出结果值"nagisa"

 


		1.执行命令:
			cd /home/data/redis/bin
			redis-cli -p 2311 -c
			127.0.0.1:2311> get ng
		  报错:(error) CLUSTERDOWN Hash slot not served
				(错误)clusterdown哈希槽未提供
 
		  执行命令:cd /home/data/redis/bin
					redis-cli --cluster check IP:2311 或 redis-trib.rb check 127.0.0.1:2311
		  报错:[ERR] Not all 16384 slots are covered by nodes.
				[错误]并非所有16384插槽都由节点覆盖
				
		2.解决:
				1.在修复之前,先使用redis-server命令启动所有的redis实例
				2.如果是使用redis-cli来搭建Redis集群的话,请使用如下修复命令。
					/home/data/redis/bin/redis-cli --cluster fix 127.0.0.1:2311
					/home/data/redis/bin/redis-cli --cluster fix 127.0.0.1:2312
				
				3.如果是使用redis-trib.rb来搭建Redis集群的话,请使用如下修复命令
					/home/redis-5.0.4/src/redis-trib.rb fix 127.0.0.1:2311
					/home/redis-5.0.4/src/redis-trib.rb fix 127.0.0.1:2312
	 
				4.注意:redis 5.0以上的版本,通过 redis-cli 进行搭建Redis集群。
						redis 5.0以下的版本,通过 redis-trib.rb 进行搭建Redis集群。

				5.执行redis-trib.rb命令可能出现的问题:
					命令:/home/redis-5.0.4/src/redis-trib.rb fix IP:端口号
					打印如下信息
						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 fix
						To get help about all subcommands, type:
						redis-cli --cluster help
						
					意思是:redis-trib.rb不再可用,因为redis-trib.rb命令的功能已经移动到redis cli命令中。
							请使用 redis-cli --cluster 子命令[参数][选项]。
							例子:redis-cli --cluster fix IP:端口号
					原因:redis 5.0以上的版本,通过 redis-cli 进行搭建Redis集群。
						  redis 5.0以下的版本,通过 redis-trib.rb 进行搭建Redis集群
	Sorry, the cluster configuration file nodes.conf is already used by a different Redis Cluster node. 
	Please make sure that different nodes use different cluster configuration files.
	
	1.原因:如果在同一台机器上启动两个redis实例的话,因为当启动每一个redis实例的时候,都会自动生成一个nodes.conf文件,
		    想要解决上面报错,要保证以下两点的其中一点:
			1.要么保证每个redis实例对应的 redis.conf(redis-端口号.conf)配置信息如下:cluster-config-file nodes-端口号.conf
			2.如果没有配置cluster-config-file信息,要么redis实例启动的时候默认自动生成的文件名都统一为nodes.conf,
			  因此在同一台机器上有多个redis实例要启动的话,要么必须保证redis实例的文件都在单独一个的文件夹中,
			  要么启动每个redis实例的时候在不同的路径下执行启动命令,因为执行启动命令默认是在当前路径下自动生成nodes.conf的,
			  所以只要保证每次启动redis实例都在不同的路径下自动生成nodes.conf,那么便不会发生覆盖nodes.conf的问题。
	
	2.解决方式1:
		本教程建议您为每个实例配置使用单独的文件夹,因此每个实例也会在其自己的文件夹上生成nodes.conf。
		在每个目录中创建一个redis.conf文件,从7000到7005。每个端口名称的文件夹就是相当于一个redis实例。
		比如:
			/tmp/redis-cluster/7000
			/tmp/redis-cluster/7001
			/tmp/redis-cluster/7002
			/tmp/redis-cluster/7003
			/tmp/redis-cluster/7004
			/tmp/redis-cluster/7005
			
		您需要在每个实例的单独文件夹(每个端口名称的文件夹)中放置redis.conf文件,并且必须从该文件夹中运行可执行文件。
		假设要执行的redis-server文件在/tmp/redis-cluster/目录下,并且每个/tmp/redis-cluster/700x文件夹上都有redis.conf 
		执行命令流程如下:
			cd /tmp/redis-cluster/7000
			../redis-server ./redis.conf
		这样,nodes.conf将在当前/tmp/redis-cluster/7000文件夹下上生成,实际即是nodes.conf将在当前文件夹下(每个端口名称的文件夹中)上生成。
		
	3.解决方式2:
			在redis.conf(redis-2311.conf)的配置文件中修改如下配置:cluster-config-file nodes-2311.conf
			在redis.conf(redis-2312.conf)的配置文件中修改如下配置:cluster-config-file nodes-2312.conf
报错3:
	1.问题:如果进入1机的redis可以拿到数据,但是进入2机的redis却拿不到同样key的数据的话,或者从别的端口进入redis拿不到数据的话,
			应重新搭建redis集群,只需要执行一条搭建redis命令即可。
	2.原因分析:每台主机之间的主redis/备redis实例之间失去了联系,所以每个redis实例之间不再是集群关系,所以需要重新搭建redis集群,
			    只需要执行一条搭建redis命令即可。
	2.解决:执行搭建redis命令 
			/home/data/redis/bin/redis-cli --cluster create IP1:2311 IP1:2312 IP2:2311 IP2:2312 IP3:2311 IP3:2312 --cluster-replicas 1
			“--replicas 1”命令中的“1”:表示每个“主”Redis节点服务器后面都有1个“从”Redis节点服务器。
报错4:
	1.执行命令:/home/data/redis/bin/redis-cli --cluster create IP1:2311 IP1:2312 IP2:2311 IP2:2312 IP3:2311 IP3:2312 --cluster-replicas 1
	2.报错:Either the node already knows other nodes (check with CLUSTER NODES) or contains some key in database 0
	3.解决:	
		1.删除各节点下的 dump.rdb 和 appendonly.aof
		2.删除各节点下的 redis.conf(redis-端口号.conf)所配置的 cluster-config-file 对应的 nodes.conf(nodes-端口号.conf)文件
		3.进入各节点下的 redis-cli -p 2311 -c、redis-cli -p 2312 -c 执行 “flushdb 数据库名” 或者 “flushall” 清空所有数据库
		  可用过获取所有key(keys *),查看是否所有key被清除完毕。
		  如果执行“flushdb 数据库名” 或者 “flushall” 清空所有数据库时,报错(error) READONLY You can't write against a read only replica,
		  表示当前进入的端口的数据库是备机,所以显示只读。
		4.各节点下重启redis
			/home/data/redis/bin/redis-server /home/data/redis/redis-2311.conf
			/home/data/redis/bin/redis-server /home/data/redis/redis-2312.conf
			ps aux|grep redis

 

你可能感兴趣的:(Redis,Redis)