【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是一个相对简单的过程,以下是一些常见的安装方法:
- 使用包管理器安装:
- 如果您使用的是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
- 使用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集群的搭建,首先需要确保所有节点已经启动,并确认两台服务器的防火墙已关闭,以避免出现无法路由到达的错误。下面是一些操作步骤:
- 确保所有节点已启动:
- 在每台服务器上运行适当的命令或脚本,以启动Redis实例。确保所有节点都已成功启动,并没有出现任何错误。
- 检查防火墙状态:
- 在每台服务器上检查防火墙的状态,并确保它们都已关闭。可以使用适当的命令或配置文件来关闭防火墙,以便确保Redis集群中的节点可以互相通信。
- 配置Redis集群:
- 使用redis-trib.rb或其他合适的工具进行配置。例如,使用以下命令可以使用redis-trib.rb工具来配置Redis集群: redis-trib.rb create --replicas <replica_count> : : : ... 其中,
<replica_count>
是您希望为每个主节点创建的副本数,<ip1>:<port1>
、<ip2>:<port2>
等是每个Redis节点的IP地址和端口号。
- 验证集群配置:
- 使用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.
解决方案
- 删掉conf文件下的aof和rdb结尾的文件。
- 同时将新Node的集群配置文件删除,即:删除你redis.conf里面cluster-config-file所在的文件;
- 对新添加节点的数据库进行清除
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'