redis的集群:主从复制、哨兵
主从复制
什么是主从复制?
在Redis中,通过执行SLAVEOF命令或者通过配置文件设置slaveof选项,就可以让一台服务器去复制另一台服务器,其中被复制的服务器叫做主服务器(master),而对主服务器进行复制的服务器叫做从服务器(slave),从而实现当主服务器中的数据更新后,根据配置和策略自动同步到从服务器上。master以写为主,salve以读为主。
一个简单的主从复制
例子:
创建三个redis服务 A B C地址分别位 6379 6380 6381 .conf
#创建三个服务 (本机只有6379)
#查看 (只有6379)
cd /etc/redis/
cd
#找到redis安装目录下的utils目录
cd/soft/redis-6.0.8/utils
#创建服务
./install_server.sh
#直接输入 6380 利用同样方法创建6381
#开三个服务 分别进入
redis-cli -p 6379
redis-cli -p 6380
redis-cli -p 6381
#进入6380 客户端服务器B 执行以下命令
SLAVEOF 127.0.0.1 6379
#进入6380 客户端服务器C同样执行以下命令
SLAVEOF 127.0.0.1 6379
此时可以看到B 和C数据和A同步
发现问题:
如果在B上面对name进行操作不能实现
只能在A上操作
因为我们前面说过 主从复制master以写为主 slave以读为主。
#可以通过info replication查看当前服务器的主从复制信息
info replication
作用:
- 为一个数据提供多个副本 使得高可用。分布式成为可能
- 扩展redis的读性能 ,可以实现读写分离
主从复制功能
- 一个master可以有多个slave
- 一个slave只能有一个master
- 数据流是单向的 从master到salve
- Redis采用异步复制,从服务器会以每秒一次的频率向主服务器报告复制流的处理进度
- 在进行复制的时候,复制功能不会阻塞主服务器
- 如果主节点B成为另一个主节点A的从节点,那么主节点B之前保存的数据将会被清除,同步主节点A的数据,数据库状态将与主节点A保持一致
主从复制配置
这是slaveof ip 端口命令来配置主从复制
slaveof 127.0.0.1 6379
如果从服务器不希望成为祝福我的一个从节点 ,而是希望成为一个主节点,则可以取消复制
slaveof on one
修改配置文件实现主从复制
#先找到conf文件 这里用6380 为例
cd /etc/redis/
ll
vi 6380.conf
#设置端口
port 6380
#设置后台进程运行Redis
daemonize yes
#设置进程ID文件
pidfile /var/run/redis_6380.pid
#设置日志文件名
logfile "6380.log"
#把持久化关掉
save 900 1
save 300 10
save 60 10000
#设置rdb文件名
dbfilename dump6380.rdb
复制功能的实现步骤
- 通过SLAVEOF命令设置主服务器的IP地址和端口号
- 主从服务器之间建立套接字连接
- 从服务器向主服务器发送PING命令
- 根据从服务器的配置决定是否进行身份验证
- 从服务器向主服务器发送端口信息
- 从服务器向主服务器发送PSYNC命令完成同步功能
- 主从服务器之间进行命令传播,进而维持数据库状态的一致性
redis的读写分离
读写分离将master上的数据同步给slave 让slave分摊去执行相关的业务。
问题:
- 复制数据延误
- 读到一些过期数据
- 发生读写故障
哨兵
redis-server ./26381.conf --sentinel
port 26379
sentinel moniter mymaster 127.0.0.1 26379 2