Redis 3.2 集群搭建

Redis3.0版本之后支持Cluster.这里安装 3.2 版本

1、下载安装包

cd/usr/local/ wget http://download.redis.io/releases/redis-3.2.1.tar.gz tar -zxvf /redis-3.2.1.tar.gz

2 编译安装

cd/usr/local/redis-3.2.1 make && make install

3. 创建 redis节点 在192.168.145.135上

cd/usr/local/ mkdir redis_cluster //创建集群目录 cd redis_cluster mkdir 7000 7001 7002 //分别代表三个节点 其对应端口 7000 7001 7002 //创建7000节点为例,拷贝到7000目录 cp /usr/local/redis-3.2.1/redis.conf ./redis_cluster/7000/ //拷贝到7001目录 cp /usr/local/redis-3.2.1/redis.conf ./redis_cluster/7001/ //拷贝到7002目录 cp /usr/local/redis-3.2.1/redis.conf ./redis_cluster/7002/

分别对7001,7002、7003文件夹中的3个文件修改对应的配置修改

daemonize yes //redis后台运行 pidfile /var/run/redis_7000.pid //pidfile文件对应7000,7002,7003 port 7000 //端口7000,7002,7003 cluster-enabled yes //开启集群 把注释#去掉 cluster-config-file nodes_7000.conf //集群的配置 配置文件首次启动自动生成 7000,7001,7002 cluster-node-timeout 5000 //请求超时 设置5秒够了 appendonly yes //aof日志开启 有需要就开启,它会每次写操作都记录一条日志 bind 192.168.145.135 protected-mode no

在192.168.145.136 执行135上操作,下载安装redis,创建redis节点 7003 7004 7005,然后修改配置.

在两台机器上启动

cd/usr/local redis-server redis_cluster/7000/redis.conf redis-server redis_cluster/7001/redis.conf redis-server redis_cluster/7002/redis.conf redis-server redis_cluster/7003/redis.conf redis-server redis_cluster/7004/redis.conf redis-server redis_cluster/7005/redis.conf

查看是否启动

ps -ef | grepredis #查看是否启动成功 netstat -tnlp | grepredis #可以看到redis监听端口

安装集群,官方提供了一个工具

redis-trib.rb(/usr/local/redis-3.2.1/src/redis-trib.rb)

需要安装ruby

yum -y install rubyruby-devel rubygems rpm-build

然后gem 安装 redis 端口

gem install redis

如果报错

redis requires Rubyversion >= 2.2.2问题

解决办法

先安装rvm,再把ruby版本提升至2.3.3

1.安装curl

sudo yum install curl

2. 安装RVM

curl -L get.rvm.io |bash -s stable

3.

source/usr/local/rvm/scripts/rvm

4. 查看rvm库中已知的ruby版本

rvm list known

5. 安装一个ruby版本

rvm install 2.3.3

6. 使用一个ruby版本

rvm use 2.3.3

7. 卸载默认版本

rvm remove 2.0.0

8. 卸载一个已知版本

ruby --version

9. 再安装redis就可以了

gem install redis

如果

curl -L get.rvm.io |bash -s stable

报错如下:

$ curl -L get.rvm.io |bash -s stable --ruby % Total % Received % Xferd Average Speed Time Time Time Current Dload Upload Total Spent Left Speed 100 184 100 184 0 0 30 0 0:00:06 0:00:06 --:--:-- 40 100 22721 100 22721 0 0 1845 0 0:00:12 0:00:12 --:--:-- 6170 Downloading https://github.com/rvm/rvm/archive/1.26.11.tar.gz Downloading https://github.com/rvm/rvm/releases/download/1.26.11/1.26.11.tar.gz.asc gpg: Signature made Tue 31 Mar 2015 05:52:13 CST using RSA key ID BF04FF17 gpg: Can't check signature: public key not found Warning, RVM 1.26.0 introduces signed releases and automated check ofsignatures when GPG software found. Assuming you trust Michal Papis import the mpapis public key (downloading thesignatures). GPG signature verification failed for'/home/charles/.rvm/archives/rvm-1.26.11.tgz' - 'https://github.com/rvm/rvm/releases/download/1.26.11/1.26.11.tar.gz.asc'! try downloading the signatures: gpg --keyserver hkp://keys.gnupg.net--recv-keys 409B6B1796C275462A1703113804BB82D39DC0E3 or if it fails: command curl -sSL https://rvm.io/mpapis.asc | gpg --import- the key can be compared with: https://rvm.io/mpapis.asc https://keybase.io/mpapis

解决办法:

try downloading the signatures:

下面让你执行啥就执行啥

这里执行

gpg --keyserverhkp://keys.gnupg.net --recv-keys 409B6B1796C275462A1703113804BB82D39DC0E3

然后再重新安装 rvm

curl -L get.rvm.io |bash -s stable

创建集群

--replicas 1 表示 自动为每一个master节点分配一个slave节点 上面有6个节点,程序会按照一定规则生成3个master(主)3个slave(从)

提示Can I set the aboveconfiguration? (type 'yes' to accept): yes //输入yes

/usr/local/redis-3.2.1/src/redis-trib.rb create --replicas 1 192.168.145.135:7000 192.168.145.135:7001 192.168.145.135:7002192.168.145.136:7003 192.168.145.136:7004 192.168.145.136:7005

如果报错,出现

redis创建集群——[ERR] Sorry,can't connect to node 192.168.X.X

检查redis.conf 的两个参数

bind 127.0.0.1 protected-modeyes

是否修改

解决办法

sed -i 's/bind127.0.0.1/bind 192.168.145.136/' redis.conf sed -i 's/protected-mode yes/protected-mode no/' redis.conf

参考:http://redis.io/commands/cluster-addslots

redis常用命令

CLUSTER INFO打印集群的信息 CLUSTER NODES 列出集群当前已知的所有节点(node),以及这些节点的相关信息。 //节点 CLUSTER MEET <ip> <port> 将 ip 和 port所指定的节点添加到集群当中,让它成为集群的一份子。 CLUSTER FORGET <node_id> 从集群中移除 node_id 指定的节点。 CLUSTER REPLICATE <node_id> 将当前节点设置为 node_id 指定的节点的从节点。 CLUSTER SAVECONFIG 将节点的配置文件保存到硬盘里面。 CLUSTER ADDSLOTS <slot> [slot ...]将一个或多个槽(slot)指派(assign)给当前节点。 CLUSTER DELSLOTS <slot> [slot ...] 移除一个或多个槽对当前节点的指派。 CLUSTER FLUSHSLOTS 移除指派给当前节点的所有槽,让当前节点变成一个没有指派任何槽的节点。 CLUSTER SETSLOT <slot> NODE <node_id> 将槽 slot 指派给 node_id指定的节点。 CLUSTER SETSLOT <slot> MIGRATING <node_id> 将本节点的槽 slot 迁移到 node_id指定的节点中。 CLUSTER SETSLOT <slot> IMPORTING <node_id> 从 node_id 指定的节点中导入槽 slot到本节点。 CLUSTER SETSLOT <slot> STABLE 取消对槽 slot 的导入(import)或者迁移(migrate)。 //键 CLUSTER KEYSLOT <key> 计算键 key 应该被放置在哪个槽上。 CLUSTER COUNTKEYSINSLOT <slot> 返回槽 slot 目前包含的键值对数量。 CLUSTER GETKEYSINSLOT <slot> <count> 返回 count 个 slot 槽中的键。 //新增 CLUSTER SLAVES node-id 返回一个master节点的slaves 列表

登录集群

redis-cli -h192.168.145.136 -c -p 7003

机器换ip之后 集群重启遇到 问题修改了redis.conf bind 之后的 ip还是不行

最好是使用:

https://blog.csdn.net/u011535541/article/details/78470862?locationNum=1&fps=1

redis-cli -h172.31.1.135 -c -p 7000 cluster meet 172.31.1.136 7003 CLUSTER FORGETd78d5c572472403e8e874c770a26991da0a7fb91

IP 变更导致集群启动的问题 ,

问题如下:

尝试改下nodes-7003.conf 或者使用 forget meet 估计还是不行

meet加进来全是 master

redis-cli -c -h172.31.1.135 -p 7000 -a cfca1234 cluster addslots {0..5460} redis-cli -c -h 172.31.1.135 -p 7001 -a cfca1234 cluster addslots{5461..10922} redis-cli -c -h 172.31.1.135 -p 7002 -a cfca1234 cluster addslots{10923..16383}

配置从节点:

redis-cli -c -p 7003-acfca1234 cluster replicate dfc8bc1b70b78c3df64326706ce08a0a931eb993 redis-cli -c -p 7004 -a cfca1234 cluster replicate c7fd7d514cb41dc4c748e3c9037784c4d3ad3321 redis-cli -c -p 7005 -a cfca1234 cluster replicate f30d4fdb6c3d7e3ef87e1f0d28f3a92ef3d9c804

实在不行数据量不大的情况下,删除rdb ,aof文件

查看redis 版本命令

redis-server -v

感觉不错,您打赏,一分也是爱,点击下面链接

https://img-blog.csdn.net/20180322135423539

本文分享自微信公众号 - 程序员开发者社区(gh_016ffe40d550),作者:猿星人

原文出处及转载信息见文内详细说明,如有侵权,请联系 yunjia_community@tencent.com 删除。

原始发表时间:2018-07-26

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

我来说两句

0 条评论
登录 后参与评论

相关文章

  • MongoDB 索引

    当往一个集合中插入多个文档后,每个文档经过存储殷引擎后,有一个位置信息,通过这个位置信息。就能从存储引擎中读出该文档。在 mmapv1 引擎下,位置信息是【文件...

    王小明_HIT
  • JDK 7/8中的HashMap get/put源码阅读

    王小明_HIT
  • 一个进程有3个线程,如果一个线程抛出oom,其他两个线程还能运行么?

    jmap -dump:live,format=b,file=m.hprof <PID>

    王小明_HIT
  • redis安装小记

    小灰灰
  • redis手工分片

    随着数据量越来越大,一个redis实例可能需要分成多个以形成数据分片。此时通常可以采取两种方式操作:一是启用cluster模式自动完成数据分片;...

    用户1148526
  • Redis在Linux上的安装与配置

    用户6999080
  • 架构选型,究竟啥时候选redis?

    redis是互联网分层架构中,最常用的KV缓存,但不少同学仍然不知道,为啥要选择redis。

    架构师之路
  • 在Linux环境安装redis步骤,且设置开机自动启动redis

    最近一直在学习redis相关知识,看了很多理论知识后,觉得还是要多动手操作,就如王阳明说的知行合一那样,因此,便决定在linux环境安装了redis,过程捣鼓了...

    朱季谦
  • redis helloworld

    Redis is an open source (BSD licensed), in-memory data structure store, used as ...

    readme
  • docker封装redis镜像

    线上使用的redis版本为 3.2.13,但是dockerhub没有此版本的镜像。只有3.2.12 但是默认的镜像启动时,是没有redis.conf的,如果需要...

    用户2398817

扫码关注云+社区

领取腾讯云代金券