目录
概念
主从复制
主从复制,是指将一台Redis服务器的数据,复制到其他的Redis服务器。前者称之为主节点(master/leader),后者称为从节点(salve/follower);数据库的复制是单向的,只能由主节点到从节点。Master以写为主,Slave以读为主。
默认情况下,每台Redis服务器都是主节点
且一个主节点可以有多个从节点(或没有从节点),但一个从节点只能有一个主节点。
主从复制的作用以及包括
1、数据冗余:主从复制实现了数据的热备份,是持久化之外的一种数据冗余方式!
2、数据故障:当主节点出现问题时,可以由从节点提供服务,实现快速的故障恢复;实际上是一种服务的冗余
3、负载均衡:在主从复制的基础上,配合读写分离,可以由主节点提供写服务,由从节点提供读服务(即写Redis数据时应连接主节点,读Redis数据时应连接从节点),分担服务器负载;尤其是在写少读多的情况下,通过多个从节点分担负载,可以大大的提高Redis服务器的并发量!
4、高可用(集群)基石:除了上述作用外,主从复制还是哨兵和集群能够实施的基础,因此说主从复制是Redis高可用的基础。
一般来说,要将Redis运用到项目中,只使用一台Redis是万万不能的(容易出现宕机),原因如下:
- 从结构上:单个redis服务器会发生单点故障,并且一台服务器需要处理所有的请求负载,压力较大
- 从容量上:单个Redis服务器内存容量有限,就算一台Redis服务器内存容量为256G,也不能将所有内存作Redis的内存,一般来
说,单个Redis最大使用的内存不应该超过20个G。
主从复制,读写分离!80%的情况下都是在进行读操作!减缓服务器的压力!架构中经常使用!一主二从!!
环境配置
只需要配置从库,不需要配置主库
127.0.0.1:7369> info replication
# Replication
role:master # 角色
connected_slaves:1 # 从机数量
slave0:ip=127.0.0.1,port=7370,state=online,offset=1846,lag=0 # 从机地址
master_failover_state:no-failover
master_replid:908f636f667b61673929499ab1115ccec84b2533
master_replid2:0000000000000000000000000000000000000000
master_repl_offset:1846
second_repl_offset:-1
repl_backlog_active:1
repl_backlog_size:1048576
repl_backlog_first_byte_offset:1
repl_backlog_histlen:1846
复制三个配置文件,修改对应配置文件中的相关内容!!
1、端口
port 6379
2、pid 名称
pidfile /var/run/redis_7371.pid
3、log文件名称
logfile "7371.log"
4、dump.rdb名称(这个位置已经修改过了)
dbfilename dump7371.rdb
修改完三个配置文件后,启动我们3个redis容器,然后通过进程查看(ps)
一主二仆
设置主从复制,可以通过两种方式进行设置
- 通过命令行,主库不需要操作,从库执行 SLAVE ip port 进行设置
- 通过配置文件进行设置
方式一:通过命令设置
从库
# 1、在从机中执行 SLAVEOF ip port
127.0.0.1:7370> SLAVEOF 127.0.0.1 7369
OK
# 2、查看从机状态
127.0.0.1:7370> info replication
# Replication
role:slave # 角色以及发生改变
master_host:127.0.0.1 # 主机ip
master_port:7369 # 主机端口
master_link_status:up
master_last_io_seconds_ago:5
master_sync_in_progress:0
slave_read_repl_offset:0
主库
# 查看主库状态
127.0.0.1:7369> info replication
# Replication
role:master
connected_slaves:1
slave0:ip=127.0.0.1,port=7370,state=online,offset=154,lag=0
master_failover_state:no-failover
master_replid:da595a84ddf165c067309e5e10a5095696bde1f9
master_replid2:0000000000000000000000000000000000000000
master_repl_offset:154
second_repl_offset:-1
repl_backlog_active:1
repl_backlog_size:1048576
repl_backlog_first_byte_offset:1
repl_backlog_histlen:154
方式二 通过配置文件设置
修改 redis.conf 配置文件
# 修改replicaof 的值,设置主库的地址
replicaof 127.0.0.1 7369
# 修改 masterauth 的值,设置主库的密码
masterauth password
启动 7371端口的redis,并查看状态
从库
127.0.0.1:7371> INFO replication
# Replication
role:slave
master_host:127.0.0.1
master_port:7369
master_link_status:up
master_last_io_seconds_ago:5
master_sync_in_progress:0
slave_read_repl_offset:392
slave_repl_offset:392
slave_priority:100
slave_read_only:1
replica_announced:1
connected_slaves:0
master_failover_state:no-failover
master_replid:da595a84ddf165c067309e5e10a5095696bde1f9
master_replid2:0000000000000000000000000000000000000000
master_repl_offset:392
second_repl_offset:-1
repl_backlog_active:1
repl_backlog_size:1048576
repl_backlog_first_byte_offset:351
repl_backlog_histlen:42
主库
127.0.0.1:7369> info replication
# Replication
role:master
connected_slaves:2
slave0:ip=127.0.0.1,port=7370,state=online,offset=406,lag=1
slave1:ip=127.0.0.1,port=7371,state=online,offset=406,lag=1
master_failover_state:no-failover
master_replid:da595a84ddf165c067309e5e10a5095696bde1f9
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
测试主从复制
1、在主库中添加值
127.0.0.1:7369> keys *
(empty array)
127.0.0.1:7369> set k1 v1
OK
127.0.0.1:7369> set k2 v2
OK
127.0.0.1:7369> set k3 v3
OK
127.0.0.1:7369> set k4 v4
OK
2、在7370 从库中查看
127.0.0.1:7370> keys *
1) "k3"
2) "k2"
3) "k4"
4) "k1"
3、在7371 从库中查看
127.0.0.1:7371> keys *
1) "k4"
2) "k3"
3) "k1"
4) "k2"