redis的主从复制

实验背景

主机名 ip 身份
server1 172.25.55.1 主redis服务器
server2 172.25.55.2 从redis服务器

关闭两台虚拟机的防火墙与内核级防火墙。

  • Redis 是一个开源(BSD许可)的,内存中的数据结构存储系统,它可以用作数据库、缓存和消息中间件。 它支持多种类型的数据结构,如 字符串(strings), 散列(hashes), 列表(lists), 集合(sets), 有序集合(sorted sets) 与范围查询, bitmaps, hyperloglogs 和 地理空间(geospatial) 索引半径查询。 Redis 内置了 复制(replication),LUA脚本(Lua scripting), LRU驱动事件(LRU eviction),事务(transactions) 和不同级别的 磁盘持久化(persistence), 并通过 Redis哨兵(Sentinel)和自动 分区(Cluster)提供高可用性(high availability)。

主要机制

  • 当一个 master 实例和一个 slave 实例连接正常时, master 会发送一连串的命令流来保持对 slave 的更新,以便于将自身数据集的改变复制给 slave , :包括客户端的写入、key 的过期或被逐出等等。

  • 当 master 和 slave 之间的连接断开之后,因为网络问题、或者是主从意识到连接超时, slave 重新连接上 master 并会尝试进行部分重同步:这意味着它会尝试只获取在断开连接期间内丢失的命令流。

  • 当无法进行部分重同步时, slave 会请求进行全量重同步。这会涉及到一个更复杂的过程,例如 master 需要创建所有数据的快照,将之发送给 slave ,之后在数据集更改时持续发送命令流到 slave 。

复制原理:
每一个 Redis master 都有一个 replication ID :这是一个较大的伪随机字符串,标记了一个给定的数据集。每个 master 也持有一个偏移量,master 将自己产生的复制流发送给 slave 时,发送多少个字节的数据,自身的偏移量就会增加多少,目的是当有新的操作修改自己的数据集时,它可以以此更新 slave 的状态。复制偏移量即使在没有一个 slave 连接到 master 时,也会自增,所以基本上每一对给定的 Replication ID, offset都会标识一个 master 数据集的确切版本。

  • redis的使用:微博,点赞、关注、粉丝数(如果使用数据库要频繁刷盘,慢,浪费资源)。秒杀也是使用redis,少一个去一个,最终要与数据库比对,查看数据。

一、主库的配置

[root@server1 ~]# ls
redis-5.0.3.tar.gz
[root@server1 ~]# tar zxf redis-5.0.3.tar.gz 
[root@server1 ~]# cd redis-5.0.3
[root@server1 redis-5.0.3]# ls
[root@server1 redis-5.0.3]# yum install gcc gcc-c++ -y

[root@server1 redis-5.0.3]# make && make install

redis的主从复制_第1张图片

[root@server1 redis-5.0.3]# cd utils/
[root@server1 utils]# ./install_server.sh

redis的主从复制_第2张图片

[root@server1 utils]# vim /etc/redis/6379.conf

  70 bind 0.0.0.0
 187 databases 16(可设置数据库个数)

二、从库的配置

安装步骤与主库相同
[root@server2 utils]# vim /etc/redis/6379.conf
	  70 bind 0.0.0.0
	 187 databases 16
	1380 slaveof 172.25.55.1 6379
[root@server2 utils]# systemctl start redis_6379(开启服务)

redis的主从复制_第3张图片

测试

在这里插入图片描述
从库可查看到主库设置的name。
在这里插入图片描述
此外,redis的从服务器是不允许写入的:
在这里插入图片描述

你可能感兴趣的:(运维,redis)