Redis使用--主从复制

主从复制

像MySQL一样,redis是支持主从同步的,而且也支持一主多从以及多级从结构。

主从好处

主从结构,一是为了纯粹的冗余备份,二是为了提升读性能,比如很消耗性能的SORT就可以由从服务器来承担。

redis的主从同步是异步进行的,这意味着主从同步不会影响主逻辑,也不会降低redis的处理性能。主从架构中,可以考虑关闭主服务器的数据持久化功能,只让从服务器进行持久化,这样可以提高主服务器的处理性能。

在主从架构中,从服务器通常被设置为只读模式,这样可以避免从服务器的数据被误修改。但是从服务器仍然可以接受CONFIG等指令,所以还是不应该将从服务器直接暴露到不安全的网络环境中。如果必须如此,那可以考虑给重要指令进行重命名,来避免命令被外人误执行。

主从– 同步原理

从服务器会向主服务器发出SYNC指令,当主服务器接到此命令后,就会调用BGSAVE指令来创建一个子进程专门进行数据持久化工作,也就是将主服务器的数据写入RDB文件中。在数据持久化期间,主服务器将执行的写指令都缓存在内存中。在BGSAVE指令执行完成后,主服务器会将持久化好的RDB文件发送给从服务器,从服务器接到此文件后会将其存储到磁盘上,然后再将其读取到内存中。这个动作完成后,主服务器会将这段时间缓存的写指令再以redis协议的格式发送给从服务器。

另外,要说的一点是,即使有多个从服务器同时发来SYNC指令,主服务器也只会执行一次BGSAVE,然后把持久化好的RDB文件发给多个下游。在redis2.8版本之前,如果从服务器与主服务器因某些原因断开连接的话,都会进行一次主从之间的全量的数据同步;而在2.8版本之后,redis支持了效率更高的增量同步策略,这大大降低了连接断开的恢复成本。

主服务器会在内存中维护一个缓冲区,缓冲区中存储着将要发给从服务器的内容。从服务器在与主服务器出现网络瞬断之后,从服务器会尝试再次与主服务器连接,一旦连接成功,从服务器就会把“希望同步的主服务器ID”和“希望请求的数据的偏移位置(replication offset)”发送出去。主服务器接收到这样的同步请求后,首先会验证主服务器ID是否和自己的ID匹配,其次会检查“请求的偏移位置”是否存在于自己的缓冲区中,如果两者都满足的话,主服务器就会向从服务器发送增量内容。

增量同步功能,需要服务器端支持全新的PSYNC指令。这个指令,只有在redis-2.8之后才具有。

Windows下配置主从

1. 解压多分Redis

一个是主服务,两个从服务。

2. 修改从服务的配置文件

将这两个文件中的端口 port 更改为与主redis(6379)不相同既可,例: 6380、6381。然后再更改主从配置的参数:# slaveof <masterip> <masterport>  ,改为:slaveof 127.0.0.1 6379  表示是该主服务的从服务

3. 安装启动服务

主服务器:

F:Redis-6379>  redis-server --service-install redis.windows.conf --loglevel verbose  --service-name  redis6379  (这里是windows服务里显示的名称)

F:Redis-6379>  redis-server.exe redis.windows.conf

从服务器1:

F:Redis-6380> redis-server --service-install redis.windows.conf --loglevel verbose  --service-name  redis6380

F:Redis-6380>  redis-server.exe redis.windows.conf

从服务器2:

F:Redis-6381>  redis-server --service-install redis.windows.conf --loglevel verbose  --service-name  redis6381

F:Redis-6381>  redis-server.exe redis.windows.conf

4. 验证从服务器

然后在主服务里面创建key,在从服务里可以取到主服务里设置的key

5. 从服务器只读

默认情况下redis数据库充当slave角色时是只读的不能进行写操作 可以在配置文件中开启非只读:slave-read-only no

CentOS 7下配置主从

1. 在安装好单机版的前提下,复制三份配置文件

进入redis所在目录
[root@zhaoyl redis-6.0.6]# cd RedisSoft/redis-6.0.6

创建6379、6380、6382目录,分别将安装目录下的redis.conf拷贝到这三个目录下。
[root@zhaoyl redis-6.0.6]# 6379 && cp redis.conf 6379/6379.conf
[root@zhaoyl redis-6.0.6]# 6381 && cp redis.conf 6380/6380.conf
[root@zhaoyl redis-6.0.6]# 6382 && cp redis.conf 6382/6382.conf

2. 分别修改配置文件

[root@zhaoyl redis-6.0.6]# vim 6379/6379.conf
修改内容:
# Redis使用后台模式
daemonize yes

# 关闭保护模式
protected-mode no

# 注释以下内容开启远程访问
# bind 127.0.0.1

# 修改启动端口为6379
port 6379

# 修改pidfile指向路径
pidfile 6379/redis_6379.pid

以此类推,修改端口6380及6382配置。修改配置文件时,按空格+/+要找的词可以快速定位,找到后按i键进入insert状态进行修改,修改完成后按Esc键,然后接着按:w进行保存

3. 主从结构设置

在Redis中设置主从有2种方式:
1. 在redis.conf中设置slaveof
    a)  slaveof <masterip> <masterport>

2. 使用redis-cli客户端连接到redis服务,执行slaveof命令
    a)  slaveof <masterip> <masterport>

第二种方式在重启后将失去主从复制关系。 我们这里使用第二种方式设置主从: 使用Redis客户端连接上6380端口,设置6380端口Redis为6379的从

使用Redis客户端连接上6382端口,设置6382端口Redis为6379的从

4. 查看Redis主从关系

使用Redis客户端连接上6379端口,查看Redis主从关系 如下图所示

role:角色信息 
slaveX:从库信息 
connected_slaves:从库数量

5. 测试主从数据

    

6. 主从从结构设置

Redis的主从架构的缺点是所有的slave节点数据的复制和同步都由master节点来处理,会照成master节点压力太大,所以我们使用主从从结构来处理

1. 前面步骤同主从架构一致,只是在设置主从结构时,设置6380为6379的从,6382为6380的从

使用Redis客户端连接上6380端口,设置6380端口Redis为6379的从

使用Redis客户端连接上6382端口,设置6382端口Redis为6380的从

2. 查看主从从架构信息: 

3. 测试

 

 

 

原文地址:https://www.cnblogs.com/zhaoyl9/p/13489788.html