Redis主从、哨兵模式的部署

  • 1 Redis单机部署
  • 2 主从模式
  • 3 哨兵模式


1 Redis单机部署

实验环境:
(1)安装依赖:yum install gcc-c++.x86_64 -y (2)下载redis安装包并编译:

redis-5.0.8.tar.gz
tar zxf redis-5.0.8.tar.gz
cd redis-5.0.8/
make

redis 哨兵状态 redis哨兵模式部署_linux


redis 哨兵状态 redis哨兵模式部署_配置文件_02

  • 安装: make install

redis 哨兵状态 redis哨兵模式部署_linux_03

  • 查看redis-cli能否使用:
which redis-cli

redis 哨兵状态 redis哨兵模式部署_配置文件_04


redis 哨兵状态 redis哨兵模式部署_配置文件_05

  • 查看redis的6379端口:netstat -antlp |grep :6379

redis 哨兵状态 redis哨兵模式部署_redis_06

  • 修改redis的配置文件:vim /etc/redis/6379.conf

redis 哨兵状态 redis哨兵模式部署_配置文件_07


(3)启动redis实例: /etc/init.d/redis_6379 restart

  • 查看redis的监听端口: netstat -antlp |grep :6379

redis 哨兵状态 redis哨兵模式部署_linux_08

  • 查看redis的信息,redis的节点角色是master
redis-cli
info

redis 哨兵状态 redis哨兵模式部署_redis_09


redis 哨兵状态 redis哨兵模式部署_配置文件_10

redis 哨兵状态 redis哨兵模式部署_redis_11

2 主从模式

一主多从:master读写,slave:读

原理:
(1)slave启动后,主动向master发送SYNC命令;
(2)master接收到SYNC命令后在后台保存快照(RDB持久化)和缓存保存快照这段时间的命令并发送给slave;
(3)slave接收到快照文件和命令后加载快照文件和缓存的执行命令;
(4)复制初始化后,master每次接收到的写命令都会同步发送给slave,保证主从数据一致性;

缺点:故障恢复无法自动化;写操作无法负载均衡;存储能力受到单机的限制。

主从模式的部署

(1)在server2部署redis
(2)修改配置文件将其作为server1的slave:

  • 编辑配置文件:vim /etc/redis/6379.conf

redis 哨兵状态 redis哨兵模式部署_配置文件_12


(3)server2启动redis: /etc/init.d/redis_6379 restart

(4)测试:在server1连接redis的6379端口,查看副本的信息,此时server2是server1的slave

redis 哨兵状态 redis哨兵模式部署_redis 哨兵状态_13

  • 在server2查看节点的信息,server2的master是server1

redis 哨兵状态 redis哨兵模式部署_redis 哨兵状态_14


(5)只有master节点可以写数据,slave作为备份和读数据

redis 哨兵状态 redis哨兵模式部署_redis_15


redis 哨兵状态 redis哨兵模式部署_linux_16


redis 哨兵状态 redis哨兵模式部署_redis_17

redis 哨兵状态 redis哨兵模式部署_redis_18


redis 哨兵状态 redis哨兵模式部署_redis 哨兵状态_19

(6)redis有16个数据库(0-15),可以通过select命令切换数据库

redis-cli
127.0.0.1:6379> select 1
OK
127.0.0.1:6379[1]> set name westos
OK
127.0.0.1:6379[1]> get name
"westos"
127.0.0.1:6379[1]> select 0
OK
127.0.0.1:6379> set name linux
OK
127.0.0.1:6379> get name
"linux"
127.0.0.1:6379> FLUSHDB
OK
127.0.0.1:6379> get name
(nil)
127.0.0.1:6379> select 1
OK
127.0.0.1:6379[1]> get name
"westos"
127.0.0.1:6379[1]> FLUSHALL
OK
127.0.0.1:6379[1]> get name
(nil)
127.0.0.1:6379[1]> set name linux
OK
127.0.0.1:6379[1]> get name
"linux"
127.0.0.1:6379[1]> move name 0
(integer) 1
127.0.0.1:6379[1]> get name
(nil)
127.0.0.1:6379[1]> SELECT 0
OK
127.0.0.1:6379> get name
"linux"
127.0.0.1:6379> del name
(integer) 1
127.0.0.1:6379> get name
(nil)
127.0.0.1:6379> set name linux
OK
127.0.0.1:6379> RENAME name NAME
OK
127.0.0.1:6379> get name
(nil)
127.0.0.1:6379> get NAME
"linux"
127.0.0.1:6379> RENAME  NAME name
OK
127.0.0.1:6379> get name
"linux"
127.0.0.1:6379> EXPIRE name 4
(integer) 1
127.0.0.1:6379> get name
"linux"
127.0.0.1:6379> get name
"linux"
127.0.0.1:6379> get name
(nil)
127.0.0.1:6379> set name linux
OK
127.0.0.1:6379> KEYS na*
1) "name"
127.0.0.1:6379> KEYS name
1) "name"
127.0.0.1:6379> EXISTS name
(integer) 1
127.0.0.1:6379> EXISTS age
(integer) 0
127.0.0.1:6379> quit

3 哨兵模式

在主从复制的基础上,能实现master节点故障的自动切换;
集群至少三个节点而且推荐节点数为奇数;

哨兵的作用

(1)监控:监控redis集群的运行状况,当被监控的某个 Redis 服务器出现问题时,
(2)通知:Sentinel 可以通过 API 向管理员或者其他应用程序发送通知
(3)故障转移:

1.投票:当任何一个Sentinel发现被监控的Master下线时,会通知其它的Sentinel投票         确定该Master是否下线
2.选举:当Sentinel确定Master下线后,会在有的Slaves中,选举一个新的节点,升级成Master节点,其它Slaves节点,转为该节点的从节点;
3.原Master重新上线:当原Master节点重新上线后,自动转为当前Master节点的从节点

哨兵模式的部署

(1)编辑server1的sentinel的配置文件

cp /root/redis-5.0.8/sentinel.conf /etc/redis/
vim  /etc/redis/ sentinel.conf
protected-mode no
	sentinel monitor mymaster 172.25.12.1 6379 2
scp /etc/redis/ sentinel.conf server2:/etc/redis/
 scp /etc/redis/ sentinel.conf server3:/etc/redis/

(2)启动sentinel:redis-sentinel /etc/redis/sentinel.conf

redis 哨兵状态 redis哨兵模式部署_linux_20

redis 哨兵状态 redis哨兵模式部署_配置文件_21


redis 哨兵状态 redis哨兵模式部署_redis 哨兵状态_22


(3)测试:将server1的redis实例shutdown

redis-cli -p 6379
SHUTDOWN
  • 哨兵监控到redis的master不可以,会自动选举新的master

redis 哨兵状态 redis哨兵模式部署_redis_23


redis 哨兵状态 redis哨兵模式部署_redis_24

  • 重启server1的redis实例
/etc/init.d/redis_6379 start

redis 哨兵状态 redis哨兵模式部署_redis_25

  • 启动之后自动修改配置文件: /etc/redis/6379.conf

redis 哨兵状态 redis哨兵模式部署_redis 哨兵状态_26


redis 哨兵状态 redis哨兵模式部署_redis_27