Redis 主从模式、哨兵模式的配置及演示

本文详细介绍了如何在Redis中配置主从复制,通过实例配置展示如何实现数据读写分离与备份,同时探讨了主从复制的注意事项。接着,文章深入讲解了哨兵模式的配置与实现,以及其在主节点故障后的自动切换机制和潜在问题。
摘要由CSDN通过智能技术生成

一. 主从模式

I. 主从复制

  1. 主从复制可以在一定程度上扩展 redis 的性能,redis 的主从复制与关系型数据库的主从复制类似,从机能够精确的复制主机上的内容。
  2. 实现主从复制之后,一方面能够实现数据的读写分离,降低主机(master)的压力,另一方面也能实现数据的备份。

II. 配置与实现

  1. 假设现在有三个 redis 实例,地址如下

    192.168.248.128:6379  
    192.168.248.128:6380  
    192.168.248.128:6381  
    
  2. 在 redis 安装目录下把 redis.conf 改成 redis6379.conf 便于区分,然后再复制两份,分别是 redis6380.conf 和 redis6381.conf

主从配置的conf配置文件

  1. 打开 redis6379.conf ,将以下的配置均加上 6379(一般而言,默认就是6379)

    port 6379
    pidfile /var/run/redis_6379.pid
    logfile "6379.log"
    dbfilename dump6379.rdb
    appendfilename "appendonly6379.aof"
    
  2. 同理,将 redis6380.conf 和 redis6381.conf 的配置也改成对应的 6380 和 6381

    #在 redis6380.conf 的编辑窗口中,可以使用以下的命令全局替换。 redis6381.conf 也是一样的道理
    :%s/6379/6380/g
    
  3. 然后分别使用三个不一样的配置启动 redis

    [root@localhost redis-7.0.0]# src/redis-server redis6379.conf 
    [root@localhost redis-7.0.0]# src/redis-server redis6380.conf 
    [root@localhost redis-7.0.0]# src/redis-server redis6381.conf 
    
  4. 然后分别在三个实例的控制台指定 port 进入 redis

    [root@localhost redis-7.0.0]# src/redis-cli -p 6379
    [root@localhost redis-7.0.0]# src/redis-cli -p 6380
    [root@localhost redis-7.0.0]# src/redis-cli -p 6381
    
  5. 此时我们就搭建好了三个 redis 实例了,但他们彼此之间此时是没有任何关系的,是相互独立的三个 redis 实例。那么需要怎么去配置呢?我们可以进入到从机的配置文件中( redis6380.conf 和 redis6381.conf ),指定哪一个是主机。

    # replicaof <masterip> <masterport>
    # masterauth <master-password>
    
    # 把从机配置中的上面那两个,指定一个主机(这里 6379 是主机)
    
    replicaof 127.0.0.1 6379
    masterauth 123
    
  6. 当然,也可以分别在 6380 和 6381 上执行如下命令:

    #表示修改当前服务器,使其转变为指定服务器的从属服务器(Slave Server)
    127.0.0.1:6380> SLAVEOF 127.0.0.1 6379
    127.0.0.1:6381> SLAVEOF 127.0.0.1 6379
    
  7. 搭建好之后,在主机上输入 INFO replication 便可查看当前实例状态

127.0.0.1:6379> INFO replication
# Replication
role:master
connected_slaves:2
slave0:ip=127.0.0.1,port=6381,state=online,offset=182,lag=1
slave1:ip=127.0.0.1,port=6380,state=online,offset=182,lag=0
master_failover_state:no-failover
master_replid:73b049a114d7cf8e6ef61e6a492a273a11851f2d
master_replid2:fc81fd6eacea040420bce1c50805c5c871634961
master_repl_offset:182
second_repl_offset:155
repl_backlog_active:1
repl_backlog_size:1048576
repl_backlog_first_byte_offset:155
repl_backlog_histlen:28
  1. 可以看到 6379 主机上面挂了两个从机(connected_slaves:2),两个从机的地址、端口号等信息都展现出来了。如果在从机上执行 INFO replication ,显示信息如下:

    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
    slave_read_repl_offset:0
    slave_repl_offset:0
    master_link_down_since_seconds:-1
    slave_priority:100
    slave_read_only:1
    replica_announced:1
    connected_slaves:0
    master_failover_state:no-failover
    master_replid:137bf1903a366a5befefc1cedec140d8e5aaf8c1
    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
    127.0.0.1:6380> SHUTDOWN
    not connected> exit
    [root@localhost redis-7.0.0]# vi redis6380.conf 
    [root@localhost redis-7.0.0]# src/redis-server redis6380.conf 
    [root@localhost redis-7.0.0]# src/redis-cli -p 6380 -a 123
    Warning: Using a password with '-a' or '-u' option on the command line interface may not be safe.
    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:9
    master_sync_in_progress:0
    slave_read_repl_offset:448
    slave_repl_offset:448
    slave_priority:100
    slave_read_only:1
    replica_announced:1
    connected_slaves:0
    master_failover_state:no-failover
    master_replid:73b049a114d7cf8e6ef61e6a492a273a11851f2d
    master_replid2:fc81fd6eacea040420bce1c50805c5c871634961
    master_repl_offset:448
    second_repl_offset:155
    repl_backlog_active:1
    repl_backlog_size:1048576
    repl_backlog_first_byte_offset:15
    repl_backlog_histlen:434
    
  2. 此时,我们在主机中存储数据,在从机中就可以 get 到主机中存储的数据了。

III. 主从复制的注意点

  1. 如果主机已经运行了一段时间,并且已经存储了一些数据,此时从机连上来,那么从机会将 主机上所有的数据进行备份,而不是从连接上来的那个时间点开始备份。
  2. 配置了主从复制之后,主机上可读可写,但是从机只能读取不能写入。(但不是绝对的,可以通过修改 redis.conf中 replica-read-only 的值让从机也可以执行写操作,但我们一般不去这样做 )
  3. 在整个主从结构运行过程中,如果主机不幸运挂掉,重启之后,他依然是主机,主从复制操作也能够继续进行。

二. 哨兵模式

I. 配置与实现

  1. 当主机宕机时,从机就会有群龙无首的情况。如果在主机宕机时,能够在从机中选出一个来充当主机,那么就不用我们每次宕机时去手动重启主机了。

  2. 在上面的配置好的基础下,我的主机是 6379,两个从机分别是 6380 和 6381。然后在 redis 目录下打开 sentinel.conf 文件,进行如下配置

    # sentinel monitor <master-name> <ip> <redis-port> <quorum>
    # sentinel auth-pass <master-name> <password>
    
    # 对上面的配置进行更改
    
    sentinel monitor mymaster 127.0.0.1 6379 1
    sentinel auth-pass mymaster 123
    

    其中,mymaster 是给要监控的主机取一个名字,自己定义,后面的是主机地址,最后面的 1 表示有多少个 sentinel 认为主机挂掉了,就进行切换。

  3. 配置完成后,输入 redis-sentinel sentinel.conf 启动哨兵

  4. 重新启动 6379、6380、6381 这一主二仆架构,关闭 master 之后,即可以代表主机宕机了。redis 内部重新选了其中一个从机当做主机。在这里假设 6380 被选上了,成为了主机。

  5. 那么,如果 6379 重新上线了,原先被选上的 6380 就需要退位了,屈身成为了 slave ,6379 重新成为主机。

II. 注意问题

  1. 由于所有的写操作都是在 Master 上操作,然后同步更新到 Slave 中,所以从 Master 同步到 Slave 的过程中会有一定延迟。当系统繁忙时,这个延迟的问题会尤为严重,Slave 数量的增加也会使这个问题加重。
  2. 因此,我们还需要集群来进一步提升 redis 性能。

更详细的 Redis 总结可以参考一下这里:Redis 总结

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

天怎么不会塌

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值