redis 集群环境搭建-redis集群管理
2016-08-25 02:48
399 查看
集群架构 (1)所有的redis节点彼此互联(PING-PONG机制),内部使用二进制协议优化传输速度和带宽. (2)节点的fail是通过集群中超过半数的节点检测失效时才生效. (3)客户端与redis节点直连,不需要中间proxy层.客户端不需要连接集群所有节点,连接集群中任何一个可用节点即可 (4)redis-cluster把所有的物理节点映射到[0-16383]slot(插槽)上,cluster 负责维护node<->slot<->value 准备环境 创建一个目录,存放集群的配置文件 [root@master redis]# mkdir redis-cluster [root@master redis]# cd redis-cluster/ [root@master redis-cluster]# mkdir 6380 [root@master redis-cluster]# mkdir 6381 [root@master redis-cluster]# mkdir 6382 [root@master redis-cluster]# pwd /opt/redis/redis-cluster 拷贝安装源码中的redis.conf刚创建好的三个目录中 [root@master redis-cluster]# cp /opt/redis/redis-3.2.1/redis.conf /opt/redis/redis-cluster/6380/ [root@master redis-cluster]# cp /opt/redis/redis-3.2.1/redis.conf /opt/redis/redis-cluster/6381/ [root@master redis-cluster]# cp /opt/redis/redis-3.2.1/redis.conf /opt/redis/redis-cluster/6382/ 分别进入这三个目录,修改配置文件redis.conf 1、将端口分别设置为:6380、6381、6382 2、设置pidfile文件为不同的路径 3、开启集群,cluster-enabled yes 4、指定集群的配置文件,cluster-config-file "nodes-xxxx.conf" 以6380为例: [root@master redis-master-slave]# vim 6380/redis.conf [root@master redis-cluster]# /usr/local/bin/redis-server /opt/redis/redis-cluster/6380/redis.conf [root@master redis-cluster]# /usr/local/bin/redis-server /opt/redis/redis-cluster/6381/redis.conf [root@master redis-cluster]# /usr/local/bin/redis-server /opt/redis/redis-cluster/6382/redis.conf [root@master redis-cluster]# ps -ef | grep redis root 2948 1 0 11:11 ? 00:00:00 /usr/local/bin/redis-server 127.0.0.1:6380 [cluster] root 2970 1 0 11:16 ? 00:00:00 /usr/local/bin/redis-server 127.0.0.1:6381 [cluster] root 2974 1 0 11:16 ? 00:00:00 /usr/local/bin/redis-server 127.0.0.1:6382 [cluster] 创建redis集群 创建集群要使用redis-trib.rb脚本,执行此脚本查看使用方法 [root@master redis-cluster]# /opt/redis/redis-3.2.1/src/redis-trib.rb Usage: redis-trib <command> <options> <arguments ...> del-node host:port node_id info host:port rebalance host:port --timeout <arg> --auto-weights --pipeline <arg> --threshold <arg> --weight <arg> --simulate --use-empty-masters check host:port reshard host:port --timeout <arg> --to <arg> --pipeline <arg> --from <arg> --slots <arg> --yes call host:port command arg arg .. arg import host:port --copy --from <arg> --replace help (show this help) set-timeout host:port milliseconds create host1:port1 ... hostN:portN --replicas <arg> add-node new_host:new_port existing_host:existing_port --slave --master-id <arg> fix host:port --timeout <arg> 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 create创建集群,--replicas 0:指定了从数据的数量为0 注意:这里不能使用127.0.0.1,否则在Jedis客户端使用时无法连接到! [root@master redis-cluster]# /opt/redis/redis-3.2.1/src/redis-trib.rb create --replicas 0 192.168.56.101:6380 192.168.56.101:6381 192.168.56.101:6382 >>> Creating cluster [ERR] Sorry, can't connect to node 192.168.56.101:6380 修改刚创建的三个redis.conf配置文件中的bind bind 192.168.56.101 重启redis-server [root@master redis-cluster]# /usr/local/bin/redis-server /opt/redis/redis-cluster/6380/redis.conf [root@master redis-cluster]# /usr/local/bin/redis-server /opt/redis/redis-cluster/6381/redis.conf [root@master redis-cluster]# /usr/local/bin/redis-server /opt/redis/redis-cluster/6382/redis.conf [root@master redis-cluster]# ps -ef | grep redis root 3756 1 0 13:11 ? 00:00:00 /usr/local/bin/redis-server 192.168.56.101:6380 [cluster] root 3760 1 0 13:11 ? 00:00:00 /usr/local/bin/redis-server 192.168.56.101:6381 [cluster] root 3764 1 0 13:11 ? 00:00:00 /usr/local/bin/redis-server 192.168.56.101:6382 [cluster] 再创建集群 [root@master redis-cluster]# /opt/redis/redis-3.2.1/src/redis-trib.rb create --replicas 0 192.168.56.101:6380 192.168.56.101:6381 192.168.56.101:6382 >>> Creating cluster >>> Performing hash slots allocation on 3 nodes... Using 3 masters: 192.168.56.101:6380 192.168.56.101:6381 192.168.56.101:6382 M: 8c45a68a798aed7c1ed5e636f2899709717952c8 192.168.56.101:6380 slots:0-5460 (5461 slots) master M: c9267b81af4bb2c186d07c5ebc777a4b8551069a 192.168.56.101:6381 slots:5461-10922 (5462 slots) master M: 16c6db308b37be4d4dd337cd62ea1b676672e096 192.168.56.101:6382 slots:10923-16383 (5461 slots) master 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 192.168.56.101:6380) M: 8c45a68a798aed7c1ed5e636f2899709717952c8 192.168.56.101:6380 slots:0-5460 (5461 slots) master M: c9267b81af4bb2c186d07c5ebc777a4b8551069a 192.168.56.101:6381 slots:5461-10922 (5462 slots) master M: 16c6db308b37be4d4dd337cd62ea1b676672e096 192.168.56.101:6382 slots:10923-16383 (5461 slots) master【集群及槽信息】 [OK] All nodes agree about slots configuration. >>> Check for open slots... >>> Check slots coverage... [OK] All 16384 slots covered. 测试集群 [root@master hadoop]# /usr/local/bin/redis-cli -h 192.168.56.101 -p 6380 192.168.56.101:6380> keys * (empty list or set) 192.168.56.101:6380> set k1 123 (error) MOVED 12706 192.168.56.101:6382 因为k1的hash槽信息是在6382上,现在使用redis-cli连接的6380,无法完成set操作,需要客户端跟踪重定向,使用-c参数 [root@master hadoop]# /usr/local/bin/redis-cli -h 192.168.56.101 -p 6380 -c 192.168.56.101:6380> set k1 123 -> Redirected to slot [12706] located at 192.168.56.101:6382 OK 获取数据 k1的hash槽信息在6382上,在6382上可以直接获取,在其他节点还是要重定向去获取 [root@master hadoop]# /usr/local/bin/redis-cli -h 192.168.56.101 -p 6380 -c 192.168.56.101:6380> get k1 -> Redirected to slot [12706] located at 192.168.56.101:6382 "123" [root@master hadoop]# /usr/local/bin/redis-cli -h 192.168.56.101 -p 6382 -c 192.168.56.101:6382> get k1 "123" 执行redis-trib.rb脚本可能遇到的问题 1、/usr/bin/env: ruby: 没有那个文件或目录 [root@master redis-cluster]# /opt/redis/redis-3.2.1/src/redis-trib.rb /usr/bin/env: ruby: 没有那个文件或目录 解决方案:由于redis-trib.rb是用ruby语言编写,所以需要安装ruby环境,这里推荐使用yum install ruby 2、redis-trib.rb:24:in `require': no such file to load -- rubygems [root@master redis-cluster]# /opt/redis/redis-3.2.1/src/redis-trib.rb /opt/redis/redis-3.2.1/src/redis-trib.rb:24:in `require': no such file to load -- rubygems (LoadError) from /opt/redis/redis-3.2.1/src/redis-trib.rb:24 解决方案:yum install rubygems 3、/usr/lib/ruby/site_ruby/1.8/rubygems/custom_require.rb:31:in `gem_original_require': no such file to load -- redis (LoadError) [root@master redis-cluster]# /opt/redis/redis-3.2.1/src/redis-trib.rb /usr/lib/ruby/site_ruby/1.8/rubygems/custom_require.rb:31:in `gem_original_require': no such file to load -- redis (LoadError) from /usr/lib/ruby/site_ruby/1.8/rubygems/custom_require.rb:31:in `require' from /opt/redis/redis-3.2.1/src/redis-trib.rb:25 解决方案:缺少redis的接口,使用gem install redis或gem install redis --version 3.2.1 [root@master redis-cluster]# gem install redis --version 3.2.1 Successfully installed redis-3.2.1 1 gem installed Installing ri documentation for redis-3.2.1... Installing RDoc documentation for redis-3.2.1... 备注: 如果连接不上gem服务器安装,就手动下载并安装 gem install redis --version 3.0.0 ERROR: Could not find a valid gem 'redis' (= 3.0.0) in any repository ERROR: While executing gem ... (Gem::RemoteFetcher::FetchError) 需要手工下载并安装: wget https://rubygems.global.ssl.fastly.net/gems/redis-3.2.1.gem gem install -l ./redis-3.2.1.gem 书生参考于网络整理 |
本文地址:http://www.656463.com/redis/aAvu2u.htm
相关文章推荐
- Redis3.2+Tomcat实现集群的Session管理 -- tomcat-redis-session-manager的编译和开发部署环境搭建
- Redis3.2+Tomcat实现集群的Session管理 -- tomcat-redis-session-manager的编译和开发部署环境搭建
- Redis3.2+Tomcat实现集群的Session管理 -- tomcat-redis-session-manager的编译和开发部署环境搭建
- Redis3.2+Tomcat实现集群的Session管理 -- tomcat-redis-session-manager的编译和开发部署环境搭建
- redis集群环境搭建
- centos6.5环境下redis3.0集群搭建和配置
- nginx+tomcat+redis集群环境搭建
- Redis3.0.1集群环境搭建
- 项目进阶 之 集群环境搭建(三)多管理节点MySQL集群
- Centos7 搭建Redis3.2.0版本集群环境
- redis常用命令及安全Redis集群环境搭建
- CentOS6.5安装mysql cluster7.3.7 搭建mysql数据库集群环境(双管理中心)
- redis集群环境搭建以及java中jedis客户端集群代码实现
- Redis3.0集群环境的搭建详细步骤
- 基于CentOS与VmwareStation10搭建Oracle11G RAC 64集群环境:3.安装Oracle RAC-3.6.集群管理命令
- 1、Redis 集群环境的搭建
- redis集群环境搭建以及java中jedis客户端集群代码实现
- Redis-3.0.6 集群部署集成SpringJava工程-----环境搭建
- redis集群环境的搭建和错误分析