大家好,又见面了,我是你们的朋友全栈君。
redis cluster是官方的redis集群实现,本篇文章为搭建集群实践篇
一、手动搭建
redis官方已经redis-trib.rb命令来给我们实现redis搭建了。但是为了了解原理,首先我们来手动搭建不使用官方的命令。如果大家想快速搭建,可以直接跳到二。
1、准备
我们这个例子是在单机上部署集群,实际的工作情况会在不同的机器上搭建,一方面为了保证高可用也是为了扩大数据的容量所以实际中会在不同的机器上搭建。
所以在单机器上准备6个配置文件,通过6个不同的端口启动六个redis,3主3从的模式。
端口7000 的从节点是7003,端口7001的从节点是7004,端口7002的从节点是7005。
1)创建测试目录和文件
在redis的目录下测试cluster的目录:
在cluster-test目录下面创建以下目录:
conf目录放置一下配置文件(文件内容待会会教大家创建):
data 目录会放置数据文件和redis持久化文件rdb文件,logs放置日志文件,scripts里面放置我们自己写的脚本文件,后面也会介绍
2)创建conf文件,cd到conf文件,vim redis-7000.conf
port 7000 daemonize yes dir “/opt/software/redis-4.0.9/cluster-test/data” logfile “/opt/software/redis-4.0.9/cluster-test/logs/7000.log” #dbfilename不能配置为路径 dbfilename “dump-7000.rdb” cluster-enabled yes cluster-config-file nodes-7000.conf #是否需要每个节点都可用,集群才算可用,关闭 cluster-require-full-coverage no
也就是:
port启动的端口,不用说,单机下面搭建集群只能以端口区分
daemonize表示需要以后台进程启动个,否则客户端关闭redis就关闭了
dir,logfile就是刚刚说的数据文件和日志文件的配置,根据每个人安装路径的不同去配置
dbfilename 到时候会自动生成到data目录下面,需要写一个文件名
cluster-enabled yes以集群方式启动
cluster-cluster-config-file 这个是nodes信息配置文件,也是自动生成的
最后一个看注释,最好设置为no。
然后就是把文件都复制一份并修改
sed “s/7000/7001/g” redis-7000.conf >redis-7001.conf
7002,7003,7004,7005以此类推
2、启动集群
一次通过配置文件启动集群,我还在conf目录下,所以这样启动
启动了之后查看进程(如果对基本的linux命令不熟悉,可以看这里)
说明都启动起来了
查看槽信息,都没有,是因为我们还没有分配槽,稍后分配
查看data目录已经开始有文件了:
这些文件的内容:
和用这个指令查看的类似:
查看集群信息,集群处于失败状态,并且只感应到自己一个在集群里面,slots也没有分配:
3、集群之间相互握手,只要一个在集群里面的机器meet了其他机器,这个集群里的其他机器也能感知到刚刚meet的集群
使用如下命令:
../../src/redis-cli -p 7000 cluster meet 127.0.0.1 7001
用了7000meet了7001和7002,虽然7002没有meet7001,但是他也感知了7001。继续用7000meet剩下所有的机器
所有的机器都感知彼此的存在了,并且集群里面集群的数据增加到了6:
4、设置副本
为了保证高可用,把7003设置为7000的从节点,把7004设置为7001的从节点,把7005设置为7002的从节点。
../../src/redis-cli -p 7003 cluster replicate f836a783a1adf21f93b16e2ec755aefc072b7aaf
需要注意的是这里使用的是id
以此类推:
从节点设置成功。
5、分配slots
1)说明
到目前为止,slots还是空的,并且集群处于不可用状态,因为没有分配slots:
redis cluster一共有16383个槽,现在分配到三个
7000的槽0~5461,7001的槽5462~10922,7002的槽10923~16383
2)编写脚本
vim ../scripts/addslots.sh
3)分配槽
即sh ../scripts/addslots.sh 0 5461 7000以此类推
sh ../scripts/addslots.sh 5462 10922 7001
sh ../scripts/addslots.sh 10923 16383 7002
4)验证集群
槽已经根据集群和主从分配了
并且集群处于可用状态
自此,手动搭建集群成功。关闭之后下次启动还可以是集群状态,因为信息已经持久化到dump文件里面,也就是data目录下存放的dump文件:
二、使用官方的redis-trib.rb搭建集群
使用官方的redis-trib.rb搭建集群更加简单,而请更加高效、准确,建议生产环境下使用,步骤如下
1、搭建ruby环境
redis-trib.rb这个命令后面是rb的,所以一看就是需要有ruby环境
1)安装ruby前置库
yum install zlib-devel
yum install zlib-devel
如果不安装,后面会遇到这个问题:
ERROR: While executing gem … (NoMethodError) undefined method `invoke_with_build_args’ for nil:NilClass
2)安装ruby
下载:wget https://cache.ruby-lang.org/pub/ruby/2.3/ruby-2.3.7.tar.gz
解压到特定目录:tar -zxvf ruby-2.3.7.tar.gz -C /opt/software
进入目录:cd /opt/software/ruby-2.3.7
配置:./configure –prefix=/usr/local/ruby(把解压的源文件放在/usr/local/ruby)
编译:make
安装:make install
进入目录:cd /usr/local/ruby
让ruby添加到用户的访问变量中:cp bin/ruby /usr/local/bin
让gem添加到用户的访问变量中 : cp /usr/local/ruby/bin/gem /usr/local/bin
输入ruby -v,看到如下信息说明成功:
同理执行gem -v
3)安装ruby的redis的客户端
查看redis客户端的所有版本https://rubygems.org/gems/redis/versions
找到redis,点进去,“下载”在右下角,点击复制链接地址
下载:wget https://rubygems.org/downloads/redis-4.0.1.gem
安装:gem install -l redis-4.0.1.gem,看到如下,成功
ps:如果前面安装ruby没有安装zlib-devel 和 openssl-devel,会出现下面的错误
- ERROR: Loading command: install (LoadError)
- cannot load such file — zlib
- ERROR: While executing gem … (NoMethodError)
- undefined method `invoke_with_build_args’ for nil:NilClass
解决办法看 这里,或者应该预先安装好(我是回去再把/usr/local/bin/ruby这个文件夹的文件删除了再安装依赖库,然后重复(2)、(3)步骤就可以了)
4)校验安装
gem list — check redis gem,(注意“–”之后有一个空格),看到如下信息,说明成功!
再来到redis-trib.rb这个命令这里
./redis-trib.rb,如下:
2、准备redis目录和配置文件(同一的第1步类似,不需要scripts目录,如果在一中手动实现过,把data和logs目录下的文件删除)
在单机器上准备6个配置文件,通过6个不同的端口启动六个redis,3主3从的模式。
端口7000 的从节点是7003,端口7001的从节点是7004,端口7002的从节点是7005。
1)创建测试目录和文件
在redis的目录下测试cluster的目录:
在cluster-test目录下面创建以下目录:
conf目录放置一下配置文件(文件内容待会会教大家创建):
data 目录会放置数据文件和redis持久化文件rdb文件,logs放置日志文件
2)创建conf文件,cd到conf文件,vim redis-7000.conf
port 7000 daemonize yes dir “/opt/software/redis-4.0.9/cluster-test-trib/data” logfile “/opt/software/redis-4.0.9/cluster-test-trib/logs/7000.log” #dbfilename不能配置为路径 dbfilename “dump-7000.rdb” cluster-enabled yes cluster-config-file nodes-7000.conf #是否需要每个节点都可用,集群才算可用,关闭 cluster-require-full-coverage no
也就是:
port启动的端口,不用说,单机下面搭建集群只能以端口区分
daemonize表示需要以后台进程启动个,否则客户端关闭redis就关闭了
dir,logfile就是刚刚说的数据文件和日志文件的配置,根据每个人安装路径的不同去配置
dbfilename 到时候会自动生成到data目录下面,需要写一个文件名
cluster-enabled yes以集群方式启动
cluster-cluster-config-file 这个是nodes信息配置文件,也是自动生成的
最后一个看注释,最好设置为no。
然后就是把文件都复制一份并修改
sed “s/7000/7001/g” redis-7000.conf >redis-7001.conf
7002,7003,7004,7005以此类推
3、依次启动redis
先把redis-cli 和redis-server 复制到命令搜索地方
cp ../../src/redis-cli /usr/local/bin/
cp ../../src/redis-server /usr/local/bin/
方便以后使用
查看redis-server情况,还是为启动的状态
4、开启集群
我先把redis-trib.rb 拷贝到bin目录下
cp ./redis-trib.rb /usr/local/bin/,以后就随地可以使用redis-trib.rb命令了
输入redis-trib.rb
我们要创建集群,一键的那种
redis-trib.rb create –replicas 1 127.0.0.1:7000 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
(replicas 1表示每个节点有一个从节点,redis-trib.rb会自动分配,如果参数不符合,会报错)
出现下面:
可以看到自动分配了从节点,并且试图优化,说明官方的redis-trib.rb还是比较高效和准确,由于是单机,所以会有一个警告,说是主从同一个机器,测试环境不用管。提示你是否接受配置,填入yes。看到如下
提示槽位已经自动添加了,我们查看一下
说明节点已经添加,并且槽位已经分配好了,集群也处于可用的状态。
redis cluster 启动成功之后,还会有很多问题,例如节点伸缩这个很重要的运维问题,后面我会用另外一篇文章介绍redis集群节点伸缩。
发布者:全栈程序员栈长,转载请注明出处:https://javaforall.cn/126982.html原文链接:https://javaforall.cn