Redis的主从复制
有什么好处
- 主从复制实现了数据的热备份,是持久化之外的一直方式
- 故障恢复:当主节点出现问题时,从节点可以提供数据
- 负载均衡:主节点提供写服务,从节点提供读服务。在少写多读的场景下,从节点可以有效的分担请求的负载。
- 高可用,主从复制还是哨兵和集群能够实施的基础,因此说主从复制是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主多从的情况下,如果主机宕机了会怎么样呢?
如下图所示。