Redis青铜修炼手册(五) 丨 Redis的主从复制

来自:程序员共成长(微信号:finishbug),作者:程序员共成长

有什么好处

  • 主从复制实现了数据的热备份,是持久化之外的一直方式

  • 故障回复:当主节点出现问题时,从节点可以提供数据

  • 负载均衡:主节点提供写服务,从节点提供读服务。在少写多读的场景下,从节点可以有效的分担请求的负载。

  • 高可用,主从复制还是哨兵和集群能够实施的基础,因此说主从复制是Redis高可用的基础。


拷贝多份redis配置文件

wyl@wyl-linux:/etc/redis$ sudo cp redis.conf  redis6379.conf
wyl@wyl-linux:/etc/redis$ sudo cp redis.conf  redis6380.conf
wyl@wyl-linux:/etc/redis$ sudo cp redis.conf  redis6381.conf
wyl@wyl-linux:/etc/redis$ ls -l
total 240
-rw-r----- 1 root  root  58837 2月  17 23:13 redis6379.conf
-rw-r----- 1 root  root  58837 2月  17 23:13 redis6380.conf
-rw-r----- 1 root  root  58837 2月  17 23:13 redis6381.conf
-rw-r----- 1 redis redis 58837 11月 29 18:37 redis.conf


开启 daemonize yes

主节点配置文件不变,端口号6379

两个从节点,修改pid、log、dump文件名字,以及端口号(分别是6380、6381)

可根据不同的配置文件修改,如redis-server-6380.pid、 redis-server-6380.log、dump-6380.rdb

daemonize yes
pidfile /var/run/redis/redis-server.pid 
port 6379
logfile /var/log/redis/redis-server.log
dbfilename dump.rdb


三个redis的配置完毕之后,启动redis服务

wyl@wyl-linux:~$ sudo redis-server /etc/redis/redis6379.conf 
wyl@wyl-linux:~$ redis-cli -p 6379

wyl@wyl-linux:~$ sudo redis-server /etc/redis/redis6380.conf 
wyl@wyl-linux:~$ redis-cli -p 6380

wyl@wyl-linux:~$ sudo redis-server /etc/redis/redis6381.conf 
wyl@wyl-linux:~$ redis-cli -p 6381


查看进程,三台redis服务均启动成功

wyl@wyl-linux:~$ ps -ef|grep redis
redis      4305      1  0 23:28 ?        00:00:00 /usr/bin/redis-server 127.0.0.1:6379
root       4355   1707  0 23:29 ?        00:00:00 redis-server 127.0.0.1:6380
root       4376   1707  0 23:29 ?        00:00:00 redis-server 127.0.0.1:6381
wyl        4570   2269  0 23:31 pts/0    00:00:00 redis-cli -p 6379
wyl        4572   3973  0 23:31 pts/1    00:00:00 redis-cli -p 6380
wyl        4576   4362  0 23:31 pts/2    00:00:00 redis-cli -p 6381
root       4804   4580  0 23:33 pts/3    00:00:00 sudo vim redis.conf
root       4805   4804  0 23:33 pts/3    00:00:00 vim redis.conf
wyl        4879   4809  0 23:35 pts/4    00:00:00 grep --color=auto redis


SLAVEOF host port 主节点HOST、主节点port

建立主从复制关系,


slaveof no one

断开主从复制关系,使得这个从属服务器关闭复制功能,并从从属服务器转变回主服务器从节点断开复制后,不会删除已有的数据,只是不再接受主节点新的数据变化。


进行主从配置

可以通过 info replication 查看服务器信息
role:master 主服务器
rike: salve 从服务器

  • 主服务器宕机之后,从服务器依旧还是从服务器,并不会上位为主服务器

  • 从机宕机之后,每次启动都需要重新与主服务器进行连接。除非在配置文件中进行了配置

因此需要重新执行SLAVEOF 127.0.0.1 6379 同步主机数据
如果在正常运行的salve机器上,执行SLACEOF host port,则这个salve会变成master节点。

只有主机才可以进行写数据,如下 我在6380端口的从机上进行写操作

# 从机只可进行数据的读取,不可写入
127.0.0.1:6380> set k3 v3
(error) READONLY You can't write against a read only slave.

上面一主2从,如果从机太多,只有一个主机,所有的写压力都落在了唯一的一个主机上。所以这里就要用到了去中心化的概念

去中心化:

是在一个分布有众多节点的系统中,每个节点都具有高度自治的特征。节点之间彼此可以自由连接,形成新的连接单元。任何一个节点都可能成为阶段性的中心,但不具备强制性的中心控制功能。节点与节点之间的影响,会通过网络而形成非线性因果关系。这种开放式、扁平化、平等性的系统现象或结构,我们称之为去中心化。


上面提到了三个reids。如果6380作为6379的从机,6380作为6381的从机(也就是80手机81的主节点)


如下所示

再回到1主多从的情况下,如果主机宕机了会怎么样呢? 

如下图所示。


推荐↓↓↓
数据库开发
上一篇:Redis青铜修炼手册(四) 丨 Redis的发布和订阅 下一篇:面试官问我,Redis分布式锁如何续期?懵了。