目录
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#$
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服务即可。因为集群中的节点信息都保存在了配置文件中。
文章知识点与官方知识档案匹配,可进一步学习相关知识CS入门技能树Linux入门初识Linux24701 人正在系统学习中
声明:本站部分文章及图片源自用户投稿,如本站任何资料有侵权请您尽早请联系jinwei@zod.com.cn进行处理,非常感谢!