一  高可用介绍

redis的单机部署是非常方便的,但是存在很大的一个问题就是单点故障,一旦机器挂掉,所有相关的服务都受影响,所以生产环境一般都是搭的高可用架构,当然也有公司部署单机的,那是因为要么redis承担的任务本身没那么重要,挂了重启对系统也没多大影响,要么就是对系统本身的高可用要求没那么高,就算整个系统挂了重启也没啥大问题。

redis的高可用架构一般有这么几种:主从模式、哨兵模式、redis sharding 模式、redis cluster模式。本篇搭建的是最基础的主从模式。

二  搭建实战

1   linux服务器安装好docker,这里就不详细记录安装过程了,还不太了解docker的小伙伴可以自行百度。

2  启动docker服务

systemctl start docker

3  查看docker是否启动

systemctl status docker    如下图说明启动成功

docker做高可用 docker 高可用_redis

 

 4  下载redis镜像

docker search redis //查看镜像  ,更详细版本可以到镜像仓库查看:https://hub.docker.com/_/redis

docker做高可用 docker 高可用_redis_02

 docker pull redis //拉取镜像 ,不指定版本默认是最新版

 docker images | grep redis   //查看已下载的redis镜像

docker做高可用 docker 高可用_插入数据_03

 

5  创建并启动三个容器

docker run -d --name redis0 -p 6379:6379 redis

docker run -d --name redis1 -p 6389:6379 redis

docker run -d --name redis2 -p 6399:6379 redis

6  查看已启动容器

docker ps   如图说明三台redis已经正常启动

docker做高可用 docker 高可用_redis_04

 

 7 客户端链接并查看状态

redis-cli  -h 192.168.74.132 -p 6379

docker做高可用 docker 高可用_redis_05

 redis-cli  -h 192.168.74.132 -p 6389

docker做高可用 docker 高可用_docker_06

  redis-cli  -h 192.168.74.132 -p 6399

docker做高可用 docker 高可用_插入数据_07

 可以看到,目前三台redis之间是没有任何关系的,各自都是master节点,都没有从节点

8  建立主从关系(这里把6379作为主,6389和6399作为从)

salaveof 192.168.74.132 6379

docker做高可用 docker 高可用_docker_08

 

docker做高可用 docker 高可用_docker做高可用_09

 

9  查看主从关系

6379还是主,多了两个从

docker做高可用 docker 高可用_redis_10

 6389和6399都成了从,主是6379

docker做高可用 docker 高可用_docker做高可用_11

 

docker做高可用 docker 高可用_docker_12

 

 10  主从验证

插入数据之前都是空的

 

docker做高可用 docker 高可用_docker做高可用_13

 

docker做高可用 docker 高可用_redis_14

 

docker做高可用 docker 高可用_docker_15

 

现在往6379插入一条数据

set  k1 v1

docker做高可用 docker 高可用_docker_16

 三台机器获取k1

docker做高可用 docker 高可用_docker做高可用_17

  

docker做高可用 docker 高可用_docker做高可用_18

  

docker做高可用 docker 高可用_docker做高可用_19

 

三  优缺点

 

1  优点:搭建起来是相当的简单,而且确实可以实现读写分离,主写从读,也可以提高整体性能

 2  缺点:一旦主机挂掉,整体对外就不能写了,相当于还是存在单点故障问题的;当从机比较多数据量又比较大的时候,主机都要完成复制工作,对性能是有影响的;只适合读多写少

四 主从模式变形

1 针对以上主从模式的缺点出现了一些变形,比如为了避免主机向所有其他从机都做数据同步降低性能,可采用‘薪火相传’模式,相当于分层复制了,主机只负责直接从机数据的复制,各个直接从机自己去复制自己的直接从机。

 这样,6399就成了6389的从机

 

docker做高可用 docker 高可用_redis_20

6379就只有6389一台从机了

 

docker做高可用 docker 高可用_插入数据_21

往6379插入数据

docker做高可用 docker 高可用_docker_22

 看看效果 还是一样能实现主从复制

docker做高可用 docker 高可用_docker做高可用_23

  

docker做高可用 docker 高可用_插入数据_24

  

docker做高可用 docker 高可用_插入数据_25

 

2  还有就是对于主机挂掉,整体不能对外提供写服务的问题,可以把从机直接升级为主机

停掉6379

docker做高可用 docker 高可用_docker做高可用_26

 

再把6389升级为主机

  slaveof no one   可以看到6389成了主机,有一台从机

docker做高可用 docker 高可用_redis_27

 

 往6389插入数据

docker做高可用 docker 高可用_docker做高可用_28

 看效果

 

docker做高可用 docker 高可用_docker做高可用_29

   

docker做高可用 docker 高可用_redis_30

 可以看出来一个很大的问题就是需要手动将从机切换成主机,这样的话是很难做到及时的。所以就有了后面的哨兵模式。

 

学无止境,让学习成为一种习惯。

本人水平有限,有不对的地方请指教,谢谢。