个人认为学一项新的技术最好的方法是从官网学习,但是有的时候官网的东西实在看不懂,那就去找博客吧,然后多动手尝试,出现问题之后结合其他的资料一起思考.总会解决的.以前不建议看视频,不过现在我得对看视频学习这件事保留意见了.自己的博客随便唠叨几句,下面开始redis5.0的集群搭建.
一.简单介绍
- 截止到2019年5月23日redis官网最新版本是5.0.5,据说redis从3.0之后支持集群,3.0与4.0的集群搭建与5.0有一些区别,so你需要对应好自己的版本.本文使用redis最新版本5.0.5.
- 单个安装集群直接从官网下载,上传到linux服务器上解压,然后进入redis解压后的目录使用make命令和make install命令就可以安装成功,个别可能会出现一些小的问题,将报错信息复制百度一下,都能够解决.使用redis-server命令可以直接启动单机版,使用默认配置文件,这里需要说的就是,当你使用make命令和make install命令安装成功之后,你就可以把你的解压文件删除了,使用默认的配置文件启动单机redis的时候和你这个解压文件中的配置一点关系都没有,重要的实行说三遍:使用默认的配置文件启动单机redis的时候和你这个解压文件中的配置一点关系都没有,使用默认的配置文件启动单机redis的时候和你这个解压文件中的配置一点关系都没有,使用默认的配置文件启动单机redis的时候和你这个解压文件中的配置一点关系都没有.
- redis默认的安装在/usr/local/bin下,如果你想使用自己的配置,你可以新建一个配置文件,名字自己定义,然后在启动的时候指定启动的配置文件,注意的是 如果想用指定的配置文件启动,那么第一个参数必须是配置文件路径
这个是我的redis目录:
[root@iz2zeeh47kp5evidpgzz7gz bin]# cd /usr/local/bin
[root@iz2zeeh47kp5evidpgzz7gz bin]# ls
dump.rdb redis6379.conf redis-benchmark redis-check-aof redis-check-rdb redis-cli redis-sentinel redis-server
[root@iz2zeeh47kp5evidpgzz7gz bin]#
这个是我的配置文件,只有两个配置 daemonize yes
#开启守护进程,说白了就是让redis能够在后台运行,默认是在前台运行.
daemonize yes
#禁用保护模式,为了让远程能够连接redis,默认应该是开启.
protected-mode no
使用默认配置的话,默认只能够本地访问,前台启动
- 然后说集群,理论上集群就是安装一堆单机版,然后让他们连接到一起,但是我没有那么多云,也没有那么多虚拟机,所以在一台服务器上启动了六个redis服务.官网建议最少是6台,3主3从,然后因为redis有一个投票的策略是过一半,所以最少是三个主.在一个就是,你在一台服务器上启动6个redis,和在六台服务器上启动6个redis的区别就是,你在一台服务器上安装一个reids就可以了,不需要安装六个.自己没尝试,估计也安装不上六个吧,不知道网上从哪个大神开始说的,在一台服务器上搭建的伪集群和在六台上面搭建是一样的.
请原谅我唠叨这么多,这是我之前参考别人资料时遇到的一些问题,希望看我博客的能够避免,当然你可能参考我的博客也会有很多问题,欢迎指正.
二 搭建集群前的准备工作
- 在单机版没问题的情况下,我们在linux下新建一个用来存储集群的目录,然后在此目录下新建6个目录,代表6个redis单例,每个目录下都创建一个redis的配置文件,配置成不同的端口即可.
下面是我的目录:
[root@iz2zeeh47kp5evidpgzz7gz ~]# cd /usr/local/redis
[root@iz2zeeh47kp5evidpgzz7gz redis]# ls
cluster data dump.rdb logs redis-5.0.5.tar.gz redis.conf
[root@iz2zeeh47kp5evidpgzz7gz redis]# cd cluster/
[root@iz2zeeh47kp5evidpgzz7gz cluster]# ls
7001 7002 7003 7004 7005 7006 create-cluster-redis.sh dump.rdb redis-start-all.sh redis-stop-all.sh
[root@iz2zeeh47kp5evidpgzz7gz cluster]# cd 7001
[root@iz2zeeh47kp5evidpgzz7gz 7001]# ls
appendonly.aof dump.rdb nodes.conf redis.conf
[root@iz2zeeh47kp5evidpgzz7gz 7001]#
- 其中cluster目录下的create-cluster-redis.sh redis-start-all.sh redis-stop-all.sh这几个脚本文件一会在说, dump.rdb 文件是自动生成的. 7001 目录下的appendonly.aof dump.rdb nodes.conf 也是自动生成的 . 我们现在需要配置 redis.conf
下面是我7001 下的redis.conf配置:
#开启线程守护,后台启动
daemonize yes
#redis启动端口设置为7001
port 7001
#关闭保护模式,可以远程访问redis
protected-mode no
#启用redis群集支持
cluster-enabled yes
#Redis群集节点不可用的最长时间
cluster-node-timeout 5000
#集群配置文件,官网上说:请注意,尽管有此选项的名称,但这不是用户可编辑的配置文件. 但是实际上我还是编辑了它
cluster-config-file nodes.conf
#开启AOF日志
appendonly yes
#设置你的密码,当然你也可以不设置,直接注释掉,那么你的redis在关闭保护模式的情况下,任何人都可以进行操作了.
masterauth password
requirepass password
- 你需要将这个配置文件复制粘贴到7002…7006这五个目录中,我这个7001…7006是对应的端口,你可以任意起名,然后每个目录中你需要将复制过来的redis.conf 配置文件中的port 7001改成对应的 例: potr 7002 ,需要注意的是每个配置文件中的密码要相同.
- 依次启动这六个redis服务.这个时候redis还不是集群,我们只是启动了六个redis单机服务.
- 单个启动比较麻烦,so创建了一个启动脚本,redis-start-all.sh, 执行命令 chmod u+x redis-start-all.sh 为当前文件所有者赋予执行权限.
下面是我redi-start-all.sh的脚本内容,根据你自己的实际情况自行修改
cd 7001
redis-server ./redis.conf
cd ../7002
redis-server ./redis.conf
cd ../7003
redis-server ./redis.conf
cd ../7004
redis-server ./redis.conf
cd ../7005
redis-server ./redis.conf
cd ../7006
redis-server ./redis.conf
cd ../
网上有很多说需要将redis-server文件也复制过来,我并没有这么做,我是先安装了一个单机版,根据自身情况吧.
三. 创建redis集群
- 前面说了这么多,现在才是真正开始创建集群,简单的不行,就一个命令的事情,将刚刚启动的这些单个整合到一起
redis-cli --cluster create your ip addr:7001 your ip addr:7002 \
your ip addr:7003 your ip addr:7004 your ip addr:7005 your ip addr:7006 \
--cluster-replicas 1
- 这里使用的命令是create,因为我们想要创建一个新的集群。该选项–cluster-replicas 1意味着我们希望每个创建的主服务器都有一个从服 其他参数是我要用于创建新集群的实例的地址列表。显然,我们要求的唯一设置是创建一个包含3个主服务器和3个从服务器的集群。Redis-cli将为您提供配置。键入yes接受建议的配置。将配置并加入群集,这意味着实例将被引导为彼此通信。最后,如果一切顺利,你会看到这样的消息:
[OK] All 16384 slots covered
四.坑
实际操作过程中总会遇到各种各样的问题,不过你要相信所有问题都是可以解决的,
- 官网提供的示例给的ip地址是127.0.0.1 ,我这个示例用的是我阿里云的公网ip地址
- 为什么要用阿里云公网ip? 我按照示例创建之后再阿里云本地使用客户端能够连接,但是外部连接集群失败,阿里云上的redis示例只有内网ip,没有公网ip.所以将ip地址改成了公网ip,这个也是我之前说的修改了nodes.conf这个文件,你搭建好之后,可以自己查看下这个文件,看看里面都是什么鬼.我刚刚又看了一下,还真有鬼.
- 使用阿里云的话,需要开发对应的端口,redis默认端口是6379,我们这个集群是7001-7006,但是,据说还有一个端口,叫做集群总线端口,还是什么来的,忘记了,总之是还有个端口,就是每个端口加10000,那么7001 对应的就是17001.记得打开,当然有可能你不打开也没问题.
希望你能够顺利的完成你的redis集群!!!
补充
另外两个脚本,可以参考 redis-start-all.sh 这个脚本创建
启动单个客户端之后可以用redis-cli -h IP地址 -p 端口号 -a 密码 进行登录