加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 综合聚焦 > 服务器 > 安全 > 正文

ubtuntu redis 集群部署/搭建(官方原始方案)

发布时间:2020-12-16 04:40:40 所属栏目:安全 来源:网络整理
导读:1. 安装ruby环境 Redis作者应该是个Ruby爱好者,Ruby客户端就是他开发的。这次集群的管理功能没有嵌入到Redis代码中,于是作者又顺手写了个叫做redis-trib的管理脚本。redis-trib依赖Ruby和RubyGems,以及redis扩展。可以先用which命令查看是否已安装ruby和r

1. 安装ruby环境

Redis作者应该是个Ruby爱好者,Ruby客户端就是他开发的。这次集群的管理功能没有嵌入到Redis代码中,于是作者又顺手写了个叫做redis-trib的管理脚本。redis-trib依赖Ruby和RubyGems,以及redis扩展。可以先用which命令查看是否已安装ruby和rubygems,用gem list –local查看本地是否已安装redis扩展。

最简便的方法就是用apt或yum包管理器安装RubyGems后执行gem install redis。如果网络或环境受限的话,可以手动安装RubyGems和redis扩展(国外链接可能无法下载,可以从CSDN下载):

apt-get?install?ruby
gem?install?redis

2. 安装redis

参考文章:ubuntu 使用命令安装最新的redis版本

3. 创建集群文件及文件夹

mkdir?redis-cluster
cd?redis-cluster
mkdir?9000?9001?9002?9003?9004?9005

redis-cluster/
├──?9000
│???└──?redis.conf.9000
├──?9001
│???└──?redis.conf.9001
├──?9002
│???└──?redis.conf.9002
├──?9003
│???└──?redis.conf.9003
├──?9004
│???└──?redis.conf.9004
└──?9005
????└──?redis.conf.9005

结果如下图所示:


4.?拷贝redis.conf

ubuntu? redis配置文件路径

cd?/etc/redis

?进入redis配置文件目录,将redis.conf复制redis-cluster文件夹中

cp?redis.conf?/home/user/redis-cluster

4.1主要修改信息如下:

  • 绑定地址:bind 127.0.0.1 # 绑定的ip 不能绑定到127.0.0.1、0.0.0.0或localhost,否则指导客户端重定向时会报”Connection refused”的错误。

  • 绑定端口号:port 9000? # 端口号和文件夹名一样

  • 备份文件名存储位置:dir /home/user/redis-cluster/9000?

  • 集群超时时间:cluster-node-timeout 15000。? ? 集群超时时间结点超时多久则认为它宕机了。

  • 开启集群:cluster-enabled yes?

  • 集群配置文件:cluster-config-file nodes-9000.conf? 这个配置文件不是要我们去配的,而是Redis运行时保存配置的文件,所以我们也不可以修改这个文件。

  • 后台运行:appendonly yes?

  • 槽是否全覆盖:cluster-require-full-coverage no。默认是yes,只要有结点宕机导致16384个槽没全被覆盖,整个集群就全部停止服务,所以一定要改为no

  • 输出日志:logfile “./redis.log”

不同信息在redis.conf位置:

4.2 ip绑定?绑定本机ip

4.2修改端口号

4.3?开启

4.4?数据存储位置

dbfilename?备份文件名

4.5?开启集群

4.6?集群配置文件

然后分别将redis0cluster中redis.conf配置文件复制到新建的6个文件夹中(9000,9001,9002,9003,9004,9005)

复制redis.conf配置文件

cp?redis.conf?/home/user/redis-cluster/9000
cp?redis.conf?/home/user/redis-cluster/9001
cp?redis.conf?/home/user/redis-cluster/9002
cp?redis.conf?/home/user/redis-cluster/9003
cp?redis.conf?/home/user/redis-cluster/9004
cp?redis.conf?/home/user/redis-cluster/9005

5.?分别启动redis-server

redis-server?/home/user/redis-cluster/9000/redis.conf?
redis-server?/home/user/redis-cluster/9001/redis.conf?
redis-server?/home/user/redis-cluster/9002/redis.conf?
redis-server?/home/user/redis-cluster/9003/redis.conf?
redis-server?/home/user/redis-cluster/9004/redis.conf?
redis-server?/home/user/redis-cluster/9005/redis.conf

6.?查看redis-server是否正常启动

ps?-ef|grep?redis-server

结果如下

7.?创建redis集群

redis-trib.rb(能否创建集群主要靠它)存放的路径

cd?/usr/share/doc/redis-tools/examples/

复制redis-trib.rb到指定目录

cp?redis-trib.rb?/home/user/redis-cluster/

redis集群启动

启动集群命令

./redis-trib.rb?create?--replicas?1?127.0.0.1:9000?127.0.0.1:9001?127.0.0.1:9002?127.0.0.1:9003?127.0.0.1:9004?127.0.0.1:9005

结果如下:

>>>?./redis-trib.rb?create?--replicas?1?127.0.0.1:9000?127.0.0.1:9001?127.0.0.1:9002?127.0.0.1:9003?127.0.0.1:9004?127.0.0.1:9005
>>>?Creating?cluster??#?自动输入的命令
>>>?Performing?hash?slots?allocation?on?6?nodes...
Using?3?masters:
127.0.0.1:9000
127.0.0.1:9001
127.0.0.1:9002
Adding?replica?127.0.0.1:9004?to?127.0.0.1:9000
Adding?replica?127.0.0.1:9005?to?127.0.0.1:9001
Adding?replica?127.0.0.1:9003?to?127.0.0.1:9002
>>>?Trying?to?optimize?slaves?allocation?for?anti-affinity
[WARNING]?Some?slaves?are?in?the?same?host?as?their?master
M:?56b766b9e4b8447c2f0645e16b82283f6c7c11d7?127.0.0.1:9000
???slots:0-5460?(5461?slots)?master
M:?89af1208bca79d22f9c051bb86d40de1ebaf92b4?127.0.0.1:9001
???slots:5461-10922?(5462?slots)?master
M:?c95629b3e17abaf3b0cef022359b49f4498a4d8a?127.0.0.1:9002
???slots:10923-16383?(5461?slots)?master
S:?736a7abdbec3fd16bd610900cfed8ecd7f9b008b?127.0.0.1:9003
???replicates?56b766b9e4b8447c2f0645e16b82283f6c7c11d7
S:?5f94b10bfe0ba249767da82161bdfdb14b5092aa?127.0.0.1:9004
???replicates?89af1208bca79d22f9c051bb86d40de1ebaf92b4
S:?58481f44f290203a644503946b3d6f2b9bd53916?127.0.0.1:9005
???replicates?c95629b3e17abaf3b0cef022359b49f4498a4d8a
Can?I?set?the?above?configuration??(type?'yes'?to?accept):?yes
>>>?Nodes?configuration?updated
>>>?Assign?a?different?config?epoch?to?each?node
>>>?Sending?CLUSTER?MEET?messages?to?join?the?cluster
Waiting?for?the?cluster?to?join....
>>>?Performing?Cluster?Check?(using?node?127.0.0.1:9000)
M:?56b766b9e4b8447c2f0645e16b82283f6c7c11d7?127.0.0.1:9000
???slots:0-5460?(5461?slots)?master
???1?additional?replica(s)
S:?736a7abdbec3fd16bd610900cfed8ecd7f9b008b?127.0.0.1:9003
???slots:?(0?slots)?slave
???replicates?56b766b9e4b8447c2f0645e16b82283f6c7c11d7
S:?5f94b10bfe0ba249767da82161bdfdb14b5092aa?127.0.0.1:9004
???slots:?(0?slots)?slave
???replicates?89af1208bca79d22f9c051bb86d40de1ebaf92b4
S:?58481f44f290203a644503946b3d6f2b9bd53916?127.0.0.1:9005
???slots:?(0?slots)?slave
???replicates?c95629b3e17abaf3b0cef022359b49f4498a4d8a
M:?89af1208bca79d22f9c051bb86d40de1ebaf92b4?127.0.0.1:9001
???slots:5461-10922?(5462?slots)?master
???1?additional?replica(s)
M:?c95629b3e17abaf3b0cef022359b49f4498a4d8a?127.0.0.1:9002
???slots:10923-16383?(5461?slots)?master
???1?additional?replica(s)
[OK]?All?nodes?agree?about?slots?configuration.
>>>?Check?for?open?slots...
>>>?Check?slots?coverage...
[OK]?All?16384?slots?covered.

8.?连接集群

redis-cli?-c?-h?127.0.0.1?-p?9000

注意:如果遇到MOVED 5798错误

请阅读:http://www.chenxm.cc/post/695.html

8.1?关闭集群

ps?-ef?|?grep?redis?|?awk?'{print?$2}'?|?xargs?kill

9.?简单测试

>>>?redis-cli?-c?-h?192.168.3.99?-p?9000

127.0.0.1:9002>?set?foo?bar
OK
127.0.0.1:9002>?set?hello?world
->?Redirected?to?slot?[866]?located?at?192.168.3.212:9000
OK
127.0.0.1:9000>?get?foo
->?Redirected?to?slot?[12182]?located?at?192.168.3.212:9002
"bar"
127.0.0.1:9002>?get?hello
->?Redirected?to?slot?[866]?located?at?192.168.3.212:9000
"world"

10?内部原理分析

前面我们已经学习过,用Redis提供的redis-trib或create-cluster脚本能几步甚至一步就建立起一个Redis集群。这一部分我们为了深入学习,所以要暂时抛开这些方便的工具,完全手动建立一遍上面的3主3从集群。

10.1 集群发现:MEET

最开始时,每个Redis实例自己是一个集群,我们通过cluster meet让各个结点互相“握手”。这也是Redis Cluster目前的一个欠缺之处:缺少结点的自动发现功能。

10.2 角色设置:REPLICATE

结点全部“握手”成功后,就可以用cluster replicate命令为结点指定角色了,默认每个结点都是Master。

10.3 槽指派:ADDSLOTS

设置好主从关系之后,就可以用cluster addslots命令指派16384个槽的位置了。有点恶心的是,ADDSLOTS命令需要在参数中一个个指明槽的ID,而不能指定范围。这里用Bash 3.0的特性简化了,不然就得用Bash的循环来完成了:

总结:

这是一篇完整的Redis集群部署,只要按照文章中的步骤做,那么保证你能成功搭建一个redis集群。

接下来可能就是动态扩容、增加节点和减少节点,重新分配槽大小等,当然,还有最重要的就是怎么和我们程序结合起来,以及如何更好的把 Redis 缓存集群发挥出应有的效果,这些才是最重要的。


参考:https://blog.csdn.net/dc_726/article/details/48552531

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读