网站开发制作公司排行,cdr做网站怎么导出,网站建设的总体目标是什么,wordpress 文章点赞目录 一、前言二、下载安装Redis2.1、选择需要安装的Redis版本2.2、下载并解压Redis2.3、编译安装Redis 三、部署Redis Cluster高可用集群3.1、准备配置文件3.2、启动Redis服务3.3、创建Redis集群3.4、查看集群关系3.5、连接集群Redis进行数据读写以及重定向测试3.6、故障转移和… 目录 一、前言二、下载安装Redis2.1、选择需要安装的Redis版本2.2、下载并解压Redis2.3、编译安装Redis 三、部署Redis Cluster高可用集群3.1、准备配置文件3.2、启动Redis服务3.3、创建Redis集群3.4、查看集群关系3.5、连接集群Redis进行数据读写以及重定向测试3.6、故障转移和恢复测试3.7、Redis集群中添加节点并分配槽位3.7.1、先部署两个新的Redis服务使用端口号7007 70083.7.2、集群中添加主节点3.7.3、给新添加的主节点分配槽位3.7.4、集群中给指定主节点添加从节点 3.8、删除Redis集群中节点3.8.1、删除从节点3.8.2、将被删除主节点槽位迁移到别的主节点3.8.3、删除主节点 四、SpringBoot集成Redis Cluster集群 一、前言
Redis Cluster 集群是一个由多个主从节点群组成的分布式服务器群它具有复制、高可用和分片特性。Redis集群不需要sentinel哨兵也能完成节点移除和故障转移的功能。需要将每个节点设置成集群模式这种集群模式没有中心节点可水平扩展需要将每个节点设置成集群模式这种集群模式没有中心节点可水平扩展据官方文档称可以线性扩展到上万个节点(官方推荐不超过1000个节点)。redis集群的性能和高可用性均优于之前版本的哨兵模式且集群配置比较简单Redis Cluster 将所有数据划分为 16384个槽位每个redis 节点负责其中一部分槽位客户端为了可以直接定位对 key 通过 crc16 进行 hash 再对16384取余某个具体的 key 所在节点需要缓存槽位相关信息这样才可以准确快速地定位到相应的节点。同时因为可能会存在客户端与服务器存储槽位的信息不一致的情况还需要纠正机制通过返回 -MOVED 3999 127.0.0.1:6379客户端收到后需要立即纠正本地的槽位映射表来实现槽位信息的校验调整.
这里重点做Redis Cluster集群部署要想了解原理可以跳转Redis Cluster高可用集群原理。
二、下载安装Redis
2.1、选择需要安装的Redis版本
在官网发行版中选择一个自己需要的版本我这里使用Redis6.2.0小版本区别不大。 Redis发行版本列表https://download.redis.io/releases
2.2、下载并解压Redis
下载redis到/usr/local/redis目录中这里使用wget下载如果没有wget执行yum -y install wget安装
wget -P /usr/local/redis http://download.redis.io/releases/redis-6.2.0.tar.gz进入/usr/local/redis目录解压redis
cd /usr/local/redis
tar -xzf redis-6.2.0.tar.gz2.3、编译安装Redis
安装gcc
# redis是c语言编写的编译Redis需要gcc环境
yum -y install gcc
# 安装好后查看gcc信息
gcc -v编译
# 进入redis-6.2.0目录
cd redis-6.2.0
# 执行make开始编译 因为我们下载的是源码需要编译成可执行文件
make安装
# 编译成功后执行make PREFIX/usr/local/redis/redis-6.2.0 install 安装redis
# 这里指定目录之后方便后续卸载直接rm -rf /usr/local/redis/redis-6.2.0 即可删除redis
make PREFIX/usr/local/redis/redis-6.2.0 installPREFIX 这个关键字的作用是安装的时候用于指定程序存放的路径假设不添加该关键字Linux会将可执行文件存放在/usr/local/bin目录库文件会存放在/usr/local/lib目录配置文件会存放在/usr/local/etc目录其他的资源文件会存放在usr/local/share目录三、部署Redis Cluster高可用集群
这里使用单台主机部署部署6个redis实例3个主节点每个主节点1个从节点端口号使用7001-7006Redis服务端口和集群节点gossip通信端口默认是在Redis端口号上加10000如果不是同一台主机要将防火墙关闭或者开放对应端口。在Redis Cluster集群部署中不用自己指定master节点在创建集群时会根据Redis服务数量还有指定每个master节点需要有多少个slave节点自动分配在下面会进行演示。
3.1、准备配置文件
1、创建每个节点信息的存储目录
# 创建集群总的存储目录
mkdir /usr/local/redis/redis-6.2.0/cluster
# 进入总存储目录
cd /usr/local/redis/redis-6.2.0/cluster
# 创建每个节点存储目录
mkdir 7001 7002 7003 7004 7005 70062、先准备7001节点的配置文件后面只要替换配置文件中的7001然后分发到不同节点存储目录即可
# 进入 usr/local/redis/redis-6.2.0 目录操作
cd /usr/local/redis/redis-6.2.0
# 备份一份当前目录redis.conf文件做留存
cp redis.conf redis.conf.back
# 修改redis.conf文件 先给7001节点做配置后面只要替换配置文件中的7001即可
vi redis.conf修改下面配置
# 绑定的主机地址建议填redis安装服务器的业务私网地址
# 这里为了方便直接找到这个配置注释了
#bind 127.0.0.1 -::1# redis进程的端口号 默认是6379
port 7001# 是否开启保护模式默认开启。要是配置里没有指定bind和密码开启该参数后redis只会本地进行访问拒绝外部访问这里关闭保护模式设置为no。
protected-mode no# redis进程是否以守护进程的方式运行yes为是后台运行no为否(不以守护进程的方式运行会占用一个终端终端关闭redis服务也会关闭)。
daemonize yes# 指定redis进程的PID文件存放位置
pidfile /var/run/redis_7001.pid# log文件输出位置
logfile /usr/local/redis/redis-6.2.0/cluster/7001/redis.log# 指定数据文件存放目录(默认当前启动时所在目录)因为我这里是一台机器部署的要区分开每个节点持久化文件存放的目录
dir /usr/local/redis/redis-6.2.0/cluster/7001# 设置redis连接密码如果配置了连接密码客户端在连接redis是需要通过AUTHpassword命令提供密码默认关闭
requirepass 123456# 设置集群节点间访问密码跟上面一致
masterauth 123456# 启动集群模式
cluster-enabled yes# 集群节点信息文件这里700x最好和port对应上
cluster-config-file nodes‐7001.conf# 集群节点的超时时限节点发送对其它节点的PING命令的时候如果超过这个时间还没有响应则标记另外一个为故障状态 默认15000毫秒
cluster‐node‐timeout 150003、分发各节点配置文件并替换对应端口
# 复制7001的redis.conf到每个节点数据存储目录
cp redis.conf ./cluster/7001/redis.conf
cp redis.conf ./cluster/7002/redis.conf
cp redis.conf ./cluster/7003/redis.conf
cp redis.conf ./cluster/7004/redis.conf
cp redis.conf ./cluster/7005/redis.conf
cp redis.conf ./cluster/7006/redis.conf# 替换每个节点配置文件中的7001字符串为自己节点端口
sed -i s/7001/7002/g ./cluster/7002/redis.conf
sed -i s/7001/7003/g ./cluster/7003/redis.conf
sed -i s/7001/7004/g ./cluster/7004/redis.conf
sed -i s/7001/7005/g ./cluster/7005/redis.conf
sed -i s/7001/7006/g ./cluster/7006/redis.conf3.2、启动Redis服务
./bin/redis-server ./cluster/7001/redis.conf
./bin/redis-server ./cluster/7002/redis.conf
./bin/redis-server ./cluster/7003/redis.conf
./bin/redis-server ./cluster/7004/redis.conf
./bin/redis-server ./cluster/7005/redis.conf
./bin/redis-server ./cluster/7006/redis.conf查看进程启动状态
ps -aux | grep redis3.3、创建Redis集群
Redis5以前的版本集群是依靠ruby脚本redis‐trib.rb实现之后是使用redis‐cli创建整个Redis集群我这里使用的是Redis6.2.0.
# 创建集群
## -a 密码
## --cluster create 创建集群后面带每个节点的IP:端口
## --cluster-replicas 1 表示为每个master创建一个slave节点
./bin/redis-cli -a 123456 --cluster create 172.16.8.186:7001 172.16.8.186:7002 172.16.8.186:7003 172.16.8.186:7004 172.16.8.186:7005 172.16.8.186:7006 --cluster-replicas 1在创建时会询问是否设置成列出来的配置输入yes回车即可槽位分配和主从关系都是由Cluster计算出来的后续可以通过命令调整
[rootparent-docker redis-6.2.0]# ./bin/redis-cli -a 123456 --cluster create 172.16.8.186:7001 172.16.8.186:7002 172.16.8.186:7003 172.16.8.186:7004 172.16.8.186:7005 172.16.8.186:7006 --cluster-replicas 1
Warning: Using a password with -a or -u option on the command line interface may not be safe.Performing hash slots allocation on 6 nodes...
Master[0] - Slots 0 - 5460
Master[1] - Slots 5461 - 10922
Master[2] - Slots 10923 - 16383
Adding replica 172.16.8.186:7005 to 172.16.8.186:7001
Adding replica 172.16.8.186:7006 to 172.16.8.186:7002
Adding replica 172.16.8.186:7004 to 172.16.8.186:7003Trying to optimize slaves allocation for anti-affinity
[WARNING] Some slaves are in the same host as their master
M: e4528f6cbf114daaa6d18c8a4111a98329b7c319 172.16.8.186:7001slots:[0-5460] (5461 slots) master
M: d52909707e7a7946955759e9b943e81fe85b3d67 172.16.8.186:7002slots:[5461-10922] (5462 slots) master
M: aa60b733ba646f9bc541f0a29f9ccaffe9e65f09 172.16.8.186:7003slots:[10923-16383] (5461 slots) master
S: d524a41b8a358b7ad678ff913da62899668d2e69 172.16.8.186:7004replicates e4528f6cbf114daaa6d18c8a4111a98329b7c319
S: 5fb34e0d2187e49cfbba3b4fb89bf40d591089a0 172.16.8.186:7005replicates d52909707e7a7946955759e9b943e81fe85b3d67
S: d1eea9da1d8f471aa90e12f5957f538bce72312c 172.16.8.186:7006replicates aa60b733ba646f9bc541f0a29f9ccaffe9e65f09
Can I set the above configuration? (type yes to accept): yesNodes configuration updatedAssign a different config epoch to each nodeSending CLUSTER MEET messages to join the cluster
Waiting for the cluster to join
.Performing Cluster Check (using node 172.16.8.186:7001)
M: e4528f6cbf114daaa6d18c8a4111a98329b7c319 172.16.8.186:7001slots:[0-5460] (5461 slots) master1 additional replica(s)
M: d52909707e7a7946955759e9b943e81fe85b3d67 172.16.8.186:7002slots:[5461-10922] (5462 slots) master1 additional replica(s)
S: d524a41b8a358b7ad678ff913da62899668d2e69 172.16.8.186:7004slots: (0 slots) slavereplicates e4528f6cbf114daaa6d18c8a4111a98329b7c319
S: 5fb34e0d2187e49cfbba3b4fb89bf40d591089a0 172.16.8.186:7005slots: (0 slots) slavereplicates d52909707e7a7946955759e9b943e81fe85b3d67
M: aa60b733ba646f9bc541f0a29f9ccaffe9e65f09 172.16.8.186:7003slots:[10923-16383] (5461 slots) master1 additional replica(s)
S: d1eea9da1d8f471aa90e12f5957f538bce72312c 172.16.8.186:7006slots: (0 slots) slavereplicates aa60b733ba646f9bc541f0a29f9ccaffe9e65f09
[OK] All nodes agree about slots configuration.Check for open slots...Check slots coverage...
[OK] All 16384 slots covered.3.4、查看集群关系
在任意一台节点都能查看
./bin/redis-cli -a 123456 --cluster check 172.16.8.186:7001可以在这个信息中看到主从关系和槽位以及每个主节点中key的数量信息。
还可以连接上任意一台Redis服务使用命令查看
# 查看集群信息
172.16.8.186:7001 cluster info
# 查看节点列表
172.16.8.186:7001 cluster nodes3.5、连接集群Redis进行数据读写以及重定向测试
1、连接集群Redis连接任意节点都可以操作key时如果槽位不在当前节点或者不是主节点会自动重定向到对应的主节点
## -c 集群节点跳转重定向如果不加-c节点之间是无法自动跳转的
./bin/redis-cli -c -h 172.16.8.186 -p 7001 -a 1234562、插入数据
172.16.8.186:7001 set names kerwin在7001节点执行插入操作计算出names这个key的槽位为6659是在主节点7002中这里可以看到直接重定向到了7002节点就相当于在7002节点执行的插入而且客户端这里连接的节点也变为了7002如果计算出的槽位在7001中则可以直接插入。 3、读取数据 先关闭连接然后重新连接。 172.16.8.186:7001 get names读数据这里和写数据是一样的逻辑计算出key的槽位不在当前主节点则会自动重定向到对应的主节点中读取。 4、从节点读数据 根据上面的测试我们看到names这个key会落在7002节点中7002的从节点是7005那么我们在7005上执行读操作会进行重定向吗这里测试一下。 ## -c 集群节点跳转重定向如果不加-c节点之间是无法自动跳转的
./bin/redis-cli -c -h 172.16.8.186 -p 7005 -a 123456这里可以看到就算在从节点也无法获取数据还是会重定向到主节点获取数据官方默认设置的是不分担读请求的、只作备份和故障转移用当有请求读向从节点时会被重定向对应的主节点来处理。 要想在从节点读取数据也可以使用readonly命令这个readonly告诉 Redis Cluster 从节点客户端愿意读取可能过时的数据并且对写请求不感兴趣只在当前会话有效断开连接后readonly就失效了再次连接需要重新使用该命令。
3.6、故障转移和恢复测试
1、这里我们手动停止主节点7001
./bin/redis-cli -c -h 172.16.8.186 -p 7001 -a 123456 shutdown2、查看集群信息
./bin/redis-cli -a 123456 --cluster check 172.16.8.186:7002这里可以看到7001已经没了7004变成了新的主节点
3、重新启动7001
./bin/redis-server ./cluster/7001/redis.conf4、查看集群信息
./bin/redis-cli -a 123456 --cluster check 172.16.8.186:7002可以看到7001又加入了集群不过这个时候是7004的从节点
3.7、Redis集群中添加节点并分配槽位
进入/usr/local/redis/redis-6.2.0目录操作cd /usr/local/redis/redis-6.2.0
3.7.1、先部署两个新的Redis服务使用端口号7007 7008
# 1、创建7007 7008节点存储目录
mkdir /usr/local/redis/redis-6.2.0/cluster/7007
mkdir /usr/local/redis/redis-6.2.0/cluster/7008# 2、复制7001的redis.conf到7007 7008节点存储目录
cp redis.conf ./cluster/7007/redis.conf
cp redis.conf ./cluster/7008/redis.conf# 3、替换每个节点配置文件中的7001字符串为自己节点端口
sed -i s/7001/7007/g ./cluster/7007/redis.conf
sed -i s/7001/7008/g ./cluster/7008/redis.conf# 4、启动7007 7008节点Redis服务
./bin/redis-server ./cluster/7007/redis.conf
./bin/redis-server ./cluster/7008/redis.conf# 5、查看7007 7008节点启动状态
ps -aux | grep redis3.7.2、集群中添加主节点
# --cluster add-node 添加节点如果命令中没有--cluster-slave --cluster-master-id则是添加主节点
# 172.16.8.186:7007 需要添加的Redis服务
# 172.16.8.186:7001 集群中任意一个节点都可以我这里使用7001节点
# -a 123456 Redis服务密码
./bin/redis-cli -a 123456 --cluster add-node 172.16.8.186:7007 172.16.8.186:7001添加好后可以查看集群信息
./bin/redis-cli -a 123456 --cluster check 172.16.8.186:7001可以看到7007已经成功加入集群并且为主节点但是没有槽位无法进行读写需要先分配槽位
3.7.3、给新添加的主节点分配槽位
# --cluster reshard 重新分配槽位
# 172.16.8.186:7001 集群中任意节点都行这里选择7001
./bin/redis-cli -a 123456 --cluster reshard 172.16.8.186:7001回车执行后还会询问一下是否执行分配输入yes回车即可后面会开始执行槽位迁移执行完后查看集群信息可以看到7007节点被分配了三个区间的槽位总合4096正好是从其它3个节点迁移过来的。
3.7.4、集群中给指定主节点添加从节点
# --cluster add-node 添加节点如果命令中加了--cluster-slave --cluster-master-id 则是添加从节点
# --cluster-slave 添加从节点
# --cluster-master-id 主节点ID
# 172.16.8.186:7008 需要添加的Redis服务
# 172.16.8.186:7001 集群中任意一个节点都可以我这里使用7001节点
# -a 123456 Redis服务密码
./bin/redis-cli -a 123456 --cluster add-node 172.16.8.186:7008 172.16.8.186:7001 --cluster-slave --cluster-master-id 5292ce107ed07159d3e9b413aad3210277494c9c添加好查看一下集群节点信息
./bin/redis-cli -a 123456 --cluster check 172.16.8.186:7001从节点也添加成功
3.8、删除Redis集群中节点
注意事项 要删除节点首先要先删除从节点确保主节点下没有从节点避免从节点自动切换成其它主节点的从节点。 删除主节点前要先将被删除节点的槽位分配出去不然无法删除会出现[ERR] Node 172.16.8.186:7007 is not empty! Reshard data away and try again. 在移除某个Redis节点之前不能登入该节点操作要使用其它节点会话操作否则不能正常移除该节点。
3.8.1、删除从节点
# --cluster del-node 删除节点
# 172.16.8.186:7001 集群中任意节点不能是被删除的节点
# 7d1437adb68606d46160220cdba2f2728b88ec4d 在最后面带上要删除的节点ID
./bin/redis-cli -a 123456 --cluster del-node 172.16.8.186:7001 7d1437adb68606d46160220cdba2f2728b88ec4d3.8.2、将被删除主节点槽位迁移到别的主节点
# --cluster reshard 重新分配槽位
# 172.16.8.186:7001 集群中任意节点都行这里选择7001
./bin/redis-cli -a 123456 --cluster reshard 172.16.8.186:7001查看一下集群节点信息
./bin/redis-cli -a 123456 --cluster check 172.16.8.186:70013.8.3、删除主节点
# --cluster del-node 删除节点
# 172.16.8.186:7001 集群中任意节点不能是被删除的节点
# 5292ce107ed07159d3e9b413aad3210277494c9c 在最后面带上要删除的节点ID
./bin/redis-cli -a 123456 --cluster del-node 172.16.8.186:7001 5292ce107ed07159d3e9b413aad3210277494c9c查看一下集群节点信息
./bin/redis-cli -a 123456 --cluster check 172.16.8.186:70017007和7008节点都被移除
四、SpringBoot集成Redis Cluster集群
https://blog.csdn.net/weixin_44606481/article/details/134073096