架构模式:
– 一主一从
– 一主多从
– 主从从
主从复制工作原理
• 工作原理
– Slave 向 maste 发送 sync 命令
– Master 启动后台存盘进程,同时收集所有修改数据命
令
– Master 执行完后台存盘进程后,传送整个数据文件到
slave 。
– Slave 接收数据文件后,将其存盘并加载到内存中完成
首次完全同步
– 后续有新数据产生时, master 继续将新的所以收集到
的修改命令依次传给 slave ,完成同步。
主从复制缺点
• 缺点
– 网络繁忙,会产生数据同步延时问题(发送文件的速度,慢)
– 系统繁忙,会产生数据同步延时问题
配置主从复制
redis 默认就是主库,只需要配置从库旧可以了
配置方法:
1.命令行配置(马上生效,不需要从起服务,一旦重起服务失效)
2.修改配置文件(永久生效,但需要重起服务才能生效)
命令行设置:
设置从库:
192.168.4.52:6352> SLAVEOF 192.168.4.51 6351
OK
192.168.4.52:6352> info replication
# Replication
role:slave
master_host:192.168.4.51
master_port:6351
master_link_status:up
master_last_io_seconds_ago:8
master_sync_in_progress:0
slave_repl_offset:2366
slave_priority:100
slave_read_only:1
connected_slaves:0
master_replid:f55ecd93599d6b47277955e4de285afb339e9a4f
master_replid2:0000000000000000000000000000000000000000
master_repl_offset:2366
second_repl_offset:-1
repl_backlog_active:1
repl_backlog_size:1048576
repl_backlog_first_byte_offset:2325
repl_backlog_histlen:42
查看主库的信息:
192.168.4.51:6351> info replication
# Replication
role:master
connected_slaves:2
slave0:ip=192.168.4.58,port=6358,state=online,offset=2450,lag=1
slave1:ip=192.168.4.52,port=6352,state=online,offset=2450,lag=1
master_replid:f55ecd93599d6b47277955e4de285afb339e9a4f
master_replid2:0000000000000000000000000000000000000000
master_repl_offset:2450
second_repl_offset:-1
repl_backlog_active:1
repl_backlog_size:1048576
repl_backlog_first_byte_offset:1
repl_backlog_histlen:2450
模拟数据同步:
192.168.4.51:6351> keys *
1) "name"
2) "age"
192.168.4.51:6351> get age
"175"
192.168.4.51:6351> get name
"bob"
192.168.4.52:6352> keys *
1) "age"
2) "name"
192.168.4.52:6352> get age
"175"
192.168.4.52:6352> get name
"bob"
继续添加53为从库(完成一主多从的结构)
192.168.4.53:6353> info replication
# Replication
role:master
connected_slaves:0
master_replid:ca4dd85349b1aa09986dd9382cd0548376c1b1ed
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
192.168.4.53:6353> SLAVEOF 192.168.4.51 6351
OK
192.168.4.53:6353> keys *
1) "age"
2) "name"
192.168.4.53:6353> info replication
# Replication
role:slave
master_host:192.168.4.51
master_port:6351
master_link_status:up
master_last_io_seconds_ago:2
master_sync_in_progress:0
slave_repl_offset:3393
slave_priority:100
slave_read_only:1
connected_slaves:0
master_replid:f55ecd93599d6b47277955e4de285afb339e9a4f
master_replid2:0000000000000000000000000000000000000000
master_repl_offset:3393
second_repl_offset:-1
repl_backlog_active:1
repl_backlog_size:1048576
repl_backlog_first_byte_offset:3352
repl_backlog_histlen:42
手动把53切换成主库:
192.168.4.53:6353> SLAVEOF no one
OK
192.168.4.53:6353> info replication
# Replication
role:master
connected_slaves:0
master_replid:fd3f7892955ba6c7b1cacdc7701c826bc1a5daa8
master_replid2:f55ecd93599d6b47277955e4de285afb339e9a4f
master_repl_offset:3617
second_repl_offset:3618
repl_backlog_active:1
repl_backlog_size:1048576
repl_backlog_first_byte_offset:3352
repl_backlog_histlen:266
配置主从从结构:
把53配置成52的从库:
192.168.4.53:6353> SLAVEOF 192.168.4.52 6352
OK
192.168.4.53:6353> info replication
# Replication
role:slave
master_host:192.168.4.52
master_port:6352
master_link_status:up
master_last_io_seconds_ago:2
master_sync_in_progress:0
slave_repl_offset:4107
slave_priority:100
slave_read_only:1
connected_slaves:0
master_replid:f55ecd93599d6b47277955e4de285afb339e9a4f
master_replid2:0000000000000000000000000000000000000000
master_repl_offset:4107
second_repl_offset:-1
repl_backlog_active:1
repl_backlog_size:1048576
repl_backlog_first_byte_offset:3996
repl_backlog_histlen:112
192.168.4.53:6353>
192.168.4.52:6352> info replication
# Replication
role:slave
master_host:192.168.4.51
master_port:6351
master_link_status:up
master_last_io_seconds_ago:5
master_sync_in_progress:0
slave_repl_offset:4121
slave_priority:100
slave_read_only:1
connected_slaves:1
slave0:ip=192.168.4.53,port=6353,state=online,offset=4121,lag=0
master_replid:f55ecd93599d6b47277955e4de285afb339e9a4f
master_replid2:0000000000000000000000000000000000000000
master_repl_offset:4121
second_repl_offset:-1
repl_backlog_active:1
repl_backlog_size:1048576
repl_backlog_first_byte_offset:2325
repl_backlog_histlen:1797
192.168.4.51:6351> info replication
# Replication
role:master
connected_slaves:1
slave0:ip=192.168.4.52,port=6352,state=online,offset=4135,lag=0
master_replid:f55ecd93599d6b47277955e4de285afb339e9a4f
master_replid2:0000000000000000000000000000000000000000
master_repl_offset:4135
second_repl_offset:-1
repl_backlog_active:1
repl_backlog_size:1048576
repl_backlog_first_byte_offset:1
repl_backlog_histlen:4135
重起服务:设置消失
[root@host53 ~]# /etc/init.d/redis_6379 stop
Stopping ...
Waiting for Redis to shutdown ...
Redis stopped
[root@host53 ~]# /etc/init.d/redis_6379 start
Starting Redis server...
[root@host53 ~]# redis-cli -h 192.168.4.53 -p 6353
192.168.4.53:6353> info replication
# Replication
role:master
connected_slaves:0
master_replid:c843aaebf8a042f365c222cc00de0c05bcad0994
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
192.168.4.53:6353> quit