江西建设网官方网站做网站做软件怎么赚钱
web/
2025/10/6 3:47:58/
文章来源:
江西建设网官方网站,做网站做软件怎么赚钱,教育培训学校,山东省建设局网站首页目录 环境 一#xff0c;安装和部署redis 1#xff0c;安装 2#xff0c;部署 编辑 3#xff0c;允许非本机连接redis 二、主从模式 主从模式搭建#xff1a; 三#xff0c;哨兵模式 哨兵模式搭建 四#xff0c;集群模式 架构细节: 心跳机制 集群模式搭建#xff1a… 目录 环境 一安装和部署redis 1安装 2部署 编辑 3允许非本机连接redis 二、主从模式 主从模式搭建 三哨兵模式 哨兵模式搭建 四集群模式 架构细节: 心跳机制 集群模式搭建 jedis连接集群 最后 环境 centOS7
redis5
vm12 一安装和部署redis
1安装
Redis是C语言开发的安装redis需要先去官网下载源码进行编译编译需要依赖于GCC编译环境如果 CentOS上没有安装gcc编译环境需要提前安装安装命令如下:这里我们使用root用户处理这些操 作
键入命令
yum install gcc有一个redis压缩包在/usr/myapps下至于redis的压缩包是如何放入centos的我在此就不做演示了我是使用Mobaterm连接虚拟机然后传输文件到虚拟机中然后解压该压缩包
键入命令
tar -zxvf redis-5.0.5.tar.gz 解压后解压完的文件名为redis.5.0.5然后我们进入到此文件下键入如下命令进行安装
make PREFIX/usr/myapps/redis install //这里指定了redis的安装目录为/usr/myapps/redis 安装完之后我们还需要将redis的配置文件复制过来因为在/usr/myapps/redis中只有bin/文件夹而没有配置文件配置文件在redis-5.0.5中将其复制过来就可以了。 2部署
redis的启动方式有两种一种是前端启动还有一种是端启动如下
启动的时候注意要关闭防火墙
systemctl disable firewalld //永久关闭
systemctl stop firewalld //临时关闭
systemctl status firewalld //查看防火墙状态
2.1前端启动用的很少
在/usr/myapps/redis下键入命令
./bin/redis-server 前端启动之后不能再进行其他操 作如果要操作必须使用ctrlc同时redis-server程序结束不推荐此方法。
2.2后端启动
在后端启动之前我们首先要修改redis.conf文件来允许后端启动在redis.conf的文件中的如下位置修改daemonize将no改为yes然后保存退出。 之后键入命令后端启动redis ./bin/redis-server ./redis.conf
键入命令连接redis ./bin/redis-cli -h 127.0.0.1 -p 6379 //默认是127.0.0.1和6379所以也可以不用写 键入一下命令关闭redis连接
./bin/redis-cli shutdown 当然其实也可以使用直接杀死redis进程的方式来结束redis连接。 3允许非本机连接redis
同样我们还是需要来修改redis.conf文件在redis.conf找到如下地方修改bind后面的ip改成允许连接的ip 修改完之后可以看到我们可以使用192.168.58.100来连接redis可以看到连接成功。 我们也可以使用redis的图形化工具在windows上链接contos上的redis服务器。如下 我们在redis客户端上存入数据 可以看到在redis的图形化工具上也存在我们存入的值。 系统中只有一台redis服务器是不可靠的容易出现单点故障。为了避免单点故障可以使用多台redis服务器组成redis集群。redis支持三种集群模式。
二、主从模式 至少需要两台redis服务器一台主节点master、一台从节点slave组成主从模式的Redis集群。通常来说master主要负责写slave主要负责读主从模式实现了读写分离。 集群中有多台redis节点就必须保证每个节点中的数据是一致的。redis中为了保持数据一致性数据总是从master复制到slave这就是redis的主从复制。
主从复制的作用
数据冗余实现了数据的热备份是持久化之外的另一种数据冗余方式 故障恢复master故障时slave可以提供服务实现故障快速恢复 负载均衡master负责写slave负责读。在写少读多的场景下可以极大提高redis吞吐量 高可用基石主从复制是redis哨兵模式和集群模式的基础。 主从复制实现原理
主从复制过程主要可以分为3个阶段连接建立阶段、数据同步阶段、命令传播阶段。
连接建立阶段在主从节点之间建立连接为数据同步做准备。 数据同步阶段执行数据的全量或增量复制复制RDB文件 命令传播阶段主节点将已执行的命令发送给从节点从节点接收命令并执行从而实现主从节点的数据一致性 主从模式中一个主节点可以有多个从节点。为了减少主从复制对主节点的性能影响一个从节点可以作为另外一个从节点的主节点进行主从复制。
不足之处主节点宕机之后需要手动拉起从节点来提供业务不能达到高可用。
主从模式搭建
我们将上述使用的redis复制一份到/usr/myapps/redis1中 清除redis1中的持久化文件键入命令
rm -rf dump.rdb
然后修改redis1的配置文件redis.conf在文件中找到如下内容的位置然后修改 replicaof masterip masterport改为主服务器的ip和端口号。 然后再修改从机的监听端口为6380 之后保存并且退出然后启动从机。连接从机之后输入info命令 我们可以在info命令下看到此从机的信息。 在从机中可以取到主机中的数据但是自己不可以上传数据。 主从模式的搭建就到这里。
三哨兵模式
Redis Sentinel是Redis的高可用实现方案它可以实现对redis的监控、通知和自动故障转移当redis master挂掉之后可以自动拉起slave提供业务从而实现redis的高可用。为了避免Sentinel本身出现单点故障Sentinel自己也可采用集群模式。 哨兵模式的原理
Sentinel是一种特殊的redis节点每个sentinel节点会维护与其他redis节点包括master/slave/sentinel的心跳。
当一个sentinel节点与master节点的心跳丢失时这个sentinel节点就会认为master节点出现了故障处于不可用的状态这种判定叫作主观下线即sentinel节点自己主观认为master下线了
之后这个sentinel节点会与其他sentinel节点交换信息如果发现认为主节点发生故障的sentinel节点的个数超过了某个阈值通常为sentinel节点总数的1/21即超过半数则sentinel会认为master节点已经处于客观下线的状态即大家都认为master故障不可用了。
之后sentinel节点中会选举处一个sentinel leader来执行redis主节点的故障转移。
被选举出的 Sentinel 领导者进行故障转移的具体步骤如下
1在从节点列表中选出一个节点作为新的主节点
过滤不健康或者不满足要求的节点
选择 slave-priority优先级最高的从节点 如果存在则返回 不存在则继续
选择复制偏移量最大的从节点 如果存在则返回 不存在则继续
选择 runid 最小的从节点。
2Sentinel 领导者节点会对选出来的从节点执行 slaveof no one 命令让其成为主节点。
3Sentinel 领导者节点会向剩余的从节点发送命令让他们从新的主节点上复制数据。
4Sentinel 领导者会将原来的主节点更新为从节点 并对其进行监控 当其恢复后命令它去复制新的主节点。
哨兵模式搭建
首先我们将上述的redis1复制一份改为redis2在redis.conf中修改port为6381所以这个时候主机redis拥有两个从机一个是redis1还有一个是redis2如下图连接上redis之后输入info可以看到两个从机的信息说明主从运行正常。 后面我们在redis2上安装一个哨兵。首先在redis2的bin下创建一个sentinel.conf文件文件内容含义如下
启动哨兵进程首先需要创建哨兵配置文件vi sentinel.conf,可从源码配置redis5.0.5/sentinel.conf中复制内容也可以直接自定义该文件到bin目录下 在配置中输入:sentinel monitor mastername 内网IP(127.0.0.1) 6379 1 说明 mastername 监控主数据的名称自定义 127.0.0.1监控主数据库的IP; 6379:端口 1最低通过票数 只有画红线的这一行是我们写的其他是我运行之后redis自行生成的。 之后我们创建一个日志文件用于记录哨兵的日志 ./redis-sentinel ./sentinel.conf sent.log 之后启动哨兵键入命令
./redis-server sentinel.conf --sentinel
查看进程可以看到我们的哨兵进程 启动之后我们将我们的redis主机宕机之后我们查看redis1我们发现 redis2成为主机了redis1也可以是随机的 我们重新启动redis以后查看信息发现redis2依然是主机所以主机不可抢夺。 四集群模式 主从模式实现了数据的热备份哨兵模式实现了redis的高可用。但是有一个问题这两种模式都没有解决这两种模式都只能有一个master节点负责写操作在高并发的写操作场景master节点就会成为性能瓶颈。
redis的集群模式中可以实现多个节点同时提供写操作redis集群模式采用无中心结构每个节点都保存数据节点之间互相连接从而知道整个集群状态。
如图所示集群模式其实就是多个主从复制的结构组合起来的每一个主从复制结构可以看成一个节点那么上面的Cluster集群中就有三个节点。 架构细节:
(1)所有的redis节点彼此互联(PING-PONG机制),内部使用二进制协议优化传输速度和带宽.
(2)节点的fail是通过集群中超过半数的节点检测有效时整个集群才生效.
(3)客户端与redis节点直连,不需要中间proxy层.客户端不需要连接集群所有节点,连接集群中任何一个可 用节点即可
(4)redis-cluster把所有的物理节点映射到[0-16383]slot上,cluster 负责维护nodeslotvalue Redis 集群中内置了 16384 个哈希槽当需要在 Redis 集群中放置一个 key-value 时redis 先对 key 使用 crc16 算法算出一个结果然后把结果对 16384 求余数这样每个 key 都会对应一个编号在 0- 16383 之间的哈希槽redis 会根据节点数量大致均等的将哈希槽映射到不同的节点 心跳机制
(1)集群中所有master参与投票,如果半数以上master节点与其中一个master节点通信超过(clusternode-timeout),认为该master节点挂掉.
(2):什么时候整个集群不可用(cluster_state:fail)? 如果集群任意master挂掉,且当前master没有slave则集群进入fail状态。也可以理解成集群的[0- 16383]slot映射不完全时进入fail状态。
如果集群超过半数以上master挂掉无论是否有slave集群进入fail状态。
集群模式搭建
1创建集群目录
mkdir redis-cluster 2,创建集群节点
搭建集群最少也得需要3台主机如果每台主机再配置一台从机的话则最少需要6台机器。 设计端口如 下创建6个redis实例需要端口号7001~7006 3删除持久化文件
就是删除以rdb或者aof结尾的文件因为我这里的redis是新装的所以没有持久化文件。
4修改redis.conf配置文件打开Cluster-enable yes 5修改端口修改后端启动 6复制出7002-7006机器 7修改7002-7006机器的端口 8启动7001-7006这六台机器写一个启动脚本自定义shel脚本 cd 7001
./bin/redis-server ./redis.conf
cd ..
cd 7002
./bin/redis-server ./redis.conf
cd ..
cd 7003
./bin/redis-server ./redis.conf
cd ..
cd 7004
./bin/redis-server ./redis.conf
cd ..
cd 7005
./bin/redis-server ./redis.conf
cd ..
cd 7006
./bin/redis-server ./redis.conf
cd ..9修改文件权限
为拥有者加上可执行的权限·。 chmod ux startall.sh10启动所有实例 11配置集群关系
随便进入一个服务器的配置文件执行如下命令
./redis-cli --cluster create 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 127.0.0.1:7006 --cluster-replicas
执行完之后由弹出的信息 可以看到redis的主从关系已经配置好了。 11连接集群
注意连接集群和普通连接不同加上-c代表以集群的方式连接
./bin/redis-cli -h 127.0.0.1 -p 7001 -c 可以看到连接上7001后我们存入7001的uname却被重定向存入到时槽10359中而这个时槽是交由7002管理的所以uname实际存入了7002。 由上我们就可以知道。只要连接了集群其中的一个服务器就相当于连接了整个集群。
12查看集群信息 jedis连接集群
1创建一个maven项目大家都会吧这里就不演示了。
2导入jedis依赖
dependencygroupIdredis.clients/groupIdartifactIdjedis/artifactIdversion2.9.0/version/dependency
3创建类
package jedis;
/**Author:天动万象*Date:2023/10/27*Description:*VERSION: 1.8*/import redis.clients.jedis.HostAndPort;
import redis.clients.jedis.JedisCluster;import java.io.IOException;
import java.util.HashSet;
import java.util.List;
import java.util.Set;public class cluster {public static void main(String[] args) throws IOException {
// 创建一连接JedisCluster对象,在系统中是单例存在SetHostAndPort nodes new HashSetHostAndPort();nodes.add(new HostAndPort(192.168.197.132, 7001));nodes.add(new HostAndPort(192.168.197.132, 7002));nodes.add(new HostAndPort(192.168.197.132, 7003));nodes.add(new HostAndPort(192.168.197.132, 7004));nodes.add(new HostAndPort(192.168.197.132, 7005));nodes.add(new HostAndPort(192.168.197.132, 7006));JedisCluster cluster new JedisCluster(nodes);// 执行JedisCluster对象中的方法方法和redis指令一一对应。cluster.set(test1, test111);String result cluster.get(test1);System.out.println(result);
//存储List数据到列表中cluster.lpush(site-list, java);cluster.lpush(site-list, c);cluster.lpush(site-list, mysql);
// 获取存储的数据并输出ListString list cluster.lrange(site-list, 0 ,2);for(int i0; ilist.size(); i) {System.out.println(列表项为: list.get(i));}
// 程序结束时需要关闭JedisCluster对象cluster.close();System.out.println(集群测试成功);}
}注意使用非本机连接前先要修改集群中的每个服务器的redis.conf文件至于修改什么我在这篇博客中已经讲过所以不再赘述。 最后
本篇博客对redis集群理论和搭建就到这里了如果本篇博客对你有帮助的话请点赞收藏支持一下谢谢答应我不要白嫖好吗哈哈哈咱们下篇博客见。
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/web/87720.shtml
如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!