Redis的主从复制与高可用搭建(哨兵模式)
前言
为什么要使用Redis
首先我们先介绍些redis的基本概念,redis是Nosql数据库,是一个key-value存储系统。虽然redis是key-value的存储系统,但是redis支持的value存储类型是非常的多,比如字符串、链表、集合、有序集合和哈希。
那么为什么要使用类似redis这样的Nosql数据库呢?
1) 当数据量的总大小一个机器放不下时;
2) 数据索引一个机器的内存放不下时;
3) 访问量(读写混合)一个实例放不下时。
单机时代,存储只用一台机器装mysql,如果每次存储成千上万条数据,这样很会导致mysql的性能很差,存储以及读取速度很慢,然后就演变成缓存+mysql+垂直拆分的方式。
Cache作为中间缓存时代,将所有的数据先保存到缓存中,然后再存入mysql中,减小数据库压力,提高效率。
但是当数据再次增加到又一个量级,上面的方式也不能满足需求,由于数据库的写入压力增加,缓存只能缓解数据库的读取压力。读写集中在一个数据库上让数据库不堪重负,大部分网站开始使用主从复制技术来达到读写分离,以提高读写性能和读库的可扩展性。Mysql的master-slave模式成为这个时候的网站标配了。
主从分离模式时代,在redis的高速缓存,MySQL的主从复制,读写分离的基础之上,这时MySQL主库的写压力开始出现瓶颈,而数据量的持续猛增,由于MyISAM使用表锁,在高并发下会出现严重的锁问题,大量的高并发MySQL应用开始使用InnoDB引擎代替MyISAM。
Nosql数据库的优势
1)易扩展
这些类型的数据存储不需要固定的模式,无需多余的操作就可以进行横向的扩展。相对于关系型数据库可以减少表和字段特别多的情况。也无型之间在架构的层面上带来了可扩展的能力2)大数据量提高性能
3)多样灵活的数据模型
实验环境:
主机名 | IP | 作用 |
---|---|---|
server1 | 172.25.68.1 | master |
server2 | 172.25.68.2 | slave |
server3 | 172.25.68.3 | slave |
一、redis的主从复制
1.下载一个redis的安装包并解压
[root@server1 ~]# tar zxf redis-5.0.3.tar.gz
2.切换到redis的安装包安装
(1)安装gcc依赖性
[root@server1 ~]# cd redis-5.0.3
[root@server1 redis-5.0.3]# ls
[root@server1 redis-5.0.3]# yum install -y gcc
(2)make
[root@server1 redis-5.0.3]# make
(3)make install
[root@server1 redis-5.0.3]# ls
[root@server1 redis-5.0.3]# make install
(4)切换到utils目录执行安装脚本
[root@server1 redis-5.0.3]# cd utils/
[root@server1 utils]# ls
[root@server1 utils]# ./install_server.sh
3.可以看到6379端口已经打开
[root@server1 utils]# netstat -tnlp
4.编辑redis的配置文件
[root@server1 utils]# vim /etc/redis/6379.conf 70 bind 0.0.0.0 ##只修改一行
在配置文件中默认的bind接口是127.0.0.1,这样的话访问redis服务只能通过本机的客户端链接,无法通过远程连接,这样可以避免将redis服务暴露再危险的网络环境中,防止一些不安全的人随便远程连接到redis服务,如果将bind接口注释掉将会接受所有来自于可用网络接口的连接
[root@server1 utils]# /etc/init.d/redis_6379 restart ##重启redis
5.将编译好的安装目录发送给server2和server3
[root@server1 ~]# scp -r redis-5.0.3 server2:/root
[root@server1 ~]# scp -r redis-5.0.3 server3:/root
6.server2和server3
(1)切换到安装目录,直接make install即可
[root@server2 ~]# ls
[root@server2 redis-5.0.3]# make install
(2)执行安装脚本
[root@server2 redis-5.0.3]# cd utils/
[root@server2 utils]# ./install_server.sh
(3)编辑配置文件,修改一行,添加一行
[root@server2 utils]# vim /etc/redis/6379.conf
[root@server2 utils]# /etc/init.d/redis_6379 restart70 bind 0.0.0.0
1380 slaveof 172.25.6.1 6379
重启服务
server3上的操作与上相同
测试:
server1查看节点信息状态,上传数据
[root@server1 ~]# redis-cli
127.0.0.1:6379> info ##查看节点信息
127.0.0.1:6379> set name peng
OK
127.0.0.1:6379> get name
"peng"
127.0.0.1:6379>
server1可以看到自己是master,现在有两个slave,分别是172.25.6.2和172.25.6.3
写入数据
server2上:
[root@server2 utils]# redis-cli
127.0.0.1:6379> info ##角色为slave
127.0.0.1:6379> get name
"peng"
127.0.0.1:6379>
server2可以看到它的master指向的是server1,可以查看到server1上传的数据
server3上:
[root@server3 utils]# redis-cli
127.0.0.1:6379> info
127.0.0.1:6379> get name
"peng"
二、redis的高可用
1.server1将安装目录中的sentinel.conf文件复制到/etc/redis/目录下
[root@server1 ~]# cd redis-5.0.3
[root@server1 redis-5.0.3]# ls
[root@server1 redis-5.0.3]# cp sentinel.conf /etc/redis/
[root@server1 redis-5.0.3]#
2.编辑sentinel.conf文件
[root@server1 redis-5.0.3]# cd /etc/redis/
[root@server1 redis]# vim sentinel.conf 17 protected-mode no ##关闭保护模式84 sentinel monitor mymaster 172.25.6.1 6379 2
113 sentinel down-after-milliseconds mymaster 10000 ##连接超时时长,
至少多少时间连不上认为主机离线,单位是ms
3.将修改好的文件传给server2和server3
[root@server1 redis]# scp sentinel.conf server2:/etc/redis/
sentinel.conf 100% 9712 9.5KB/s 00:00
[root@server1 redis]# scp sentinel.conf server3:/etc/redis/
sentinel.conf
[root@server1 redis]# /etc/init.d/redis_6379 restart
4.查看redis的状态信息
[root@server1 redis]# redis-cli
127.0.0.1:6379> info
测试:
1.每个节点都执行监控命令
[root@server1 ~]# redis-server /etc/redis/sentinel.conf --sentinel
[root@server2 ~]# redis-server /etc/redis/sentinel.conf --sentinel
[root@server3 ~]# redis-server /etc/redis/sentinel.conf --sentinel
可以看到执行后有两行+slave,显示的是两个+slave的信息
server1上:
server2上:
可以看到执行后有两行+slave,显示的是两个+slave的信息
2.重新打开一个shell,ssh连接server1,宕掉server1的redis
[root@server1 ~]# redis-cli
127.0.0.1:6379> info# Keyspace
db0:keys=1,expires=0,avg_ttl=0
127.0.0.1:6379> shutdown
3.这时可以看到再server2上出现了一个
+switch-master mymaster 172.25.68.1 6379 172.25.68.2 6379
表示master从server1切换到了server2
4.新打开的shell退出server1的连接,连接server2,查看redis的状态信息
可以看到现在的master是server2
连接serever3可以看到master指向的是server2
由此实现了redis集群的高可用
Redis的主从复制与高可用搭建(哨兵模式)相关推荐
- Redis高可用方案-哨兵模式-SpringBoot整合
哨兵是用来放哨的,能实时监控我们redis集群的状态,保证redis服务器不会挂掉 搭建:https://blog.csdn.net/Zer01ne/article/details/8301040 ...
- Redis高可用之哨兵模式
我们前面学习了Redis的主从模式,可以实现读写分离和数据备份,减轻Redis中master节点的压力.但是主从模式仅仅是减轻了master节点的读压力和做数据备份,一旦master节点挂了之后,我们 ...
- redis高可用(哨兵模式篇)
哨兵模式(sentinel) 当我们使用主从复制时,从库宕机依然可以将请求发送给主库或者其他从库,但是 Master 宕机,只能响应读操作,写请求无法再执行.所以主从复制架构面临一个严峻问题,主库 ...
- redis主从复制、高可用和集群
redis简介: redis是一个key-value存储系统.和Memcached类似,它支持存储的value类型相对更多,包括string(字符串).list(链表).set(集合).zse ...
- Redis深入理解五 :Redis主从架构、哨兵架构、高可用集群模式
redis主从架构 redis主从架构搭建,配置从节点步骤: 复制一份redis.conf文件 将相关配置修改为如下值: port 6380 pidfile /var/run/redis_6380.p ...
- Redis 高可用之哨兵集群
Redis 高可用之哨兵集群 前言 哨兵集群 启动并初始化 Sentinel 初始化 Sentinel 状态 初始化Sentinel监视的主服务器列表 创建连向主服务器的网络连接 获取主服务器信息 获 ...
- Nginx反向代理,负载均衡,Redis集群 Twemproxy,redis session共享,keepalived高可用-搭建千万级网站系统
Nginx反向代理,负载均衡,redis session共享,keepalived高可用-搭建千万级系统架构 1.安装Nginx 安装机器IP地址为: 192.168.91.129 (主) 192.1 ...
- 使用Sentinel配置Redis 3.x主从高可用服务
Redis-Sentinel是Redis官方推荐的高可用性(HA)解决方案,当用Redis做Master-slave的高可用方案时,假如master宕机了,Redis本身(包括它的很多客户端)都没有实 ...
- 解说redis中如何实现高可用
redis中为了实现高可用(High Availability,简称HA),采用了如下两个方式: 主从复制数据. 采用哨兵监控数据节点的运行情况,一旦主节点出现问题由从节点顶上继续进行服务. 主从复制 ...
最新文章
- 深入Jetty源码之Servlet框架及实现(AsyncContext、RequestDispatcher、HttpSession)
- 你猜,为什么Google和Facebook不用Docker?
- IT培训“来offer”获得数千万融资
- 将两个DataFrame拼接起来,除了concat还有append()
- 登录界面的滑动_【提醒】电子税务局登录方式有变化! 8月31日关闭“原方式登录”...
- 请求的链式处理——职责链模式
- c语言建立两个磁盘文件,建立两个磁盘文件f1.dat和f2.dat,编程序实现以下工作...
- JavaScript之Object
- php ajax files 空,javascript - ajax上传文件后台使用$_files接受为空
- win7系统下的打印机不能扫描
- Wannafly交流赛1: B. 白兔的式子(组合数)
- Linux性能优化实战:CPU的上下文切换是什么意思(03)
- 现代计算机的存储体系 (转载)
- CentOS 7 - Securing OpenSSH(二)
- Flutter中,idevice_id和iproxy无法打开的问题(真机调试卡在启动页进不去)
- joomla 网页修改_修改Joomla的8个技巧和技巧! 范本
- 600,000,002,200,300,400等开头的股票都是什么意思
- 关于半岛体试验的一些知识汇总
- 数据结构期末大题速成
- 抖音吸粉_抖音吸粉5大实用方法首次分享!轻松实现粉丝10000+
热门文章
- R语言计算平均值的标准误差(standard error of the mean):自定义函数计算平均值的标准误差、使用plotrix包的std.error函数计算平均值的标准误差
- R语言apriori算法进行关联规则挖掘(限制规则的左侧或者右侧的内容进行具体规则挖掘)、查看限制了规则的右侧之后挖掘到的规则(置信度排序,只查看左侧即可)
- pandas判断日期是否是闰年(is_leap_year)实战: 数据列转化为日期(时间)格式、判断pandas的日期数据列是否是闰年
- R语言ggplot2可视化使用ggridges包可视化山脊图(Ridgeline Plots):山脊图(Ridgeline Plots)应用场景、受试者口服茶碱的之后观察茶碱的浓度变化的山脊图
- LSTM模型(基于Keras框架)预测特定城市或者区域的太阳光照量实战
- 什么是多重共线性问题?如何判别多重共线性问题?怎么避免多重共线性对模型和学习的干扰?
- GoogleSketchUp构建家庭模型
- Late Lunch Talk: Time to consider using PacBio’s long read sequencing in your research?
- Linux之make 、makefile的使用方法
- 鸿蒙能够替代安卓吗,华为鸿蒙2.0可以替代安卓吗,华为鸿蒙2.0优势在哪