redis主从架构的搭建
本项目采用主从架构,一主两从一个哨兵。在x.x.x.69上部署主节点,在70上部署从节点1和哨兵节点,在71上部署从节点2。
准备:
1、首先上传redis文件到三台linux上,目录/home/sysadm/redis 本次使用redis-3.2.8版本

2、在根目录/下创建u04目录,在u04下创建redis目录,用于安装redis软件。

在根目录下我们创建u04目录,普通用户没有权限,需要使用root账户。
然后将文件夹归属分配给sysadm账户和对应的账号组。
|
先su root 再mkdir u04 chown -R sysadm:sysadm u04 |
总结:
Redis的解压目录以及编译目录: /home/sysadm/redis/redis-3.2.8
Make的路径是: ` /home/sysadm/redis/redis-3.2.8/src '(进入解压后的redis-3.2.8目录后直接make后生成的目录)
Redis的安装目录:make install PREFIX= /u04/redis
安装:
首先在x.x.x.69上安装主节点。
一、安装gcc环境。默认centos系统自带gcc。(如果已安装gcc,则第一步可以省略)
[sysadm@linux ~]# yum install gcc-c++
二、解压缩
[sysadm@linux redis]$ tar -zxvf redis-3.2.8.tra.gz
三、编译redis 进入redis-3.2.8目录 cd /home/sysadm/redis/redis-3.2.8
[sysadm@linux redis-3.2.8]# make
四、安装redis
[sysadm@linux redis-3.2.8]# make install PREFIX=/u04/redis
至此安装完毕。
我们到/u04/redis下面发现多了个bin的目录。这个就是redis的安装目录。如下图:

我们将原来解压的redis的目录下的配置文件copy一份到/u04/redis下面用于启动redis的配置文件。
[sysadm@linux redis-3.2.8]# cp /home/sysadm/redis/redis-3.2.8/redis.conf /u04/redis

修改配置文件:
[sysadm@linux redis]$ vim redis.conf
①:注释掉bind

②:将保护模式关闭

③:启动后台进程,守护进程改为yes

④:pidfile可以不用修改

(
如果要同时在同一台机器上安装多个redis的服务器,最好把这个修改了:
如:pidfile “/var/run/redis_6379.pid” pidfile “/var/run/redis_6380.pid” pidfile “/var/run/redis_6381.pid”
)
再在70和71上安装从节点1和2
步骤和在69上安装一样,
配置文件修改也一样。
不过配置文件要多修改一个地方:将redis.conf的slaveof配置成下面的:

也就是说从机配置完后会一直监听主机的端口,当主机的有数据写入时从机会同时将数据拷贝一份到本机上
启动测试:
启动69上的主节点,再启动70和71上的从节点:
nohup /u04/redis/bin/redis-server /u04/redis/redis.conf >/u04/redis/redisStart.log 2>&1 &
登陆上69linux连接主节点:
/u04/redis/bin/redis-cli -h x.x.x.69 -p 6379
输入命令:INFO replication 查看节点状态:69为主节点,有两个从节点70和71

部署哨兵:
|
哨兵的作用就是对Redis的系统的运行情况的监控,它是一个独立进程。它的功能有2个: 1、 监控主数据库和从数据库是否运行正常; 2、 主数据出现故障后自动将从数据库转化为主数据库; |
登录70节点。
在/u04的同级目录创建redis-sentinel目录,
将/u04/redis下的bin目录copy到redis-sentinel目录下一份:
同时将/home/sysadm/redis/redis-3.2.8目录下的sentinel.conf也拷贝过来一份。

################

修改sentinel.conf配置文件:
①:sentinel monitor gjywmaster x.x.x.69 6379 1
②:由于上面将mymaster改成了gjywmaster,所以这个配置文件中的所有的mymaster都要改成gjywmaster。如:
sentinel failover-timeout gjywmaster 180000

说明:
gjywmaster:监控主数据的名称,自定义即可,可以使用大小写字母和“.-_”符号
x.x.x.69:监控的主数据库的IP
6379:监控的主数据库的端口
1:最低通过票数
③:同时要将sentinel.conf中的protected-mode 改成no,默认是注释掉的。否则java客户端链接不上。

启动哨兵进程:
nohup /u04/redis-sentinel/bin/redis-sentinel /u04/redis-sentinel/sentinel.conf >/u04/redis-sentinel/sentinelStart.log 2>&1 &
可以在/u04/redis-sentinel/ sentinelStart.log这个文件中查看sentinel的日志情况。
在同一台机器上部署:
如图:要是在同一台机器上部署的话,我们只需要将redis的安装目录bin拷贝两份bin6380、bin6381,以及拷贝两份redis.conf成redis6380.conf和redis6381.conf就行。
然后将redis6380.conf和redis6381.conf里面的port改成6380和6381,同时改一下pidfile。

启动:
nohup /u04/redis/bin/redis-server /u04/redis/redis.conf >/u04/redis/redisStart.log 2>&1 &
nohup /u04/redis/bin6380/redis-server /u04/redis/redis6380.conf >/u04/redis/redis6380Start.log 2>&1 &
nohup /u04/redis/bin6381/redis-server /u04/redis/redis6381.conf >/u04/redis/redis6381Start.log 2>&1 &
哨兵配置同样的。
测试:
让69上的主节点down掉,然后看sentinel.log日志文件,然后登陆到70上查看主从配置信息。Info replication
然后再启动69上的主节点。
启动顺序
先启动69上的主节点,再启动70和71上的从节点
再启动70上的sentinel 哨兵。
Java工具类的编写:
在spring中配置jedisSentinel。
http://sumory.com/2014/08/15/spring-redis-sentinel/
https://www.cnblogs.com/wangweiNB/p/5620845.html(多个sentinel配置)
可以使用springboot来进行快速搭建项目测试。
链接:
Redis.conf文件的说明:https://www.cnblogs.com/zhoujinyi/p/5565647.html
哨兵的配置文件说明:https://blog.csdn.net/u011784767/article/details/77994046?locationNum=6&fps=1
https://www.cnblogs.com/wangweiNB/p/5620845.html
redis的保护模式:redis3.2之后新加入的特性
https://blog.csdn.net/csdn_ds/article/details/72550898
https://blog.csdn.net/sukexiaozi/article/details/52022449
附 从别的地方找来的关于sentinel的日志文件的说明:
从数据库宕机

kill掉2826进程后,30秒后哨兵的控制台输出:
2989:X 05 Jun 20:09:33.509 # +sdown slave 127.0.0.1:6380 127.0.0.1 6380 @ taotaoMaster 127.0.0.1 6379
说明已经监控到slave宕机了,那么,如果我们将3380端口的redis实例启动后,会自动加入到主从复制吗?
2989:X 05 Jun 20:13:22.716 * +reboot slave 127.0.0.1:6380 127.0.0.1 6380 @ taotaoMaster 127.0.0.1 6379
2989:X 05 Jun 20:13:22.788 # -sdown slave 127.0.0.1:6380 127.0.0.1 6380 @ taotaoMaster 127.0.0.1 6379
可以看出,slave从新加入到了主从复制中。-sdown:说明是恢复服务。

主库宕机
哨兵控制台打印出如下信息:
2989:X 05 Jun 20:16:50.300 # +sdown master taotaoMaster 127.0.0.1 6379 说明master服务已经宕机
2989:X 05 Jun 20:16:50.300 # +odown master taotaoMaster 127.0.0.1 6379 #quorum 1/1
2989:X 05 Jun 20:16:50.300 # +new-epoch 1
2989:X 05 Jun 20:16:50.300 # +try-failover master taotaoMaster 127.0.0.1 6379 开始恢复故障
2989:X 05 Jun 20:16:50.304 # +vote-for-leader 9059917216012421e8e89a4aa02f15b75346d2b7 1 投票选举哨兵leader,现在就一个哨兵所以leader就自己
2989:X 05 Jun 20:16:50.304 # +elected-leader master taotaoMaster 127.0.0.1 6379 选中leader
2989:X 05 Jun 20:16:50.304 # +failover-state-select-slave master taotaoMaster 127.0.0.1 6379 选中其中的一个slave当做master
2989:X 05 Jun 20:16:50.357 # +selected-slave slave 127.0.0.1:6381 127.0.0.1 6381 @ taotaoMaster 127.0.0.1 6379 选中6381
2989:X 05 Jun 20:16:50.357 * +failover-state-send-slaveof-noone slave 127.0.0.1:6381 127.0.0.1 6381 @ taotaoMaster 127.0.0.1 6379 发送slaveof no one命令
2989:X 05 Jun 20:16:50.420 * +failover-state-wait-promotion slave 127.0.0.1:6381 127.0.0.1 6381 @ taotaoMaster 127.0.0.1 6379 等待升级master
2989:X 05 Jun 20:16:50.515 # +promoted-slave slave 127.0.0.1:6381 127.0.0.1 6381 @ taotaoMaster 127.0.0.1 6379 升级6381为master
2989:X 05 Jun 20:16:50.515 # +failover-state-reconf-slaves master taotaoMaster 127.0.0.1 6379
2989:X 05 Jun 20:16:50.566 * +slave-reconf-sent slave 127.0.0.1:6380 127.0.0.1 6380 @ taotaoMaster 127.0.0.1 6379
2989:X 05 Jun 20:16:51.333 * +slave-reconf-inprog slave 127.0.0.1:6380 127.0.0.1 6380 @ taotaoMaster 127.0.0.1 6379
2989:X 05 Jun 20:16:52.382 * +slave-reconf-done slave 127.0.0.1:6380 127.0.0.1 6380 @ taotaoMaster 127.0.0.1 6379
2989:X 05 Jun 20:16:52.438 # +failover-end master taotaoMaster 127.0.0.1 6379 故障恢复完成
2989:X 05 Jun 20:16:52.438 # +switch-master taotaoMaster 127.0.0.1 6379 127.0.0.1 6381 主数据库从6379转变为6381
2989:X 05 Jun 20:16:52.438 * +slave slave 127.0.0.1:6380 127.0.0.1 6380 @ taotaoMaster 127.0.0.1 6381 添加6380为6381的从库
2989:X 05 Jun 20:16:52.438 * +slave slave 127.0.0.1:6379 127.0.0.1 6379 @ taotaoMaster 127.0.0.1 6381 添加6379为6381的从库
2989:X 05 Jun 20:17:22.463 # +sdown slave 127.0.0.1:6379 127.0.0.1 6379 @ taotaoMaster 127.0.0.1 6381 发现6379已经宕机,等待6379的恢复

可以看出,目前,6381位master,拥有一个slave为6380.
接下来,我们恢复6379查看状态:
2989:X 05 Jun 20:35:32.172 # -sdown slave 127.0.0.1:6379 127.0.0.1 6379 @ taotaoMaster 127.0.0.1 6381 6379已经恢复服务
2989:X 05 Jun 20:35:42.137 * +convert-to-slave slave 127.0.0.1:6379 127.0.0.1 6379 @ taotaoMaster 127.0.0.1 6381 将6379设置为6381的slave

小结:
本教程只是介绍了一下,redis主从的搭建过程。Redis的具体的使用以及redis中的一些概念,redis的高阶使用并没有介绍,大伙如果有兴趣可以自行去找资料学习。
推荐本书:redis入门指南(第二版) 李子骅

redis主从架构的搭建的更多相关文章
- Redis主从架构搭建和哨兵模式(四)
一主一从,往主节点去写,在从节点去读,可以读到,主从架构就搭建成功了 1.启用复制,部署slave node wget http://downloads.sourceforge.net/tcl/tcl ...
- Redis 主从架构搭建
引言 准备搭建的是主从架构( Master/Slave )中的一主两从模式:其中 Master 为 Redis 的主服务器,主要负责写操作,两个 Slave 为 Redis 的从服务器,主要负责读操作 ...
- Redis 主从集群搭建及哨兵模式配置
最近搭建了redis集群及哨兵模式,为方便以后查看特此记录下来: 1.Redis安装 2.主从架构 2.1 Redis主从架构图 2.2Redis主从结构搭建 Redis集群不用安装多个Redis,只 ...
- 10.Redis 主从架构
作者:中华石杉 Redis 主从架构 单机的 redis,能够承载的 QPS 大概就在上万到几万不等.对于缓存来说,一般都是用来支撑读高并发的.因此架构做成主从(master-slave)架构,一主多 ...
- redis主从架构,分片集群详解
写在前面:这篇笔记有点长,如果你认真看完,收获会不少,如果你只是忘记了相关命令,请翻到末尾. redis的简单介绍: 一个提供多种数据类类型储存,整个系统都在内存中运行的, 定期通过异步的方式把数据刷 ...
- redis主从集群搭建及容灾部署(哨兵sentinel)
Redis也用了一段时间了,记录一下相关集群搭建及配置详解,方便后续使用查阅. 提纲 Redis安装 整体架构 Redis主从结构搭建 Redis容灾部署(哨兵sentinel) Redis常见问题 ...
- 采用redis 主从架构的原因
如果系统的QPS超过10W+,甚至是百万以上的访问,则光是Redis是不够的,但是Redis是整个大型缓存架构中,支撑高并发的架构非常重要的环节. 首先,你的缓存中间件.缓存系统,必须能够支撑起10w ...
- redis主从集群搭建
一.安装redis 首先登陆官网下载压缩包,我安装的是最新版本5.X,下载地址http://download.redis.io/releases/redis-5.0.2.tar.gz. 进入文件所在目 ...
- redis主从架构宕机问题手动解决
1 主机宕机 1. 设置端口6379是主机,端口6380是从机,全部都正常启动 2. 验证在6379写入数据,在6380也能得到数据 3. 现在将6379主机停掉,模拟主机宕机 4. 由 ...
随机推荐
- git自动更新网站代码
1.实现过程在linux上安装git服务.创建源版本库.从源版本库克隆得到网站目录,然后利用git中的hooks机制,在git push推送代码到源版本库的时候,触发编写的shell脚本,更新网站目录 ...
- Git Bash Here常用命令以及使用步骤
1.首先,要clone项目代码: git clone 链接地址 2.更新代码: git pull 3.添加修改过的文件.文件夹: git add 修改过的文件,文件夹 4.提交并注释: git com ...
- 实现绘制图形的ToolBar
给地图添加绘制图形的ToolBar还是有必要的,比较人性化的功能.图形的样式可以自己定制,也提供了朴实的默认样式.对 dojo 不太懂,出现了许许多多问题,真是蛋疼的一天啊.令人惊喜的是 ArcGis ...
- MySQL--主从数据库同步原理
主从数据库的复制原理:摘自MySQL官网 1. 异步 * 主在执行sql之后,记录二进制bin-log文件. * 同时从连接主服务器,并从主获取binlog,存于本地relay-log,并从上次记 ...
- 回溯法最优装载问题(java)
1.问题描述: 有一批共有 n 个集装箱要装上两艘载重量分别为 c1 和 c2 的轮船,其中集装箱 i 的重量为 w[i], 且重量之和小于(c1 + c2).装载问题要求确定是否存在一个合 ...
- 任务九:使用HTML/CSS实现一个复杂页面
任务目的 通过实现一个较为复杂的页面,加深对于HTML,CSS的实战能力 实践代码的复用.优化 任务描述 通过HTML及CSS实现设计稿 设计稿PSD文件(点击下载),效果如 效果图(点击打开) 整个 ...
- 扩展javascript原生对象
原文地址: http://javascript.info/tutorial/native-prototypes 原生的javascript 对象在prototypes里面保存他们可用的方法. 比如,当 ...
- Oracle使用超大SQL脚本文件恢复数据问题记录
在以前获取的Oracle数据库备份一般都是dmp文件,创建表空间和用户就直接使用imp或者impdp导入即可. 这一次遇到的情况比较特殊,对方提供数据时给我的是使用SQLPlus导出的SQL脚本文件, ...
- Jquery学习---Easy UI 框架
Jquery的easyui 1.1. easyui的目录分析 以 jquery Easy UI 1.3.2 版本学习 demo 实例 locale 国际化信息 plugins 框架一些插件 src 源 ...
- mysql主从同步与防火墙端口的设定
一.背景: 之前做主从同步时,把从库防火墙关了,现在开启防火墙后,从库不同步了 二.解决思路: 1.首先查看了mysql占用的端口,然后开启,tcp/udp都开了,结果还是不行 firewall-cm ...