集群搭建前分享个redis笔记博客链接:https://blog.csdn.net/weixin_43672855/category_9843184.html

https://blog.csdn.net/qq_33423418/article/details/101351944

一、Redis Cluster集群搭建

1、redis集群中至少应该有奇数个节点,所以搭建集群最少需要3台主机。同时每个节点至少有一个备份节点,所以最少需要创建使用6台机器,才能完成Redis Cluster集群。我们这里搭建三个master节点,并且给每个master节点搭建一个slave节点,总共6个redis节点,这里用一台机器(可以多台机器部署,修改一下ip地址就可以了)部署6个redis实例,三主三从步骤如下:

cd /usr/local/redis
mkdir 7000 7001 7002 7003 7004 7005
cp redis.conf 7000

2、修改7000文件夹下redis.conf文件如下几项:

protected-mode no   #关闭保护模式   用于公网访问
port  7000
#开启集群模式
cluster-enabled yes
cluster-config-file  nodes-7000.conf
cluster-node-timeout  5000
#后台启动
daemonize  yes
pidfile  /var/run/redis_7000.pid
logfile  "7000.log"
#bind  127.0.0.1

 3、依次复制并修改6个redis.conf

cp 7000/redis.conf   7001/
vi  7001/redis.conf     :%s/7000/7001/g  全部替换  :wq保存退出即可

4、依次启动6个节点

./bin/redis-server ./7000/redis.conf
./bin/redis-server ./7001/redis.conf
./bin/redis-server ./7002/redis.conf
./bin/redis-server ./7003/redis.conf
./bin/redis-server ./7004/redis.conf
./bin/redis-server ./7005/redis.conf

启动用使用ps -ef|grep redis查看进程

5、redis5版本后通过redis-cli客户端命令来创建集群。5之前比较麻烦,需要安装ruby

./bin/redis-cli --cluster create 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 --cluster-replicas 1

如果有密码,--cluster  create  -a   xxx  master ip1:port1  master ip2:port2  master ip3:port3  slave ip1:port1 .....

--cluster-replicas 1意味着我们每个创建的master都有一个slave。其它参数是我们要用于创建新集群的实例的地址列表

  输入yes则集群创建完成

二、 Redis Cluster集群验证

使用redis客户端连接集群的任意一个端口节点:

./bin/redis-cli -c -h 127.0.0.1 -p 7000

redis cluster在设计的时候,就考虑到了去中心化,去中间件,也就是说,集群中的每个节点都是平等的关系,都是对等的,每个节点都保存各自的数据和整个集群的状态。每个节点都和其他所有节点连接,而且这些连接保持活跃,这样就保证了我们只需要连接集群中的任意一个节点,就可以获取到其他节点的数据

基本命令:

info replication   #查看当前登录节点信息

cluster nodes  #查看集群所有节点信息

 每个Redis节点都有一个ID值,此ID将被此特定redis实例永久使用,以便实例在集群上下文具有唯一的名称。每个节点都会记住使用此ID的每个其他节点,而不是通过IP或端口。IP地址和端口可能会发生变化,但唯一的节点标识符在节点的整个生命周期内都不会改变。我们简单地称这个标识符为节点ID。

cluster info  #查看集群信息

redis集群各节点都是平等的,读写操作会根据key值计算出特定槽位自动重定向到对应节点操作,如:

redis集群call指令:集群所有节点操作redis

redis-cli -c -a [CLUSTER_AUTH] --cluster call [CLUSTER_IP:CLUSTER_POPRT] keys *  #集群所有节点模糊匹配

集群模糊删除key命令:

cluster nodes  #查看master节点机器
./redis-cli -h [ip] -p [port] -a [pass] keys *aaaaa*|xargs -n1 ./redis-cli -h [ip] -p [port] -a [pass] del  #每台master节点执行

 

xargs后面的 -n1 是集群情况下要加的,不然当集群key的数量大于1是,会报错 (error) CROSSSLOT Keys in request don’t hash to the same slot

三、 Redis Cluster总结

  Redis cluster为了保证数据的高可用,加入了主从模式,一个主节点对应一个或多个从节点,主节点提供数据存取,从节点则是从主节点拉取数据备份,当这个主节点挂掉后,就会有这个从节点选取一个来充当主节点,从而保证集群不会挂掉。

  集群有ABC三个主节点, 如果这3个节点都没有加入从节点,如果B挂掉了,我们就无法访问整个集群了。A和C的slot也无法访问。

   所以我们在集群建立的时候,一定要为每个主节点都添加了从节点, 比如像这样, 集群包含主节点A、B、C, 以及从节点A1、B1、C1, 那么即使B挂掉系统也可以继续正确工作。B1节点替代了B节点,所以Redis集群将会选择B1节点作为新的主节点,集群将会继续正确地提供服务。 当B重新开启后,它就会变成B1的从节点。

   不过需要注意,如果节点B和B1同时挂了,Redis集群就无法继续正确地提供服务了。 

 四、脚本关闭、开启集群

在redis目录下编写脚本文件:vi shutdown.sh

/usr/local/redis/bin/redis-cli -c -h 127.0.0.1 -p 7000 -a xxx shutdown  #如果有密码
/usr/local/redis/bin/redis-cli -c -h 127.0.0.1 -p 7001 shutdown
/usr/local/redis/bin/redis-cli -c -h 127.0.0.1 -p 7002 shutdown
/usr/local/redis/bin/redis-cli -c -h 127.0.0.1 -p 7003 shutdown
/usr/local/redis/bin/redis-cli -c -h 127.0.0.1 -p 7004 shutdown
/usr/local/redis/bin/redis-cli -c -h 127.0.0.1 -p 7005 shutdown
chmod u+x shutdown.sh   #将shutdown.sh变成可执行文件
./shutdown.sh #在当前目录下启动

 在redis目录下编写脚本文件:vi clusterstart.sh

/usr/local/redis/bin/redis-server ./7000/redis.conf
/usr/local/redis/bin/redis-server ./7001/redis.conf
/usr/local/redis/bin/redis-server ./7002/redis.conf
/usr/local/redis/bin/redis-server ./7003/redis.conf
/usr/local/redis/bin/redis-server ./7004/redis.conf
/usr/local/redis/bin/redis-server ./7005/redis.conf
chmod u+x clusterstart.sh  #将clusterstart.sh变成可执行文件

 五、三台机器安装使用

make
make PREFIX=/data/redis install
cd /data/redis && mkdir {master,slave}
将一台机器的/data/redis复制到其它两台机器上 cd master
&& ../bin/redis-server redis.conf cd slave && ../bin/redis-server redis.conf ./bin/redis-cli --cluster create -a [pass] [master1]:6379 [master2]:6379 [master3]:6379 [slave1]:7379 [slave2]:7379 [slave3]:7379 --cluster-replicas 1