14-Redis - 主从复制

 

 由于主从复制是一主二仆,一个主机,两个备机,主机主要负责写,备机主要负责读,所以现在需要三个端口,就需要三个Redis客户端(相当于三台电脑)

1. 复制/myredis/redis.conf,拷贝三份到当前目录下

[root@localhost 桌面]# cd /myredis
[root@localhost myredis]# ll
总用量 88
-rw-r--r--. 1 root root 41405 8月  10 11:25 redis_aof.conf
-rw-r--r--. 1 root root 41404 8月   7 23:17 redis.conf
[root@localhost myredis]# cp redis.conf redis6379.conf
[root@localhost myredis]# cp redis.conf redis6380.conf
[root@localhost myredis]# cp redis.conf redis6381.conf
[root@localhost myredis]# ll
总用量 220
-rw-r--r--. 1 root root 41404 8月  10 16:50 redis6379.conf
-rw-r--r--. 1 root root 41404 8月  10 16:50 redis6380.conf
-rw-r--r--. 1 root root 41404 8月  10 16:50 redis6381.conf
-rw-r--r--. 1 root root 41405 8月  10 11:25 redis_aof.conf
-rw-r--r--. 1 root root 41404 8月   7 23:17 redis.conf
[root@localhost myredis]# 

 2.修改配置文件,修改的地方如下,6379,6380,6381三个对应修改

(1)修改redis.pid,这是redis的记录进程的文件

(2)修改日志文件

(3)修改备份文件(快照)

 

同理修改6380和6381端口的redis客户端

3.启动一台主机和两台备机

查看/usr/local/bin目录下发现有三个redis客户端已经启动

查看redis启动情况,三个客户端都已经正常启动就绪

4. 查看三个客户端的角色,发现都是主机(master)

5.设置角色,这里设置6379为主机,6380和6381是备机

命令:SLAVEOF 主机IP 主机Redis的端口

先在主机上添加集合kv

 

 测试角色,并测试是否拿到值

另外,k1 k2 k3在主机上(6379)是先设置, 然后才设置了6380和6381的备机角色,这时候也可以获取到之前的所有key,

即,主从复制是把主机的所有记录都复制到备机上,和设置角色的时间无关

6. 查看客户端的角色

 

7. 读写分离,如果主机对同一个key进行了写操作,那么备机就不能对同一个key进行写操作了,会冲突

 

8. 如果主机挂了,那么两个备机也不会主动升级角色为主机,还是备机角色,之前的数据都还可以使用,但是状态变成了down

 

9. 如果主机又启动了,那么备机还是可以继续工作

 

10. 如果备机挂了, (1)不影响主机和其他备机的任何操作;(2)挂了的备机重新连接上时不会获得这个宕机时间内的主机上的数据,相当于这段时间该备机是隔离的,

但如果该备机连接上了之后,其角色就变成了主机,但其下没有任何的备机

 

11. 这时候,如果宕机的备机如果想连接上6379的主机,成为其备机,那么就可以获得之前设置的数据k8

 

总结:

(1)主机挂了,其他备机可以操作数据,所有备机的角色不会改变,都还是备机,主机重新连接上之后,他们三个的主从角色不变

(2)备机挂了,不影响其他主机和备机,重新连接上之后,该备机变成了主机,主从角色变化,该备机需要重新连接主机才能获取到主机上的新增加的数据

 

-----------------------------上面是一主二仆,下面是6379是主机,6380是6379的备机,同时6380又是6381的主机,6381是6380的备机-----------------------

1. 在6379上设置k9 v9,在6381上能不能获取到k9的值?

 

把主从关系设置回来,6379是主机,6380和6381是从机

如果主机6379挂了,6380从备机变成了主机,6381不做任何更改,

slaveof no one:把6380从备机变成主机,在6380上设置k10 v10,在6381上还可以获取到k10的值,尽管6381没有设置成6380的备机,也能获取k10,

而6379重新启动之后,它还是主机,但是不会有任何备机,相当于光杆司令,所以格局会变成

(1)6380主机、6381从机

(2)6379独立为一台主机

 

把环境恢复到一主二仆的格局

如果主机挂了,上面是使用slaveoff no one的命令手动设定新的主机,这样在实际运行中极不方便,比如凌晨4点的时候主机挂了,但是系统/机器还在运行,

为了不耽误工作,需要系统设定一个监控模式,在主机挂了之后从剩余的从机中自动投票,票数多的选定为新的主机,这样系统还可以继续执行,又不需要人工手动去设定新的主机,很方便。这就是哨兵模式。

在/myredis/下创建一个空文件sentinel.conf

使用vim命令打开该文件,并设置,sentinel monitor 被监控的主机名字(自定义) 主机的IP 主机的端口 票数

含义:如果主机6379挂了之后,哪个从机的票数大于1票的,哪个从机就是新的领导(主机)

 

启动之后,哨兵开始巡逻6380和6381端口的从机

主机6379挂了之后,查看6380和6381还是从机

等一会查看sentinel.conf文件,出现了以下信息:选出了6380作为新的主机

 

新的主机诞生了,6380成为了新的主机,而6381还是从机,不过它由之前的6379的备机自动变成了新主机6380的备机

 

这时候6380是主机,6381是6380的备机,而如果6379重新连接之后,它会成为6380的备机,不再是之前的主机了,但数据都还在

 

posted @ 2017-08-10 18:02  半生戎马,共话桑麻、  阅读(149)  评论(0)    收藏  举报
levels of contents