• Part_four:redis主从复制


    redis主从复制

    1.redis主从同步

    • Redis集群中的数据库复制是通过主从同步来实现的

    • 主节点(Master)把数据分发从节点(slave)

    • 主从同步的好处在于高可用,Redis节点有冗余设计

    • 原理:

      1. 从服务器向主服务器发送 SYNC 命令。
      2. 接到 SYNC 命令的主服务器会调用BGSAVE 命令,创建一个 RDB 文件,并使用缓冲区记录接下来执行的所有写命令。
      3. 当主服务器执行完 BGSAVE 命令时,它会向从服务器发送 RDB 文件,而从服务器则会接收并载入这个文件。
      4. 主服务器将缓冲区储存的所有写命令发送给从服务器执行。
      
      1、在开启主从复制的时候,使用的是RDB方式的,同步主从数据的
      2、同步开始之后,通过主库命令传播的方式,主动的复制方式实现
      3、2.8以后实现PSYNC的机制,实现断线重连
      

    2.环境准备

    • redis支持多实例的功能,一台机器上,可以运行多个单个的redis数据库
    • 环境准备,准备3个redis数据库,达到1主 2从配置
    主库:6379
    从库:6380
    从库:6381
    
    1.创建一个文件夹:
    [root@xujunk data]#mkdir msredis
    [root@xujunk data]#cd msredis
    2.创建配置文件:6379.conf    6380.conf    6381.conf
    [root@xujunk msredis]#vim 6379.conf
    	port 6379
        daemonize yes
        pidfile /data/6379/redis.pid
        loglevel notice
        logfile "/data/6379/redis.log"
        dbfilename dump.rdb
        dir /data/6379
    #将6379.conf 里面6379更改,生成新的文件
    [root@xujunk msredis]#sed "s/6379/6380/g" 6379.conf > 6380.conf
    [root@xujunk msredis]#sed "s/6379/6381/g" 6379.conf > 6381.conf
    
    3.创建文件夹:用于存放数据,日志
        mkdir -p /data/{6379,6380,6381}
    

    3.具体实现:

    1.启动redis: 在当前配置目录下
    [root@xujunk msredis]#redis-server 6379.conf
    [root@xujunk msredis]#redis-server 6380.conf
    [root@xujunk msredis]#redis-server 6381.conf
    
    2.检查启动情况:#表示启动成功
    [root@xujunk msredis]#ps -ef|grep redis
    """
    root      28228      1  0 20:04 ?        00:00:00 redis-server *:6379
    root      28244      1  0 20:04 ?        00:00:00 redis-server *:6380
    root      28252      1  0 20:04 ?        00:00:00 redis-server *:6381
    """
    
    
    #连接之前先学几个命令:
    	[root@xujunk msredis]#redis-cli -p 6379 info
    	"""
    	...
    	# Replication
        role:master      主节点是master
        connected_slaves:0	从节点 连接数为0
        master_replid:91eb4ec34cb636f61c88c36b3c8736078598644f
        master_replid2:0000000000000000000000000000000000000000
        master_repl_offset:0
        second_repl_offset:-1
        repl_backlog_active:0
    	...
    	"""
     #此方法也可以查看库从属信息
    [root@xujunk msredis]#redis-cli info replication
    """
    # Replication
    role:master		主节点是master
    connected_slaves:0			从节点 连接数为0
    master_replid:91eb4ec34cb636f61c88c36b3c8736078598644f
    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
    """
    3.开启主从复制功能(将3个不同端口库连接起来)  
    #在6380 和6381数据库上 ,配置主从信息,通过参数形式修改配置,临时生效,注意要写入配置文件
    #将6380,6381设置6379从库
    [root@xujunk msredis]#redis-cli -p 6380 slaveof 127.0.0.1 6379
    OK
    [root@xujunk msredis]#redis-cli -p 6381 slaveof 127.0.0.1 6379
    OK
    
    4.此时检查6379复制信息,以及6380 6381的复制信息
    [root@xujunk msredis]#redis-cli -p 6379 info replication
    """
    # Replication
    role:master			#主节点
    connected_slaves:2		#2个从节点
    slave0:ip=127.0.0.1,port=6380,state=online,offset=98,lag=1
    slave1:ip=127.0.0.1,port=6381,state=online,offset=98,lag=1
    master_replid:562912ec0c945d538bc093fa93e1e02841666070
    master_replid2:0000000000000000000000000000000000000000
    master_repl_offset:98
    second_repl_offset:-1
    repl_backlog_active:1
    repl_backlog_size:1048576
    repl_backlog_first_byte_offset:1
    repl_backlog_histlen:98
    """
    #连接redis-cli 6379主库
    [root@xujunk msredis]#redis-cli -p 6379
    127.0.0.1:6379> set title "hello world"
    
    #连接redis-cli 6380从库
    [root@xujunk msredis]#redis-cli -p 6380
    127.0.0.1:6380> keys *
    1) "title"
    
    #从库只能读,主库可写入,达到读写分离
    
    • 刚才介绍是通过参数修改情况下达到读写分离,只是临时的,更改配置文件方式,也很简单:
    #6380.conf
    
    port 6380
    daemonize yes
    pidfile /data/6380/redis.pid
    loglevel notice
    logfile "/data/6380/redis.log"
    dbfilename dump.rdb
    dir /data/6380
    slaveof 127.0.0.1 6379
    appendonly yes				#实现持久化存储的
    appendfsync everysec		#实现持久化存储的
    
    
    #6381.conf
    port 6381
    daemonize yes
    pidfile /data/6381/redis.pid
    loglevel notice
    logfile "/data/6381/redis.log"
    dbfilename dump.rdb
    dir /data/6381
    slaveof 127.0.0.1 6379
    appendonly yes				#实现持久化存储的
    appendfsync everysec		#实现持久化存储的
    
    

    4.模拟主从故障,手动切换master-slave身份

    1.杀死主库
    [root@xujunk msredis]#kill -9 30159
    2.手动切换 6381为新的主库,需要先关闭它的从库身份
    [root@xujunk msredis]#redis-cli -p 6381 slaveof no one
    OK
    3.修改6380的新主库是 6381
    [root@xujunk msredis]#redis-cli -p 6380 slaveof 127.0.0.1 6381
    OK
    
    
  • 相关阅读:
    6410实现网卡(DM9000A)收发功能及ARP协议实现
    Shuffling Machine和双向链表
    Have Fun with Numbers及循环链表(约瑟夫问题)
    Tiny6410 LCD设置
    RAM与内存
    inet_addr解析
    map容器find用法
    WinSock编程(TCP)
    Python 时间序列作图及注释
    无法打开之前cuda的vs项目,打开之后变灰色
  • 原文地址:https://www.cnblogs.com/xujunkai/p/11563689.html
Copyright © 2020-2023  润新知