十三.redis主从复制

  1. 概念
    主从复制,指将一台redis服务器的数据,复制到其它的redis服务器。前者称为主节点(master),后者称为从节点(slave);数据的复制是单向的,只能由主节点到从节点。master以写为主,slave以读为主。

    默认情况下,每台redis服务器都是主节点;且一个主节点可以有多个从节点(或没有从节点),但一个从节点只能有一个主节点。

    主从复制的作用主要为:
    1)数据冗余:主从复制实现了数据的热备份,是持久化之外的一种数据冗余方式。
    2)故障恢复:当主节点出现问题时,可以由从节点提供服务,实现快速的故障恢复;实际上是服务的冗余
    3)负载均衡:在主从复制的基础上,配合读写分离,可以由主节点提供写服务,由从节点提供读服务(即写redis数据时应用连接主节点,读redis数据时应用·连接从节点),分担服务器负载;尤其是在写少读多的场景下,通过多个从节点分担读负载,可以大大提高redis服务器的并发;
    4)高可用基石:除了上述作用外,主从复制还是哨兵和集群能够实施的基础,因此说主从复制是redis高可用的基础。

    一般来说,要将redis运用于工程项目中,只使用一台redis服务器是不可取的:
    1)从结构上,单个redis服务器会发生单点故障,并且一台服务器需要处理所有的请求负载,压力较大;
    2)从容量上,单个redis服务器内存容量有限,就算一台服务器内存容量为256G,也不能将所有内存用作redis存储内存,一般说,单台redis最大使用内存最好不超过20G。

    对于多读少写的场景,则可以使用一主对应多从的架构

  2. 配置主从关系
    1)配置从机配置文件
    十三.redis主从复制_第1张图片
    2)重启从机服务

    root@liumingyong-Lenovo-G40-70m:/usr/local/redis-6.2.11/bin# ps -ef|grep redis #查看reids服务进程
    root         817       1  0 21:43 ?        00:00:02 /usr/local/redis-6.2.11/bin/redis-server *:6379
    root        2452    2354  0 21:48 pts/0    00:00:00 vim redis6380.conf
    root        2518       1  0 21:56 ?        00:00:00 ./bin/redis-server *:6380
    root        2527    2258  0 21:57 pts/1    00:00:00 redis-cli
    root        2531    2354  0 22:02 pts/0    00:00:00 grep --color=auto redis
    root@liumingyong-Lenovo-G40-70m:/usr/local/redis-6.2.11/bin# kill -9 2518 #强制杀掉redis从节点进程
    
    
    root@liumingyong-Lenovo-G40-70m:/usr/local/redis-6.2.11/bin# vim /etc/redis/redis6381.conf 
    root@liumingyong-Lenovo-G40-70m:/usr/local/redis-6.2.11/bin# cd ../
    root@liumingyong-Lenovo-G40-70m:/usr/local/redis-6.2.11# ./bin/redis-server /etc/redis/redis6381.conf #重启从节点服务
    root@liumingyong-Lenovo-G40-70m:/usr/local/redis-6.2.11# cd ./bin/
    root@liumingyong-Lenovo-G40-70m:/usr/local/redis-6.2.11/bin# redis-cli -p 6381
    127.0.0.1:6381> info replication 
    NOAUTH Authentication required.
    127.0.0.1:6381> auth 123456
    OK
    127.0.0.1:6381> info replication #查看从节点服务信息
    # Replication
    role:slave
    master_host:192.168.31.666 #直接点ip
    master_port:6379 #主节点端口
    master_link_status:up
    master_last_io_seconds_ago:8
    master_sync_in_progress:0
    slave_read_repl_offset:378
    slave_repl_offset:378
    slave_priority:100
    slave_read_only:1
    replica_announced:1
    connected_slaves:0
    master_failover_state:no-failover
    master_replid:1d094a3ce3d13a8ca0960eeacf5429a91abb8d46
    master_replid2:0000000000000000000000000000000000000000
    master_repl_offset:378
    second_repl_offset:-1
    repl_backlog_active:1
    repl_backlog_size:1048576
    repl_backlog_first_byte_offset:295
    repl_backlog_histlen:84
    

    3)查看主节点从节点间关系

    127.0.0.1:6379> info replication
    # Replication
    role:master
    connected_slaves:2 #从节点数量为2
    slave0:ip=192.168.31.116,port=6380,state=online,offset=392,lag=1
    slave1:ip=192.168.31.116,port=6381,state=online,offset=392,lag=1
    master_failover_state:no-failover
    master_replid:1d094a3ce3d13a8ca0960eeacf5429a91abb8d46
    master_replid2:0000000000000000000000000000000000000000
    master_repl_offset:392
    second_repl_offset:-1
    repl_backlog_active:1
    repl_backlog_size:1048576
    repl_backlog_first_byte_offset:1
    repl_backlog_histlen:392
    
    

    4)主从复制验证
    主节点可读可写,从节点只能读不可写。主节点中所有信息和数据,都会自动被从节点保存。
    主节点读写:
    十三.redis主从复制_第2张图片
    从节点读:
    十三.redis主从复制_第3张图片
    当主节点断开(宕机),从节点依旧是连接到主节点的,但此时无法进行写操作。当主节点恢复后,从节点仍然能够获取到主节点的信息。

    5)主从复制原理
    Slave启动成功连接到master后会发送一个sync同步命令,master接到命令,启动后台的存盘进程,同时收集所有接收到的用于修改数据集命令,在后台进程执行完毕之后,master将传送整个数据文件到slave,并完成一次完全同步。

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

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

    但是只要是重新连接master,一次完全同步(全量复制)将被自动执行
    6)在主节点断掉前提下,用命令设置当前从节点为新主节点
    如果主节点断开了连接,可以使用slaveof no one让自己变成主节点,其它的节点就可以手动连接到最新的这个主节点。如果最开始的主节点恢复了,它默认是主节点但和当前的主从节点没有关系(仅单纯的一个默认主节点而已)

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