实验背景
主机名 | 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
[root@server1 redis-5.0.3]# cd utils/
[root@server1 utils]# ./install_server.sh
[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(开启服务)
测试
从库可查看到主库设置的name。
此外,redis的从服务器是不允许写入的: