>  기사  >  데이터 베이스  >  Redis 클러스터 마스터-슬레이브 모드에 대한 자세한 설명

Redis 클러스터 마스터-슬레이브 모드에 대한 자세한 설명

WBOY
WBOY앞으로
2022-04-26 11:59:014668검색

이 기사에서는 클러스터 관련 이슈를 주로 소개하는 Redis에 대한 관련 지식을 제공하고, 모두의 마스터-슬레이브 클러스터 등을 포함하여 마스터-슬레이브 모드의 내용을 자세히 설명합니다. 함께, 그것이 모두에게 도움이 되기를 바랍니다.

Redis 클러스터 마스터-슬레이브 모드에 대한 자세한 설명

추천 학습: Redis 비디오 튜토리얼

1. 클러스터가 필요한 이유는 무엇입니까?

실제 개발에서는 다음과 같은 이유로 엔지니어링 프로젝트에서 하나의 Redis만 사용할 수 없습니다.

(1) 구조에서 단일 Redis 서버가 발생합니다 단일 실패 지점, 하나의 서버가 모든 요청 로드를 처리해야 함,

(2)

용량에서 단일 Redis 서버 메모리 용량은 제한, 하나의 Redis 서버도 메모리 용량은 256G이며 모든 메모리를 Redis 스토리지 메모리로 사용할 수 없습니다. 일반적으로 단일 Redis에서 사용하는 최대 메모리는 20G를 초과해서는 안됩니다. (3)

단일 Redis 서버의 읽기 및 쓰기 성능은 제한되어 있습니다

. 클러스터를 사용하면 읽기 및 쓰기 기능을 향상시킬 수 있습니다. 2. 마스터-슬레이브 모드

소개

현재 Redis에는 세 가지 클러스터 모드가 있습니다. 즉,
마스터-슬레이브 모드, 센티넬 모드, 클러스터 모드

가 가장 간단합니다. 세 가지 모드. 마스터-슬레이브 복제에서는 한 Redis 서버에서 다른 Redis 서버로 데이터를 복사하는 것을 의미합니다. 전자를 마스터 노드(마스터/리더)라고 하고, 후자를 슬레이브 노드(슬레이브/팔로워)라고 합니다.

참고:

(1)
데이터 복제는 단방향

으로, 마스터 노드에서 슬레이브 노드로만 이루어집니다. 마스터는 주로 쓰기 작업을 하고, 슬레이브는 읽기 작업을 주로 합니다. (2)기본적으로 각 Redis 서버는
마스터 노드입니다. (3)마스터 노드는 여러 슬레이브 노드를 가질 수 있지만(또는 슬레이브 노드 없음),
슬레이브 노드는 마스터 노드 .

Function

1.

데이터 중복

: 마스터-슬레이브 복제는 지속성 외에 데이터 중복 방법인 데이터의 핫 백업을 구현합니다. 2. 실패 복구
: 마스터 노드에 문제가 발생하면 슬레이브 노드가 서비스를 제공하여 신속한 장애 복구를 달성할 수 있습니다. 이는 실제로 일종의 서비스 중복입니다. 3. 고가용성(클러스터)의 초석
: 마스터-슬레이브 복제는 Sentinel 및 클러스터 구현의 기초이기도 합니다. 따라서 마스터-슬레이브 복제는 Redis 고가용성의 기초입니다. 4. 로드 밸런싱
: 읽기-쓰기 분리와 결합된 마스터-슬레이브 복제를 기반으로 마스터 노드는 쓰기 서비스를 제공하고 슬레이브 노드는 읽기 서비스를 제공할 수 있습니다(즉, Redis 데이터를 쓸 때 애플리케이션이 마스터 노드에 연결하고 Redis를 읽습니다. 데이터가 생성되면 애플리케이션은 슬레이브 노드를 연결하여 서버 로드를 공유합니다. 특히 쓰기가 적고 읽기가 많은 시나리오에서 여러 슬레이브 노드를 통해 읽기 로드를 공유하면 동시성이 크게 증가할 수 있습니다. Redis 서버의 예를 들어 전자상거래 웹사이트에서

제품은 한 번만 업로드하면 되지만 사용자는 여러 번 볼 수 있습니다
, 즉 "

적게 쓰고 더 많이 읽으세요"를 찾을 수 있습니다. ", 우리는 읽기 및 쓰기 분리를 위해 마스터-슬레이브 복제, 를 사용하여 서버에 대한 부담을 줄일 수 있습니다:

3. 마스터-슬레이브 클러스터 구축

3.1. 준비

1. 세 가지 구성 파일(원본 이름: redis.conf)을 복사하고 이름을 redis79.conf로 바꿉니다. , redis80.conf, redis81.conf.

2. 구성 파일 수정

(1) redis79.conf

포트 번호 수정

port 6379

백그라운드에서 실행되도록 설정

daemonize:yes

로그 파일 이름 설정

logfile “6379.log"

db 파일 이름 설정

dbfilename dump6379.rdb

(2) 수정 redis80.conf

수정 포트 번호

port 6380

백그라운드에서 실행되도록 설정

daemonize:yes

녹화 프로세스 ID 파일 이름 설정

pidfile /var/run/redis_6380.pid

로그 파일 이름 설정

logfile “6380.log"

설정 db 파일 이름

dbfilename dump6380.rdb

(3) 수정 redis81.conf

포트 번호 수정

port 6381

백그라운드에서 실행되도록 설정

daemonize:yes

녹음 프로세스 ID 파일 이름 설정

pidfile /var/run/redis_6381.pid

로그 파일 설정 이름

logfile “6381.log"

db 파일 이름 설정

dbfilename dump6381.rdb

이 속성의 기능은 다음과 같습니다.

pid(포트 ID): 프로세스의 ID가 기록되며 파일에 잠금이 설정되어 있습니다. 프로그램이 여러 번 시작되는 것을 방지합니다.
logfile: 로그 파일의 위치를 ​​지웁니다
dbfilename: dumpxxx.file #영구 파일 위치
port: 프로세스가 차지하는 포트 번호

3.2 하나의 마스터와 두 개의 슬레이브를 빌드합니다.

Redis 서버 시작

Note: 기본적으로 각 Reids 서버는 마스터 노드이며 마스터-슬레이브 서버를 구축하려면 슬레이브 시스템에만 구축하면 됩니다.

이제

redis79, redis80, redis81 서버를 각각 시작하세요.

redis-server redis79.conf 
redis-server redis80.conf
redis-server redis81.conf

다음 명령을 사용하여 시작 성공 여부를 확인하세요.

 ps -ef|grep redis

3개의 클라이언트 창을 열고 각각 3개의 Redis 서버를 작동하세요.

다음 명령을 입력하세요.

어떤 Redis를 열려고 하는지 알려면 포트를 지정해야 합니다.

창 1:
redis-cli -p 6379

창 2:

redis-cli -p 6380

창 3:

redis-cli -p 6381

마스터-슬레이브 관계 설정

redis79을 마스터 노드로 설정하고 redis80 그리고 redis81은 슬레이브 노드 로 설정됩니다.

호스트의 IP 주소와 포트 번호를 구성하는 것은 호스트를 상사로 인식하고 싶은 것과 같습니다.

redis80:

#SLAVEOF IP地址  端口
127.0.0.1:6380> slaveof 127.0.0.1 6379
OK

redis81:

#SLAVEOF IP地址  端口
127.0.0.1:6381> slaveof 127.0.0.1 6379
OK

这个时候,我们在从机使用INFO命令就可以查看主从关系了:

info replication

 而此时我们去主机redis79中使用同样的命令进行查看:

现在我们的一主二从的关系就成功搭建好了!

提示:如果要将从机变成主机,我们只需要在从机执行以下命令,即可让自己变为主机。

SLAVEOF no one

四、知识讲解

知识一

主机可以进行读写操作,而从机只能读操作。 

注意:主机中的所有信息和数据,都会自动被从机保存。

主机:

127.0.0.1:6379> set key1 v1
OK
127.0.0.1:6379> get key1
"v1"

从机:

127.0.0.1:6380> get key1  
"v1"
127.0.0.1:6380> set key2 v2    #进行写操作就会报错,提示从机只能进行读操作
(error) READONLY You can't write against a read only replica.

 知识二

主机如果宕机了,从机依旧可以读取到主机宕机前的数据,但仍然没有写操作,如果主机恢复过来了,从机依旧可以获取到主机写的数据。

(1)停止主机进程(演示主机宕机了)

停止进程的命令:

kill -9 pid #pid为redis进程号

(2)从机获取宕机前主机写入的数据

可以发现,能够顺利拿到,但仍然是无法进行写操作的。

 (3)恢复主机

redis-server redis79.conf

(4)主机重新写入数据,从机获取最新数据。

主机写入数据:

127.0.0.1:6379> set k2 yixin
OK

从机读取最新数据:

127.0.0.1:6380> get k2
"yixin"

知识三

两种配置方式下的从机断开情况

a、命令行设置主从关系

从机断开了,其重新连接后变为主机,能拿到断开之前的数据,但拿不到主机新写入的值,如果重新设置主从关系,就可以拿到主机全部的数据了。

(1)停止从机进程。

 (2)主机写入新数据。

127.0.0.1:6379> set k3 new
OK

(3)重新启动从机服务器。

redis-server redis80.conf

(4)尝试获取从机宕机前主机写入的数据,发现可以拿到。

127.0.0.1:6380> get k1
"v1"

(5)尝试获取从机宕机期间主机写入的数据,发现无法拿到了。

127.0.0.1:6380> get k3
(nil)

此次我们可以进行查看主从关系,由于是命令行配置的,所以重启之后又变回主机了

127.0.0.1:6380> info replication
# Replication
role:master
connected_slaves:0

(6)如果要拿到主机的所有数据,只要执行以下命令重新配置主从关系就可以了。 

slaveof 127.0.0.1 6379

b、配置文件设置的主从关系

从机断开后,重新连接,也是可以拿到主机的全部数据的。

(1)修改配置文件redis80.conf,添加主从关系。

#指定主机的ip与port
slaveof 127.0.0.1 6379

(2)主机添加新数据

127.0.0.1:6379> set k5 hello
OK

(3)重新启动redis80服务器。

redis-server redis80.conf

(4)获取从机宕机期间主机新写入的数据,发现现在可以顺利拿到了。

127.0.0.1:6380> get k5
"hello"

我们来查看6380的主从关系,可以发现在重启的时候就已经设置好主从关系了

五、复制原理

(1)Slave 启动成功连接到 Master 后会发送一个sync同步命令

(2)Master 接到命令,启动后台的存盘进程,同时收集所有接收到的用于修改数据集命令,在后台进程执行完毕之后,master将传送整个数据文件到slave,并完成一次完全同步

(3)全量复制:而slave服务在接收到数据库文件数据后,将其存盘并加载到内存中。

(4)增量复制:Master 继续将新的所有收集到的修改命令依次传给slave,完成同步。

注意:只要是重新连接master,一次完全同步(全量复制)将被自动执行! 我们的数据一定可以在从机中看到。

六、主从模式的优缺点

优点

(1)同一个Master可以同步多个Slaves
(2)Slave同样可以接受其它Slaves的连接和同步请求,这样可以有效的分载Master的同步压力。因此我们可以将Redis的Replication架构视为图结构。
(3)Master Server是以非阻塞的方式为Slaves提供服务。所以在Master-Slave同步期间,客户端仍然可以提交查询或修改请求。
(4)Slave Server同样是以非阻塞的方式完成数据同步。在同步期间,如果有客户端提交查询请求,Redis则返回同步之前的数据。
(5)为了分载Master读操作压力Slave服务器可以为客户端提供只读操作的服务,写服务仍然必须由Master来完成。即便如此,系统的伸缩性还是得到了很大的提高。
(6)Master可以将数据保存操作交给Slaves完成,从而避免了在Master中要有独立的进程来完成此操作。
(7)支持主从复制,主机会自动将数据同步到从机,可以进行读写分离

缺点

(1) Redis 主从模式不具备自动容错和恢复功能,如果主节点宕机,Redis 集群将无法工作,此时需要人为干预,将从节点提升为主节点。
(2) 如果主机宕机前有一部分数据未能及时同步到从机,即使切换主机后也会造成数据不一致的问题,从而降低了系统的可用性。
(3) 因为只有一个主节点,所以其写入能力和存储能力都受到一定程度地限制。
(4) 在进行数据全量同步时,若同步的数据量较大可能会造卡顿的现象。

推荐学习:Redis视频教程

위 내용은 Redis 클러스터 마스터-슬레이브 모드에 대한 자세한 설명의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

성명:
이 기사는 csdn.net에서 복제됩니다. 침해가 있는 경우 admin@php.cn으로 문의하시기 바랍니다. 삭제