6.2 Redis主从复制之实现方式
1.命令方式(1).API设置为从节点(新增数据会同步)localhost:6379 > slaveof 127.0.0.1 6379查看节点主从属性(role的值)localhost:6379 > info replication取消复制localhost:6379 > slaveof no one(2).复制流程客户端执行slaveof命令从节点向客户端返回消息(异步过程)从
·
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生效配置
更多推荐
已为社区贡献2条内容
所有评论(0)