概念
主从复制,是指将一台redis服务器的数据,复制到其他的redis服务器,前者称为主节点,后者称为从阶段。数据的复制是单向的,只能由主节点复制到从节点。
默认情况下每台服务器都是主节点,可以有多个从节点,但是一个从节点只能有一个主节点。
主从复制的作用主要包括:
1.数据冗余:主从复制实现了数据的热备份,是持久化之外的一种数据冗余方式。
2.故障恢复:当主节点出现问题,可以有从节点提供服务,实现快速的故障恢复;实际上是一种服务的冗余。
3.负载均衡。
4.高可用。
redis一般在项目中是不会使用一台服务器的:
1.结构上单个redis容易发生单点故障,且请求负载压力大;
2.容量上单个redis容量有限,一般单台redis的最大使用内存不应该超过20G.
所以一般会使用以下架构:
以一主两从为列
这里为了方便,是单机多配置集群做测试,也可以多机多集群。
1.复制两份作为从集的配置文件:
[root@localhost config]# ls
redis.conf
[root@localhost config]# cp redis.conf redis-slave01.conf
[root@localhost config]# cp redis.conf redis-slave02.conf
[root@localhost config]# ls
redis.conf redis-slave01.conf redis-slave02.conf
2.修改每个配置文件中的端口(避免端口冲突)、pid名字、log文件名字、dump.rdb名字。以redis.conf为例:
port 6379
pidfile /var/run/redis_6379.pid
logfile "6379.log"
dbfilename dump6379.rdb
3.打开三个窗口,分别以三个配置文件启动,模拟三台服务器:
4:配置从库:
默认都是主机,所以只需要配置从机即可
127.0.0.1:6380> info replication #查看当前库信息
# Replication
role:master #角色
connected_slaves:0 #有几个从机
master_replid:d1c03d293fc017980fc7aa281a315397d7ec9170
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> SLAVEOF 127.0.0.1 6379 #设置为6379的从机
OK
127.0.0.1:6380> info replication #查看
# Replication
role:slave #角色变为了从机
master_host:127.0.0.1 #主机ip
master_port:6379 #主机端口
master_link_status:up
master_last_io_seconds_ago:3
master_sync_in_progress:0
slave_repl_offset:0
slave_priority:100
slave_read_only:1
connected_slaves:0
master_replid:bb3e09de09fdc4b8f150c6853ac78905e74658b7
master_replid2:0000000000000000000000000000000000000000
master_repl_offset:0
second_repl_offset:-1
repl_backlog_active:1
repl_backlog_size:1048576
repl_backlog_first_byte_offset:1
repl_backlog_histlen:0
6381操作同上,查看主机信息:
127.0.0.1:6379> info replication
# Replication
role:master #主机
connected_slaves:2 #有两个从机
slave0:ip=127.0.0.1,port=6380,state=online,offset=406,lag=1
slave1:ip=127.0.0.1,port=6381,state=online,offset=406,lag=1
master_replid:bb3e09de09fdc4b8f150c6853ac78905e74658b7
master_replid2:0000000000000000000000000000000000000000
master_repl_offset:406
second_repl_offset:-1
repl_backlog_active:1
repl_backlog_size:1048576
repl_backlog_first_byte_offset:1
repl_backlog_histlen:406
注:实际中,应该在配置文件中配置,是永久的,这里测试 使用命令配置 是暂时的
5.测试: