Redis 三种集群模式
- 主从复制模式
- 哨兵模式
- Cluster 集群模式
主从复制模式特点
- 主数据库可以进行读写操作,当读写操作导致数据变化时会自动将数据同步给从数据库。
- 从数据库一般都是只读的,并且接收主数据库同步过来的数据。
- 一个master可以拥有多个slave,但是一个slave只能对应一个master。
- slave挂了不影响其他slave的读和master的读和写,重新启动后会将数据从master同步过来。
- master挂了以后,不影响slave的读,但redis不再提供写服务,master重启后redis将重新对外提供写服务。
- master挂了以后,不会在slave节点中重新选一个master。
sentinel哨兵模式特点
1.哨兵模式是建立在主从模式的基础上,如果只有一个Redis节点,sentinel就没有任何意义
2.当master挂了以后,哨兵会在slave中选择一个做为master,并修改它们的配置文件,其他slave的配置文件也会被修改,比如slaveof属性会指向新的master
3.当master重新启动后,它将不再是master而是做为slave接收新的master的同步数据
4. 哨兵因为也是一个进程有挂掉的可能,所以哨兵也会启动多个形成一个哨兵集群
5.多哨兵配置的时候,哨兵之间也会自动监控。
6.当主从模式配置密码时,哨兵也会同步将配置信息修改到配置文件中,不需要担心
7.一个哨兵或哨兵集群可以管理多个主从Redis,多个哨兵也可以监控同一个redis
8. 哨兵最好不要和Redis部署在同一台机器,不然Redis的服务器挂了以后,哨兵也挂了
Cluster 集群模式特点
哨兵模式基本可以满足一般生产的需求,具备高可用性。但是当数据量过大到
一台服务器存放不下的情况时,主从模式或哨兵模式就不能满足需求了,这个
时候需要对存储的数据进行分片,将数据存储到多个Redis实例中。cluster模
式的出现就是为了解决单机Redis容量有限的问题,将Redis的数据根据一定的
规则分配到多台机器。
Cluster集群模式搭建(6个最小的集群,3个主3个从)
-
由于redis集群需要使用ruby命令,需要先安装ruby
yum install ruby -y #安装rubyan脚本
yum install rubygems -y #安装ruby包管理器
#先上传redis-3.0.0.gem的压缩包到服务器,切换到/usr/local/tmp
gem install redis-3.0.0.gem #安装redis和ruby接口
-
创建一个文件夹redis-cluster,在其下面分别创建6个子文件夹
1:在/usr/local目录下创建redis-cluster文件夹
cd /usr/local
mkdir redis-cluster
2:进入到/usr/local/redis-cluster目录下,创建7001-7006文件夹
mkdir 7001 mkdir 7002 mkdir 7003
mkdir 7004 mkdir 7005 mkdir 7006 -
将之前安装的redis的/usr/local/redis/etc/redis.conf配置文件复制到7001-7006文件夹下
cp /usr/local/redis/etc/redis.conf /usr/local/redis-cluster/7001 -
对7001下的redis.conf配置文件进行修改
修改7001下的redis.conf配置文件内容:
vim redis.conf
1: redis服务后台启动
daemonize yes
2: *修改每一台机器的端口号 (44行)
port 7001
3: 绑定当前机器的ip (必须设置,深坑勿入) 64行
bind ip
4: *指定数据文件存储分位置 (必须设置,深坑勿入) 187行
dir /usr/local/redis-cluster/7001/
5: aof持久化机制 504行
appendonly yes
6: 启动集群模式 632行
cluster-enabled yes
7: 每一个服务器都对应一个conf文件, 640行
整个服务器就会知道别的节点,将自己的配置告诉集群。
(这里700最好和端口对应上)
cluster-config-file nodes-7001.conf
8: 集群的有效时间ms 646行
cluster-node-timeout 15000
9: 如果有密码,去掉密码 注释 # requirepass
提示:7002-7006的配置文件参考7001,修改对应的数字即可。 -
将7001下的redis.conf配置文件分别复制到7002~7006文件夹下,编辑配置文件,修改对应的数字即可
-
启动6个redis实例,并检查是否启动成功
1.启动redis实例
/usr/local/redis/bin/redis-server /usr/local/redis-cluster/7001/redis.conf
/usr/local/redis/bin/redis-server /usr/local/redis-cluster/7002/redis.conf
/usr/local/redis/bin/redis-server /usr/local/redis-cluster/7003/redis.conf
/usr/local/redis/bin/redis-server /usr/local/redis-cluster/7004/redis.conf
/usr/local/redis/bin/redis-server /usr/local/redis-cluster/7005/redis.conf
/usr/local/redis/bin/redis-server /usr/local/redis-cluster/7006/redis.conf
- 查看是否启动成功
ps -ef | grep redis
首先到redis/src安装目录下,然后执行redis-trib.rb命令,操作集群脚本
cd /usr/local/redis/src
//执行redis-trib.rb命令: 1:代表主/从的比值,前面是主,后是从
./redis-trib.rb create --replicas
192.168.206.133:7001 192.168.206.133:7002
192.168.206.133:7003 192.168.206.133:7004
192.168.206.133:7005 192.168.206.133:7006
到此集群环境搭建完成,进行验证:
1 .连接任意一个客户端即可: -c 集群模式 -p:端口号 -h:IP地址 切换到/usr/local/redis/bin目录下
./redis-cli -c -h 192.168.206.133 -p 700*
2. 查看信息验证
cluster info 查看集群信息
cluster nodes 查看节点信息
3. 进行数据验证 set get
注意:并不是你往7001操作数据,数据就一定存储到7001中。
获取7001的数据,可能来自于其他的节点。
4. 关闭集群,只能使用命令,逐个进行关闭
/usr/local/redis/bin/redis-cli -c -h 192.168.206.133 -p 700* shutdown
Kill 进程号
(补充)当出现集群无法启动时 删除7001-7006文件夹下的所有数据文件aof,rdb,conf。再次执行6-8步。
谢谢大家的阅读!