redis5阿里云公网-伪分布式集群搭建

15 篇文章 0 订阅
12 篇文章 0 订阅

我装的是最新版的5.0.3

[root@flower-server redis_cluster]# redis-cli -v
redis-cli 5.0.3

redis集群搭建
redis5还是直接看这个好了
https://my.oschina.net/ruoli/blog/2252393
这个简单多了,都怪自己刚开始没有注意到自己的redis版本问题
我看的这个教程是redis3的,操作讲的很细,但是有很多不一样的地方,如果是自己在云服务器上搭建集群一定要现在阿里云上设置安全组规则。这上面没有写。
https://www.cnblogs.com/shuai-server/p/8910672.html
这篇讲的原理很细致,配置也很正确。太全面了,分片,失败救援之类的都写好了
https://blog.csdn.net/nsrainbow/article/details/49032337

gem下载地址
https://rubygems.global.ssl.fastly.net/gems/redis-3.2.1.gem
至于最新版我也不知道地址。

在 ./start-redis_cluster.sh 时出现的问题,这个提示的很清楚,解决方法就是这上面显示的

在这里插入图片描述
警告一:vim /etc/sysctl.conf
加入net.core.smaxconn = 1024
警告二:
overcommit_memory内存过量使用
0, 表示内核将检查是否有足够的可用内存供应用进程使用;如果有足够的可用内存,内存申请允许;否则,内存申请失败,并把错误返回给应用进程。1, 表示内核允许分配所有的物理内存,而不管当前的内存状态如何。2, 表示内核允许分配超过所有物理内存和交换空间总和的内存
警告三:
transparent Huge Pages(THP)警告是说我的内核中开启了透明大页,这就会导致延迟和内存使用问题。
Linux透明大页的解释
https://baijiahao.baidu.com/s?id=1607973381088116497&wfr=spider&for=pc
关于redis启动时的透明大页问题
https://www.jianshu.com/p/7ca4b74c92be
成功启动之后的图
在这里插入图片描述
我是按照这个教程来操作的https://www.cnblogs.com/shuai-server/p/8910672.html
基本一样,不一样的地方
步骤4
不需要将redis中所有的可执行文件都复制到创建的redis0*文件夹中,只要将redis-server给复制过去就好了
感觉这里把我给坑死了,我的redis又没有bin目录,这些东西都是我自己到Bin里面ls出来之后复制过去的
最后看到别的教程之后才知道,坑
这里时被坑的过程
我的redis没有bin目录,是从redis的src目录中编译之后到/usr/local/bin中产生的。
然后我就列出了/usr/local/bin中以redis开头的文件,一个一个复制真的太麻烦了,就想来个批量复制,结果问题百出

[root@flower-server bin]# ls|grep ^redis |xargs cp /usr/local/redis_cluster/redis0{1..6}
cp: target ‘redis-server’ is not a directory

感觉这个其实是可行的,xargs可以将前面的输出传递给xargs后面的命令作为参数,感觉这句命令可能跟参数的执行顺序有关系,ls|grep ^redis单独执行是没有问题的。
经过推敲再到网上一查结果发现是xagrs 把ls |grep ^redis的结果给传给cp的第二个参数值了也就是把源和目的地给搞反了。

ls |grep ^redis |xargs -i cp {} /usr/local/redis_cluster/redis02
-i 表示 ls传递给xargs的结果 由{}来代替

只知道这样了。

后面的cp /usr/local/redis_cluster/redis0{1…6}这句我发现每次它只能匹配到最后一个目录就是redis06,也就是说没法一次复制到多个文件夹。

通过命令我只能做到这样了,应该可以通过shell脚本的方式去,linux小白先到这里点到为止了。

在vim中查找指定字符串的方法,在命令行的模式下输入 /你要查找的字符串
就会自动跳到相应的位置上。
步骤5
修改redis.conf文件的时候,最后在./start-redis_cluster.sh启动redis实例的时候好像报了错,no cluster confiruration found
配置文件应该是这样的,这是示例,端口号记得改成相应的
port 7000
cluster-enabled yes
cluster-config-file nodes.conf
cluster-node-timeout 5000
appendonly yes
protectmode no
文件中的 cluster-enabled 选项用于开实例的集群模式, 而 cluster-conf-file 选项则设定了保存节点配置文件的路径, 默认值为 nodes.conf.节点配置文件无须人为修改, 它由 Redis 集群在启动时创建, 并在有需要时自动进行更新。
步骤6
创建启动的脚本文件vim start-redis_cluster.sh
这里我用的是绝对路径,之后可以将脚本文件的地址导入到/etc/profile中,这样再任意地方都可以使用start-redis_cluster来启动集群。

cd /usr/local/redis_cluster/redis01
./redis-server redis.conf
cd /usr/local/redis_cluster/redis02
./redis-server redis.conf
cd /usr/local/redis_cluster/redis03
./redis-server redis.conf
cd /usr/local/redis_cluster/redis04
./redis-server redis.conf
cd /usr/local/redis_cluster/redis05
./redis-server redis.conf
cd /usr/local/redis_cluster/redis06
./redis-server redis.conf

把/usr/local/redis_cluster
添加到/etc/profile里面了
export PATH=$PATH:/usr/local/redis_cluster/
(一直很疑惑很纠结,/etc/profile和~/.bash_profile的区别,每次到底要改哪个,
/etc/profile是针对整个系统的配置,对所有用户都有效,
~/.ash_profile是当前用户的配置文件只对当前用户有效)

相应的关闭集群的脚本
vim shutdown-redis_cluster.sh

cd /usr/local/redis_cluster/redis01
./redis-cli -p 7001 shutdown
cd /usr/local/redis_cluster/redis02
./redis-cli -p 7002 shutdown
cd /usr/local/redis_cluster/redis03
./redis-cli -p 7003 shutdown
cd /usr/local/redis_cluster/redis04
./redis-cli -p 7004 shutdown
cd /usr/local/redis_cluster/redis05
./redis-cli -p 7005 shutdown
cd /usr/local/redis_cluster/redis06
./redis-cli -p 7006 shutdown

步骤10之前需要加上一步
因为这里是要用阿里云服务器的公网ip搭建集群,所以得将端口开放,否则用redis-cli --cluster创建集群的时候就会一直waitting for the cluster to join…(这里采坑的差点被气死,之前搭得的集群用的ip是127.0.0.1,因为没设置安全规则,就用了127.0.0.1这个Ip地址,结果后面用jedis远程访问的时候发现没法访问,又把集群删了重新搭,重新搭集群之前,要先把之前的集群启动,在任意一个节点上flushall,清空之前的缓存(否则重新搭建集群的时候会出错之前的node is not empty),任意一个即可,因为集群模式下各节点之间是相互连通的,关闭集群之后,再把之前的文件全部删完重新启动redis实例,用redis-cli --cluster搭建集群)
在阿里云控制台ECS–>网络和安全上找到自己的安全组配置安全规则。
7001/7006是集群的节点端口
17001/17006是相应的节点对应的集群总线端口,
在这里插入图片描述

步骤10
使用ruby脚本搭建redis集群这里时,redis-trib.rb已经不可用了。
提示使用redis-cli --cluster

[root@flower-server redis_cluster]# redis-cli --cluster create 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:7005 127.0.0.1:7006 --cluster-replicas 1

如果是自己的服务器要这里的ip要换成自己服务器的公网ip.
redis-cli --cluster create创建一个集群
–cluster-replicas 1 表示我们希望为集群中的每个主节点创建一个从节点。

这句命令成功执行之后会将集群的配置信息打印出来,三主三从,输入yes同意。就会将这份配置应用到集群当中,让各个节点开始互相通讯,最后可以得到如下信息:
在这里插入图片描述
从上面可以看出7001,7002,7003是master,其他的三个是slave
还有卡槽的分布信息,只有master会被分配卡槽
[OK] All 16384 slots covered
这表示集群中的 16384 个槽都有至少一个主节点在处理, 集群运作正常。
云服务器主机内网ip和外网ip的区别
https://zhidao.baidu.com/question/1050628014291855339.html

在集群开启之后就可以通过redis-cli来操作了
redis-cli -c -p 7001
这里-c表示开启集群模式,我的理解是开启集群模式之后这几个节点会相互连通
-p指定要连接的端口号

[root@flower-server redis01]# redis-cli -c -p 7001
127.0.0.1:7001> set a 1
-> Redirected to slot [15495] located at 127.0.0.1:7003
OK
127.0.0.1:7003> get a
"1"
127.0.0.1:7003> 

节点会对命令进行分析并计算出key对应的solt,如果计算出的key不在当前节点上,开启集群模式之后会根据计算出的solt,并自动重定向到该卡槽的位置上。
如果这里没有开启集群模式,计算出的卡槽位置不在当前节点上,那么就会报错

[root@flower-server redis01]# redis-cli -p 7001
127.0.0.1:7001> set a 1
(error) MOVED 15495 127.0.0.1:7003
127.0.0.1:7001> get a
(error) MOVED 15495 127.0.0.1:7003

它无法自动重定向。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值