1.前置准备:
①Linux版redis-3.2.8单机环境安装
如果对redis的安装配置不是很了解,看一下我的上期教程,对完成此期教程很有帮助
②三台Linux虚拟机
2.主从简介
①主从规划
hadoop01:主
hadoop02:从
hadoop03:从
②职责:
- 主节点
写数据
将变化的数据同步到从节点
读数据(可忽略) - 从节点
读数据
禁止写数据
③作用:读写分离,负载均衡,故障恢复
3.三台机器分别执行以下命令
以hadoop01为例,三台机器分别执行以下命令:
[xiaokang@hadoop01 software]$ tar -zxvf redis-3.2.8.tar.gz
[xiaokang@hadoop01 ~]$ sudo yum -y install gcc-c++
[xiaokang@hadoop01 ~]$ sudo yum -y install tcl
[xiaokang@hadoop01 ~]$ cd /opt/software/redis-3.2.8/
[xiaokang@hadoop01 redis-3.2.8]$ make MALLOC=libc
[xiaokang@hadoop01 redis-3.2.8]$ make install PREFIX=/opt/software/redis-3.2.8
[xiaokang@hadoop01 redis-3.2.8]$ mkdir -p /opt/software/redis-3.2.8/log
[xiaokang@hadoop01 redis-3.2.8]$ mkdir -p /opt/software/redis-3.2.8/data
4.修改配置文件
hadoop01机器上:
[xiaokang@hadoop01 redis-3.2.8]$ vim redis.conf
#第61行,将bind后面的地址改为你的主机地址,我的虚拟机ip已经配置了映射,可以直接填写主机名
bind hadoop01
#第128行,开启守护进程,就是说它会一直在的后台默默地运行
daemonize yes
#第163行,日志文件的配置
logfile "/opt/software/redis-3.2.8/log/redis.log"
#第247行,数据文件的配置
dir /opt/software/redis-3.2.8/data
hadoop02机器上:
[xiaokang@hadoop02 redis-3.2.8]$ vim redis.conf
#第61行,将bind后面的地址改为你的主机地址,我的虚拟机ip已经配置了映射,可以直接填写主机名
bind hadoop02
#第128行,开启守护进程,就是说它会一直在的后台默默地运行
daemonize yes
#第163行,日志文件的配置
logfile "/opt/software/redis-3.2.8/log/redis.log"
#第247行,数据文件的配置
dir /opt/software/redis-3.2.8/data
# 修改第265行,配置hadoop02为第一台服务器的slave节点
slaveof hadoop01 6379
hadoop03机器上:
[xiaokang@hadoop03 redis-3.2.8]$ vim redis.conf
#第61行,将bind后面的地址改为你的主机地址,我的虚拟机ip已经配置了映射,可以直接填写主机名
bind hadoop03
#第128行,开启守护进程,就是说它会一直在的后台默默地运行
daemonize yes
#第163行,日志文件的配置
logfile "/opt/software/redis-3.2.8/log/redis.log"
#第247行,数据文件的配置
dir /opt/software/redis-3.2.8/data
# 修改第265行,配置hadoop03为第一台服务器的slave节点
slaveof hadoop01 6379
5.Redis服务启动
[xiaokang@hadoop01 redis-3.2.8]$ bin/redis-server redis.conf
[xiaokang@hadoop02 redis-3.2.8]$ bin/redis-server redis.conf
[xiaokang@hadoop03 redis-3.2.8]$ bin/redis-server redis.conf
[xiaokang@hadoop01 redis-3.2.8]$ bin/redis-cli -h hadoop01 -p 6379
[xiaokang@hadoop02 redis-3.2.8]$ bin/redis-cli -h hadoop02 -p 6379
[xiaokang@hadoop03 redis-3.2.8]$ bin/redis-cli -h hadoop03 -p 6379
6.测试主从复制
在hadoop01上设置两个kv,查看另外两台机器上是否复制了这两个kv。
hadoop01:6379> keys *
(empty list or set)
hadoop01:6379> set k1 v1
OK
hadoop01:6379> set k2 v2
OK
hadoop01:6379> keys *
1) "k2"
2) "k1"
hadoop02:6379> keys *
1) "k2"
2) "k1"
hadoop03:6379> keys *
1) "k2"
2) "k1"
# 实现了主从复制
7.哨兵简介
哨兵的作用:
-监控:检查master和slave是否正常
-通知:当被监控的服务器出现问题时,向其他哨兵,客户端发送通知
-故障转移:当master出现故障时,断开master与slave的连接,选取一个slave作为master,将其他的slave连接到新的master,并告知客户端新的服务器地址
8.哨兵配置
[xiaokang@hadoop01 redis-3.2.8]$ vim sentinel.conf
# 修改第15行, bind配置,每台机器修改为自己对应的主机名
bind hadoop01
# 在下方添加配置,让sentinel服务后台运行
daemonize yes
# 修改第71行,三台机器监控的主节点,现在主节点是hadoop01服务器
sentinel monitor mymaster hadoop01 6379 2
#远程分发
[xiaokang@hadoop01 redis-3.2.8]$ scp -r sentinel.conf xiaokang@hadoop02:/opt/software/redis-3.2.8
[xiaokang@hadoop01 redis-3.2.8]$ scp -r sentinel.conf xiaokang@hadoop03:/opt/software/redis-3.2.8
#修改配置
[xiaokang@hadoop02 redis-3.2.8]$ vim sentinel.conf
bind hadoop02
[xiaokang@hadoop03 redis-3.2.8]$ vim sentinel.conf
bind hadoop03
9.启动哨兵服务
# 三台机器分别执行以下命令:
[xiaokang@hadoop01 redis-3.2.8]$ bin/redis-sentinel sentinel.conf
[xiaokang@hadoop01 redis-3.2.8]$ ps -ef | grep redis
10.测试哨兵服务
[xiaokang@hadoop01 redis-3.2.8]$ bin/redis-cli -h hadoop01 -p 26379
# 使用ping命令检查哨兵是否工作,如果正常会返回PONG
hadoop01:26379> ping
PONG
hadoop01:26379> info
# 最后一行
master0:name=mymaster,status=ok,address=192.168.50.151:6379,slaves=2,sentinels=3
在hadoop01上杀死redis服务进程,就会在hadoop02与hadoop03服务器中选择一台服务器来切换为主节点
[xiaokang@hadoop01 redis-3.2.8]$ ps -ef | grep redis
xiaokang 10047 1 0 22:05 ? 00:00:00 bin/redis-server hadoop01:6379
xiaokang 10052 1 0 22:05 ? 00:00:00 bin/redis-sentinel hadoop01:26379 [sentinel]
xiaokang 10067 9408 0 22:11 pts/0 00:00:00 grep --color=auto redis
[xiaokang@hadoop01 redis-3.2.8]$ kill -9 10047
[xiaokang@hadoop01 redis-3.2.8]$ ps -ef | grep redis
xiaokang 10052 1 0 22:05 ? 00:00:01 bin/redis-sentinel hadoop01:26379 [sentinel]
xiaokang 10069 9408 0 22:12 pts/0 00:00:00 grep --color=auto redis
[xiaokang@hadoop02 redis-3.2.8]$ bin/redis-cli -h hadoop02 -p 26379
hadoop02:26379> info
# 最后一行
master0:name=mymaster,status=ok,address=192.168.50.152:6379,slaves=2,sentinels=3