• redis学习(六)主从复制


    主从复制:主机更新数据后,根据配置和策略,自动同步到备机的master/slaver机制,master以写为主,slaver以读为主。redis支持主从复制。

    下面通过实例来讲解主从复制的四个模式:

    一、一主多从:一个主机。多个从机

    1、首先复制三个redis.conf的文件修改为redis6379.conf、redis6380.conf、redis6381.conf

    2、然后修改配置文件

    1)daemonize no 修改为daemonize yes 将redis设置为守护进程

    2)pidfile /var/run/redis.pid,修改pid文件名称

    3)port 6379分别修改为port 6379、port 6380、port 6381

    4)dbfilename dump.rdb 修改rdb文件名称

    3、分别启动这三个redis实例

    D:Program myself
    edis2.6>redis-cli.exe -h 127.0.0.1 -p 6379
    redis 127.0.0.1:6379> info replication
    # Replication
    role:master
    connected_slaves:0
    D:Program myself
    edis2.6>redis-cli.exe -h 127.0.0.1 -p 6380
    redis 127.0.0.1:6380> info replication
    # Replication
    role:master
    connected_slaves:0
    D:Program myself
    edis2.6>redis-cli.exe -h 127.0.0.1 -p 6381
    redis 127.0.0.1:6381> info replication
    # Replication
    role:master
    connected_slaves:0

    4、配置从机

    配置6380为从机

    D:Program myself
    edis2.6>redis-cli.exe -h 127.0.0.1 -p 6380
    redis 127.0.0.1:6380> info replication
    # Replication
    role:master
    connected_slaves:0
    redis 127.0.0.1:6380> SLAVEOF 127.0.0.1 6379
    OK
    redis 127.0.0.1:6380> info replication
    # Replication
    role:slave
    master_host:127.0.0.1
    master_port:6379
    master_link_status:up
    master_last_io_seconds_ago:8
    master_sync_in_progress:0
    slave_priority:100
    slave_read_only:1
    connected_slaves:0
    redis 127.0.0.1:6380>

    配置6381为从机

    D:Program myself
    edis2.6>redis-cli.exe -h 127.0.0.1 -p 6381
    redis 127.0.0.1:6381> info replication
    # Replication
    role:master
    connected_slaves:0
    redis 127.0.0.1:6381> SLAVEOF 127.0.0.1 6379
    OK
    redis 127.0.0.1:6381> get k1
    "v1"
    redis 127.0.0.1:6381> info replication
    # Replication
    role:slave
    master_host:127.0.0.1
    master_port:6379
    master_link_status:up
    master_last_io_seconds_ago:8
    master_sync_in_progress:0
    slave_priority:100
    slave_read_only:1
    connected_slaves:0
    redis 127.0.0.1:6381>

    5、主机写入数据,从机就可以读取数据了

    redis 127.0.0.1:6379> info replication
    # Replication
    role:master
    connected_slaves:2
    slave0:127.0.0.1,6380,online
    slave1:127.0.0.1,6381,online
    redis 127.0.0.1:6379> set k1 v1
    OK
    redis 127.0.0.1:6379> mset k2 v2 k3 v3
    OK
    redis 127.0.0.1:6379> get k1
    "v1"
    redis 127.0.0.1:6379>

    从机读取数据:

    redis 127.0.0.1:6380> info replication
    # Replication
    role:slave
    master_host:127.0.0.1
    master_port:6379
    master_link_status:up
    master_last_io_seconds_ago:8
    master_sync_in_progress:0
    slave_priority:100
    slave_read_only:1
    connected_slaves:0
    redis 127.0.0.1:6380> get k1
    "v1"
    redis 127.0.0.1:6380>

    可以看到从机读到k1数据。

    注意:1、如果配置从机后,主机数据会自动复制到从机。

    2、如果主机shutdown,从机保持不变,等待主机,此时如果主机恢复,从机恢复连接

    3、如果从机shutdown,主机保持不变,如果此时从机恢复,需要从机重新配置slaveof 

    4、从机不支持写操作

    二、多主多从:多个主机多个从机

    根据上面介绍,如果一个主机后跟着多个从机,这时候一个主机负担太重,这时候可以设置多个主机,多个从机。上一个slave可以是下一个slave的master,slave同样可以接受其他slave的连接和同步请求,那么slave作为下一个master,可以减轻master的写压力,

    如下:可将6381修改为6380的从机:SLAVEOF 127.0.0.1 6380

    redis 127.0.0.1:6381> SLAVEOF 127.0.0.1 6380
    OK
    redis 127.0.0.1:6381> info replication
    # Replication
    role:slave
    master_host:127.0.0.1
    master_port:6380
    master_link_status:up
    master_last_io_seconds_ago:8
    master_sync_in_progress:0
    slave_priority:100
    slave_read_only:1
    connected_slaves:0
    redis 127.0.0.1:6381>

    查看6380的配置:角色还是slave,但是还是跟着一个slave6381

    redis 127.0.0.1:6380> info replication
    # Replication
    role:slave
    master_host:127.0.0.1
    master_port:6379
    master_link_status:up
    master_last_io_seconds_ago:6
    master_sync_in_progress:0
    slave_priority:100
    slave_read_only:1
    connected_slaves:1
    slave0:127.0.0.1,6381,online
    redis 127.0.0.1:6380>

    三、从机转为主机

    在主从模式下,如果主机挂了,这时候从机会保持不变,等待主机恢复。这时候我们可以用slaveof no one制定一个主机,然后使用slaveof 将其他从机转到新指定的主机下,在这之后,即使之前挂了的主机恢复,也不会改变重新获得这些从机。

     主机6379、从机6380,从机6381

    1、主机挂了

    redis 127.0.0.1:6379> info replication
    # Replication
    role:master
    connected_slaves:2
    slave0:127.0.0.1,6380,online
    slave1:127.0.0.1,6381,online
    redis 127.0.0.1:6379> SHUTDOWN
    redis 127.0.0.1:6379> exit
    
    D:Program myself
    edis2.6>

    2、从机6380转换为主机

    redis 127.0.0.1:6380> info replication
    # Replication
    role:slave
    master_host:127.0.0.1
    master_port:6379
    master_link_status:down
    master_last_io_seconds_ago:-1
    master_sync_in_progress:0
    master_link_down_since_seconds:18
    slave_priority:100
    slave_read_only:1
    connected_slaves:0
    redis 127.0.0.1:6380> SLAVEOF no one
    OK
    redis 127.0.0.1:6380> info replication
    # Replication
    role:master
    connected_slaves:0
    redis 127.0.0.1:6380>

    3、从机6381的主机修改为6380

    redis 127.0.0.1:6381> info replication
    # Replication
    role:slave
    master_host:127.0.0.1
    master_port:6379
    master_link_status:down
    master_last_io_seconds_ago:-1
    master_sync_in_progress:0
    master_link_down_since_seconds:53
    slave_priority:100
    slave_read_only:1
    connected_slaves:0
    redis 127.0.0.1:6381> SLAVEOF 127.0.0.1 6380
    OK
    redis 127.0.0.1:6381>

    4、6379恢复,此时没有从机了

    D:Program myself
    edis2.6>redis-cli.exe -h 127.0.0.1 -p 6379
    redis 127.0.0.1:6379> info replication
    # Replication
    role:master
    connected_slaves:0
    redis 127.0.0.1:6379>

    四、哨兵模式

    如果主机挂了,这时候需要人为设置主机,哨兵模式下,可以自动的从从机中通过投票的方式选出一个新的主机,其他从机自动的挂到该主机下。

    1、新建sentinel.conf文件

    1表示通过投票的方式选出主机

    sentinel monitor 被监控的主机的名字 127.0.0.1 6379 1

    2、启动哨兵模式

    redis-sentinel sentinel.conf

    3、主机6379shutdown

    4、哨兵模式自动选出一个主机,将其他从机挂到该主机下

    5、挂掉的主机恢复,哨兵发现后将该主机转化为从机,挂到新建立的主机下

  • 相关阅读:
    Jedis scan及其count的值
    redis中KEYS、SMEMBERS、SCAN 、SSCAN 的区别
    Windows环境下RabbitMQ的启动和停止命令
    HTTP状态码->HTTP Status Code
    给所有的input trim去空格
    git clone 使用用户名和密码
    ABA问题
    FIFO、LRU、LFU的含义和原理
    【phpstorm】破解安装
    【windows7】解决IIS 80端口占用问题(亲测)
  • 原文地址:https://www.cnblogs.com/pjfmeng/p/7942095.html
Copyright © 2020-2023  润新知