深圳新站优化,中铁建设集团用户登录,湛江网站建设方案推广,建筑工程网站源码主从集群 主从模式中#xff0c;包括一个主节点#xff08;Master#xff09;和一个或多个从节点#xff08;Slave#xff09;。主节点负责处理所有写操作和读操作#xff0c;而从节点则复制主节点的数据#xff0c;并且只能处理读操作。当主节点发生故障时#xff0c;…主从集群 主从模式中包括一个主节点Master和一个或多个从节点Slave。主节点负责处理所有写操作和读操作而从节点则复制主节点的数据并且只能处理读操作。当主节点发生故障时可以将一个从节点升级为主节点实现故障转移需要手动实现。 以下是实现Redis主从集群的基本步骤
1. 安装Redis
相信学到这里的人已经安装了redis就不演示了。
2. 配置主服务器
编辑主服务器的配置文件通常是redis.conf确保以下设置如果已经设置则无需更改
bind指定Redis服务器绑定的IP地址。
portRedis服务器监听的端口号默认为6379。
logfile指定日志文件的路径。
dir指定Redis数据库文件的存储目录。
daemonize yes 守护进程修改为yes后即可后台运行
requirepass sdg734密码设置后访问Redis必须输入密码
3. 配置从服务器
对于每个从服务器编辑其配置文件并执行下面的命令
slaveof masterip masterport这里masterip是主服务器的IP地址masterport是主服务器监听的端口号。
其他配置如bind、requiredpass根据需要进行设置。
4. 启动Redis服务器
在所有服务器上启动Redis服务。你可以使用Redis自带的启动脚本或者通过命令行直接启动Redis服务器。
5. 验证配置
在主服务器上使用INFO replication命令查看复制信息确认没有错误。
在从服务器上同样使用INFO replication命令查看从服务器是否成功连接到主服务器并正在接收数据。
总结主从复制的有点在于好构建简单易用适合用于读多写少的场景。缺点在于不具备故障自动转移的能力没有容错和不能做恢复。
哨兵集群 为了解决主从模式的无法自动容错及恢复的问题Redis 引入了一种哨兵模式的集群架构。 哨兵模式是在主从复制的基础上加入了哨兵节点。哨兵节点是一种特殊的 Redis 节点用于监控主节点和从节点的状态。当主节点发生故障时哨兵节点可以自动进行故障转移选择一个合适的从节点升级为主节点并通知其他从节点和应用程序进行更新。 1. 配置Redis实例
在每台选定的Redis服务器上安装Redis。修改redis.conf文件设置不同的端口号例如6379, 6380, 6381等以及配置持久化如RDB或AOF根据你的需求。配置从服务器以连接到主服务器。在从服务器的redis.conf文件中添加slaveof master-ip master-port。
配置持久化
# 开启RDB
# save
save 3600 1
save 300 100
save 60 10000# 关闭AOF
appendonly no
2. 配置哨兵
在每台选定的哨兵服务器上创建哨兵配置文件例如sentinel.conf。
在哨兵配置文件中为每个哨兵实例定义要监控的主Redis服务器。例如
sentinel monitor mymaster master-ip master-port quorum
其中quorum是执行故障转移操作所需的最小哨兵数。
设置哨兵的其他相关参数如down-after-milliseconds哨兵认为Redis服务器不可用的时间failover-timeout故障转移超时时间等。确保所有哨兵配置文件都是一致的。
3. 启动Redis实例和哨兵
在每台Redis服务器上启动Redis实例。
在每台哨兵服务器上启动哨兵进程通常是通过运行redis-sentinel sentinel.conf命令。
4. 验证和测试
使用redis-cli连接到哨兵实例并使用SENTINEL masters命令查看哨兵监控的主服务器列表。故意停止主Redis服务器观察哨兵是否会自动将其中一个从服务器提升为主服务器并更新其他从服务器和哨兵的配置。使用SENTINEL slaves mymaster查看当前主服务器的从服务器列表验证从服务器是否已正确连接到新的主服务器。
5. 原理
哨兵节点定期向所有主节点和从节点发送 PING 命令如果在指定的时间内未收到 PONG 响应哨兵节点会将该节点标记为主观下线。如果一个主节点被多数默认是超过哨兵节点数的一半哨兵节点标记为主观下线那么它将被标记为客观下线。
当主节点被标记为客观下线时哨兵节点会触发故障转移过程。它会从所有健康的从节点中选举一个新的主节点
并将所有从节点切换到新的主节点实现自动故障转移。同时哨兵节点会更新所有客户端的配置指向新的主节点。
哨兵节点通过发布订阅功能来通知客户端有关主节点状态变化的消息。客户端收到消息后会更新配置将新的主节点信息应用于连接池从而使客户端可以继续与新的主节点进行交互。
分片集群 Redis将数据自动分片到多个部分每个部分都有一个主节点和多个从节点。 1. 准备Redis配置文件
在每台服务器上你都需要一个Redis配置文件通常是redis.conf。你可以从Redis的源代码或安装目录复制一个配置文件作为起点。 示例配置文件redis-6379.conf:
# 绑定到服务器的IP地址或者注释掉这一行以监听所有地址
# bind 127.0.0.1 # 设置端口
port 6379 # 开启集群模式
cluster-enabled yes # 集群配置文件名称Redis会自动创建和更新这个文件
cluster-config-file nodes-6379.conf # 集群节点超时时间
cluster-node-timeout 5000 # 开启AOF或RDB持久化根据你的需求选择
appendonly yes 你需要为每台服务器上的Redis实例修改port和cluster-config-file的值以确保它们不会冲突。
2. 启动Redis实例
在每台服务器上使用redis-server命令启动Redis实例并指定配置文件。
# 在服务器1上
redis-server /path/to/redis-6379.conf # 在服务器2上
redis-server /path/to/redis-6380.conf
...
3. 创建Redis集群
在任意一台服务器上使用redis-cli的--cluster选项来创建集群。你需要指定所有Redis实例的地址和端口。
# 假设所有服务器都可以通过IP地址192.168.x.y访问并且Redis实例分别运行在6379, 6380, ..., 6384端口
redis-cli --cluster create 192.168.x.1:6379 192.168.x.2:6380 192.168.x.3:6381 192.168.x.4:6382 192.168.x.5:6383 192.168.x.6:6384 --cluster-replicas 1
这里的--cluster-replicas 1表示我们想要每个主节点有一个从节点。Redis Cluster会自动分配从节点到主节点。
4. 验证集群
在任意Redis实例上使用redis-cli连接到集群并检查集群的状态。
redis-cli -c -h 192.168.x.1 -p 6379 CLUSTER INFO CLUSTER NODES
-c选项表示启用集群模式允许redis-cli自动重定向命令到正确的节点。
为了测试集群是否配置正确你可以尝试在集群中设置和获取键值对。
SET mykey Hello, Redis Cluster! GET mykey 5. 原理
在 Redis 的 分片集群模式中使用哈希槽hash slot的方式来进行数据分片将整个数据集划分为多个槽每个槽分配给一个节点。客户端访问数据时先计算出数据对应的槽然后直接连接到该槽所在的节点进行操作在该模式下提供了自动故障转移、数据迁移和扩缩容等功能能够比较方便地管理一个大规模的 Redis 集群。 整个数据集划分为 16384 个槽每个槽都有一个编号016383集群的每个节点可以负责多个 hash 槽客户端访问数据时先根据 key 计算出对应的槽编号然后根据槽编号找到负责该槽的节点向该节点发送请求。
在 Redis 的每一个节点上都有这么两个东西一个是槽slot它的的取值范围是0-16383。还有一个就是 cluster可以理解为是一个集群管理的插件。当我们的存取的 Key 的时候Redis 会根据 CRC16 算法得出一个结果然后把结果对 16384 求余数这样每个 key 都会对应一个编号在 0-16383 之间的哈希槽通过这个值去找到对应的插槽所对应的节点然后直接自动跳转到这个对应的节点上进行存取操作。
redis的分片集群具有以下特点1.提升性能和吞吐量通过在多个节点上分散数据可以并行处理更多的操作从而提升整体的性能和吞吐量。这在高流量场景下尤其重要因为单个节点可能无法处理所有请求。2.提高可扩展性分片使得 Redis 可以水平扩展。可以通过添加更多节点扩展数据库的容量和处理能力。3.更好的资源利用分片允许更有效地利用服务器资源。每个节点只处理数据的一部分这降低了单个节点的内存和计算需求。4.避免单点故障在没有分片的情况下如果唯一的 Redis 服务器发生故障整个服务可能会停止。在分片的环境中即使一个节点出现问题其他节点仍然可以继续运行。5.数据高可用性在某些分片策略中如 Redis 集群每个分片的数据都可以在集群内的其他节点上进行复制。这意味着即使一个节点失败数据也不会丢失从而提高了系统的可用性。