-
概念
主从复制,指将一台redis服务器的数据,复制到其它的redis服务器。前者称为主节点(master),后者称为从节点(slave);数据的复制是单向的,只能由主节点到从节点。master以写为主,slave以读为主。默认情况下,每台redis服务器都是主节点;且一个主节点可以有多个从节点(或没有从节点),但一个从节点只能有一个主节点。
主从复制的作用主要为:
1)数据冗余:主从复制实现了数据的热备份,是持久化之外的一种数据冗余方式。
2)故障恢复:当主节点出现问题时,可以由从节点提供服务,实现快速的故障恢复;实际上是服务的冗余
3)负载均衡:在主从复制的基础上,配合读写分离,可以由主节点提供写服务,由从节点提供读服务(即写redis数据时应用连接主节点,读redis数据时应用·连接从节点),分担服务器负载;尤其是在写少读多的场景下,通过多个从节点分担读负载,可以大大提高redis服务器的并发;
4)高可用基石:除了上述作用外,主从复制还是哨兵和集群能够实施的基础,因此说主从复制是redis高可用的基础。一般来说,要将redis运用于工程项目中,只使用一台redis服务器是不可取的:
1)从结构上,单个redis服务器会发生单点故障,并且一台服务器需要处理所有的请求负载,压力较大;
2)从容量上,单个redis服务器内存容量有限,就算一台服务器内存容量为256G,也不能将所有内存用作redis存储内存,一般说,单台redis最大使用内存最好不超过20G。对于多读少写的场景,则可以使用一主对应多从的架构
-
配置主从关系
1)配置从机配置文件
2)重启从机服务root@liumingyong-Lenovo-G40-70m:/usr/local/redis-6.2.11/bin# ps -ef|grep redis #查看reids服务进程 root 817 1 0 21:43 ? 00:00:02 /usr/local/redis-6.2.11/bin/redis-server *:6379 root 2452 2354 0 21:48 pts/0 00:00:00 vim redis6380.conf root 2518 1 0 21:56 ? 00:00:00 ./bin/redis-server *:6380 root 2527 2258 0 21:57 pts/1 00:00:00 redis-cli root 2531 2354 0 22:02 pts/0 00:00:00 grep --color=auto redis root@liumingyong-Lenovo-G40-70m:/usr/local/redis-6.2.11/bin# kill -9 2518 #强制杀掉redis从节点进程
root@liumingyong-Lenovo-G40-70m:/usr/local/redis-6.2.11/bin# vim /etc/redis/redis6381.conf root@liumingyong-Lenovo-G40-70m:/usr/local/redis-6.2.11/bin# cd ../ root@liumingyong-Lenovo-G40-70m:/usr/local/redis-6.2.11# ./bin/redis-server /etc/redis/redis6381.conf #重启从节点服务 root@liumingyong-Lenovo-G40-70m:/usr/local/redis-6.2.11# cd ./bin/ root@liumingyong-Lenovo-G40-70m:/usr/local/redis-6.2.11/bin# redis-cli -p 6381 127.0.0.1:6381> info replication NOAUTH Authentication required. 127.0.0.1:6381> auth 123456 OK 127.0.0.1:6381> info replication #查看从节点服务信息 # Replication role:slave master_host:192.168.31.666 #直接点ip master_port:6379 #主节点端口 master_link_status:up master_last_io_seconds_ago:8 master_sync_in_progress:0 slave_read_repl_offset:378 slave_repl_offset:378 slave_priority:100 slave_read_only:1 replica_announced:1 connected_slaves:0 master_failover_state:no-failover master_replid:1d094a3ce3d13a8ca0960eeacf5429a91abb8d46 master_replid2:0000000000000000000000000000000000000000 master_repl_offset:378 second_repl_offset:-1 repl_backlog_active:1 repl_backlog_size:1048576 repl_backlog_first_byte_offset:295 repl_backlog_histlen:84
3)查看主节点从节点间关系
127.0.0.1:6379> info replication # Replication role:master connected_slaves:2 #从节点数量为2 slave0:ip=192.168.31.116,port=6380,state=online,offset=392,lag=1 slave1:ip=192.168.31.116,port=6381,state=online,offset=392,lag=1 master_failover_state:no-failover master_replid:1d094a3ce3d13a8ca0960eeacf5429a91abb8d46 master_replid2:0000000000000000000000000000000000000000 master_repl_offset:392 second_repl_offset:-1 repl_backlog_active:1 repl_backlog_size:1048576 repl_backlog_first_byte_offset:1 repl_backlog_histlen:392
4)主从复制验证
主节点可读可写,从节点只能读不可写。主节点中所有信息和数据,都会自动被从节点保存。
主节点读写:
从节点读:
当主节点断开(宕机),从节点依旧是连接到主节点的,但此时无法进行写操作。当主节点恢复后,从节点仍然能够获取到主节点的信息。5)主从复制原理
Slave启动成功连接到master后会发送一个sync同步命令,master接到命令,启动后台的存盘进程,同时收集所有接收到的用于修改数据集命令,在后台进程执行完毕之后,master将传送整个数据文件到slave,并完成一次完全同步。全量复制:而slave服务在接收到数据库文件数据后,将其存盘并加载到内存中。
增量复制:master继续将新的所有收集到的修改命令依次传给slave,完成同步。
但是只要是重新连接master,一次完全同步(全量复制)将被自动执行
6)在主节点断掉前提下,用命令设置当前从节点为新主节点
如果主节点断开了连接,可以使用slaveof no one让自己变成主节点,其它的节点就可以手动连接到最新的这个主节点。如果最开始的主节点恢复了,它默认是主节点但和当前的主从节点没有关系(仅单纯的一个默认主节点而已)