redis一主二从加哨兵
redis版本:redis-3.0.6.tar.gz
master:192.168.3.180
slave:192.168.3.184 (机器原因,两从都在这上面)
一.redis安装
cd /root/tools/
tar -zxvf redis-3.0..tar.gz
cd redis-3.0.
make install PREFIX=/usr/local/redis
ln -s /usr/local/redis/bin/redis-cli /usr/local/bin/redis-cli
cp utils/redis_init_script /etc/init.d/redis
mkdir /etc/redis
cp redis.conf /etc/redis/.conf
cp -rp sentinel.conf /etc/redis/sentinel_26379.conf
二.配置
主服务器上redis
vim .conf
daemonize yes
pidfile /var/run/redis_6379.pid
port
bind 0.0.0.0 (很重要,否则主从同步会失败)
logfile "/var/log/redis_6379.log"
dbfilename "dump_6379.rdb"
dir "/opt/redis/6379"
requirepass (设置redis密码)
哨兵sentinel (本文只有一个哨兵,哨兵也可以部署多台机器,形成哨兵集群,避免单点的问题,保证系统的高可用。)
#修改或添加以下几项
vim sentinel_26379.conf
port
daemonize yes
logfile "/tmp/sentinel.log"
dir "/opt/redis/redis_sentinel"
sentinel monitor mymaster 192.168.3.180
(最后的数字1指明当有多少个sentinel认为一个master失效时,master才算真正失效)
sentinel parallel-syncs mymaster
(最后的数字2表示有多少个slave)
sentinel auth-pass mymaster password-xxx (如果redis配有密码,为了使哨兵能登录监控,需要给哨兵也配置密码认证)
从服务器上
#从服务器配置可复制主服务器的,只需要修改相应端口和修改添加以下两行即可
slaveof 192.168.3.180 (指定主redis)
masterauth "" (指定master密码)
测试:
分别启动master和两个slave
/usr/local/redis/bin/redis-server /etc/redis/.conf
master上:
[root@novel tmp]# redis-cli -p -a password
127.0.0.1:> info replication
# Replication
role:master
connected_slaves:
slave0:ip=192.168.3.184,port=,state=online,offset=,lag=
slave1:ip=192.168.3.184,port=,state=online,offset=,lag=
master_repl_offset:
repl_backlog_active:
repl_backlog_size:
repl_backlog_first_byte_offset:
repl_backlog_histlen:
slave上:
[root@danny redis]# redis-cli -p -a password
127.0.0.1:> info replication
# Replication
role:slave
master_host:192.168.3.180
master_port:
master_link_status:up [root@danny redis]# redis-cli -p -a password
127.0.0.1:> info replication
# Replication
role:slave
master_host:192.168.3.180
master_port:
master_link_status:up
以上可看到已经完成主从同步,也可以去看看slave的启动日志,查看同步实时信息
[root@danny redis]# tailf /var/log/redis_6390.log
:S Jan ::29.985 * Connecting to MASTER 192.168.3.180:
:S Jan ::29.985 * MASTER <-> SLAVE sync started
:S Jan ::29.986 * Non blocking connect for SYNC fired the event.
:S Jan ::29.987 * Master replied to PING, replication can continue...
:S Jan ::29.987 * Partial resynchronization not possible (no cached master)
:S Jan ::29.989 * Full resync from master: 4da2c58d50928717d9a45216ced5c36a45a3b78c:
:S Jan ::30.055 * MASTER <-> SLAVE sync: receiving bytes from master
:S Jan ::30.055 * MASTER <-> SLAVE sync: Flushing old data
:S Jan ::30.055 * MASTER <-> SLAVE sync: Loading DB in memory
:S Jan ::30.055 * MASTER <-> SLAVE sync: Finished with success
三.哨兵启用
进入redis的安装目录可以看到
[root@danny bin]# ls
dump.rdb redis-benchmark redis-check-aof redis-check-dump redis-cli redis-sentinel redis-server
[root@danny bin]# pwd
/usr/local/redis/bin
启动哨兵
./redis-sentinel /etc/redis/sentinel_26379.conf
四.哨兵测试
打开slave机上哨兵日志
关闭master机上redis
日志如下:
:X Jan ::21.086 # +sdown master mymaster 192.168.3.180
:X Jan ::21.086 # +odown master mymaster 192.168.3.180 #quorum /
:X Jan ::21.086 # +new-epoch
:X Jan ::21.086 # +try-failover master mymaster 192.168.3.180
:X Jan ::21.132 # +vote-for-leader 911877d1d33938dbdfdd0224ea61a3245df12617
:X Jan ::21.132 # +elected-leader master mymaster 192.168.3.180
:X Jan ::21.133 # +failover-state-select-slave master mymaster 192.168.3.180
:X Jan ::21.224 # +selected-slave slave 192.168.3.184: 192.168.3.184 @ mymaster 192.168.3.180
:X Jan ::21.224 * +failover-state-send-slaveof-noone slave 192.168.3.184: 192.168.3.184 @ mymaster 192.168.3.180
:X Jan ::21.307 * +failover-state-wait-promotion slave 192.168.3.184: 192.168.3.184 @ mymaster 192.168.3.180
:X Jan ::22.189 # +promoted-slave slave 192.168.3.184: 192.168.3.184 @ mymaster 192.168.3.180
:X Jan ::22.189 # +failover-state-reconf-slaves master mymaster 192.168.3.180
:X Jan ::22.237 * +slave-reconf-sent slave 192.168.3.184: 192.168.3.184 @ mymaster 192.168.3.180
:X Jan ::23.194 * +slave-reconf-inprog slave 192.168.3.184: 192.168.3.184 @ mymaster 192.168.3.180
:X Jan ::23.194 * +slave-reconf-done slave 192.168.3.184:6391 192.168.3.184 6391 @ mymaster 192.168.3.180
:X Jan ::23.270 # +failover-end master mymaster 192.168.3.180
:X Jan ::23.270 # +switch-master mymaster 192.168.3.180 6390 192.168.3.184 6390
:X Jan ::23.271 * +slave slave 192.168.3.184: 192.168.3.184 @ mymaster 192.168.3.184
:X Jan ::23.271 * +slave slave 192.168.3.180: 192.168.3.180 @ mymaster 192.168.3.184
:X Jan ::53.292 # +sdown slave 192.168.3.180: 192.168.3.180 @ mymaster 192.168.3.184
:X Jan ::40.874 # -sdown slave 192.168.3.180: 192.168.3.180 @ mymaster 192.168.3.184
可以看到,新的master已经被选举出来了。
备注:
有时候redis的master宕了之后哨兵并没有实现故障转移,哨兵日志打印为:
failover-abort-not-elected master mymaster 192.168.1.88 6379
可能原因之一就是哨兵集群的下列两个初始值没有一致,保证每个哨兵的初始值一样即可。
sentinel config-epoch mymaster
sentinel leader-epoch mymaster
redis一主二从加哨兵的更多相关文章
- docker-compose一键部署redis一主二从三哨兵模式(含密码,数据持久化)
本篇基于centos7服务器进行部署开发 一.拉取redis镜像,使用如下命令 docker pull redis 1.查看镜像是否拉取成功,使用如下命令 docker images 显示如下则证明拉 ...
- springboot 集成Redis一主二从三哨兵
1.Centos7 Redis一主二从三哨兵配置 Redis一主二从三哨兵环境搭建 2.接入过程 与集成redis单机不同的是jedis相关的配置做了修改,JedisPool换成了JedisSenti ...
- redis 一主二从三哨兵
总体部署 一主二从三哨兵 ip地址分配分别为 主 127.0.0.1:6379 从 127.0.0.1:6389 从 127.0.0.1:6399 哨兵 127.0.0.1:26379 哨兵 127. ...
- redis一主二从三哨兵
redis做集群的时候有很多种配置方法,一主二从三哨兵这种模式是官网推荐的.,写配置文件链接的时候,写的是哨兵地址,不是IP,用户名,密码之类的. 一主二从很好理解,一个主的redis,实时备份到两个 ...
- Docker Compose搭建Redis一主二从三哨兵高可用集群
一.Docker Compose介绍 https://docs.docker.com/compose/ Docker官方的网站是这样介绍Docker Compose的: Compose是用于定义和运行 ...
- linux 下Redis 5.0主从复制(一主二从)哨兵模式的搭建
文档结构如下: 一.环境说明: 作用 IP地址 端口 操作系统版本 安装目录 哨兵文件 主库 172.16.10.80 6379 Redhat 6.7 /redis5.0/redis-5.0.0 Se ...
- redis环境搭建及一主二从三哨兵模式配置
一.单机redis环境搭建 1.安装: OS:linux redhat6.5 下载redis 官网下载链接:https://redis.io/download 把安装包上传到服务器,进行解压 [roo ...
- 实践 - 搭建Redis一主两从三哨兵
实践 - 搭建Redis一主两从三哨兵 原因: 最近在复习Redis的时候,学习到了为了提高Redis集群的高可用性,有一个模式为哨兵模式.哨兵模式的作用是为了在主节点出现阻塞或者错误,无法接收数据的 ...
- docker compose搭建redis7.0.4高可用一主二从三哨兵集群并整合SpringBoot【图文完整版】
一.前言 redis在我们企业级开发中是很常见的,但是单个redis不能保证我们的稳定使用,所以我们要建立一个集群. redis有两种高可用的方案: High availability with Re ...
随机推荐
- 反射:修改请求头HttpWebRequest/Webclient Header属性的date值-"此标头必须使用适当的属性进行修改"
场景:调用外部接口,接口要求Header信息里面包涵Date信息,且Date信息必须是格式化好的,(他们用的是Java),但是C#默认的是Date属性不能被修改, 所以就会出现下面的错误: 未处理的异 ...
- Java Socket网络编程学习笔记(一)
0.前言 其实大概半年前就已经看过网络编程Socket的知识了(传统IO),但是因为长时间的不使用导致忘的一干二净,最近正好准备校招,又重新看了网络编程这一章, 是传统IO(BIO)相关的内容,故在此 ...
- java开发环境配置——IntelliJ IDEA
关于开发工具,之前是用eclipse,后来用了一段时间idea后,发现idea比eclipse好用太多了,所以推荐大家用idea 官网下载地址:https://www.jetbrains.com/id ...
- HTML和CSS前端教程03-CSS选择器
目录 1. CSS定义 2. 创建CSS的三种方法 2.1. 元素内嵌(权重最高) 2.2. 文档内嵌 2.3. 外部引用 3. CSS层叠和继承 3.1. 浏览器样式 3.2. 样式表层叠 3.3. ...
- Android 技能图谱学习路线
这里是在网上找到的一片Android学习路线,希望记录下来供以后学习 1Java 基础 Java Object类方法 HashMap原理,Hash冲突,并发集合,线程安全集合及实现原理 HashMap ...
- MySQL外键设置中的的 Cascade、NO ACTION、Restrict、SET NULL
例如: ALTER TABLE stuinfo ADD CONSTRAINT fk_stuinfo FOREIGN KEY(gradeid) REFERENCES grade(id) ON DELET ...
- 自动的自动化:EvoSuite 自动生成JUnit的测试用例
EvoSuite简介 EvoSuite是由Sheffield等大学联合开发的一种开源工具,用于自动生成测试用例集,生成的测试用例均符合Junit的标准,可直接在Junit中运行.得到了Google和Y ...
- 安装和使用git遇到的问题总结
一,centos7下安装(因为centos7下用yum安装git的版本太低了,所以只能下载源代码,然后用源代码安装) 下载编译工具 yum -y groupinstall "Developm ...
- Linux 下 C# Mono P/Invoke .so 动态链接库。
linux 的动态链接库 libgw.so 的函数 如下: struct lbt_chan { uint32_t freq_hz; uint16_t scan_time_us; }; struct l ...
- Ubuntu 16.04 启用 点击Launcher图标,窗口实现最小化 功能
安装了Ubuntu之后,要是每次都点击最小化按钮来实现窗口的最小化,操作起来很不方便,那么怎么样才能方便操作呢, Ubuntu 16.04 本身支持 点击应用程序Launcher图标实现最小化 功能, ...