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了