接上文搭建redis文章,这章搭建redis主从
什么是redis主从
Redis 主从复制是一种数据复制和同步机制,用于在多个 Redis 实例之间实现数据的自动同步。主从复制通过将一个 Redis 服务器(主服务器)的数据复制到多个其他 Redis 服务器(从服务器)上,以实现数据的备份、读写分离、负载均衡等目的。
在 Redis 主从复制中,主服务器负责处理写操作(写入和更新数据),同时将已处理的写操作同步到所有从服务器上。从服务器则负责处理读操作,它们接收主服务器发送过来的写操作,并根据这些操作更新自己的数据副本,以保持与主服务器数据的一致性。
通过配置 Redis 主从复制,可以提高系统的可扩展性和可靠性,同时降低单点故障的风险,并使系统更具备容错能力。
主从优点
1. **高可用性**:通过主从复制,即使主服务器出现故障,从服务器仍然可以继续提供读取服务,降低系统宕机的风险,增加系统的可用性。
2. **读写分离**:主从复制允许从服务器处理读操作,从而减轻主服务器的负担,并提高系统的读取性能和吞吐量。
3. **数据备份**:通过主从复制,从服务器保存了主服务器的完整数据副本,可以作为数据备份,以防止意外数据丢失。
4. **容灾恢复**:当主服务器发生故障时,可以快速将一个从服务器提升为新的主服务器,实现快速的容灾切换和数据恢复。
5. **负载均衡**:可以通过在多个从服务器上分担读取请求,实现负载均衡,提高系统整体的性能和稳定性。
6. **延迟复制**:可以配置从服务器的延迟复制,以应对误操作或数据意外删除等情况,从而保护数据不受损坏。
redis群集搭建
杀死reids-server进程
[root@node01 redis]# killall redis-server
创建文件夹在/etc/redis/cluter,下创建{7000..7005}.
[root@node01 redis]# mkdir /etc/redis/cluster
[root@node01 cluster]# mkdir {7000..7005}
将conf文件复制进7000下,并编辑。
[root@node01 cluster]# cp /etc/redis/redis.conf 7000
[root@node01 cluster]# vim 7000/redis.conf
更改端口,并打开aof,打开群集系统功能
其他节点如此操作;
[root@node01 cluster]# cp 7000/redis.conf 7001/
[root@node01 cluster]# cp 7000/redis.conf 7002/
[root@node01 cluster]# cp 7000/redis.conf 7003/
[root@node01 cluster]# cp 7000/redis.conf 7004/
[root@node01 cluster]# cp 7000/redis.conf 7005/
[root@node01 cluster]# sed -i "s/7000/7001/g" 7001/redis.conf
[root@node01 cluster]# sed -i "s/7000/7002/g" 7002/redis.conf
[root@node01 cluster]# sed -i "s/7000/7003/g" 7003/redis.conf
[root@node01 cluster]# sed -i "s/7000/7004/g" 7004/redis.conf
[root@node01 cluster]# sed -i "s/7000/7005/g" 7005/redis.conf
启动创建的redis
[root@node01 cluster]# redis-server 7000/redis.conf
[root@node01 cluster]# redis-server 7001/redis.conf
[root@node01 cluster]# redis-server 7002/redis.conf
[root@node01 cluster]# redis-server 7003/redis.conf
[root@node01 cluster]# redis-server 7004/redis.conf
[root@node01 cluster]# redis-server 7005/redis.conf
查看redis启动信息
ss -anpt | grep redis
下载redis群集工具包
[root@node01 redis]# yum -y install ruby
[root@node01 cluster]# gem install redis --version 3.3.0
制作群集(主+从) 会设置每个主配置一个从服务器
[root@node01 cluster]# redis-cli --cluster create 192.168.20.130:7000 192.168.20.130:7001 192.168.20.130:7002 192.168.20.130:7003 192.168.20.130:7004 192.168.20.130:7005 --cluster-replicas 1
注:如果节点报错,可删除/var/lib/redis下以nodes开头的信息,重新启动服务
检测节点详细信息(只需设置其中一个节点即可查看整个集群信息)
[root@node01 cluster]# redis-cli --cluster check 192.168.20.130:7000
查看简要信息:
[root@node01 cluster]# redis-cli --cluster info 192.168.20.130:7000
如果想新添加从节点;
[root@node01 cluster]# mkdir 7006
[root@node01 cluster]# cp 7001/redis.conf 7006/
[root@node01 cluster]# sed -i "s/7001/7006/g" 7006/redis.conf
[root@node01 cluster]# grep "7006" 7006/redis.conf
port 7006
appendfilename "appendonly-7006.aof"
cluster-config-file nodes-7006.conf
[root@node01 cluster]# redis-server 7006/redis.conf
[root@node01 cluster]# ss -anpt | grep 7006
LISTEN 0 511 192.168.20.130:17006 0.0.0.0:* users:(("redis-server",pid=39031,fd=10))
LISTEN 0 511 192.168.20.130:7006 0.0.0.0:* users:(("redis-server",pid=39031,fd=6))
LISTEN 0 511 [::1]:17006 [::]:* users:(("redis-server",pid=39031,fd=11))
LISTEN 0 511 [::1]:7006 [::]:* users:(("redis-server",pid=39031,fd=7))
将该节点加入集群作为从的身份,以7000为主。
[root@node01 cluster]# redis-cli --cluster add-node 192.168.20.130:7006 192.168.20.130:7000 --cluster-slave
添加新的主节点
[root@node01 cluster]# mkdir 7007
[root@node01 cluster]# cp 7001/redis.conf 7007/
[root@node01 cluster]# sed -i "s/7001/7007/g" 7007/redis.conf
[root@node01 cluster]# redis-server 7007/redis.conf
[root@node01 cluster]# ss -anpt | grep 7007
LISTEN 0 511 192.168.20.130:17007 0.0.0.0:* users:(("redis-server",pid=39249,fd=10))
LISTEN 0 511 192.168.20.130:7007 0.0.0.0:* users:(("redis-server",pid=39249,fd=6))
LISTEN 0 511 [::1]:17007 [::]:* users:(("redis-server",pid=39249,fd=11))
LISTEN 0 511 [::1]:7007 [::]:* users:(("redis-server",pid=39249,fd=7))
[root@node01 cluster]# redis-cli --cluster add-node 192.168.20.130:7007 192.168.20.130:7000
[root@node01 cluster]# redis-cli --cluster check 192.168.20.130:7000 查看群集信息
由于是新添加的主节点,没有槽点,需要重新分配哈希槽点
哈希槽点;
哈希槽(Hash Slot)是Redis集群中用于数据分片的基本单位,Redis集群将整个数据集划分为16384个哈希槽。每个键都会被映射到这16384个哈希槽中的一个,从而实现数据在集群节点之间的均匀分布和负载均衡。
在Redis集群中,每个节点负责处理其中一部分哈希槽的数据。当客户端发送命令访问某个键时,Redis根据键计算哈希槽的位置,并将请求发送到负责该哈希槽的节点上进行处理。这样可以实现数据的分布式存储和查询,提高了系统的扩展性和可用性。
使用哈希槽可以使得Redis集群在动态扩容或缩容时更加灵活,因为只需要迁移部分哈希槽对应的数据即可,而不需要对整个数据集进行重新分片。此外,哈希槽还有利于实现数据的负载均衡,避免某些节点负载过重或数据倾斜的情况发生。
[root@node01 cluster]# redis-cli --cluster reshard 192.168.20.130:7000
被询问需要分配多少槽点(根据主节点数量计算)16384/主节点数量
添加新添加的节点id(check查看)
是否执行此计划(yes)
查看所有节点信息,是否分配槽点(4096)
删除7006从节点,将其加入给7007
因为上无槽点,所以可以直接删除
[root@node01 cluster]# redis-cli --cluster add-node 192.168.20.130:7006 192.168.20.130:7000 --cluster-slave --cluster-master-id 7349b971e58af1982f645b3c6824c5f8dca3382f
格式:添加的节点ip 群集 给哪个主机设置从的master id