Redis:主从复制_通过此功能实现对内存上的数据更好的保护

什么是主从复制?

简单的意义上来讲就是一个主人带着几个奴隶,奴隶的全部都是主人给他的,刚开始的时候奴隶是一无所有,是主人将自己的一部分给到奴隶了。因此奴隶翻身了,变得有钱了,也就是有一定价值了,但是主人能够控制奴隶。能让变得很有money,也能让它变得一无所有。

主从复制,是指将一台 Redis 服务器(主人)的数据,复制到其他的 Redis 服务器(奴隶)

主人服务器被称为主节点(英文名叫:master / leader),奴隶称为从节点(slave / follower)。

注意:这里的复制是单向的,只能够从主节点复制数据到子节点

主节点master主要是以写为主,子节点slave主要一读为主

主页点可以拥有多个子节点,但是子节点却只能拥有一个主节点

在通常的情况下,每个Redis服务器都是主节点

 为什么要使用主从复制?

1:数据冗余:它可以实现数据的热备份,是持久化的一种数据方式

2:故障恢复:当主节点出现问题时,可以由从节点提供服务,实现快速的故障恢复。这也是一种服务的冗余。

3:负载均衡:在主从复制的基础上,配合读写分离,可以由主节点提供写服务,由从节点提供读服务,分担服务器负载。尤其是在写少读多的场景下,通过多个从节点分担读负载,可以大大提高 Redis 服务器的并发量。

4:高可用:主从复制是哨兵和集群能够实施的基础,因此说主从复制是 Redis 高可用的基础。

一般来说,要将 Redis 运用于工程项目中,只使用一台 Redis 是万万不能的,原因如下:

  • 结构上:单个 Redis 服务器会发生单点故障,并且一台服务器需要处理所有的请求负载,压力较大。

  • 容量上:单个 Redis 服务器内存容量有限,一般来说,单台 Redis 最大使用内存不应该超过 20G。

环境搭建

搭建集群环境

复制几个配置文件 

[root@localhost myc]# ls
redis79.conf  redis80.conf  redis81.conf  redis82.conf

这四个文件,一个是主三个是从

每个几点都有自己端口号和配置

修改配置文件

redis79.conf 

一:端口号

Redis:主从复制_通过此功能实现对内存上的数据更好的保护_第1张图片

2: 开启后台运行

Redis:主从复制_通过此功能实现对内存上的数据更好的保护_第2张图片

 3:修改持久化RDB文件名称

Redis:主从复制_通过此功能实现对内存上的数据更好的保护_第3张图片

 4:修改日志文件名称

Redis:主从复制_通过此功能实现对内存上的数据更好的保护_第4张图片

5:修改pid文件名称

Redis:主从复制_通过此功能实现对内存上的数据更好的保护_第5张图片

 其他的三个配置文件也是如此

redis6380.conf

daemonize yes

port 6380
pidfile /var/run/redis_6380.pid
logfile "6380.log"
dbfilename dump6380.rdb

redis6381.conf 

daemonize yes

port 6381
pidfile /var/run/redis_6381.pid
logfile "6381.log"
dbfilename dump6381.rdb

 redis6382.conf 

daemonize yes

port 6382
pidfile /var/run/redis_6381.pid
logfile "6382.log"
dbfilename dump6382.rdb

打开4个客户端分

 在各个客户端界面,通过4个配置文件启动redis服务

页面一:

[root@localhost redis]# ./bin/redis-server ./myc/redis79.conf 

页面二:

[root@localhost redis]# ./bin/redis-server ./myc/redis80.conf

页面三:

[root@localhost redis]# ./bin/redis-server ./myc/redis81.conf

页面四:

[root@localhost redis]# ./bin/redis-server ./myc/redis82.conf   

看一下是否生成日志文件

查看开启的服务

Redis:主从复制_通过此功能实现对内存上的数据更好的保护_第6张图片

环境搭建完成 

 前面有一句话提到过每台redis服务器都是主节点

登录不同端口的客户端,查看一下信息是否为主节点

79端口:主节点

Redis:主从复制_通过此功能实现对内存上的数据更好的保护_第7张图片

 代码含义:

127.0.0.1:6379> info replication    查看主从复制信息
# Replication
role:master       角色为主节点
connected_slaves:0        连接的子节点个数为0 
master_failover_state:no-failover                              //剩下的都是一些配置信息
master_replid:aacf4caa93481ac43819eebbb266d8230b85d34f
master_replid2:0000000000000000000000000000000000000000
master_repl_offset:0
second_repl_offset:-1
repl_backlog_active:0
repl_backlog_size:1048576
repl_backlog_first_byte_offset:0
repl_backlog_histlen:0

查看其他节点的主从复制信息,都与79端口配置相同

一主三从

默认的配置为一主三从

主节点不需要进行配置,只需要配置子节点即可,子节点配置也很简单,只需要找到靠山就行

对安装的配置进行配置,一主(79端口号)三从(80,81,82)端口号

认主:

127.0.0.1:6380> SLAVEOF 127.0.0.1 6379    80端口认主成功
OK
127.0.0.1:6380> 

查看主从复制配置信息

80端口:

127.0.0.1:6380> INFO replication
# Replication
role:slave        角色为从机
master_host:127.0.0.1  主节点的ip
master_port:6379           主节点的端口号
master_link_status:up    
master_last_io_seconds_ago:8
master_sync_in_progress:0
slave_read_repl_offset:84
slave_repl_offset:84
slave_priority:100
slave_read_only:1
replica_announced:1
connected_slaves:0
master_failover_state:no-failover
master_replid:a2634fdf22a44fd46f3e73f78f0abed72b78b35e
master_replid2:0000000000000000000000000000000000000000
master_repl_offset:84
second_repl_offset:-1
repl_backlog_active:1
repl_backlog_size:1048576
repl_backlog_first_byte_offset:15
repl_backlog_histlen:70
127.0.0.1:6380> 

查看主节点配置信息:

127.0.0.1:6379> INFO replication
# Replication
role:master    角色为主节点
connected_slaves:1       一个子节点
slave0:ip=127.0.0.1,port=6380,state=online,offset=350,lag=1   子节点配置信息
master_failover_state:no-failover
master_replid:a2634fdf22a44fd46f3e73f78f0abed72b78b35e
master_replid2:0000000000000000000000000000000000000000
master_repl_offset:350
second_repl_offset:-1
repl_backlog_active:1
repl_backlog_size:1048576
repl_backlog_first_byte_offset:1
repl_backlog_histlen:350
127.0.0.1:6379>  

接下来将其他的两个子节点进行认主

127.0.0.1:6381> SLAVEOF 127.0.0.1 6379
OK
127.0.0.1:6381> 

127.0.0.1:6382> SLAVEOF 127.0.0.1 6379
OK
127.0.0.1:6382>  

查看主节点主从复制配置信息

127.0.0.1:6379> INFO replication
# Replication
role:master              
connected_slaves:3  三个子节点
slave0:ip=127.0.0.1,port=6380,state=online,offset=588,lag=1   子节点配置信息
slave1:ip=127.0.0.1,port=6381,state=online,offset=588,lag=1
slave2:ip=127.0.0.1,port=6382,state=online,offset=588,lag=0
master_failover_state:no-failover
master_replid:a2634fdf22a44fd46f3e73f78f0abed72b78b35e
master_replid2:0000000000000000000000000000000000000000
master_repl_offset:588
second_repl_offset:-1
repl_backlog_active:1
repl_backlog_size:1048576
repl_backlog_first_byte_offset:1
repl_backlog_histlen:588
127.0.0.1:6379>  

这里的主从复制配置是通过命令行进行配置的,这只是暂时的,具体的配置是通过配置文件进行配置的。

打开redis80.conf配置文件 

Redis:主从复制_通过此功能实现对内存上的数据更好的保护_第8张图片 配置修改为

replicaof 127.0.0.1 6379

只需要将三个从节点的配置文件配置成这样即可。 

在主节点的进行写的操作:创建一个key

Redis:主从复制_通过此功能实现对内存上的数据更好的保护_第9张图片

 通过从机是否能够查看主节点创建的key?
前面就提到过,主节点的主要功能为写操作,而子节点的主要的功能为读操作,所以子节点是一定义访问主节点创建的内容,如果子节点没有访问到主节点创建的内容,说明您的配置出现了问题。

子节点1:能够访问到主节点创建的key值,但是子节点的权限只有读的权限,却没有写的权限,,所以当子节点创建key时;就会报错read only 只有读的权限。 

Redis:主从复制_通过此功能实现对内存上的数据更好的保护_第10张图片

 其他的节点也是如此,这里就不进行一一展示了。

如果当主机出现了问题(宕机)等问题,导致主节点断掉了,会出现什么状况???

断掉主节点

Redis:主从复制_通过此功能实现对内存上的数据更好的保护_第11张图片

 子节点:正常使用,与主节点没断掉一样,对他没有任何的影响

查看配置:显示主节点关机,关于主从复制的配置并没有发生任何的变化

Redis:主从复制_通过此功能实现对内存上的数据更好的保护_第12张图片

Redis:主从复制_通过此功能实现对内存上的数据更好的保护_第13张图片

 主节点重连:保留宕机前创建的key值,因为子节点保留主节点的内容,并且能够正常使用

Redis:主从复制_通过此功能实现对内存上的数据更好的保护_第14张图片重连后,关于主从复制的内容,并没有发生任何改变。正常使用 Redis:主从复制_通过此功能实现对内存上的数据更好的保护_第15张图片

那如果子节点宕机了呢?

1:保留之前主节点创建的内容

2:重新启动后,身份发生了变化,不在是从机,而变成主机,与前面的主机没有了任何的关系

3:宕机后,如果主机创建了新的内容,宕机的子节点不会获取到,原因为2

4:身份转变为主机拥有主节点的所有权限 

Redis:主从复制_通过此功能实现对内存上的数据更好的保护_第16张图片

层层链路

 按照下图进行配置

Redis:主从复制_通过此功能实现对内存上的数据更好的保护_第17张图片

79端口号:只有一个子节点,本身角色为主节点

Redis:主从复制_通过此功能实现对内存上的数据更好的保护_第18张图片 

 80端口号:它的主节点为79端口号,并且它拥有一个端口号为81的子节点,它的身份为子节点

Redis:主从复制_通过此功能实现对内存上的数据更好的保护_第19张图片

 81端口号:与80端口的配置差不多,除了主节点和子节点不同,剩下的都差不多

Redis:主从复制_通过此功能实现对内存上的数据更好的保护_第20张图片

 82端口号:本身角色为字节点,拥有一个主节点

Redis:主从复制_通过此功能实现对内存上的数据更好的保护_第21张图片

 

如果其中一个,假设80端口号闹独立,想要当老大不想依附在任何人身上,通过命令该怎么实现?

127.0.0.1:6380> SLAVEOF no one
OK

80端口号独立,要当老大

角色为主节点,连接的子节点还是之前的那一个,小弟还是那个小弟Redis:主从复制_通过此功能实现对内存上的数据更好的保护_第22张图片

查看一下79端口的配置:

小弟给别人走了,光杆司令

Redis:主从复制_通过此功能实现对内存上的数据更好的保护_第23张图片 

当然也可以重新认主,还是给初次认主一样即可。

注意:上面关于主从复制的命令行代码都是暂时的,重新启动,所有的配置的都会丢失,如果想要永久的配置,从开启服务的配置文件进行配置,前面提到过。 

你可能感兴趣的:(redis,redis,数据库,缓存,后端,学习)