主从复制 master slave
核心解决问题:数据冗余备份,不能解决故障的自动转移
主从复制讲解:
1.主节点负责写入操作,从节点负责同步主节点的冗余数据,不能写入
2.当主节点挂掉之后,从节点还是从节点,不能进行故障转移。
这里为了方便操作,搭建伪分布式,就是模拟在一台服务器上,通过修改端口搭建多个redis服务
服务器ip | 端口 | 节点 |
---|---|---|
192.168.0.114 | 6379 | master |
192.168.0.114 | 6380 | slave |
192.168.0.114 | 6381 | slave |
搭建一主二从演示:
#进入目录
cd /app/master-slave/conf
#复制2个配置文件
cp redis.conf redis-6380.conf
cp redis.conf redis-6381.conf#编辑从节点配置文件redis-6380.conf
vim redis-6380.conf
92行 port 6379 改为 6380
158行 redis_6379.pid 修改为redis_6380.pid
286行replicaof <masterip> <masterport>改为replicaof 192.168.0.114 6379#编辑从节点配置文件redis-6381.conf
vim redis-6381.conf
92行 port 6379 改为 6381
158行 redis_6379.pid 修改为redis_6381.pid
286行replicaof <masterip> <masterport>改为replicaof 192.168.0.114 6379
启动redis的3个节点(1主2从)
/app/master-slave/bin/redis-server /app/master-slave/conf/redis.conf
/app/master-slave/bin/redis-server /app/master-slave/conf/redis-6380.conf
/app/master-slave/bin/redis-server /app/master-slave/conf/redis-6381.conf
主:咱们启动redis是基于配置后天启动的,因此前面都是通用的,
也可以单独都复制一份,效果一样的
分别启动redis 3个节点的客户端
#启动redis 主节点客户端
/app/master-slave/bin/redis-cli -h localhost -p 6379
#主节点操作日志如下:
[root@localhost conf]# /app/master-slave/bin/redis-cli -h localhost -p 6379
localhost:6379> info replication
# Replication
role:master
connected_slaves:2
slave0:ip=192.168.0.114,port=6380,state=online,offset=196,lag=1
slave1:ip=192.168.0.114,port=6381,state=online,offset=196,lag=1
master_replid:c784bb3d47875dc0d4747d8a67392cacce4dd41c
master_replid2:0000000000000000000000000000000000000000
master_repl_offset:196
second_repl_offset:-1
repl_backlog_active:1
repl_backlog_size:1048576
repl_backlog_first_byte_offset:1
repl_backlog_histlen:196
localhost:6379>
#启动redis 端口为6380客户端
/app/master-slave/bin/redis-cli -h localhost -p 6380
#主节点操作日志如下:
[root@localhost ~]# /app/master-slave/bin/redis-cli -h localhost -p 6380
localhost:6380> info replication
# Replication
role:slave
master_host:192.168.0.114
master_port:6379
master_link_status:up
master_last_io_seconds_ago:0
master_sync_in_progress:0
slave_repl_offset:364
slave_priority:100
slave_read_only:1
connected_slaves:0
master_replid:c784bb3d47875dc0d4747d8a67392cacce4dd41c
master_replid2:0000000000000000000000000000000000000000
master_repl_offset:364
second_repl_offset:-1
repl_backlog_active:1
repl_backlog_size:1048576
repl_backlog_first_byte_offset:1
repl_backlog_histlen:364
localhost:6380>
#启动redis 端口为6380客户端
/app/master-slave/bin/redis-cli -h localhost -p 6381
#主节点操作日志如下:
[root@localhost ~]# /app/master-slave/bin/redis-cli -h localhost -p 6381
localhost:6381> info replication
# Replication
role:slave
master_host:192.168.0.114
master_port:6379
master_link_status:up
master_last_io_seconds_ago:10
master_sync_in_progress:0
slave_repl_offset:448
slave_priority:100
slave_read_only:1
connected_slaves:0
master_replid:c784bb3d47875dc0d4747d8a67392cacce4dd41c
master_replid2:0000000000000000000000000000000000000000
master_repl_offset:448
second_repl_offset:-1
repl_backlog_active:1
repl_backlog_size:1048576
repl_backlog_first_byte_offset:1
repl_backlog_histlen:448
localhost:6381>
下面就可以测试了
需求测试:
1.在主节点上set 值 并查看
2.在从节点获取主节点set的值
3.登录从节点,尝试set 值,预测结果,不能执行写入操作
#主节点测试操作日志记录:
localhost:6379> set a aaa
OK
localhost:6379> get a
"aaa"
localhost:6379>#slave节点测试操作日志记录:
localhost:6380> get a
"aaa"
localhost:6380> set b bbb
(error) READONLY You can't write against a read only replica.
localhost:6380> #slave节点测试操作日志记录:
localhost:6381> get a
"aaa"
localhost:6381> set c ccc
(error) READONLY You can't write against a read only replica.
localhost:6381>
从上面,可以得出结论:
主节点master负责写入操作,从节点负责同步主节点的冗余数据,但是,不能执行写入操作。