设为首页 收藏本站
查看: 1444|回复: 0

[经验分享] Linux安装redis集群

[复制链接]

尚未签到

发表于 2017-12-20 22:21:34 | 显示全部楼层 |阅读模式
  linux安装单机版redis已经在另一篇文章说过了,下边来搞集群,环境是新浪云服务器:
  redis3.0以后开始支持集群。
  前言:redis用什么做集群?
  用一个叫redis-trib.rb的ruby脚本。redis-trib.rb是redis官方推出的管理redis集群的工具,集成在redis的源码src目录下(redis-xxx/src/)。是基于redis提供的集群命令封装成简单、便捷、实用的操作工具。redis-trib.rb是redis作者用ruby完成的。所以redis集群需要先安装ruby环境。
  先瞅瞅在哪:进入到redis的源代码目录,就可以看到redis-trib.rb脚本
DSC0000.png

  正文,一:安装ruby环境:(前提条件)
  上文已经说了,redis集群是用的ruby脚本,所以要想执行该脚本,需要ruby环境。
  安装ruby环境:
  yum install ruby
  yum install rubygems      (ruby包的管理器,用来下载ruby的包)
DSC0001.png

DSC0002.png

  显示Nothing todo,说明服务器已经安装了ruby。
  二:安装ruby包redis-3.3.0.gem
  redis-trib.rb的运行需要的ruby包,正如我们的java程序需要的jar包一样。
  这个包和redis版本不是非得匹配,只要支持就行,我在网上找了个和redis -3.2.9版本接近的3.3.0版本。切换到redistar目录,用secureCRT的rz命令redis-3.3.0.gem上传到redistar目录,这个包安装到哪都行,只是提供一个环境而已。
  用的secureCRT的rz命令上传到服务器,进入到redistar目录,执行rz命令,即可上传文件。
DSC0003.png

  执行gem install redis-3.0.0.gem命令安装。
  安装完成:
DSC0004.png

  +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
  这里是介绍性东西:
进入到redis的src目录,用ll  *.rb找到redis-trib.rb文件,

  执行命令./redis-trib  help 可以查看该工具包提供的命令和功能
DSC0005.png

  

-rwxrwxr-x 1 root root 60852 May 17 15:39 redis-trib.rb  
[iyunv@lihaoyang
/redistar/redis-3.2.9/src]# ./redis-trib.rb help  
Usage: redis-trib <command> <options> <arguments ...>
  

  
create          host1:port1 ... hostN:portN
  
--replicas <arg>
  
check           host:port
  
info            host:port
  
fix             host:port
  
--timeout <arg>
  
reshard         host:port
  
--from <arg>
  
--to <arg>
  
--slots <arg>
  
--yes
  
--timeout <arg>
  
--pipeline <arg>
  
rebalance       host:port
  
--weight <arg>
  
--auto-weights
  
--use-empty-masters
  
--timeout <arg>
  
--simulate
  
--pipeline <arg>
  
--threshold <arg>
  
add-node        new_host:new_port existing_host:existing_port
  
--slave
  
--master-id <arg>
  
del-node        host:port node_id
  
set-timeout     host:port milliseconds
  
call            host:port command arg arg .. arg
  
import          host:port
  
--from <arg>
  
--copy
  
--replace
  
help            (show this help)
  

  
For check, fix, reshard, del-node, set-timeout you can specify the host and port of any working node in the cluster.
  


下边是从别人文章找的解释:

可以看到redis-trib.rb具有以下功能:



  • 1、 create :创建集群
  • 2、 check :检查集群
  • 3、 info :查看集群信息
  • 4、 fix :修复集群
  • 5、 reshard :在线迁移slot
  • 6、 rebalance :平衡集群节点slot数量
  • 7、 add-node :将新节点加入集群
  • 8、 del-node :从集群中删除节点
  • 9、 set-timeout :设置集群节点间心跳连接的超时时间
  • 10、 call :在集群全部节点上执行命令
  • 11、 import :将外部redis数据导入集群
  • redis-trib.rb主要有两个类: ClusterNodeRedisTribClusterNode 保存了每个节点的信息, RedisTrib 则是redis-trib.rb各个功能的实现。
  • ++++++++++++++++++++++++++++++++++++++++
    暂且只关注创建集群的功能。先简单介绍下redis-trib.rb脚本的使用,以create为例:


  

create          host1:port1 ... hostN:portN  

--replicas <arg>  

host1:port1 ... hostN:portN 表示子参数,这个必须在可选参数之后, --replicas <arg> 是可选参数,带 的表示后面必须填写一个参数,像 --slave 这样,后面就不带参数,掌握了这个基本规则,就能从help命令中获得redis-trib.rb的使用方法。

  例子:create创建集群
  create命令可选replicas参数,replicas表示需要有几个slave。
  有一个slave的集群的创建命令如下:
$ruby  redis-trib.rb  create--replicas 1  10.180.157.199:6379   10.180.157.200:6379   10.180.157.201:6379   10.180.157.202:6379  10.180.157.205:6379    10.180.157.208:6379   

  +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
  三:搭建我们的集群:
  集群中有三个节点的集群,每个节点有一主一备。需要6台虚拟机。
  搭建一个伪分布式的集群,使用6个redis实例来模拟。
  1,在user/local 下创建redis-cluster目录:
  mkdir redis-cluster
DSC0006.png

  在创建redis01目录
DSC0007.png

  进入usr/local/redis,把redis-cli、redis-server、redis.conf复制到/usr/local/redis-cluster/redis01目录
DSC0008.png

  查看:
DSC0009.png

  说明:这里安装redis单机版的时候,只用了make命令,没有make install,然后把redis-cli、redis-server、redis.conf三个文件copy到了自己手动建的/usr/local/redis目录,
  如果用[iyunv@bogon redis-3.0.0]# make install PREFIX=/usr/local/redis安装的redis单机版,还会有其他几个文件在/usr/local/redis目录,至于区别用途还不很清楚。
  第一步:创建6个redis实例,端口号从7001~7006
  第二步:修改redis的配置文件,后端启动daenonize改为yes是之前安装单机版已经做过的。
  1、  修改端口号,进入vim编辑模式后,非insert模式下(insert了按esc即可退出)输入/port 回车可快速定位
   DSC00010.png
DSC00011.png

  2,打开cluster-enable前面的注释。:wq!保存编辑
DSC00012.png

3,复制redis01到当前目录,cp是复制,-r是连带子目录一并复制,并起名redis02、redis03、redis04、redis05、redis06

cp –r redis01/  redis02

DSC00013.png

修改redis02、redis03、redis04、redis05、redis06的端口号为7002、7003、7004、7005、7006

  4:把创建集群的ruby脚本复制到redis-cluster目录下。
  进入redis源码redistar/redis-3.2.9/src去copy:
  cp *.rb /usr/local/redis-cluster/    *通配符,src目录只有一个.rb文件就是redis-trib.rb
DSC00014.png

  查看
  : DSC00015.png
启动6个redis实例,一个一个去启动有点复杂,在redis-cluster目录创建一个脚本来启动6个实例:

  cd /usr/local/redis-cluster
vim startall.sh就会打开vim编辑器,创建一个空的文本:

DSC00016.png

:wq!保存脚本,创建成功:

DSC00017.png

  执行./startall.sh 提示permission denied说明权限不足,执行命令chmod 777 startall.sh修改权限
DSC00018.png

  再执行./startall.sh,  ps  -aux|grep redis查看redis运行情况,6379是之前的redis没有停止
  可以看到端口7001、7002、7003、7004、7005、7006的redis都起来了。
DSC00019.png

  5:创建集群。
  基于上边分割线内的介绍:在redis-cluster目录下执行以下命令:
  ./redis-trib.rb  create --replicas  1  127.0.0.1:7001  127.0.0.1:7002  127.0.0.1:7003  127.0.0.1:7004  127.0.0.1:7005   127.0.0.1:7006
DSC00020.png

  

[iyunv@lihaoyang /usr/local/redis-cluster]# ./redis-trib.rb create --replicas 1 127.0.0.1:7001 127.0.0.1:7002 127.0.0.1:7003 127.0.0.1:7004 127.0.0.1:7005  127.0.0.1:7006  
>>> Creating cluster
  
>>> Performing hash slots allocation on 6 nodes...
  
Using 3 masters:
  
127.0.0.1:7001
  
127.0.0.1:7002
  
127.0.0.1:7003
  
Adding replica 127.0.0.1:7004 to 127.0.0.1:7001
  
Adding replica 127.0.0.1:7005 to 127.0.0.1:7002
  
Adding replica 127.0.0.1:7006 to 127.0.0.1:7003
  
M: b370efb2e0dd8dd09aeee2177099d68c5982a01c 127.0.0.1:7001
  
slots:0-5460 (5461 slots) master
  
M: 387d8975195982ed96a08cd0d14587bfa68659db 127.0.0.1:7002
  
slots:5461-10922 (5462 slots) master
  
M: bc46045f41d337e4316230fb40bdfb8c1784d419 127.0.0.1:7003
  
slots:10923-16383 (5461 slots) master
  
S: d99c5ba8d944a45d3393a5c84b014446ff16c1e0 127.0.0.1:7004
  
replicates b370efb2e0dd8dd09aeee2177099d68c5982a01c
  
S: a3352a69d5f1b69bed39d4ffe636305dc808f891 127.0.0.1:7005
  
replicates 387d8975195982ed96a08cd0d14587bfa68659db
  
S: ad04e4409aae4295d1198403330e967285396d05 127.0.0.1:7006
  
replicates bc46045f41d337e4316230fb40bdfb8c1784d419
  
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:7001)
  
M: b370efb2e0dd8dd09aeee2177099d68c5982a01c 127.0.0.1:7001
  
slots:0-5460 (5461 slots) master
  
1 additional replica(s)
  
S: a3352a69d5f1b69bed39d4ffe636305dc808f891 127.0.0.1:7005
  
slots: (0 slots) slave
  
replicates 387d8975195982ed96a08cd0d14587bfa68659db
  
S: ad04e4409aae4295d1198403330e967285396d05 127.0.0.1:7006
  
slots: (0 slots) slave
  
replicates bc46045f41d337e4316230fb40bdfb8c1784d419
  
M: bc46045f41d337e4316230fb40bdfb8c1784d419 127.0.0.1:7003
  
slots:10923-16383 (5461 slots) master
  
1 additional replica(s)
  
S: d99c5ba8d944a45d3393a5c84b014446ff16c1e0 127.0.0.1:7004
  
slots: (0 slots) slave
  
replicates b370efb2e0dd8dd09aeee2177099d68c5982a01c
  
M: 387d8975195982ed96a08cd0d14587bfa68659db 127.0.0.1:7002
  
slots:5461-10922 (5462 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.
  
[iyunv@lihaoyang /usr/local/redis-cluster]#
  

  集群搭建好了
  测试集群
[iyunv@lihaoyang /usr/local/redis-cluster]# redis01/redis-cli -h 192.168.25.153 -p 7002 –c

  说明:-h+host –p+端口号 –c 是要连接集群,注意坑,不加会报错的
DSC00021.png

  可以看到连接的是7001的节点,set  name的时候计算了存在哪个hash槽上,会跳转到那个槽对应的节点。
  不写-c的坑:
DSC00022.png

  ----------------------先写到这里,明天在补充,2017-05-25:23:20

运维网声明 1、欢迎大家加入本站运维交流群:群②:261659950 群⑤:202807635 群⑦870801961 群⑧679858003
2、本站所有主题由该帖子作者发表,该帖子作者与运维网享有帖子相关版权
3、所有作品的著作权均归原作者享有,请您和我们一样尊重他人的著作权等合法权益。如果您对作品感到满意,请购买正版
4、禁止制作、复制、发布和传播具有反动、淫秽、色情、暴力、凶杀等内容的信息,一经发现立即删除。若您因此触犯法律,一切后果自负,我们对此不承担任何责任
5、所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其内容的准确性、可靠性、正当性、安全性、合法性等负责,亦不承担任何法律责任
6、所有作品仅供您个人学习、研究或欣赏,不得用于商业或者其他用途,否则,一切后果均由您自己承担,我们对此不承担任何法律责任
7、如涉及侵犯版权等问题,请您及时通知我们,我们将立即采取措施予以解决
8、联系人Email:admin@iyunv.com 网址:www.yunweiku.com

所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其承担任何法律责任,如涉及侵犯版权等问题,请您及时通知我们,我们将立即处理,联系人Email:kefu@iyunv.com,QQ:1061981298 本贴地址:https://www.yunweiku.com/thread-426247-1-1.html 上篇帖子: 分布式锁与实现(一) 下篇帖子: 风生水起不积跬步,无以致千里;不积小流,无以成江海。
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

扫码加入运维网微信交流群X

扫码加入运维网微信交流群

扫描二维码加入运维网微信交流群,最新一手资源尽在官方微信交流群!快快加入我们吧...

扫描微信二维码查看详情

客服E-mail:kefu@iyunv.com 客服QQ:1061981298


QQ群⑦:运维网交流群⑦ QQ群⑧:运维网交流群⑧ k8s群:运维网kubernetes交流群


提醒:禁止发布任何违反国家法律、法规的言论与图片等内容;本站内容均来自个人观点与网络等信息,非本站认同之观点.


本站大部分资源是网友从网上搜集分享而来,其版权均归原作者及其网站所有,我们尊重他人的合法权益,如有内容侵犯您的合法权益,请及时与我们联系进行核实删除!



合作伙伴: 青云cloud

快速回复 返回顶部 返回列表