一、配置主从模式
用一台Linux配置3台redis实例 端口号分别为 6380、6381、6382
1创文件夹.
在/usr/redis下创建一个目录myredis,用来放我们的三个redis实例。(这里我的reids是提前解压到了/usr这个目录下面)
mkdir /usr/redis/myredis
2.创建配置文件
在该目录下创建3台主机的配置文件(直接用cp指令从redis安装目录中复制过来即可)文件名分别为reids6380.conf、reids6381.conf、reids6382.conf,分别以端口号命名。
cp /usr/redis/redis-5.0.5/redis.conf /usr/redis/myredis/reids6380.conf
cp /usr/redis/redis-5.0.5/redis.conf /usr/redis/myredis/reids6381.conf
cp /usr/redis/redis-5.0.5/redis.conf /usr/redis/myredis/reids6382.conf
这3个文件就代表我们的三个redis实例。用ll指令查看 /usr/redis/myredis 目录能发现已经存在三个实例如下图。
3.配置信息
修改实例中的配置信息改六处地方。
三个实例都需要修改,这里以6380为例作为修改。输入指令 vim/usr/redis/myredis/redis6380.conf进入编辑,找到下面六个地方,按 i 进行修改。
:69 bind 192.168.48.142 bind后面跟虚拟机的ip,表示绑定这个ip
:92 port 6380 实例端口号
:136 daemonize yes daemonize守护进程(daemon)的方式运行,yes后台no前台
:158 pidfile /var/run/redis_6380.pid pidfile指定 Redis 服务器进程的 PID 文件的路径 ,这里只要改里面的端口号就行啦
:253 dbfilename dump6380.rdb 持久化数据库的文件,同样加上端口号就行
:699 appendonly yes 持久化 Redis, 将开始记录所有对数据的写操作到一个名为 appendonly.aof
的文件中,改成yes就行。
绿色的数字代表行号,不同版本的reids对应的行号可能不一致,这里建议直接”/“搜关键词来找。
配置完成后:wq 退出。其余两台使用同样的配置方式进行配置。
4.启动三台redis实例并连接
用后台启动方式分别启动三台实例
/usr/redis/bin/redis-server /usr/redis/myredis/redis6380.conf
/usr/redis/bin/redis-server /usr/redis/myredis/redis6381.conf
/usr/redis/bin/redis-server /usr/redis/myredis/redis6382.conf
这里是将后面每个实例的配置文件当成参数传进redis-server文件中进行启动
连接实例的时候建议分成三个窗口来连接,便于观察。这里我用的finalshell,直接复制窗口,其他的shell也可以进行类似的操作。
分别在三个窗口输入如下连接命令,连接三个实例,并且ping一下,如果出现pong代表成功连通。
-h 选项表示ip地址,-p 代表要连接的实例的端口号。
/usr/redis/bin/redis-cli -h 192.168.73.132 -p 6380
/usr/redis/bin/redis-cli -h 192.168.73.132 -p 6381
/usr/redis/bin/redis-cli -h 192.168.73.132 -p 6382
下图展示了6380连接成功图,其余两个实例也一样。
5.查看三台服务器的运行情况,
查看信息指令主要用以下三条:
info 显示当前redis实例运行情况
info replication 显示主从角色信息
info keyspace 显示key分布情况
因为我们是建立主从关系,所以主要看主从角色信息,三台服务器分别输入 info replication
注意看上图,role代表角色,connected_slaves表示连接了几个从服务器;可以看见三台服务器都是master,都没有连接从服务器。
接下来建立主从关系,我们想要的是6380为主,6381,6382是他的从服务器,所以需要在两个从服务器中执行 slaveof <ip> <port> 这条指令,表示当哪个服务器的从属。返回ok代表成功。
192.168.73.132:6381> SLAVEOF 192.168.73.132 6380
192.168.73.132:6382> SLAVEOF 192.168.73.132 6380
在两台从服务器上执行 info replication 可以发现role都变成了slave,并且指出了他的主服务器。
6,测试主从关系
此时,我们就实行了主从关系的配置。测试发现,主机有读写功能,从机只有读功能,没有写功能。
192.168.73.132:6380> set a 1
192.168.73.132:6380> get a
192.168.73.132:6381> set b 2
192.168.73.132:6381> get a
注意点:
当主机服务器关闭了后再重启是没有什么问题的,但是从机服务器重启后设置的主从关系会掉,需要重新在重启后的从服务器上使用 slaveof 192.168.73.132 3680 来重新建立主从关系。
二配置哨兵实例
建立实例并配置:
在自定义的/myredis目录下新建sentinel.conf文件,建议从redis源目录文件下复制过来,同时建议再新开一个窗口方便我们待会观察主机宕机后,哨兵服务器进中日志的内容。
cp /usr/redis/redis-6.2.4/sentinel.conf /usr/redis/myredis/
修改哨兵配置:修改以下配置,如果被注释了就把注释符删掉
port 26379
设置 Sentinel 节点的监听端口号为 26379。
sentinel announce-ip 192.168.173.132
指定 Sentinel的 IP 地址。在某些情况下,Sentinel 节点可能无法正确检测到其自己的公共 IP 地址。这个选项允许我们手动指定 Sentinel 节点应该使用的 IP 地址。
sentinel monitor mymaster 192.168.73.132 6380 1
指定了 Sentinel 要监控的 Redis 主节点的信息。mymaster
是这个主节点的名字,根据需要自定义。后面是主节点的 IP 地址和端口号。Sentinel 将定期检查这个主节点是否可达,并在检测到故障时执行故障转移. 后面的1表示有几个Sentinel判断主机宕机,就算客观上的宕机,这里我们只有一个监视者,所以就写1. 如果有三个可以写2.
sentinel down-after-milliseconds mymaster 10000
指定了 Sentinel在将主节点标记为不可达之前,应该等待的时间长度(以毫秒为单位)。如果 Sentinel 节点在 10000 毫秒(即 10 秒)内没有收到主节点的有效响应,它将认为主节点已宕机。
sentinel failover-timeout mymaster 60000 (在这整个配置中可以不用配置他)
指定了 Sentinel 执行故障转移时的超时时间(以毫秒为单位)。如果在这个时间内没有成功完成故障转移,Sentinel 节点将停止尝试,并可能需要手动干预。在这个例子中,超时时间设置为 60000 毫秒(即 60 秒)
dir /tmp
指定了 Sentinel 的工作目录,即 Sentinel 用来存储持久化文件(如配置文件的备份)的目录。
这样,我们的监控着就配置完成了。
启动哨兵:
这里没有设置后台启动,直接前台启动,方便我们待会观察主机宕机后的变化
/usr/redis/bin/redis-sentinel /usr/redis/myredis/sentinel.conf
如所示,现在可以监听到主服务器,和他的两个从服务器
接着我们切换到主服务器的窗口,将主服务器宕机,切换回哨兵窗口观察日志。
在主服务器宕机后,哨兵检测到主节点故障并进行故障转义。
+sdown:主节点主管下线
+odown:主节点客观下线
quorum:达到法定人数的Sentinel 节点都认为该主节点不可达
+try-failover:尝试进行故障转移
+selected-slave :选择了新的节点即(6382)为主节点
上图可看出哨兵选出了6382为主服务器,并且把6380、6381变成了6382的从服务器