【经验与坑】搭建Redis主从复制
什么是主从复制?
即主机数据更新后根据配置和策略,自动同步到备机的 master->slave 机制中,其中Master以写为主,Slave以读为主。
这种架构的优点:
读写分离:假如只有一台server的话,读和写都在这一台server中进行,这台server的压力十分巨大,会导致宕机的危险。
容灾快速恢复:在客户端读取的场景下,如果某一个从服务器挂掉了,不用慌张,因为还有另外两台内容完全一致的从服务器供客户使用。在学习的过程中可能会有疑问,为什么只能有一个主服务器,用一个生动的比喻来解释这个疑问,就是一个团队只能有一个领导,有好几个老大的话,下属听谁的这也是一个问题,可能会导致团队的命令崩溃。所以只能是 “一主多从” 的架构模式。
如何配置主从复制
方便起见,使用轻量云服务器进行配置。
这里只是用一台服务器通过变换端口号设置了三台伪集群redis服务器。
1.在根目录下创建 /myredis 文件夹
mkdir /myredis
2.复制 redis.conf 配置文件到文件夹中
cp /etc/redis.conf /myredis/redis.conf
3.配置一主两从,创建三个配置文件
根据不同的端口号来命名文件
例如 redis16751.conf redis16752.conf redis16753.conf
4.在三个配置文件写入内容
首先把公共部分的 conf 文件中的redis持久化设置为no
拓展一下:redis可以实现数据的持久化存储,也就是把数据存在磁盘上。Redis的持久化存储有两种方式:RDB(默认配置)和AOF(手动开启)
目前Redis的配置中默认是关闭AOF模式的。
下一步,配置每个文件的具体内容
include /myredis/redis.conf
pidfile /var/run/redis_16751.pid
port 16751
dbfilename dump16751.rdb
以同样的方式创建另外两个配置文件。
下一步:启动三台redis服务器
这样启动之后,三台服务器之间是没有关系的,通过连接redis客户端输入命令:
info replication
来查看当前服务器的状态属性等。
其他两个服务器现在也是 master 状态。
下一步配置从(库)不用配主(库),命令:
slaveof <ip> <port>
成为 <ip><port> 实例的从服务器
实践:在 16752 和 16753上执行命令:
slaveof 127.0.0.1 16751
使其成为 16751 的从服务器。
同样的方式配置16753。
验证主从读写机制:
在主服务器中测试写入
两台从服务器已成功复制了数据
而且,在从服务器中是无法写入数据的。
报错信息:
(error) READONLY You can't write against a read only replica.