除此之外,还能够简化集群的检查、槽迁徙、负载均衡等常见的运维操作,但是使用前必须要安装ruby环境。
1)使用yum进行安装ruby:
yum install -y rubygems 2)默认的ruby包管理工具镜像源在国外,将国外源删除添加国内源
gem sources --remove https://rubygems.org/ gem sources -a gem update --system 3)使用ruby的包管理工具下载必备依赖包,由于我使用的是6.2.1的Redis,可能没有最新的,就下载一个老版本的Redis驱动,经测试没有任何问题:
gem install redis -v 3.3.5 另外,在新版Redis中,redis-trib.rb工具的功能都被集成在了redis-cli里,但依然需要ruby环境
搭建前戏 地址规划 首先我们准备2主2从的3台多实例服务器,利用redis-trib.rb工具搭建1个6节点3分片的集群(集群最少6节点)。
然后再使用redis-trib.rb工具增加1台多实例服务器,组成8节点4分片的集群。
之后再使用redis-trib.rb工具下线1台多实例服务器,变为6节点3分片的集群。
地址规划与架构图如下:
在每个节点hosts文件中加入以下内容;
$ vim /etc/hosts 192.168.0.120 node1 192.168.0.130 node2 192.168.0.140 node3 192.168.0.150 node4 !由于该工具具有难以发现的小bug,必定出现以下问题:
主从关系自动构建不准确,需要手动重新搭建主从关系,如果主从构建不合理,一旦发生灾难情况后果不堪设想
集群准备为所有节点下载Redis:
$ cd ~ $ wget https://download.redis.io/releases/redis-6.2.1.tar.gz为所有节点配置目录:
$ mkdir -p /usr/local/redis_cluster/redis_63{79,80}/{conf,pid,logs}所有节点进行解压:
$ tar -zxvf redis-6.2.1.tar.gz -C /usr/local/redis_cluster/所有节点进行编译安装Redis:
$ cd /usr/local/redis_cluster/redis-6.2.1/ $ make && make install书写集群配置文件,注意!Redis普通服务会有2套配置文件,一套为普通服务配置文件,一套为集群服务配置文件,我们这里是做的集群,所以书写的集群配置文件,共6份:
$ vim /usr/local/redis_cluster/redis_6379/conf/redis.cnf # 快速修改::%s/6379/6380/g # 守护进行模式启动 daemonize yes # 设置数据库数量,默认数据库为0 databases 16 # 绑定地址,需要修改 bind 192.168.0.120 # 绑定端口,需要修改 port 6379 # pid文件存储位置,文件名需要修改 pidfile /usr/local/redis_cluster/redis_6379/pid/redis_6379.pid # log文件存储位置,文件名需要修改 logfile /usr/local/redis_cluster/redis_6379/logs/redis_6379.log # RDB快照备份文件名,文件名需要修改 dbfilename redis_6379.rdb # 本地数据库存储目录,需要修改 dir /usr/local/redis_cluster/redis_6379 # 集群相关配置 # 是否以集群模式启动 cluster-enabled yes # 集群节点回应最长时间,超过该时间被认为下线 cluster-node-timeout 15000 # 生成的集群节点配置文件名,文件名需要修改 cluster-config-file nodes_6379.conf 集群搭建 启动集群 每个节点上执行以下2条命令进行服务启动:
$ redis-server /usr/local/redis_cluster/redis_6379/conf/redis.cnf $ redis-server /usr/local/redis_cluster/redis_6380/conf/redis.cnf 集群模式启动,它的进程后会加上[cluster]的字样:
$ ps -ef | grep redis root 78586 1 0 21:56 ? 00:00:00 redis-server 192.168.0.120:6379 [cluster] root 78616 1 0 21:56 ? 00:00:00 redis-server 192.168.0.120:6380 [cluster] root 78636 71501 0 21:56 pts/1 00:00:00 grep --color=auto redis 同时,查看一下集群节点配置文件,会发现生成了一组集群信息,每个Redis服务都是不同的:
$ cat /usr/local/redis_cluster/redis_6379/nodes_6379.conf c71b52f728ab58fedb6e05a525ce00b453fd2f6b :0@0 myself,master - 0 0 0 connected vars currentEpoch 0 lastVoteEpoch 0 $ cat /usr/local/redis_cluster/redis_6380/nodes_6380.conf d645d06708e1eddb126a6c3c4e38810c188d0906 :0@0 myself,master - 0 0 0 connected vars currentEpoch 0 lastVoteEpoch 0 # 第一段信息是这个Redis服务作为集群节点的一个身份编码 # 别名为集群的node-id 自动化 现在我们有2个部分还没有做,1是对集群进行分槽工作,2是构建主从关系。
通过redis-trib.rb工具,这个步骤将变得异常简单,由于我的ruby是装在node1上,所以只需要在node1执行下面一句话即可。
$ cd /usr/local/redis_cluster/redis-6.2.1/src/ # 旧版Redis这里以脚本名开头 redis-trib.rb 跟上后面参数即可 $ redis-cli --cluster create 192.168.0.120:6379 192.168.0.140:6380 192.168.0.130:6379 192.168.0.120:6380 192.168.0.140:6379 192.168.0.130:6380 --cluster-replicas 1 参数释义:
--cluster-replicas:指定的副本数,其实这一条命令的语法规则是如果副本数为1,第一个ip:port与它后面的1个ip:port建立1主1从关系,如果副本数是2,第一个ip:port与它后面的2个ip:port建立1主2从关系,以此类推