分享

Redis ~ 数据库的几种常见用法(主从复制、高可用、集群)

 昵称70781666 2020-07-06

Table of Contents


1. Redis简介

Redis是一个开源的内存中数据结构存储,它可以用作数据库、缓存和消息代理。与memcached一样,为了保证效率,数据都是缓存在内存中。区别的是redis会周期性的把更新的数据写入磁盘或者把修改操作写入追加的记录文件,并且在此基础上实现了master-slave(主从)复制。

Redis支持主从复制。数据可以从主服务器向任意数量的从服务器上同步,从服务器可以是关联其他从服务器的主服务器。这使得Redis可执行单层树复制。存盘可以有意无意的对数据进行写操作。由于完全实现了发布/订阅机制,使得从数据库在任何地方同步树时,可订阅一个频道并接收主服务器完整的消息发布记录。同步对读取操作的可扩展性和数据冗余很有帮助。

2. Redis配置

  • 解压安装包

  • make 

  • make install

  • 安装redis服务,使用默认6379端口以及默认文件名称

  • 查看端口

netstat -antulpe | grep redis

默认绑定的本地的6379端口,这样就违背了我们想使用它的初衷了。

  • 修改配置文件,更改绑定接口

vim /etc/redis/6379.conf

打开所有接口的6379端口

  • 重启redis服务,并查看端口信息

/etc/init.d/redis_6379 restart   # 重启服务
netstat -antulpe | grep redis    # 查看端口信息

可以看到,我们刚才修改的接口信息已经生效。接下来我们将node2也配置一下,如上步骤,不赘余。

3. Redis主从复制

3.1 配置node2为node1的slave

  • 更改node2的配置文件

  • 重启服务,查看redis端口信息 

3.2 测试

  • 在node1用redis-cli工具写入数据

  • 在node2用redis-cli读取数据

通过测试可以看到,我们在node1中写入的数据,node2已经复制。但是要注意的是node2为slave节点,即只读节点,无法写入。

4. Redis高可用(哨兵)

在做该实验之前,我们先做好准备工作。之前我们创建了两个节点,一个master节点,一个slave节点。但是在搭建高可用时,我们会用到三个节点,因此我们再创建一个slave节点。步骤如上node2,不赘余。

4.1 Redis简介

Redis 的 Sentinel 系统用于管理多个 Redis 服务器(instance)该系统执行以下三个任务:


通知(Notification):
当被监控的某个 Redis 服务器出现问题时, Sentinel 可以通过 API 向管理员或者其他应用程序发送通知。监控(Monitoring):Sentinel 会不断地检查你的主服务器和从服务器是否运作正常。

自动故障迁移(Automatic failover):当一个主服务器不能正常工作时, Sentinel 会开始一次自动故障迁移操作, 它会将失效主服务器的其中一个从服务器升级为新的主服务器, 并让失效主服务器的其他从服务器改为复制新的主服务器; 当客户端试图连接失效的主服务器时, 集群也会向客户端返回新主服务器的地址, 使得集群可以使用新主服务器代替失效服务器。

4.2 Redis配置

  • 修改哨兵配置文件

vim sentinel.conf

指示 Sentinel 去监视一个名为 mymaster 的主服务器, 这个主服务器的 IP 地址为 192.168.1.11 , 端口号为 6379 , 而将这个主服务器判断为失效至少需要 2 个 Sentinel 同意 (只要同意 Sentinel 的数量不达标,自动故障迁移就不会执行)。

down-after-milliseconds 选项指定了 Sentinel 认为服务器已经断线所需的毫秒数。

接下来就是把三个节点都配置上,可以一个节点接一个节点的配置,也可以直接复制。但是要注意:必须在开启哨兵前复制,因为当开启哨兵后,配置文件中会生成一个session-id,而每个哨兵的id都必须唯一,所以必须在未开启哨兵时复制。

  • 开启哨兵

redis-server /usr/local/redis-5.0.5/sentinel.conf --sentinel

4.3 测试

  • 查看node1的redis状态

  • 关闭node1的redis

  • 查看三个节点的哨兵信息

通过哨兵信息,我们可以看到,master节点已经由node1转换为node2。

  • 查看node2的redis状态

恢复node1的redis,node3查看哨兵状态可以看到,node1恢复,成为node2的从节点

5. Redis集群

5.1 集群的配置 

搭建集群的我们需要一些运行在集群模式的Redis实例. 这意味这集群并不是由一些普通的Redis实例组成的,集群模式需要通过配置启用,开启集群模式后的Redis实例便可以使用集群特有的命令和特性了。

mkdir /usr/local/cluster-test
cd /usr/local/cluster-test/
mkdir 7000 7001 7002 7003 7004 7005

  • 文件夹7000至7005中,创建redis.conf文件 

配置中的端口号(日志,pid文件目录)从 7000 改为与文件夹名字相同的号码

  • 所有集群节点配置完成后开启

redis-server redis.conf

  • 创建集群

redis-cli --cluster create --cluster-replicas 1 127.0.0.1:7000 127.0.0.1:7001 127.0.0.1:7002 127.0.0.1:7003 127.0.0.1:7004 127.0.0.1:7005

其中--cluster-replicas 1表示,一个master配一个slave

5.2 测试

在7000写入test时,重定向到了7001,在7002读取test时,也重定向到7001。也就是说我们实际存储的位置就是在7001上。

  • down掉7001

  • down掉7005

  • 开启关闭的7001

发现开启7001后还是获取不到数据

  • 开启关闭的7005

数据获取成功~没错,我们的master已经重定向到7005,因此7005开启数据复制恢复正常~~

    本站是提供个人知识管理的网络存储空间,所有内容均由用户发布,不代表本站观点。请注意甄别内容中的联系方式、诱导购买等信息,谨防诈骗。如发现有害或侵权内容,请点击一键举报。
    转藏 分享 献花(0

    0条评论

    发表

    请遵守用户 评论公约

    类似文章 更多