Redis集群搭建
一、主从关系
1、介绍
主从关系:服务器分为主服务器和从服务器,主服务器可读可写,主要进行写操作
,从服务器只能进行读操作。(在实际业务中,更多的时读操作,所以从服务器比较
多)。主节点的数据会自动复制到各个从服务器
2、操作
我们模拟一个主服务器,两个从服务器的模式:
1、在redis的安装目录下创建了一个目录 master-slave
2、 把redis配置文件复制到master-slave
redis7001.conf(主) redis7002.conf(从) redis7003.conf(从)
3、分别修改上面三个文件的端口号以及rdb持久化文件的名称,有标值性, 并aof关闭
4、启动redis时指定上面的三个配置文件,开启三个redis服务
redis-server redis7001.conf
redis-server redis7002.conf
redis-server redis7003.conf
5、在图形化软件中开启三个窗口,比较容易观察
使用:
info replication
命令来查看三个服务器的状态,当服务器刚打开时,role都为master,都是主服务,
现在要将7002,7003变成从服务,分别在7002,7003输入命令:
slaveof 127.0.0.1 7001,
现在已经将7002,7003挂载上了7001,再次使用:
info replication
来查看三个服务器的状态:
验证:在主节点可以写入数据,在字节点不能写入数据,可以读到主节点写入的信息
3、扩展
1、当主节点挂了,子节点并不会自动变成主节点,只会陷入等待状态。按说主节点挂了,要有个服务器自动变成主节点,这就是下边的哨兵模式
2、如果有新的从节点加入了集群,会自动获取加入之前集群已经存在的数据
3、可以使用slaveof no one,将子节点变成主节点
二、哨兵模式
在主从模式中,当master服务器挂掉服务后,子服务器就没有主服务器。而哨兵模式就可以在主服务器挂掉后,自动选择一个从服务器变做主服务器,不影响整个服务的使用。
使用方式
编辑sentinel.conf文件:
vi sentinel.conf
更改文件中:
sentinel monitor mymaster 127.0.0.1 6379 2
解释:监控主服务器
127.0.0.1:主服务器的地址
6379:主服务器的端口号
2:表示有多少个哨兵选择redis从服务器后,这个从服务器可以变成主服务器
启动哨兵:
redis-sentinel sentinel.conf
实例:
启动三个服务,搭个主从模式:
启动哨兵:
这里显示mster是7003,因为我已经停过一次主服务器了,哨兵选择了7003作为主服务
再次停掉7003这个服务,显示如下:
哨兵又选择了7002作为主服务,都是哨兵操作的。
三、去中心化集群
哨兵的缺点:
1、没有解决单节点的问题:当写操作过多时,单主节点无法满足要求
2、持久化文件始终在一个服务器上:如果服务器崩溃,数据就丢失了
1、简介
在去中心化模式中,没有中心,又都是中心,比如上图中,三个主节点,redis会给
三个主节点分配槽点,槽点一共有16384个,会平均分配给每个主节点。当我们输入数
据时,redis会计算存入的数据的key适合存入到那个节点的范围,就会自动存到对应的
节点。
2、Redis分配节点和数据的解释
Redis集群没有使用传统的一致性哈希来分配数据,而是采用的另外一种叫做哈希槽(hash slot)的方式进行分配的。redis cluster默认分配了16384个slot。集群中有多少个
主节点,就将16384个槽点分配给它们。当我们set一个key时,会用CRC16算法来取模得到所属的slot,然后将这个key分到哈希槽区间的节点上,具体算法:CRC16(key)%16384.
3、实例
(1)、集群配置
搭建集群,需要先配置redis.conf文件,主从节点都需要配置。我们搭建一个三主三从的集群,端口号分别为:8001,8002,8003,8004,8005,8006
具体配置:6个配置文件,只需将端口号改成对应的
#配置端口号
port 8001
#允许所有的ip访问redis,这是reids.6的配置
bind * -::*
#开启redis后台运行
daemonize yes
#开启aof持久化
appendonly yes
#开启集群
cluster-enabled yes
#集群的配置文件,该文件自动生成
cluster-config-file nodes-8001.conf
#集群的超时时间,单位毫秒
cluster-node-timeout 5000
(2)、启动集群
(3)、为集群分配槽点
redis-cli --cluster create --cluster-replicas 1 ip:8001 ip :8002 ip:8003 ip:8004 ip:8005 ip:8006
解释:
(1)cluster-replicas:每个主节点跟随的从节点的个数
(2)ip不要写127.0.0.1,要写实际ip,不然会出现集群连不上的情况
(3)前三个ip是主节点,后边跟的子节点是谁是随机分的
(4)必须宝成aof持久化开启,redis没有初始数据
文件的变化:
产生了appondonly文件,nodes文件
(4)、访问
任连其中一个主节点都可以
(5)、扩展
如果集群中有一个主节点挂了,集群会自动选择一个它的从节点中选一个来做主节点。如果有一支主从节点全挂了,那整个集群就全挂了。