【Redis深度专题】「核心技术提升」探究Redis服务启动的过程机制的技术原理和流程分析的指南(集群功能分析)(二)

简介: 【Redis深度专题】「核心技术提升」探究Redis服务启动的过程机制的技术原理和流程分析的指南(集群功能分析)

【Redis深度专题】「核心技术提升」探究Redis服务启动的过程机制的技术原理和流程分析的指南(集群功能分析)(一)https://developer.aliyun.com/article/1471072


复制配置文件


cp /data/redis-x.x.x/redis.conf /data/redis/conf/6379.conf
cp /data/redis-x.x.x/redis.conf /data/redis/conf/6380.conf
cp /data/redis-x.x.x/redis.conf /data/redis/conf/6381.conf

修改配置端口


sed -i "s/6379/6379/g"  /data/redis/conf/6379.conf
sed -i "s/6379/6380/g"  /data/redis/conf/6380.conf
sed -i "s/6379/6381/g"  /data/redis/conf/6381.conf

启动Redis服务


redis-server /data/redis/conf/6379.conf
redis-server /data/redis/conf/6380.conf
redis-server /data/redis/conf/6381.conf

查看Redis服务

查看是否启动成功以及查看redis监听端口。


ps -ef | grep redis 
netstat -tnlp | grep redis

另一台服务器也是相类似的操作即可。

创建Redis集群

现在,我们已经准备好了可以搭建Redis集群的节点。接下来的步骤是将这些节点连接起来,形成一个集群。为了完成这个任务,Redis官方提供了一个工具叫做redis-trib.rb,它的路径是/usr/local/redis-3.2.1/src/redis-trib.rb。需要注意的是,这个工具是通过Ruby编写的,因此在使用之前我们还需要安装Ruby环境。

搭建安装Ruby环境

安装了Ruby和RubyGems

安装Ruby和RubyGems是一个相对简单的过程,以下是一些常见的安装方法:

  1. 使用包管理器安装:
  • 如果您使用的是Ubuntu或Debian系统,可以使用apt包管理器执行以下命令来安装Ruby和RubyGems:
  • bash
  • 复制代码
sudo apt-get update
sudo apt-get install ruby rubygems
  • 如果您使用的是CentOS或RHEL系统,可以使用yum包管理器执行以下命令来安装Ruby和RubyGems:
  • bash
  • 复制代码
sudo yum install ruby rubygems
  1. 使用Ruby版本管理器安装:
  • RVM (Ruby Version Manager) 是一个流行的工具,可让您在同一系统上安装和管理多个Ruby版本。您可以按照RVM官方文档的指导安装RVM,并通过它来安装Ruby和RubyGems。
  • bash
  • 复制代码
\curl -sSL https://get.rvm.io | bash -s stable
source ~/.rvm/scripts/rvm
rvm install ruby
  • rbenv 是另一个常用的Ruby版本管理器,可以帮助您在同一系统上安装和切换不同的Ruby版本。您可以按照rbenv官方文档的指导安装rbenv,并通过它来安装Ruby和RubyGems。
  • bash
  • 复制代码
git clone https://github.com/rbenv/rbenv.git ~/.rbenv
echo 'export PATH="$HOME/.rbenv/bin:$PATH"' >> ~/.bashrc
echo 'eval "$(rbenv init -)"' >> ~/.bashrc
source ~/.bashrc
git clone https://github.com/rbenv/ruby-build.git ~/.rbenv/plugins/ruby-build
rbenv install ruby
  • 安装完成后,您可以使用以下命令验证Ruby和RubyGems的安装是否成功:
  • bash
  • 复制代码
ruby --version
gem --version

请根据您的操作系统和偏好选择适合您的安装方法,并确保按照安装指南操作。如果您遇到任何问题,请随时向我提问。

安装扩展依赖库

两台服务器都已经安装了Ruby和RubyGems,并且我们还需要安装一些依赖库。执行以下命令来安装这些库:

shell

复制代码

yum -y install gcc openssl-devel libyaml-devel libffi-devel readline-devel autoconf
yum -y install zlib-devel gdbm-devel ncurses-devel gcc-c++ automake

之后,我们可以使用gem命令来安装Redis接口,gem是Ruby的一个工具包。在安装之前,我们需要更换一下源。执行以下命令来更换源:

shell

复制代码

gem source -l  
gem source --remove http://rubygems.org/
gem sources --add https://gems.ruby-china.org/ --remove https://rubygems.org/
gem source -l

然后,执行以下命令来安装Redis:

shell

复制代码

gem install redis

启动Redis集群服务

要完成Redis集群的搭建,首先需要确保所有节点已经启动,并确认两台服务器的防火墙已关闭,以避免出现无法路由到达的错误。下面是一些操作步骤:

  1. 确保所有节点已启动:
  • 在每台服务器上运行适当的命令或脚本,以启动Redis实例。确保所有节点都已成功启动,并没有出现任何错误。
  1. 检查防火墙状态:
  • 在每台服务器上检查防火墙的状态,并确保它们都已关闭。可以使用适当的命令或配置文件来关闭防火墙,以便确保Redis集群中的节点可以互相通信。
  1. 配置Redis集群:
  • 使用redis-trib.rb或其他合适的工具进行配置。例如,使用以下命令可以使用redis-trib.rb工具来配置Redis集群: redis-trib.rb create --replicas <replica_count> : : : ... 其中,<replica_count>是您希望为每个主节点创建的副本数,<ip1>:<port1><ip2>:<port2>等是每个Redis节点的IP地址和端口号。
  1. 验证集群配置:
  • 使用redis-cli工具连接到Redis集群,并运行CLUSTER INFO命令来验证集群的状态。确保所有节点都得到正确识别,并且没有任何错误提示。

实际案例介绍

先测试网络连通性

在服务器A上执行下面语句测试连通性

bash

复制代码

/data/redis-x.x.x/src/redis-cli -h 10.0.0.1 -p 6379
/data/redis-x.x.x/src/redis-cli -h 10.0.0.2 -p 6383
/data/redis-x.x.x/src/redis-cli -h 10.0.0.2 -p 6384

在服务器B上执行下面语句测试连通性

bash

复制代码

redis-cli -h 10.0.0.1 -p 6379
redis-cli -h 10.0.0.1 -p 6380
redis-cli -h 10.0.0.2 -p 6384

如果上面的测试没有问题,则可进行下步操作

创建集群指令

bash

复制代码

##在其中一台服务器执行下面命令即可
/data/redis-x.X.X/src/redis-trib.rb create --replicas 1 10.0.0.1:6379 10.0.0.1:6380 10.0.0.1:6381 
10.0.0.2:6382 10.0.0.2:6383 10.0.0.2:6384
>>> Creating cluster
>>> Performing hash slots allocation on 6 nodes...
Using 3 masters:
10.0.0.1:6379
10.0.0.2:6382
10.0.0.1:6380
Adding replica 10.0.0.2:6383 to 10.0.0.1:6379
Adding replica 10.0.0.1:6381 to 10.0.0.2:6382
Adding replica 10.0.0.2:6384 to 10.0.0.1:6380
M: d0b49faff3332cdf7389948593d4fb59caca1613 10.0.0.1:6379
   slots:0-5460 (5461 slots) master
M: 8c8a578c750b820ce074026e59d4df059eeefd9b 10.0.0.1:6380
   slots:10923-16383 (5461 slots) master
S: 731a69f9df773823be182e27e5001b95766b5528 10.0.0.1:6381
   replicates b73a3a4528920064cba668aa9452f32387292ab6
M: b73a3a4528920064cba668aa9452f32387292ab6 10.0.0.2:6382
   slots:5461-10922 (5462 slots) master
S: 139c02ceb5a2afe9eb0e350ed3170bceb3aa4c4b 10.0.0.2:6383
   replicates d0b49faff3332cdf7389948593d4fb59caca1613
S: af498152476cd4732c47292aff44a57bcd57bb63 10.0.0.2:6384
   replicates 8c8a578c750b820ce074026e59d4df059eeefd9b
Can I set the above configuration? (type 'yes' to accept): yes     #输入yes即可

问题分析

原因rvm版本过低

如果执行gem install redis报下面错误

bash

复制代码

gem install redis
ERROR:  Error installing redis:
redis requires Ruby version >= 2.2.2.

解决方案

bash

复制代码

gpg2 --keyserver hkp://keys.gnupg.net --recv-keys D39DC0E3
curl -L get.rvm.io | bash -s stable
source /usr/local/rvm/scripts/rvm
rvm install 2.3.3
rvm use 2.3.3
rvm use 2.3.3 --default
rvm remove 2.0.0

查看现在版本为2.3.3则对

bash

复制代码

ruby –version
gem install redis

资源文件未重置和清理

bash

复制代码

[OK]All nodes agree about slots configuration.
>>Check for open slots...
>>>Check slots coverage,··
[OK]All 16384 slots covered.
Connecting to node xx.xx.xx.xx:xxx:OK
[ERR]Node xx.xx.xx.xx:xxx is not empty.Either the node already knows other nodes
check with CLUSTER NODES)or contains some key in database 0.

解决方案

  1. 删掉conf文件下的aof和rdb结尾的文件。
  2. 同时将新Node的集群配置文件删除,即:删除你redis.conf里面cluster-config-file所在的文件;
  3. 对新添加节点的数据库进行清除

bash

复制代码

redis-cli -h 10.0.0.1  -p 6379
登录后执行flushdb
redis-cli -h 10.0.0.1  -p 6381
登录后执行flushdb
redis-cli -h 10.0.0.1  -p 6382
登录后执行flushdb

Redis集群操作的演示效果

bash

复制代码

[rootemysql-dbo1 conf]#redis-cli -h 10.0.0.1 -c -p 6379
10.0.0.1:6379>set xxx taknk1
OK
10.0.0.1:6379>get xxx
"taknk1"
10.0.0.1:6379>exit
[rootemysql-db01 conf]#redis-cli -h 10.0.0.2 -c -p 6382
10.0.0.2:6382>get xxx
-Redirected to slot [4407]located at 10.0.0.1:6379
"taknkl'
相关文章
|
6月前
|
NoSQL 算法 Redis
【Docker】(3)学习Docker中 镜像与容器数据卷、映射关系!手把手带你安装 MySql主从同步 和 Redis三主三从集群!并且进行主从切换与扩容操作,还有分析 哈希分区 等知识点!
Union文件系统(UnionFS)是一种**分层、轻量级并且高性能的文件系统**,它支持对文件系统的修改作为一次提交来一层层的叠加,同时可以将不同目录挂载到同一个虚拟文件系统下(unite several directories into a single virtual filesystem) Union 文件系统是 Docker 镜像的基础。 镜像可以通过分层来进行继承,基于基础镜像(没有父镜像),可以制作各种具体的应用镜像。
740 6
|
11月前
|
消息中间件 缓存 NoSQL
基于Spring Data Redis与RabbitMQ实现字符串缓存和计数功能(数据同步)
总的来说,借助Spring Data Redis和RabbitMQ,我们可以轻松实现字符串缓存和计数的功能。而关键的部分不过是一些"厨房的套路",一旦你掌握了这些套路,那么你就像厨师一样可以准备出一道道饕餮美食了。通过这种方式促进数据处理效率无疑将大大提高我们的生产力。
344 32
|
存储 NoSQL Redis
Redis 新版本引入多线程的利弊分析
【10月更文挑战第16天】Redis 新版本引入多线程是一个具有挑战性和机遇的改变。虽然多线程带来了一些潜在的问题和挑战,但也为 Redis 提供了进一步提升性能和扩展能力的可能性。在实际应用中,我们需要根据具体的需求和场景,综合评估多线程的利弊,谨慎地选择和使用 Redis 的新版本。同时,Redis 开发者也需要不断努力,优化和完善多线程机制,以提供更加稳定、高效和可靠的 Redis 服务。
362 1
|
11月前
|
缓存 NoSQL 算法
Redis数据库的键值过期和删除机制
我们需要注意的是,虽然Redis提供了这么多高级的缓存机制,但在使用过程中,必须理解应用的特性,选择合适的缓存策略,才能最大化Redis的性能。因此,在设计和实施应用程序时,理解应用的数据访问模式,以及这些模式如何与Redis的缓存机制相互作用,尤为重要。
322 24
|
8月前
|
存储 NoSQL Redis
采用Redis的Bitmaps实现类似Github连续提交状态的功能。
在现实世界的应用开发中,实现类似于Github提交跟踪系统时,还可能需要考虑用户时区、闰年等日期相关的边界条件,以及辅助数据的存储和查询优化,例如对活跃用户的即时查询和统计等。不过这些都可以在Bitmaps的基础功能之上通过额外的代码逻辑来实现。
180 0
|
11月前
|
存储 监控 NoSQL
使用Redis实现延迟消息发送功能
使用 Redis 的密码认证功能,为实例设置密码以防止未授权访问。为消息提供适当加密,确保消息内容在网络传输过程中不被窃取或篡改。
408 16
|
NoSQL Redis 数据库
Redis 功能扩展 Lua 脚本 对Redis扩展 eval redis.call redis.pcall
通过本文的介绍,我们详细讲解了 Lua 脚本在 Redis 中的作用、`eval` 命令的使用方法以及 `redis.call` 和 `redis.pcall` 的区别和用法。通过合理使用 Lua 脚本,可以实现复杂的业务逻辑,确保操作的原子性,并减少网络开销,从而提高系统的性能和可靠性。
927 13
|
NoSQL API Redis
在C程序中实现类似Redis的SCAN机制的LevelDB大规模key分批扫描
通过上述步骤,可以在C程序中实现类似Redis的SCAN机制的LevelDB大规模key分批扫描。利用LevelDB的迭代器,可以高效地遍历和处理数据库中的大量键值对。该实现方法不仅简单易懂,还具有良好的性能和扩展性,希望能为您的开发工作提供实用的指导和帮助。
266 7
|
存储 NoSQL PHP
如何用Redis高效实现点赞功能?用Set?还是Bitmap?
在众多软件应用中,点赞功能几乎成为标配。本文从实际需求出发,探讨如何利用 Redis 的 `Set` 和 `Bitmap` 数据结构设计高效点赞系统,分析其优缺点,并提供 PHP 实现示例。通过对比两种方案,帮助开发者选择最适合的存储方式。
551 3
|
缓存 监控 NoSQL
Redis 缓存穿透的检测方法与分析
【10月更文挑战第23天】通过以上对 Redis 缓存穿透检测方法的深入探讨,我们对如何及时发现和处理这一问题有了更全面的认识。在实际应用中,我们需要综合运用多种检测手段,并结合业务场景和实际情况进行分析,以确保能够准确、及时地检测到缓存穿透现象,并采取有效的措施加以解决。同时,要不断优化和改进检测方法,提高检测的准确性和效率,为系统的稳定运行提供有力保障。
315 5
下一篇
开通oss服务