Linux 之 Redis

一、安装redis

1. 获取安装包并解压

这里使用5.0.4版本,最新版为5.0.5,尝试安装发现有很多问题,makefile文件似乎不完整

2. make

确保安装了编译器yum install gcc

make

3. 安装

make install

 

安装redis服务 默认6379端口

查看端口

netstat -antulpe | grep redis

默认绑定本地6379端口

修改配置文件,更改绑定ip端口

vim /etc/redis/6379.conf 

重启服务

刚才修改的绑定ip端口已生效

依照刚才操作,在server2也安装redis

 

二、Redis主从复制

配置server2为server1的slave

在server2更改配置文件

vim /etc/redis/6379.conf

 重启服务

 测试:

在server1利用redis-cli工具输入数据

在server2读取

可以看到,server1写入的数据,server2已经复制了(注:server2为slave节点,只读,无法写入)

 

三、Redis高可用(哨兵)

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

  • 监控(Monitoring): Sentinel 会不断地检查你的主服务器和从服务器是否运作正常。
  • 提醒(Notification): 当被监控的某个 Redis 服务器出现问题时, Sentinel 可以通过 API 向管理员或者其他应用程序发送通知。
  • 自动故障迁移(Automatic failover): 当一个主服务器不能正常工作时, Sentinel 会开始一次自动故障迁移操作, 它会将失效主服务器的其中一个从服务器升级为新的主服务器, 并让失效主服务器的其他从服务器改为复制新的主服务器; 当客户端试图连接失效的主服务器时, 集群也会向客户端返回新主服务器的地址, 使得集群可以使用新主服务器代替失效服务器。

在搭建高可用时,需要用到三个节点,所以我们再创建一台虚拟机安装redis

配置server3也是server1的slave

 

修改哨兵配置文件

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.4/sentinel.conf --sentinel

全部开启后:

server1

server2

server3

 

测试:

远程连接server1

查看server1的redis状态

手动关闭redis

查看server1哨兵

server2哨兵

server3哨兵

通过哨兵,我们可以看到server3成为了新的master

远程连接server3查看redis状态

 

手动恢复server1的redis

查看server3哨兵

可以看到,server1从down状态恢复,并转换为slave 

 

四、Redis集群

在这里做演示,使用的是单机多实例

搭建集群的第一件事情我们需要一些运行在 集群模式的Redis实例. 这意味这集群并不是由一些普通的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-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

 

测试

可以看到在7000写入test时,重定向到了7001,在7002读取test时,也重定向到7001

也就是说我们实际存储的位置是在7001,down掉7001再来测试

可以看到,还是能访问数据,但是是在7003取的数据

7003是7001的slave节点,7001节点down了,7003升级为master

再down掉7003

显然,因为数据都存储在master:7001和slave:7003,所以获取不到数据,提示down

再开启刚关闭的节点

第一次开启7001,仍然访问不到,因为刚才7003已经切换为master,而默认会去找master,所以会提示down,

再开启7003,此时可以访问到,且提示重定向到7003了