开篇点题
文章主旨是快速且保证成功的结合哨兵监控去使用redis的主备模式。起因公司需要,俺就干,玻璃碎没碎我不知,我只知道这次我干到redis裂了些。
途中解惑
首先重中之重是要区分什么是主从,什么是主备,区分不开,这活干的毫无意义。主从,主备,集群的目的是为了解决单点的缺陷问题,单点缺陷就是单点故障,容量,压力。
先上一图!
架构图架构而言主从,主备都是一样的。真正区分的是代码上面的使用区分。代码层面上对于读写分离的操作决定了你是使用主从还是主备,实际上严格来说,主从必须是读写分离,主的redis做写操作,从的redis做读操作;主备的话主的redis用作读跟写,从redis只是用作于备用等主的挂了顶上。
主备模式下,相对于单点来说解决了单点故障,压力和容量并没有得到解决。当然跟业务场景有关
主从模式下,相对于单点来说解决了单点故障同时通过集群进行解决压力,容量的问题。
直入实淦
安装好的Vmware虚拟机以及centos7
为了保成我还是贴一下如何安装虚拟机吧
尝试吧少年安装完成,下载redis,我这边使用是6.2.3,官网下载即可
https://download.redis.io/releases/?_ga=2.201444305.1325061346.1627302000-795623212.1627302000准备4个redis的配置文件,4个sentinel的配置文件
6379.conf配置
port 6379
#bind 127.0.0.1 -::1
pidfile "/var/run/redis_6379.pid"
logfile "/ken/redis-6.2.3/src/6379logfile.log"
protected-mode no
daemonize yes
6380.conf配置
port 6380
#bind 127.0.0.1 -::1
pidfile "/var/run/redis_6380.pid"
logfile "/ken/redis-6.2.3/src/6380logfile.log"
protected-mode no
daemonize yes
6381.conf配置
port 6381
#bind 127.0.0.1 -::1
pidfile "/var/run/redis_6381.pid"
logfile "/ken/redis-6.2.3/src/6381logfile.log"
protected-mode no
daemonize yes
6382.conf配置
port 6382
#bind 127.0.0.1 -::1
pidfile "/var/run/redis_6382.pid"
logfile "/ken/redis-6.2.3/src/6382logfile.log"
protected-mode no
daemonize yes
26379.conf
port 26379
sentinel monitor mymaster 192.168.38.128 6379 3
daemonize yes
protected-mode no
26380.conf
port 26380
sentinel monitor mymaster 192.168.38.128 6379 3
daemonize yes
protected-mode no
26381.conf
port 26381
sentinel monitor mymaster 192.168.38.128 6379 3
daemonize yes
protected-mode no
26382.conf
port 26382
sentinel monitor mymaster 192.168.38.128 6379 3
daemonize yes
protected-mode no
常用命令(粗体为命令)
info replication 查看主从信息
info sentinel 查看哨兵信息
./redis-server 哨兵配置文件目录 --sentinel 启动哨兵命令
./redis-server redis配置目录 启动redis命令
./redis-cli -h ip地址 -p 端口号 进入指定redis
keys * 查看当前库数据
exit 退出
ps -fe|grep redis 查看redis进程
replicaof no one 解除主从追随关系
kill -9 端口号 结束进程
配置追随关系
流程说明:
I开启redis且进入从机配置追随的主机
1.查看当前redis进程 2.启动成功 3.配置6380追随 4.查看6380追随信息 5.配置6381主从且查看结果 6.配置6382主从且查看结果II启动哨兵
1.启动所有哨兵III Linux测试
FinishedIIII idea代码测试
yml配置文件 redisUtil类 pom单元测试类 set get<?xml version="1.0" encoding="UTF-8"?><project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd"> <modelVersion>4.0.0</modelVersion> <groupId>org.example</groupId> <artifactId>MavenDemo</artifactId> <version>1.0-SNAPSHOT</version> <parent> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-parent</artifactId> <version>2.0.0.RELEASE</version> </parent> <dependencies> <dependency> <groupId>org.projectlombok</groupId> <artifactId>lombok</artifactId> <version>1.16.10</version> </dependency> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-web</artifactId> </dependency> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-data-redis</artifactId> </dependency> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-test</artifactId> <scope>test</scope> </dependency> <dependency> <groupId>org.springframework</groupId> <artifactId>spring-test</artifactId> </dependency> </dependencies></project>
总结一下
呼应开篇,使用主备是因为这样做已然满足公司的使用场景了,没有最完美只有最合适。主备模式优点是线上固有的调用redis代码的方式——无需大改,前提是合适具体的场景(可以忽视容量,以及压力,这也就是缺点)!如果涉及高并发,高可用的情景需要结合网络层代理,集群(Cluster),分片进行操作噢~
网友评论