ICode9

精准搜索请尝试: 精确搜索
首页 > 数据库> 文章详细

redis的主从复制和高可用、集群

2022-01-26 10:04:18  阅读:131  来源: 互联网

标签:主从复制 redis 集群 master Sentinel 服务器 节点


概述:   

edis主从:可以一主多从,redis主服务器负责读写,从服务器只负责读。master写入完成后会将指令发给slave服务器,这个过程是异步的,slave服务器根据指令写入,所以存在读取数据延迟的问题。

 

哨兵 :redis主从配置好后,主节点挂掉后,哨兵模式会自动将从节点升级为主节点,它主要实现的是主从切换的功能

 

集群:集群+主从适用大规模的数据场景。哨兵+主从适用小规模数据场景。集群主要是高并发,哨兵是高可用,集群不会用到哨兵,集群的主从切换有自己的方式。

 

 

一、redis的安装

先在下载安装包

解压后进入目录应为已经有Makefile了所以直接make编译

 

 

 这里会报错,需要gcc编译器

 

 

 安装好gcc,再次make编译,还是会报错;这个错误根据 Readme 可知需要执行 make MALLOC=libc

  

 

 

 make完成后,提示去到 src 目录下

 

 

 到src目录后执行按提示执行make test,会报错提示安装tcl工具

 

 

 完成后 make install 完成安装

 

 

 

 

 

 注意进入utils目录,执行install_server.sh,不然脚本会报错,提示找不到相应文件。脚本执行时,会有几个设置config等的问题,默认回车即可

加 sudo 执行:

 

 

 

至此redis已经安装完毕

二、redis的主从复制和高可用

1、redis的主从复制

1)编辑redis的配置文件,配置文件位置如下图

 

 

 2)注释bind 127.0.0.1

 

在配置文件redis.conf中,默认的bind 接口是127.0.0.1,也就是本地回环地址。这样的话,访问redis服务只能通过本机的客户端连接,而无法通过远程连接,这样可以避免将redis服务暴露于危险的网络环境中,防止一些不安全的人随随便便通过远程,但是我们做主从复制。

 

但是搭建主从复制,需要另一台redis端连接到本机,所以要将其注释。

 

 

 2)关闭保护模式

 

 

 3)另一台redis端在其配置文件做同样操作,并且需要指定master端ip和端口,如图

 

 

 

如上操作所示,已经完成redis的主从复制,测试:在master端server3:set name  kk,在server3查看

 

完成主从复制

 

 

2、redis高可用

高可用原理:

 

自动故障迁移(Automatic failover): 当一个主服务器不能正常工作时, Sentinel 会开始一次自动故障迁移操作, 它会将失效主服务器的其中一个从服务器升级为新的主服务器, 并让失效主服务器的其他从服务器改为复制新的主服务器; 当客户端试图连接失效的主服务器时, 集群也会向客户端返回新主服务器的地址, 使得集群可以使用新主服务器代替失效服务器。

 

配置环境:三台虚拟机安装 redis 服务

Server3: 172.25.77.3 (先做 master)

Server4:172.25.77.4

 

Server5:172.25.77.5

 

按主从复制先配置好一主两从

 

1)在安装包中将 sentinel 文件复制到/etc/redis/下

 

 

 2)编辑 sentinel.conf 如下图

关闭保护模式

 

 配置指示 Sentinel 去监视一个名为 mymaster 的主服务器,这个主服务器的IP 地址为 172.25.77.3,端口号为 6379 ,而将这个主服务器判断为失效至少需要 2 个 Sentinel 同意(只要同意 Sentinel 的数量不达标,自动故障迁移就不会执行)

 

 down-after-milliseconds 选项指定了 Sentinel 认为服务器已经断线所需的毫秒数。如果服务器在给定的毫秒数之内, 没有返回 Sentinel 发送的 PING 命令的回复, 或返回一个错误, 那么 Sentinel 将这个服务器标记为主观下线

 

 

 完成后将 sentinel 配置文件发送 server4 和 sevrer5

 

 

 

 3)三台 redis 启动 Sentinel 服务

 

 

 

 

 

 

 

 

 

+slave 表示 :一个新的从服务器已经被 Sentinel 识别并关联。可以看到片此时 master 是 server3;server4 和 server5 是 slave。

 

4)测试:master 端 server3 info 查看 replication 信息:

 

 

 查看后 shotdown

此时:server4 监听如下图

 

 +switch-master :配置变更,主服务器的 IP 和地址已经改变。

+sdown :给定的实例 server3 现在处于主观下线状态。

根据信息我们可以看到此时 master 为 server5,我们在 server5 查看info 信息如下图,server5成为master,只有一个slave是server4

 

 

如上操作,实现了高可用即自动故障迁移

 

三、redis-cluster集群

redis-cluster集群,Redis-Cluster采用无中心结构,每个节点保存数据和整个集群状态,每个节点都和其他所有节点连接。

 Redis Cluster 一般由多个节点组成,节点数量至少为 6 个才能保证组成完整高可用的集群,其中三个为主节点,三个为从节点。三个主节点会分配槽,处理客户端的命令请求,而从节点可用在主节点故障后,顶替主节点。

配置环境:一台服务器 我这里ip为:172.25.77.5

 

 1、redis cluster节点分配

   假设现在我们是三个主节点分别是:A, B, C 三个节点,它们可以是一台机器上的三个端口,也可以是三台不同的服务器。那么,采用哈希槽 (hash slot)的方式来分配16384个slot 的话,它们三个节点分别承担的slot 区间是:

 

节点A覆盖0-5460;

 

节点B覆盖5461-10922;

 

节点C覆盖10923-16383.

 

获取数据:

 

     如果存入一个值,按照redis cluster哈希槽的算法: CRC16('key')384 = 6782。 那么就会把这个key 的存储分配到 B 上了。同样,当我连接(A,B,C)任何一个节点想获取'key'这个key时,也会这样的算法,然后内部跳转到B节点上获取数据

 

新增一个主节点:

      新增一个节点D,redis cluster的这种做法是从各个节点的前面各拿取一部分slot到D上,大致就会变成这样: 

 

    节点A覆盖1365-5460

 

    节点B覆盖6827-10922

 

    节点C覆盖12288-16383

 

    节点D覆盖0-1364,5461-6826,10923-12287

 

同样删除一个节点也是类似,移动完成后就可以删除这个节点了。

 

2、redis-cluster的主从模式

 

 redis cluster 为了保证数据的高可用性,加入了主从模式,一个主节点对应一个或多个从节点,主节点提供数据存取,从节点则是从主节点拉取数据备份,当这个主节点挂掉后,就会有这个从节点选取一个来充当主节点,从而保证集群不会挂掉。

      上面那个例子里, 集群有ABC三个主节点, 如果这3个节点都没有加入从节点,如果B挂掉了,我们就无法访问整个集群了。A和C的slot也无法访问。

     所以我们在集群建立的时候,一定要为每个主节点都添加了从节点, 比如像这样, 集群包含主节点A、B、C, 以及从节点A1、B1、C1, 那么即使B挂掉系统也可以继续正确工作。

     B1节点替代了B节点,所以Redis集群将会选择B1节点作为新的主节点,集群将会继续正确地提供服务。 当B重新开启后,它就会变成B1的从节点。 不过需要注意,如果节点B和B1同时挂了,Redis集群就无法继续正确地提供服务了。

 

3、下面开始搭建

 

1)停掉redis服务,在/usr/local下建立6个目录

 

 

 配置redis.conf如图

 需要修改的内容:

部署到生成环境上时,bind 后为自己的IP地址 ,不能以 127.0.0.0 或是 0.0.0.0 

复制代码
bind 10.3.232.228 #这个最为重要
#集群部署必须设置本机IP,不能使用127.0.0.1 或 0.0.0.0
port 6301  #端口,不冲突便可,建议有顺序方便管理
cluster-enabled yes #启用集群模式
cluster-config-file nodes-6301.conf  #集群配置文件 根据集群只 6301修改为相应的端口就好
cluster-node-timeout 5000 #超时时间
appendonly yes #启用AOF持久化
daemonize yes #后台运行
protected-mode no #非保护模式,不适用密码
pidfile  /var/run/redis_6301.pid
复制代码

 

 

 复制文件到每个目录下,只用修改端口号

 

 

 然后启动节点

 

 

 完成后查看如下图:

 

 

 

2)redis-trib.rb是redis官方推出的管理redis集群的工具,集成在redis的源码src目录下,是基于redis提供的集群命令封装成简单、便捷、实用的操作工具。

运行redis-trib.rb

 

 提示没有ruby工具,yum安装,再次执行,提示需要rubygems

 

 

 安装完后,还需要redis-gem翻译器

 

 

 安装的时候提示ruby版本要>=2.2.2,刚才使用yum安装,导致版本没更上,问题不大,需要什么找什么安装什么

 

 

 

 

 

 

 翻译器安装完成gem list查看

 

 

 

此时redis-trib.rb也可以使用

 

 

 

使用redis-trib.rb建立集群

./redis-trib.rb create --replicas 1 127.0.0.1:7001 127.0.0.1:7002 127.0.0.1:7003 127.0.0.1:7004 127.0.0.1:7005 127.0.0.1:7006 

 

 上面显示创建成功,有3个主节点,3个从节点,每个节点都是成功连接状态

4)测试:-c表示连接 -p连接的节点

 

 查看信息:

 

 节点以及分配的哈希卡槽如下:

 

 

 

 

 

 

 

 

一、redis的安装先在下载安装包
解压后进入目录应为已经有Makefile了所以直接make编译


这里会报错,需要gcc编译器


安装好gcc,再次make编译,还是会报错;这个错误根据 Readme 可知需要执行 make MALLOC=libc


make完成后,提示去到 src 目录下


到src目录后执行按提示执行make test,会报错提示安装tcl工具


完成后 make install 完成安装


注意进入utils目录,执行install_server.sh,不然脚本会报错,提示找不到相应文件。脚本执行时,会有几个设置config等的问题,默认回车即可


至此redis已经安装完毕




二、redis的主从复制和高可用1、redis的主从复制
1)编辑redis的配置文件,配置文件位置如下图


2)注释bind 127.0.0.1
在配置文件redis.conf中,默认的bind 接口是127.0.0.1,也就是本地回环地址。这样的话,访问redis服务只能通过本机的客户端连接,而无法通过远程连接,这样可以避免将redis服务暴露于危险的网络环境中,防止一些不安全的人随随便便通过远程,但是我们做主从复制。
但是搭建主从复制,需要另一台redis端连接到本机,所以要将其注释。


2)关闭保护模式


3)另一台redis端在其配置文件做同样操作,并且需要指定master端ip和端口,如图


如上操作所示,已经完成redis的主从复制,测试:在master端server3:set name  kk,在server3查看




完成主从复制


2、redis高可用
高可用原理:
自动故障迁移(Automatic failover): 当一个主服务器不能正常工作时, Sentinel 会开始一次自动故障迁移操作, 它会将失效主服务器的其中一个从服务器升级为新的主服务器, 并让失效主服务器的其他从服务器改为复制新的主服务器; 当客户端试图连接失效的主服务器时, 集群也会向客户端返回新主服务器的地址, 使得集群可以使用新主服务器代替失效服务器。
配置环境:三台虚拟机安装 redis 服务Server3: 172.25.77.3 (先做 master)Server4:172.25.77.4
Server5:172.25.77.5
按主从复制先配置好一主两从
1)在安装包中将 sentinel 文件复制到/etc/redis/下




2)编辑 sentinel.conf 如下图
关闭保护模式


配置指示 Sentinel 去监视一个名为 mymaster 的主服务器,这个主服务器的IP 地址为 172.25.77.3,端口号为 6379 ,而将这个主服务器判断为失效至少需要 2 个 Sentinel 同意(只要同意 Sentinel 的数量不达标,自动故障迁移就不会执行)


down-after-milliseconds 选项指定了 Sentinel 认为服务器已经断线所需的毫秒数。如果服务器在给定的毫秒数之内, 没有返回 Sentinel 发送的 PING 命令的回复, 或返回一个错误, 那么 Sentinel 将这个服务器标记为主观下线


完成后将 sentinel 配置文件发送 server4 和 sevrer5


3)三台 redis 启动 Sentinel 服务






+slave 表示 :一个新的从服务器已经被 Sentinel 识别并关联。可以看到片此时 master 是 server3;server4 和 server5 是 slave。
4)测试:master 端 server3 info 查看 replication 信息:






查看后 shotdown
此时:server4 监听如下图


+switch-master :配置变更,主服务器的 IP 和地址已经改变。+sdown :给定的实例 server3 现在处于主观下线状态。根据信息我们可以看到此时 master 为 server5,我们在 server5 查看info 信息如下图,server5成为master,只有一个slave是server4




如上操作,实现了高可用即自动故障迁移

————————————————版权声明:本文为CSDN博主「Wk_yyy」的原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接及本声明。原文链接:https://blog.csdn.net/Wk_yyy/java/article/details/80406173

标签:主从复制,redis,集群,master,Sentinel,服务器,节点
来源: https://www.cnblogs.com/lzjsky/p/15845527.html

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有