说明: 伪集群是指一台linux上启动了三台实例,正常的集群是每一个实例一台机器
百度上的redis集群教程大部分都是使用ruby或者其他脚本一步到位,安装效率比较高
本教程不使用ruby或其他脚本,需要一步一步手工搭建,相对繁琐,但也更能了解其原理。
安装前准备:1、linux已安装单机redius
大概步骤:
1)创建节点目录
2)修改配置文件
3)启动6个redis实例
4)节点握手
5)分配哈希槽
6)启动集群并验证
正文:
第一步:创建相关目录
redis集群要高可用需要6个节点,3个主节点,3个从节点,所以创建7001-7006的6个节点的工作目录。
mkdir /home/comuser/soft/redis-cluster
mkdir /home/comuser/soft/redis-cluster/log
mkdir /home/comuser/soft/redis-cluster/7001
mkdir /home/comuser/soft/redis-cluster/7002
mkdir /home/comuser/soft/redis-cluster/7003
mkdir /home/comuser/soft/redis-cluster/7004
mkdir /home/comuser/soft/redis-cluster/7005
mkdir /home/comuser/soft/redis-cluster/7006
第二步:修改配置文件
先从redis安装目录拷贝redis.conf到7001目录,并做编辑里面的配置内容
cp /home/comuser/soft/redis-6.0.6/redis.conf /home/comuser/soft/redis-cluster/7001/redis.conf
编辑7001目录的redis-7001.conf配置文件,修改以下内容
# 绑定ip,虚拟机ip,尽量不要用127.0.0.1
bind 192.168.100.10
# 节点端口
port 7001
# 日志目录
logfile "/home/cmuser/soft/redis-cluster/log/reids-7001.log"
# 开启集群模式
cluster-enabled yes
# 节点超时时间,单位毫秒
cluster-node-timeout 15000
# 集群内部配置节点信息文件名,集群自己创建这个文件,这里只是固定义文件名
cluster-config-file node-7001.conf
# pid文件
pidfile /var/run/redis_7001.pid
# 主节点密码(可以不设置)
masterauth xxxxxxx
# 客户端连接请求密码(可以不设置)
requirepass xxxxxxx
然后把这个配置文件分别拷贝到7002-7006目录,配置基本一样,只需要把文件里的7001换成相应的节点号就行
# 在redis-cluster的目录执行一下命令(可以拷贝过去一起执行)
cp ./7001/redis.conf ./7002
cp ./7001/redis.conf ./7003
cp ./7001/redis.conf ./7004
cp ./7001/redis.conf ./7005
cp ./7001/redis.conf ./7006
#把每个目录配置文件里的7001替换成相应的节点号,在redis-cluster目录执行以下命令:
cd 7002
sed -i "s|7001|7002|g" `grep -lr "7001" ./`
cd ../7003
sed -i "s|7001|7003|g" `grep -lr "7001" ./`
cd ../7004
sed -i "s|7001|7004|g" `grep -lr "7001" ./`
cd ../7005
sed -i "s|7001|7005|g" `grep -lr "7001" ./`
cd ../7006
sed -i "s|7001|7006|g" `grep -lr "7001" ./`
到此,6个redis的单机配置就已经准备完成,接下来进行集群配置
第三步:启动6个单机redis
1) 新建一个启动脚本
redis的启动命令是nohup redis-server redis.confi & ,但是这样一次只能启动一个,需要连续执行6次,太麻烦了,可以写一个脚本同时启动6个redis。
#在redis-cluster目录里面,新建一个start-all.sh文件
vi start-all.sh
#文件里面内容如下
cd 7001
nohup redis-server redis.conf &
echo ' '
cd ../7002
nohup redis-server redis.conf &
echo ' '
cd ../7003
nohup redis-server redis.conf &
echo ' '
cd ../7004
nohup redis-server redis.conf &
echo ' '
cd ../7005
nohup redis-server redis.conf &
echo ' '
cd ../7006
nohup redis-server redis.conf &
echo ' '
2) 创建一个关闭集群的脚本
#在redis-cluster目录创建一个stop-all.sh文件
vi stop-all.sh
#内容如下,700是节点号的前三个数字:
ps -ef|grep redis|grep cluster|grep 700|awk '{print $2}'|xargs kill -9
3)给这两个文件赋权
#chmod是赋权命令,文件可读,可执行等
chmod 777 start-all.sh
chmod 777 stop-all.sh
4)启动6个单机redis
./start-all.sh
第四步:节点握手
启动6个redis后,登录其中的一台节点
#登录命令
redis-cli -h 192.168.100.10 -p 7001
进入到redis客户端命令窗口,通过客户端发起meet过程,执行一下命令即可
#用登录的节点给其他节点meet一下,需要一条一条执行
cluster meet 192.168.100.10 7002
cluster meet 192.168.100.10 7003
cluster meet 192.168.100.10 7004
cluster meet 192.168.100.10 7005
cluster meet 192.168.100.10 7006
第五步:分配哈希槽
redis共有16384个哈希槽,通过cluster addslots命令为节点非陪哈希槽,作为一个集群,每个主节点只负责储存一部分哈希槽,所有主节点合起来就是完整的哈希槽点
只要给主节点分配哈希槽,从节点哈希槽和主节点一致。
#退出客户端
quit
执行列命令分配哈希草
redis-cli -h 192.168.100.10 -p 7001 cluster addslots {0..5461}
redis-cli -h 192.168.100.10 -p 7002 cluster addslots {5462..10922}
redis-cli -h 192.168.100.10 -p 7003 cluster addslots {10923..16383}
#如果提示某个槽点被使用,就把6个节点关闭,去7001-7006目录,
把node开头的文件,及aof或者rdb文件删除,然后后启动,在执行上面的命令。
第五步:设置主从关系
6个节点的主从分配可以自己定义,这里使用7001,7002,7003作为主节点,7004为7001从节点,7005为7002从节点,7006为7003从节点。
分别登录7004-7006设置主从关系
#退出当前登录的节点 quit #登录7004 redis-cli -h 192.168.100.10 -p 7004 cluster nodes #回显以下数据 6829ae75d4b3a5eebef2944c75c0a456c0beacdf 192.168.100.10:7003@17003 master - 0 1628112136000 2 connected 10923-16383 9bb6c48b1d7a2240253b58331e7c1fe693d09708 192.168.100.10:7006@17006 master - 0 1628112137000 5 connected d9b6f9e5d13269e3599249187361132c4a3c3dd6 192.168.100.10:7005@17005 master - 0 1628112137524 4 connected 27573976166e3f7fbdaac9e0a1230c49b0dea441 192.168.100.10:7002@17002 master - 0 1628112138540 1 connected 5462-10922 31c48aafe2d882516e836bb7a356abcaf302ace5 192.168.100.10:7004@17004 master - 0 1628112135489 3 connected ea29a6d1cd2ab92dd500692920c8134b8f525c59 192.168.100.10:7001@17001 myself,master - 0 1628112138000 0 connected 0-5461
第一列为节点对应的id,第二列节点ip端口,其他的不用看
接下来就设置主从关系
#退出客户端
quit
#设置主从关系,cluster replicate 后面一串为对应主节点的id
redis-cli -h 192.168.100.10 -p 7004 cluster replicate ea29a6d1cd2ab92dd500692920c8134b8f525c59
redis-cli -h 192.168.100.10 -p 7005 cluster replicate 27573976166e3f7fbdaac9e0a1230c49b0dea441
redis-cli -h 192.168.100.10 -p 7006 cluster replicate 6829ae75d4b3a5eebef2944c75c0a456c0beacdf
到此,redis集群已经搭建是否完毕,最后验证集群有无问题。
关闭6个单机节点。
#在redis-cluster目录执行
./stop-all.sh
第六步:启动集群,验证是否正常
集群是否能用验证方法:如果你在7001节点存入是数据,在其他节点能够获取数据,就表示集群搭建成功
#启动集群(其实就是分别启动6个redis实例),在redis-cluster目录执行启动命令
./start-all.sh
#使用集群的方式登录7001,注意和之前登录单机的命令不一样,多了-c,表示集群登录
redis-cli -c -h 192.168.100.10 -p 7001
#存入缓存数据键值对
set hello redis
#退出7001节点
quit
#登录7006
redis-cli -c -h 192.168.100.10 -p 7006
#获取hello的值
get hello
#如果能够返回redis字符串表示集群搭建成功,如果返回nil表示搭建失败。