1.命令方式
(1).API

  • 设置为从节点(新增数据会同步)
    localhost:6379 > slaveof 127.0.0.1 6379
    
  • 查看节点主从属性(role的值)
    localhost:6379 > info replication
    
  • 取消复制
    localhost:6379 > slaveof no one
    

(2).复制流程

  • 客户端执行slaveof命令
  • 从节点向客户端返回消息(异步过程)
  • 从节点从主节点复制数据

(3).切主流程
通过slaveof命令还可以实现切主操作,所谓切主是指把当前从节点对主节点的复制切换到另一个主节点。执行slaveof newMasterIp newMasterPort命令即可,其流程如下。

  • 断开与旧主节点复制关系
  • 与新主节点建立复制关系
  • 删除从节点当前所有数据
  • 对新主节点进行复制操作

(4).取消复制流程

  • 客户端执行slaveof no one命令
  • 从节点与主节点断开连接(之前从主节点复制的数据不会被清除,之后主节点新写入的数据不会同步到从节点)
  • 从节点向客户端返回消息(同步过程)
  • 从节点晋升为主节点

2.配置方式

#成为某一台机器的从节点
slaveof ip port 

#从节点只做读的操作,保证主从节点的一致性 
slave-read-only yes

3.比较

方式优点缺点
命令无需重启不便于管理
配置统一配置需要重启

4.一主两从环境搭建
(1).服务器(三台服务器需要在同一网中)

  • 主节点:47.***.***.140
  • 从节点1:39.***.***.47
  • 从节点2:39.***.***.3

(2).从节点操作流程

  • 打开6379端口权限,设置protected-mode为no
  • 在redis.conf配置文件中添加主节点和只读配置
    daemonize yes
    slaveof 47.***.***.140 6379
    slave-read-only yes
    
  • 在redis.conf目录下执行以下命令来启动Redis
    redis-server redis.conf
    
  • 使用客户端连接Redis
    redis-cli -h localhost -p 6379
    
  • 使用info replication命令查看从节点信息,可以看到如下信息
    # Replication
    role:slave
    master_host:47.***.***.140
    master_port:6379
    master_link_status:up
    master_last_io_seconds_ago:5
    master_sync_in_progress:0
    slave_repl_offset:1156
    slave_priority:100
    slave_read_only:1
    connected_slaves:0
    master_replid:2b2d18dfeadb98e610af73713aa8874ec82f0bfa
    master_replid2:0000000000000000000000000000000000000000
    master_repl_offset:1156
    second_repl_offset:-1
    repl_backlog_active:1
    repl_backlog_size:1048576
    repl_backlog_first_byte_offset:765
    repl_backlog_histlen:392
    

(3).主节点操作流程

  • 打开6379端口权限,设置protected-mode为no
  • 在redis.conf配置文件中添加主节点和只读配置
    daemonize yes
    
  • 在redis.conf目录下执行以下命令来启动Redis
    redis-server redis.conf
    
  • 使用客户端连接Redis
    redis-cli -h localhost -p 6379
    
  • 使用info replication命令查看从节点信息,可以看到如下信息
    # Replication
    role:master
    connected_slaves:2
    slave0:ip=39.***.***.3,port=6379,state=online,offset=2698,lag=1
    slave1:ip=39.***.***.47,port=6379,state=online,offset=2698,lag=0
    master_replid:2b2d18dfeadb98e610af73713aa8874ec82f0bfa
    master_replid2:0000000000000000000000000000000000000000
    master_repl_offset:2698
    second_repl_offset:-1
    repl_backlog_active:1
    repl_backlog_size:1048576
    repl_backlog_first_byte_offset:1
    repl_backlog_histlen:2698
    

(4).启动时可能存在的问题
启动Redis时,如果出现“The TCP backlog setting of 511 cannot be enforced…”,通过以下步骤解决。

  • 将net.core.somaxconn = 1024添加到/etc/sysctl.conf中,然后执行sysctl -p生效配置
  • 将vm.overcommit_memory = 1添加到/etc/sysctl.conf中,然后执行sysctl -p生效配置
  • 将echo never > /sys/kernel/mm/transparent_hugepage/enabled添加到/etc/rc.local中,然后执行source /etc/rc.local生效配置
Logo

CSDN联合极客时间,共同打造面向开发者的精品内容学习社区,助力成长!

更多推荐