IT数码 购物 网址 头条 软件 日历 阅读 图书馆
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
图片批量下载器
↓批量下载图片,美女图库↓
图片自动播放器
↓图片自动播放器↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁
 
   -> 大数据 -> Redis 集群模式 -> 正文阅读

[大数据]Redis 集群模式

模式

  • 主从模式
  • Sentinel模式
  • Cluster模式

主从模式

1、数据库分类

  • 主数据库(master)
  • 从数据库(slave)

2、工作机制
???????当slave启动后,主动向master发送SYNC命令。master接收到SYNC命令后在后台保存快照(RDB持久化)和缓存保存快照这段时间的命令,然后将保存的快照文件和缓存的命令发送给slave。slave接收到快照文件和命令后加载快照文件和缓存的执行命令。
???????复制初始化后,master每次接收到的写命令都会同步发送给slave,保证主从数据一致性。

3、特点

  • 主数据库可以进行读写操作,当读写操作导致数据变化时会自动将数据同步给从数据库
  • 从数据库一般都是只读的,并且接收主数据库同步过来的数据
  • 只要网络连接正常,Master会一直将自己的数据更新同步给Slaves,保持主从同步
  • 一个master可以拥有多个slave,但是一个slave只能对应一个master
  • slave挂了不影响其他slave的读和master的读和写,重新启动后会将数据从master同步过来
  • master挂了以后,不影响slave的读,但redis不再提供写服务,master重启后redis将重新对外提供写服务
  • master挂了以后,不会在slave节点中重新选一个master

4、安全设置:
???????当master节点设置密码后,客户端访问master需要密码,启动slave需要密码,在配置文件中配置即可,客户端访问slave不需要密码

5、缺点:
???????master节点在主从模式中唯一,若master挂掉,则redis无法对外提供写服务

6、实例

	//1、创建文件夹
	[user@localhost ~]$ mkdir -p /app/redis/master-slaver
	[user@localhost master-slave]$ mkdir bin 7001 7002 7003
	//2、拷贝修改配置文件
	[user@localhost master-slave]$ cd ../src
	[user@localhost src]$ cp redis-benchmark redis-check-aof redis-check-rdb redis-cli redis-sentinel redis-server ../master-slave/bin
	[user@localhost master-slave]$ cp /app/redis/redis.conf 7001/7001.conf
	[user@localhost master-slave]$ vim 7001/7001.conf
	bind 10.20.30.40             	#监听ip,多个ip用空格分隔
	daemonize yes               	#允许后台启动
	logfile "/app/redis/master-slave/7001/redis.log"                #日志路径
	dir /data/redis                 #数据库备份文件存放目录
	masterauth 123456               #slave连接master密码,master可省略
	requirepass 123456              #设置master连接密码,slave可省略
	# replicaof 10.20.30.40 7001  # 在slave的配置文件中,配置为192.168.30.128 6379的从节点
	# cluster-enabled no			# 在slave的配置文件中,配置为no
	appendonly yes                  #在/data/redis/目录生成appendonly.aof文件,将每一次写操作请求都追加到appendonly.aof 文件中
	//3、启动服务
	[user@localhost master-slave]$ cd bin
	[user@localhost bin]$ ./redis-server ../7001/7001.conf
	[user@localhost bin]$ ./redis-server ../7002/7002.conf
	[user@localhost bin]$ ./redis-server ../7003/7003.conf
	//开三个shell界面
	//[user@localhost bin]$ ./redis-cli -h 10.200.202.41 -p 7002 -a 123456
	//[user@localhost bin]$ ./redis-cli -h 10.200.202.41 -p 7003 -a 123456
	[user@localhost bin]$ ./redis-cli -h 10.20.30.40 -p 7001 -a 123456
	10.20.30.40:7001> info replication
	# Replication
	role:master
	connected_slaves:2
	slave0:ip=10.200.202.41,port=7002,state=online,offset=686,lag=1
	slave1:ip=10.200.202.41,port=7003,state=online,offset=686,lag=0
	master_failover_state:no-failover
	master_replid:7bb378122709dace3458a8fdbbcd201b96e96d20
	master_replid2:0000000000000000000000000000000000000000
	master_repl_offset:686
	second_repl_offset:-1
	repl_backlog_active:1
	repl_backlog_size:1048576
	repl_backlog_first_byte_offset:1
	repl_backlog_histlen:686
	//4、数据演示
	10.200.202.41:7001> set name hello
	(error) CLUSTERDOWN Hash slot not served
	[user@localhost bin]$ ./redis-cli --cluster check 10.20.30.40:7001
	[ERR] Not all 16384 slots are covered by nodes
	[user@localhost bin]$ ./redis-cli --cluster fix 10.20.30.40:7001
	Can I set the above configuration? (type 'yes' to accept): yes
	//一定要输入yes,不是y
	10.200.202.41:7001> set name hello
	OK
	//在master节点写入的数据,很快就同步到slave节点上,而且在slave节点上无法写入数据
	10.200.202.41:7002> get name
	"hello"
	10.200.202.41:7002> set six man
	(error) READONLY You can't write against a read only replica.

Sentinel模式

1、概述
???????Redis 的 Sentinel 系统用于管理多个 Redis 服务器(instance), 该系统执行以下三个任务:

  • 监控(Monitoring):
    • Sentinel 会不断地检查主服务器Master和从服务器Slaves是否运作正常
    • Sentinel可以监控任意多个Master和该Master下的Slaves(即多个主从模式)
    • 同一个哨兵下的、不同主从模型,彼此之间相互独立
  • 提醒(Notification): 当被监控的某个 Redis 服务器出现问题时, Sentinel 可以通过 API 向管理员或者其他应用程序发送通知。
  • 自动故障迁移(Automatic failover)
    • 当一个主服务器不能正常工作时, Sentinel 会开始一次自动故障迁移操作, 它会进行选举,将其中一个从服务器升级为新的主服务器,修改配置文件, 并让失效主服务器的其他从服务器改为复制新的主服务器; 当客户端试图连接失效的主服务器时, 集群也会向客户端返回新主服务器的地址, 使得集群可以使用新主服务器代替失效服务器。
    • Sentinel网络:监控同一个Master的Sentinel会自动连接,组成一个分布式的Sentinel网络,互相通信并交换彼此关于被监视服务器的信息,在sentinel网络中,只要还有一个sentinel活着,就可以实现故障切换。
    • 故障切换的过程:
      • 投票(半数原则)
        当任何一个Sentinel发现被监控的Master下线时,会通知其它的Sentinel开会,投票确定该Master是否下线(半数以上,所以sentinel通常配奇数个)。
      • 选举
        当Sentinel确定Master下线后,会在所有的Slaves中,选举一个新的节点,升级成Master节点。其它Slaves节点,转为该节点的从节点。

2、工作机制

  • 每个sentinel 以每秒钟一次的频率向它所知的master,slave 以及其他sentinel 实例发送一个 PING 命令,如果一个实例距离最后一次有效回复 PING 命令的时间超过 down-after-milliseconds 选项所指定的值, 则这个实例会被sentinel标记为主观下线。
  • 如果一个master被标记为主观下线,则正在监视这个master的所有sentinel 要以每秒一次的频率确认master的确进入了主观下线状态,当有足够数量的sentinel(大于等于配置文件指定的值)在指定的时间范围内确认master的确进入了主观下线状态, 则master会被标记为客观下线
  • 在一般情况下, 每个sentinel会以每 10 秒一次的频率向它已知的所有master,slave发送 INFO 命令。
    当master被sentinel标记为客观下线时,sentinel向下线的master的所有slave发送 INFO 命令的频率会从 10 秒一次改为 1 秒一次
  • 若没有足够数量的sentinel同意master已经下线,master的客观下线状态就会被移除;
    若master重新向sentinel的 PING 命令返回有效回复,master的主观下线状态就会被移除

???????使用sentinel模式的时候,客户端就不要直接连接Redis,而是连接sentinel的ip和port,由sentinel来提供具体的可提供服务的Redis实现,这样当master节点挂掉以后,sentinel就会感知并将新的master节点提供给使用者。

3、特点

  • sentinel模式是建立在主从模式的基础上,如果只有一个Redis节点,sentinel就没有任何意义
  • 当master挂了以后,sentinel会在slave中选择一个做为master,并修改它们的配置文件,其他slave的配置文件也会被修改,比如slaveof属性会指向新的master
  • 当master重新启动后,它将不再是master而是做为slave接收新的master的同步数据
  • sentinel因为也是一个进程有挂掉的可能,所以sentinel也会启动多个形成一个sentinel集群
  • 多sentinel配置的时候,sentinel之间也会自动监控
  • 当主从模式配置密码时,sentinel也会同步将配置信息修改到配置文件中,不需要担心
  • 一个sentinel或sentinel集群可以管理多个主从Redis,多个sentinel也可以监控同一个redis
  • sentinel最好不要和Redis部署在同一台机器,不然Redis的服务器挂了以后,sentinel也挂了

4、实例

	//1、创建文件夹
	[user@localhost ~]$ mkdir -p /app/redis/sentinel
	[user@localhost sentinel]$ mkdir bin 7001 7002 7003
	//2、拷贝修改配置文件
	[user@localhost sentinel]$ cd ../src
	[user@localhost src]$ cp redis-benchmark redis-check-aof redis-check-rdb redis-cli redis-sentinel redis-server ../sentinel/bin
	[user@localhost src]$ cp ../sentinel.conf 7001/7001.conf
	[user@localhost src]$ vim 7001/7001.conf
	bind 10.20.30.40             	#监听ip,多个ip用空格分隔
	daemonize yes               	#允许后台启动
	logfile "/app/redis/master-slave/7001/redis.log"                #日志路径
	dir /data/redis                 #数据库备份文件存放目录
	masterauth 123456               #slave连接master密码,master可省略
	requirepass 123456              #设置master连接密码,slave可省略
	# replicaof 10.20.30.40 7001  # 在slave的配置文件中,配置为192.168.30.128 6379的从节点
	# cluster-enabled no			# 在slave的配置文件中,配置为no
	appendonly yes                  #在/data/redis/目录生成appendonly.aof文件,将每一次写操作请求都追加到appendonly.aof 文件中

Cluster模式

参考资料

  大数据 最新文章
实现Kafka至少消费一次
亚马逊云科技:还在苦于ETL?Zero ETL的时代
初探MapReduce
【SpringBoot框架篇】32.基于注解+redis实现
Elasticsearch:如何减少 Elasticsearch 集
Go redis操作
Redis面试题
专题五 Redis高并发场景
基于GBase8s和Calcite的多数据源查询
Redis——底层数据结构原理
上一篇文章      下一篇文章      查看所有文章
加:2021-10-02 14:56:26  更:2021-10-02 14:58:33 
 
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁

360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年11日历 -2024/11/23 23:26:10-

图片自动播放器
↓图片自动播放器↓
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
图片批量下载器
↓批量下载图片,美女图库↓
  网站联系: qq:121756557 email:121756557@qq.com  IT数码