缓存——redis——集群搭建(linux)

目录

1、redis集群方案:

(1)Redis主从:

(2)Redis-sentinel(哨兵):

(3)Redis-cluster:

2、cluster集群思路流程图:

3、cluster集群规划:

4、cluster集群结构特点:

5、集群各节点防火墙关闭:

6、集群各节点安装单机redis:

7、集群各节点配置redis:

(1)配置后台启动:

(2)配置允许远程连接:

(3)配置端口号:

(4)配置进程号:

(5)配置日志路径:

(6)配置工作目录路径:

(7)配置aof持久化:

(8)配置rdb持久化:

(9)配置集群开启:

(10)配置集群配置文件:

(11)配置节点超时时间:

8、集群各节点安装ruby脚本:

(1)查看ruby版本:

(2)卸载低版本:

(3)安装高版本:

9、集群各节点安装gem:

(1)安装依赖软件:

(2)下载redis的gem插件:

(3)插件上传服务器:

(4)移出gem外国源:

(5)安装gem插件:

10、集群各节点启动单机redis:

11、使用redis-trib.rb创建集群:

12、使用redis-cli查看集群:

13、使用redis-trib.rm添加slave:

14、使用redis-cli查看集群:

15、集群测试:

(1)测试存值:

(2)测试取值:

(3)测试主从高可用:

16、集群重启:


1、redis集群方案:

(1)Redis主从:

A、简介:

采用主从(replication)部署结构,相较于单副本而言最大的特点就是主从实例间数据实时同步,并且提供数据持久化和备份策略。主从实例部署在不同的物理服务器上,根据公司的基础环境配置,可以实现同时对外提供服务和读写分离策略。

B、优点:

高可靠性:一方面,采用双机主备架构,能够在主库出现故障时自动进行主备切换,从库提升为主库提供服务,保证服务平稳运行;另一方面,开启数据持久化功能和配置合理的备份策略,能有效的解决数据误操作和数据异常丢失的问题;

读写分离策略:从节点可以扩展主库节点的读能力,有效应对大并发量的读操作。

C、缺点:

故障恢复复杂,当主库节点出现故障时,需要手动将一个从节点晋升为主节点,同时需要通知业务方变更配置,并且需要让其它从库节点去复制新主库节点,整个过程需要人为干预,比较繁琐;

(2)Redis-sentinel(哨兵):

A、简介:

Redis Sentinel是社区版本推出的原生高可用解决方案,其部署架构主要包括两部分:Redis Sentinel集群和Redis数据集群。其中Redis Sentinel集群是由若干Sentinel节点组成的分布式集群,可以实现故障发现、故障自动转移、配置中心和客户端通知。Redis Sentinel的节点数量要满足2n+1(n>=1)的奇数个。

B、优点:

Redis Sentinel 集群部署简单;

能够解决 Redis 主从模式下的高可用切换问题;

很方便实现 Redis 数据节点的线形扩展,轻松突破 Redis 自身单线程瓶颈,可极大满足 Redis 大容量或高性能的业务需求;

可以实现一套 Sentinel 监控一组 Redis 数据节点或多组数据节点。

C、缺点:

部署相对 Redis 主从模式要复杂一些,原理理解更繁琐;

资源浪费,Redis 数据节点中 slave 节点作为备份节点不提供服务;

Redis Sentinel 主要是针对 Redis 数据节点中的主节点的高可用切换,对 Redis 的数据节点做失败判定分为主观下线和客观下线两种,对于 Redis 的从节点有对节点做主观下线操作,并不执行故障转移。

不能解决读写分离问题,实现起来相对复杂。

(3)Redis-cluster:

A、简介:

Redis Cluster 是社区版推出的 Redis 分布式集群解决方案,主要解决 Redis 分布式方面的需求,比如,当遇到单机内存,并发和流量等瓶颈的时候,Redis Cluster 能起到很好的负载均衡的目的。

Redis Cluster 集群节点最小配置 6 个节点以上(3 主 3 从),其中主节点提供读写操作,从节点作为备用节点,不提供请求,只作为故障转移使用。

Redis Cluster 采用虚拟槽分区,所有的键根据哈希函数映射到 0~16383 个整数槽内,每个节点负责维护一部分槽以及槽所印映射的键值数据。

B、优点:

无中心架构;

数据按照 slot 存储分布在多个节点,节点间数据共享,可动态调整数据分布;

可扩展性:可线性扩展到 1000 多个节点,节点可动态添加或删除;

高可用性:部分节点不可用时,集群仍可用。通过增加Slave做standby数据副本,能够实现故障自动failover,节点之间通过gossip协议交换状态信息,用投票机制完成Slave到Master的角色提升;

降低运维成本,提高系统的扩展性和可用性。

C、缺点:

Client 实现复杂,驱动要求实现Smart Client,缓存slots mapping 信息并及时更新,提高了开发难度,客户端的不成熟影响业务的稳定性。目前仅JedisCluster相对成熟,异常处理部分还不完善,比如常见的“max redirect exception”。

Redis Cluster不建议使用pipeline和multi-keys操作,减少max redirect产生的场景。

2、cluster集群思路流程图:

3、cluster集群规划:

集群中的节点数量应该至少是奇数个,再加上cluster集群支持自动切换主从复制,首先是计划集群弄几个分片,也就是几个主节点,主节点的数量一般是奇数的,然后计划每个主节点弄几个slave节点,slave的节点没有奇数的要求,一般最好是2个slave。这样的话1个master+2个slave对于一个分片来说是相当高可用的。因此本人此次对cluster集群规划为3个master+6个slave共9个节点。以下规划是在3个服务器上共创建9个redis实例,生产环境应该是9台服务器上共创建9个实例。

IP地址

端口号

用途

192.168.0.141

6379

master01

192.168.0.141

6380

master02-slave01

192.168.0.141

6381

master03-slave01

192.168.0.142

6379

master02

192.168.0.142

6380

master01-slave01

192.168.0.142

6381

master03-slave02

192.168.0.143

6379

master03

192.168.0.143

6380

master01-slave02

192.168.0.143

6381

master02-slave02

说明:master表示主,slave表示从。

4、cluster集群结构特点:

所有的redis节点彼此互联(PING-PONG机制),内部使用二进制协议优化传输速度和带宽。

节点的fail是通过集群中超过半数的节点检测失效时才生效。

客户端与redis节点直连,不需要中间proxy层.客户端不需要连接集群所有节点,连接集群中任何一个可用节点即可。

redis-cluster把所有的物理节点映射到[0-16383]slot上(不一定是平均分配),cluster 负责维护node<->slot<->value。

Redis集群预分好16384个桶,当需要在 Redis 集群中放置一个 key-value 时,根据 CRC16(key) mod 16384的值,决定将一个key放到哪个桶中。

5、集群各节点防火墙关闭:

由于安装集群,将默认的集群节点中各个服务器的防火墙关闭。如果自己生产环境不允许关闭防火墙,那么就到时候看情况开通各个redis等服务端口好了。

6、集群各节点安装单机redis:

按照集群规划,在集群各个服务器上安装对应的单机linux软件先。安装教程详见redis安装单机(linux)中的操作步骤,大概步骤就是先安装好C语言环境,然后安装好redis即可。

7、集群各节点配置redis:

(1)配置后台启动:

主、从节点均配置该参数。

参数:daemonize,值修改为yes。

(2)配置允许远程连接:

主、从节点均配置该参数。

参数:bind注释掉。

参数:protected-mode,值修改为no。

(3)配置端口号:

主、从节点均配置该参数。

参数:port,值为redis的端口号。

(4)配置进程号:

主、从节点均配置该参数。

参数:pidfile,值为redis进程文件,例如:/data/redis/6379.pids。

(5)配置日志路径:

主、从节点均配置该参数。

参数:logfile,值为redis的日志文件,例如:/data/redis/6379.log。

(6)配置工作目录路径:

主、从节点均配置该参数。

参数:dir,值为redis工作目录路径,例如:/data/redis。

(7)配置aof持久化:

只有从节点配置该参数。

参数:appendfilename,值为redis持久化文件,例如:6379.aof。

(8)配置rdb持久化:

只有从节点配置该参数。

参数:dbfilename,值为redis持久化文件,例如:6379.rdb。

(9)配置集群开启:

主、从节点均配置该参数。

参数:cluster-enabled,打开注释,值为yes。

(10)配置集群配置文件:

主、从节点均配置该参数。

参数:cluster-config-file,打开注释,值为默认即可。

(11)配置节点超时时间:

主、从节点均配置该参数。

参数:cluster-node-timeout,打开注释,值为默认即可。

8、集群各节点安装ruby脚本:

(1)查看ruby版本:

执行命令:ruby -v

(2)卸载低版本:

Ruby版本需要大于等于2.2.2,如果linux中自带的ruby版本低于这个就需要卸载低版本软件,自行安装高版本软件。

执行命令:yum remove ruby

(3)安装高版本:

Ruby版本需要大于等于2.2.2。

A、软件下载:

下载地址:https://www.ruby-lang.org/zh_cn/downloads/

选择一个目前相对较高较稳定的版本即可。

B、软件解压:

将下载的ruby源码包上传到服务器指定文件夹中并解压。

C、软件编译:

进入到ruby解压后文件夹中,执行命令将源码编译。

执行命令:./configure

D、软件安装:

进入到ruby解压后文件夹中,执行以下命令:

执行命令:make

执行命令:make install

E、创建软连接:

如果执行ruby -v正常显示ruby版本信息,就不需要做此步骤。如果执行ruby -v提示没有/usr/bin/ruby的文件,那么就是因为默认安装文件夹为/usr/local/bin/ruby,并不是系统默认读取的文件夹/usr/bin/ruby,因此需要创建软连接/usr/bin/ruby指向安装文件夹中的/usr/local/bin/ruby

执行命令:ln -s /usr/local/bin/ruby /usr/bin/ruby

F、软件检查:

执行命令:ruby -v

9、集群各节点安装gem:

(1)安装依赖软件:

执行命令:yum -y install openssl openssl-devel zlib zlib-devel

进入到解压的ruby文件夹中ext/zlib中。

执行以下命令:

/usr/local/bin/ruby extconf.rb

sed -i s#\$\(top_srcdir\)#../..# Makefile

make

make install

(2)下载redis的gem插件:

下载地址:https://rubygems.org/gems/redis/

选择与redis版本相差不大的版本,然后下载。

(3)插件上传服务器:

将下载的gem格式的redis插件上传到服务器中指定文件夹。

(4)移出gem外国源:

执行命令:gem sources --remove https://rubygems.org/

(5)安装gem插件:

执行命令:gem install redis-4.0.0.gem;(后面为redis的gem插件名)

10、集群各节点启动单机redis:

在集群各个节点中分别启动所有的单机redis服务。

执行命令:./redis-server 配置文件路径。

11、使用redis-trib.rb创建集群:

在集群任意一个主节点上,进入redis源码解压文件夹src内,执行命令创建redis集群。

执行命令:./redis-trib.rb create 192.168.0.141:6379 192.168.0.142:6379 192.168.0.143:6379

命令执行完毕后,有ok就表示成功了。

12、使用redis-cli查看集群:

在集群任意一个主节点上,通过redis-cli连接到集群中任意一个redis,查看redis集群信息。

执行命令:./redis-cli -h 192.168.0.141 -p 6379 cluster nodes

13、使用redis-trib.rm添加slave:

在集群任意一个主节点上,进入redis源码解压文件夹src内,执行命令为redis集群中的主节点添加从节点。

执行命令:./redis-trib.rb add-node --slave 192.168.50.168:8000 192.168.50.167:7000

说明:第一个节点为slave(从),第二个节点为master(主)。

14、使用redis-cli查看集群:

在集群任意一个主节点上,通过redis-cli连接到集群中任意一个redis,查看redis集群信息。

执行命令:./redis-cli -h 192.168.0.141 -p 6379 cluster nodes

15、集群测试:

(1)测试存值:

通过命令:./redis-cli -c -p 6379登录到本地6379的redis,然后set name zhangsan,设置key值name的value值为zhangsan,根据redis集群各个节点存值key的桶的划分,值将存储在第二个节点上,并且存储后会自动跳转到第二个节点redis上:

(2)测试取值:

通过命令:./redis-cli -c -p 6379登录到本地6379的redis,然后get name,获取key值name的value,根据redis集群各个节点存值key的桶的划分,该key存储在第二个节点上,那么就会自动跳转到第二个节点redis上并返回value值:

(3)测试主从高可用:

根据存值测试,name-zhangsan存储在第二个主节点上,那么计划先停止第二个主节点,然后查看它的哪个从节点会变为主节点,然后测试是否可以获取name值,最后启动关闭的原第二个主节点,查看它会加入集群中成为什么角色。

A、关闭第二个主节点:

通过查看第二个主节点对应的进程ID,然后kill掉。

B、获取name值:

通过命令:./redis-cli -c -p 6379登录到一个正常启动的节点,然后get name,获取key值name的value。发现自动跳转到141上的6380节点上,表示实现了redis的高可用。并且该从节点变成了主节点。

C、启动原第二个主节点:

将听到的原来第二个主节点启动好。

D、查看集群节点信息:

在集群任意一个主节点上,通过redis-cli连接到集群中任意一个redis,查看redis集群信息。

执行命令:./redis-cli -h 192.168.0.141 -p 6379 cluster nodes

通过上图发现,原来停掉的142:6379自动加入到集群中,并成为了从节点。

16、集群重启:

如果redis集群需要重启,那么就逐个节点进行关闭即可。然后逐个节点重新启动redis服务即可。因为集群中的节点信息都保存在了配置文件中。

发布了131 篇原创文章 · 获赞 23 · 访问量 1万+

猜你喜欢

转载自blog.csdn.net/LSY_CSDN_/article/details/103945424