Logstash2.3.4趟坑之集成Redis哨兵模式

最新在使用Lostash2.3.4收集数据的时候,在读取redis数据的时候,报了如下的一个异常:

异常如下

Pipeline aborted due to error {:exception=>#<URI::InvalidURIError: the scheme redis does not accept registry part: redis_master_10214 (or bad hostname?)>, :backtrace=>["/home/search/logstash-2.3.4/vendor/jruby/lib/ruby/1.9/uri/generic.rb:214:in `initialize‘"

Logstash自带的ruby是1.9的版本,自带集成的redis插件也是最新的redis-rb3.3.1

Logstash里面默认自带了redis插件,也就是redis-rb3.3.1

如果没带可以进入logstash目录:

logstash-2.3.4\vendor\jruby\bin进行安装

cd logstash-2.3.4\vendor\jruby\bin
gem install redis

如果redis采用的是哨兵模式的集群,那么redis-rb插件也是支持的,具体的看官网github文档:

https://github.com/redis/redis-rb

logstash的代码如下:

input{
 stdin{}
}

filter{

ruby{
init => "
require ‘redis‘

class Rconn
   @@SENTINELS = [{:host => ‘192.168.10.214‘, :port => 26381},
             {:host => ‘192.168.10.214‘, :port => 26382},
             {:host => ‘192.168.10.214‘, :port => 26383}]
   def self.con
   @@con
   end 

   def self.SENTINELS
   @@SENTINELS
   end
   @@con = Redis.new(:url => ‘redis://redismaster10214‘, :sentinels => Rconn.SENTINELS, :role => :master)
end
"
code => "
event[‘redis_data‘]=Rconn.con.get(event[‘message‘])
"
}
}

output{
  stdout { codec => rubydebug }
}

注意下面这句话

:url => ‘redis://redismaster10214‘

redis的哨兵masterName在ruby1.9中必须不能带下划线,否则会报下面的异常:

错误的用法

:url => ‘redis://redis_master_10214‘
<URI::InvalidURIError: the scheme redis does not accept registry part: redis_master_10214 (or bad hostname?)>,

ruby里面的标准的url校验,发现url里面如果有带下划线的,会认为是不合法的url,具体可参考下面两个问题连接:

https://github.com/docker/compose/issues/472

http://stackoverflow.com/questions/2180465/can-domain-name-subdomains-have-an-underscore-in-it

目前在ruby1.9的版本中发现此bug,使用最新的版本ruby2.3.0则没有此问题,说明在高版本的ruby中 已经修复了此问题,但是logstash最新的版本绑定的jruby版本是1.9的ruby,所以还存在此问题,只能在使用时避免,真是血泪教训,花费了大半天时间趟的坑。

有什么问题可以扫码关注微信公众号:我是攻城师(woshigcs),在后台留言咨询。 技术债不能欠,健康债更不能欠, 求道之路,与君同行。 
时间: 2024-11-09 12:50:08

Logstash2.3.4趟坑之集成Redis哨兵模式的相关文章

Spring 集成Redis哨兵模式

Spring 集成Redis哨兵模式 1.pom文件添加以下jar <dependency> <groupId>org.springframework.data</groupId> <artifactId>spring-data-redis</artifactId> <version>1.7.2.RELEASE</version> </dependency> <!-- redis客户端jar -->

Springboot2.x集成Redis哨兵模式

Springboot2.x集成Redis哨兵模式 说明 Redis哨兵模式是Redis高可用方案的一种实现方式,通过哨兵来自动实现故障转移,从而保证高可用. 准备条件 pom.xml中引入相关jar <!-- 集成Redis --> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-data-redis</arti

Redis 哨兵模式与Redis集群

第1章 Redis哨兵模式: 1.1 sentinel的功能: 1.      监控,sentinel会不断的检查你的主服务器和从服务器是否运行正常 2.      提醒.当被监控的某个redis服务器出现问题时,sentinel可以通过API向管理员或者其他应用程序发送通知 3.      自动故障迁移 1.2 服务器连接: 1.2.1 sentinel通过用户配置的配置文件来发现主服务器 sentinel会与被监视的主服务器创建两个网络连接: 1.      命令连接用于向主服务器发送命令

Redis哨兵模式的配置

绪论 现有三台设备,192.168.137.11.192.168.137.12和192.168.137.13,要求在三台设备上实现redis哨兵模式,其中192.168.137.11为master,其他两台为slave. 1.在Master上配置redis.conf文件 配置文件内容如下: protected-mode no (关闭保护模式) port 6379 daemonize yes (设置redis在后台启动) pidfile /var/run/redis_6379.pid logfil

Redis哨兵模式集群部署

上次搭测试环境的时候写了一个redis哨兵模式搭建的博客,不幸的是我的博客网站挂掉了,这次搭生产环境再将redis哨兵模式集群模式搭建记录一次.(博客园不会丢掉我的数据吧..) 本次部署包含三个节点,一个主节点,两个从节点,从节点上面有两个哨兵(sentinel). 一.将需要安装redis压缩包上传到其中一台服务器的/usr/local目录下. cd /usr/local //进入文件夹tar -xvf redis-5.0.4.tar.gz //解压cd redis-5.0.4 //进入目录m

[转]Redis哨兵模式(sentinel)学习总结及部署记录(主从复制、读写分离、主从切换)

Redis的集群方案大致有三种:1)redis cluster集群方案:2)master/slave主从方案:3)哨兵模式来进行主从替换以及故障恢复. 一.sentinel哨兵模式介绍Sentinel(哨兵)是用于监控redis集群中Master状态的工具,是Redis 的高可用性解决方案,sentinel哨兵模式已经被集成在redis2.4之后的版本中.sentinel是redis高可用的解决方案,sentinel系统可以监视一个或者多个redis master服务,以及这些master服务的

redis哨兵模式

前面总结了redis的主从复制,实现了读写分离,但是这种模式存在了一定的弊端,例如主机宕机后,从机就失去了存在的意义,因为从机无法反客为主,实现对外提供服务.需要人工手动操作.而redis的哨兵模式可以实现当主机宕机后,从机根据投票模式,票数多的自动切换成主机.下面总结一些如何进行配置. (1)首先还是准备3台服务器,ip分别为192.168.0.101(主机), 192,168.0.102, 192.168.0.104. (2)先配置好主从复制,使用命令slaveof host post,如下

Sentinel Redis哨兵模式

Redis_sentinel 哨兵模式 Redis 架构一般是一主多从:Sentinel 一般3组进行相互监控:     Redis wget http://download.redis.io/releases/redis-3.2.4.tar.gz tar -zxvf redis-3.2.4.tar.gz cd redis make && make install cp -rp redis/src/redis-trib.rb /usr/local/bin/ cp -rp redis/src

Redis哨兵模式(Sentinel)的搭建

一.Redis的哨兵模式 Sentinel是Redis官方提供的一种高可用方案(除了Sentinel,Redis Cluster是另一种方案),它可以自动监控Redis master/slave的运行状态,如果发现master无法访问了,就会启动failover把其中一台可以访问的slave切换为master,并且通过pub/sub事件通知Redis客户端新的master的ip地址. 支持Sentinel的Redis客户端(例如java的Jedis)会在连接Redis服务器的时候向Sentine