redis集群

1. 三种集群

1.1 主从模式

  • 特点1.主从模式中redis数据库分为两种:主数据库(master)和从数据库(slave)  
  •  2.主数据库负责读写,从数据库只能读数据,主数据库实时同步数据到从数据库。
  •  3.一个master可以有多个slave,一个slave只能有一个master
  •  4.master挂了不影响从库的读数据,但是整个集群此时不能写数据,当master重启后,集群继续支持读数据。
  •  5.slave挂了不影响整个集群的读写数据,但是此slave停止服务,当重启后继续提供服务。
  •  6.salve不能提升为master。
  •  7.整个集群向外提供服务。
  • 优势搭建简单
  • 缺点数据库master存在单点故障,整个集群不能提供完全的高可用。
  •  单机的内存限制了整个集群可写的数据量。

1.2 sentinel模式

sentinel模式中文读作哨兵模式,是从主从模式上发展过来的。

  • 特点.在主从模式的基础上,增加了哨兵。
  •  2.当master挂了后,sentinel会从slave从选择一个作为master,并修改他们的配置文件,其他slave的配置slaveof也会被修改。
  •  3.当挂了的master重启后,将不再作为master,而是降级为slave。
  •  4.为了防止sentinel挂了,整个集群停止服务,启动多个sentinel形成sentinel集群。
  •  5.多个sentinel之间会自动监控

  •  6.sentinel最好不要和redis部署在同一台机器上,不然redis的服务挂了后,sentinel也挂了。
  •  7.sentinel集群对外提供服务,不需要直连master,slave
  • 优势
  • 整个集群不存在单点故障,master挂了后,选择slave自动提升为master。
  • 缺点
  • 由于本质还是主从模式,所以整个集权可写入的数据大小受限于
  • 单个机器内存的大小。

1.3 cluster模式

cluster的出现是为了解决单机容量有限的集群方案,会对写入的数据进行分片,写入多个Redis实例中。

  • 特点
  • 1.多个redis节点网络互联,数据共享
  • 2.如果配置了俩个副本三个分片,则需要六个Redis实例,当数据过大时,可以增加机器扩容。
  • 3.每个集群至少需要三个主数据库才能正常运行。
  • 4.所有节点都是一主一从(可以配置一主多从),其中slave不提供服务,只作为备用
  • 5.不支持批量命令(如:mget,mset),因为redis需要把key均匀的分布到多个节点上。
  • 优点
  • 集群写入数据容量没有限制,支持大量数据缓存。高可用
  • 缺点
  • client实现复杂,提升了开发的难度

2.搭建

2.1单机安装redis安装

下载源码包

// redis命令默认目录
	/usr/local/bin
	// 我们新建的目录
		//日志,aof,备份存放目录
		/homepa1/redis/redisdataX
		//配置文件的目录
		/homepa1/redis/redisconf
		//redis解压的源码
		/homepa1/redis/redis-5.0.7

2.2 配置主从模式

机器信息

我们在一台机器上模拟。

ip

主从

端口

192.168.0.1


6000

192.168.0.1


6001

192.168.0.1


6002

master-6000配置

cd /homepa1/redis/redisconf
		vim redis6000.conf
	
		bind   192.168.0.1  //监听ip, 多个ip以空格分割,客户端 -h 配置的参数(如果服务器有多个网卡,指定暴露服务的ip)
		port    6000 //监听端口
		daemonize yes // 允许后台启动
		logfile "/homepa1/redis/redisdata6000/redis.conf" //日志文件
		dir   /homepa1/redis/redisdata600 //数据库备份文件存放目录
		masterauth pass9527 //slave连接密码
		requirepass pass9527 //master连接密码
		appendonly yes /在配置的dir目录下生成,appendonly.aof文件,将每一次写操作请求都追加到appendonly.aof文件

slave-6001配置

cd /homepa1/redis/redisconf
vim redis6001.conf
		
bind   192.168.0.1  	//监听ip,多个ip以空格分割,客户端 -h 配置的参数(如果服务器有多个网卡,指定暴露服务的ip)
port    6001 			//监听端口
replicaof 192.168.0.1 6000 		// mastert ip和端口
daemonize yes 			// 允许后台启动
logfile "/homepa1/redis/redisdata6001/redis.conf" 		//日志文件
dir   /homepa1/redis/redisdata6001 		//数据库备份文件存放目录
masterauth pass9527 	//slave连接密码
requirepass pass9527 	//master连接密码
appendonly yes 		//在配置的dir目录下生成,appendonly.aof文件,将每一次写操作请求都追加到appendonly.aof文件

slave-6002配置

cd /homepa1/redis/redisconf
vim redis6002.conf
		
		
bind   192.168.0.1  //监听ip, 多个ip以空格分割,客户端 -h 配置的参数(如果服务器有多个网卡,指定暴露服务的ip)
port    6002 //监听端口
replicaof 192.168.0.1 6000 // mastert ip和端口
daemonize yes // 允许后台启动
logfile "/homepa1/redis/redisdata6002/redis.conf" //日志文件
dir   /homepa1/redis/redisdata6002 //数据库备份文件存放目录
masterauth pass9527 //slave连接密码
requirepass pass9527 //master连接密码
appendonly yes /在配置的dir目录下生成,appendonly.aof文件,将每一次写操作请求都追加到appendonly.aof文件

分别启动三个redis实例

redis-server /homepa1/redis/redisconf/redis6000.conf
redis-server /homepa1/redis/redisconf/redis6001.conf
redis-server /homepa1/redis/redisconf/redis6002.conf

2.3 配置哨兵模式

机器信息

我们在一台机器上模拟。

ip

主从

端口

192.168.0.1


6000

192.168.0.1


6001

192.168.0.1


6002

192.168.0.1

哨兵

6003

192.168.0.1

哨兵

6004

master和slalve的参考【配置主从模式】

配置sentinel-6003

cd /homepa1/redis/redisconf
vim sentinel6003.conf
		
daemonize yes  //后台启动
logfile "/homepa1/redis/redisdata6003/sentinel.log"  //日志文件
dir /homepa1/redis/redisdata6003 // 工作目录
sentinel monitor mymaster 192.168.0.1 6000 2 //判断master失效至少需要2个sentinel同意,建议设置为n/2+1,n为sentinel个数 
sentinel auth-pass mymaster pass9527 // password
sentinel down-after-milliseconds mymaster 30000 //判断master主观下线时间,默认30s

配置sentinel-6004

cd /homepa1/redis/redisconf
vim sentinel6004.conf
		
daemonize yes  //后台启动
logfile "/homepa1/redis/redisdata6004/sentinel.log"  //日志文件
dir /homepa1/redis/redisdata6004 // 工作目录
sentinel monitor mymaster 192.168.0.1 6000 2 //判断master失效至少需要2个sentinel同意,建议设置为n/2+1,n为sentinel个数 
sentinel auth-pass mymaster pass9527 // password
sentinel down-after-milliseconds mymaster 30000 //判断master主观下线时间,默认30s

启动哨兵

redis-sentinel /homepa1/redis/redisconf/sentinel6003.conf
redis-sentinel /homepa1/redis/redisconf/sentinel6004.conf