Redis主从复制、哨兵、集群的搭建【Redis学习笔记六】

584 阅读5分钟

11、Redis主从复制

1.主从复制

主从复制架构仅仅用来解决数据的冗余备份,从节点仅仅用来同步数据。

无法解决:1.master节点出现故障的自动故障转移

2 主从复制架构图

微信截图_20211025134625.png

3.搭建主从复制

# 1.准备3台机器并修改配置
- master
	port 6379
	bind * -
- slave1
	port 6380
	bind \* -::\* 这里的\要去掉(我加在这里是 \* 需要转义)
	replicaof 192.168.19.147 6379 (masterip masterport)
- slave2
	port 6381
	bind \* -::\* 这里的\要去掉(我加在这里是 \* 需要转义)
	replicaof 192.168.19.147 6379 (masterip masterport)

微信截图_20211025134910.png

# 2.启动3台机器进行测试
- cd /usr/redis/bind
- ./redis-server /root/master/redis.conf
- ./redis-server /root/slave1/redis.conf
- ./redis-server /root/slave2/redis.conf

12、Redis哨兵机制

1、哨兵Sentinel机制

Sentinel(哨兵)是Redis的高可用性解决方案:由一个或多个Sentinel实例组成的Sentinel系统可以监视任意多个主服务器,以及这些主服务器属下的所有从服务器,并在被监视的主服务器进入线下状态时,自动将下线主服务器属下的某个从服务器升级为新的主服务器。简单的说哨兵就是带有自动故障转移功能的主从架构

无法解决:1.单节点并发压力问题 2.单节点内存和磁盘物理上限

2、哨兵架构原理

微信截图_20211025135628.png

3、搭建哨兵架构

# 1.在主节点上创建哨兵配置
- 在Master对应redis.conf同目录下新建sentinel.conf文件,名字绝对不能错

# 2.配置哨兵,在sentinel.conf文件中填入内容
- sentinel monitor 被监视数据库名字(自己起名字) ip port 1

# 3.启动哨兵模式进行测试
- redis-sentinel /root/sentinel/sentinel.conf

4、通过SpringBoot操作哨兵

# redis sentinel 配置
# master书写是使用哨兵监听的那个名称
spring.redis.sentinel.master=mymaster
# 连接的不再是一个具体redis主机,书写的是多个哨兵节点
# 26379 是 sentinel服务的端口号
spring.redis.sentinel.nodes=192.168.19.147:26379 

13、Redis集群

1、集群

Redis在3.0后开始支持Cluster模式,目前Redis的集群支持节点的自动发现,支持slave-master选举和容错,支持在线分片(sharding shard)等特点。

2、集群架构图

微信截图_20211025140704.png

3、集群细节

- 所有的redis节点彼此互联(Ping-Pong机制),内部使用二进制协议优化传输速度和带宽。
- 节点的fail是通过集群中超过半数的节点检测失效时才生效
- 客户点与redis节点直连,不需要中间proxy层,客户端不需要连接集群所有节点,连接集群中任何一个可用节点计科。
- redis-cluster把所有的物理节点映射到[0-16383]slot上,负责维护node<->slot<->value

微信截图_20211025141035.png

4、集群搭建

判断一个是集群中的节点是否可用,是集群中的所用主节点选举过程,如果半数以上的节点认为当前节点挂掉,那么当前节点就是挂掉了,所以搭建redis集群时建议节点数最好为奇数,搭建集群至少需要三个主节点,三个从节点,至少需要6个节点

# 1.准备环境安装ruby以及redis集群依赖
- yum install -y ruby rubygems
- gem install redis-xxx.gem

微信截图_20211025141326.png

# 2.在一台机器创建7个目录

微信截图_20211025141408.png

# 3.每个目录复制一份配置文件
[root@localhost ~]# cp redis-4.0.10/redis.conf 7000/
[root@localhost ~]# cp redis-4.0.10/redis.conf 7001/
[root@localhost ~]# cp redis-4.0.10/redis.conf 7002/
[root@localhost ~]# cp redis-4.0.10/redis.conf 7003/
[root@localhost ~]# cp redis-4.0.10/redis.conf 7004/
[root@localhost ~]# cp redis-4.0.10/redis.conf 7005/
[root@localhost ~]# cp redis-4.0.10/redis.conf 7006/

微信截图_20211025141455.png

# 4.修改不同目录配置文件
- port 	6379 .....                		 //修改端口
- bind  bind \* -::\* 这里的\要去掉(我加在这里是 \* 需要转义)  //开启远程连接
- cluster-enabled  yes 	        			 //开启集群模式
- cluster-config-file  nodes-port.conf //集群节点配置文件
- cluster-node-timeout  5000      	   //集群节点超时时间
- appendonly  yes   		               //开启AOF持久化
- daemonize yes  // 后台启动

# 5.指定不同目录配置文件启动七个节点
- [root@localhost bin]# ./redis-server  /root/7000/redis.conf
- [root@localhost bin]# ./redis-server  /root/7001/redis.conf
- [root@localhost bin]# ./redis-server  /root/7002/redis.conf
- [root@localhost bin]# ./redis-server  /root/7003/redis.conf
- [root@localhost bin]# ./redis-server  /root/7004/redis.conf
- [root@localhost bin]# ./redis-server  /root/7005/redis.conf
- [root@localhost bin]# ./redis-server  /root/7006/redis.conf

微信截图_20211025143313.png

# 6.查看进程
- [root@localhost bin]# ps aux|grep redis

微信截图_20211025141626.png

1.创建集群
# 1.创建集群
- ./redis-cli --cluster create 192.168.19.147:7000 192.168.19.147:7001 192.168.19.147:7002 192.168.19.147:7003 192.168.19.147:7004 192.168.19.147:7005 --cluster-replicas 1

微信截图_20211025150323.png

2.查看集群状态
# 1.查看集群状态 check [原始集群中任意节点] [无]
- ./redis-cli --cluster check 192.168.19.147:7000

# 2.集群节点状态说明
- 主节点 
	主节点存在hash slots,且主节点的hash slots 没有交叉
	主节点不能删除
	一个主节点可以有多个从节点
	主节点宕机时多个副本之间自动选举主节点

- 从节点
	从节点没有hash slots
	从节点可以删除
	从节点不负责数据的写,只负责数据的同步
3.添加主节点
# 1.添加主节点 add-node [新加入节点] [原始集群中任意节点]
- ./redis-cli --cluster  add-node 192.168.19.147:7006  192.168.19.147:7005
- 注意:
	1.该节点必须以集群模式启动
	2.默认情况下该节点就是以master节点形式添加
4.添加从节点
# 1.添加从节点 add-node --slave [新加入节点] [集群中任意节点]
- ./redis-cli --cluster  add-node --slave 192.168.19.147:7006 192.168.19.147:7000
- 注意:
	当添加副本节点时没有指定主节点,redis会随机给副本节点较少的主节点添加当前副本节点
	
# 2.为确定的master节点添加主节点 add-node --slave --master-id master节点id [新加入节点] [集群任意节点]
- ./redis-cli --cluster  add-node --slave --master-id 3c3a0c74aae0b56170ccb03a76b60cfe7dc1912e 192.168.19.147:7006  192.168.19.147:7000
5.删除副本节点
# 1.删除节点 del-node [集群中任意节点] [删除节点id]
- ./redis-cli --cluster del-node 192.168.19.147:7002 0ca3f102ecf0c888fc7a7ce43a13e9be9f6d3dd1
- 注意:
 1.被删除的节点必须是从节点或没有被分配hash slots的节点
6.集群在线分片
# 1.在线分片 reshard [集群中任意节点] [无]
- ./redis-cli --cluster reshard  192.168.19.147:7000