在超过12个centos 5.8服务器的集群上,我使用本机logstash托运人部署了logstash,该托运人将/var/log/*/*.log回到中央logstash服务器。 我们尝试使用rsyslogd作为托运人,但由于rsyslogd的ImFile模块中存在一个错误,如果远程端没有回复,日志会堆积在内存中。 我们目前使用Redis作为传输机制,因此logstash01已经在本地运行redis,绑定到这些日志的VLAN的IP地址。 因此logstash-shipper在logstash01上发送到redis。 logstash01发送到在单独的进程中运行的Elasticsearch。 这就是我们所看到的。 Elasticsearch有141个被封锁的线程。 通过elasticsearch的父母表明: futex(0x7f4ccd1939d0, FUTEX_WAIT, 26374, NULL 这里是elasticsearch的jstack 这是来自logstash的jstack 所以..昨天晚上,一些web服务器(logstash的日志)变得疯狂,平均负载超过500。 在logstash01上,有这个 Dec 19 00:44:45 logstash01 kernel: [736965.925863] Killed process 23429 (redis-server) total-vm:5493112kB, anon-rss:4248840kB, file-rss:108kB 所以OOM杀手杀死了Redis服务器,这意味着日志堆积在服务器上的内存中,这些服务器正在运送东西。这意味着apache会把内裤弄乱。 (坦率地说,我不知道如何,我只是假设它是拖尾日志).. 这是我关于事件如何展开的理论: 我们有一个交通高峰。 生成了大量的日志。 这些堆积在Redis中,logstash / elasticsearch似乎只能处理300-400个新事件/秒。 Redis已经完全填补了OOM杀手无谓地屠杀的地步。 Redis停止接受新项目。 项目现在开始堆积在远程主机端。 一切都变得坚果 。 Apache停止接受请求。 (为什么?)。 问题是这些: 为什么apache只要有日志的尾随就行了。 这个东西是否会阻止Apache的写作? 有一个理智的方法可以使弹性search更快/更好/有弹性吗? 有没有一种健全的方法来使得Redis具有弹性,并且不会因为被OOM而死亡 是否有一个根本的缺陷,我已经把它设置,或每个人都有这个问题? – 编辑 – 一些规格为@lusis。 […]
build立 1个redis主 3个客户端redis奴隶(读)与隧道掌握写 每个redis实例是位于不同位置的不同服务器。 需求 保持一个持久的连接。 当一个从机断开连接时,能够尽快重新连接并重新与主机同步(<1分钟)。 在主人sshd TCPKeepAlive no autosshconfiguration文件 REDIS_SLAVE_PORT = 6379 REDIS_MASTER_PORT = 6379 AUTOSSH_FIRST_POLL = 5 AUTOSSH_POLL = 11 AUTOSSH_PORT = 20000 AUTOSSH_GATETIME = 10 AUTOSSH_LOGFILE = /家庭/ XXX / autossh.log AUTOSSH_PATH =的/ usr /斌/ SSH AUTOSSH_PIDFILE = /家庭/ XXX / autossh.pid AUTOSSH_LOGLEVEL = 7#FOR DEBUG 导出AUTOSSH_POLL AUTOSSH_LOGFILE AUTOSSH_PATH AUTOSSH_GATETIME AUTOSSH_PORT […]
场景:我们有两个同时运行的数据中心(都提供stream量)。 每个人都有自己的整个基础设施,所以它可以在没有其他人的情况下运行。 也就是说,在networking条件允许的情况下,我们希望我们的Redis数据库能够在两者之间同步。 在networking分区期间丢失密钥是可以接受的,因为有重复的密钥 – 它只是caching数据。 但是,当两个数据中心都启动时(从15-20%的caching命中,到30-40%的caching命中),我们从caching中获得最大的收益。 经过一番四处搜寻,我找不到任何有效地给我们多主人的东西。 (主要说“不这样做”或“不支持”)。 最后,我写了一个客户端,连接到两个主人,订阅数据库的keyspace事件,然后将所有SET命令之间的数据库(我们所有的密钥都设置过期) – 与一些内部“最近看到”caching防止重播循环。 目前,这个工作很好 – 唯一真正的缺点是,在我们得到一个新的关键事件之后,我们必须发出一个GETEX来获得密钥,并且它已经到期 – 所以你最终得到第二次读取(因此约2倍远程DC的RTT延迟)。 这也仅限于支持SET。 我的问题是:有没有更好的方式来获得这种多主复制? 我开始研究SYNC / PSYNC,但是这些协议没有太多的文档,也不确定客户端可能不会违反服务器的规定。
还有其他的线索,但我还有一个问题。 我们即将在工作中扩展网站以拥有多台服务器。 我们需要共享服务器之间的会话。 我们一直在研究不同的解决scheme,一个在memcached中 ,另一个在Memcached中用sessionhandler。 这可能会奏效。 这个想法是在每台机器上运行memcached,并让所有的web服务器访问所有其他服务器的memcached服务器,然后我们已经在机器之间共享会话,耶。 (我们没有资源来设置粘滞会话,这是一个稍后的项目,我们需要这个运行,现在我们需要这个运行,而且我们会用一个初始的DNS进行负载平衡) 但是,然后…如果我想要一个服务器,维护,或服务器崩溃,或任何原因。 我不希望用户放松会议,必须从头开始…这就是为什么我们需要某种Memcached不支持的复制。 然后我发现http://repcached.lab.klab.org/ – 它有memcached多主复制,这是伟大的,是我想要的。 但它是否适用于> 2台机器? 说3,5,10? 为了将来扩展。 我也研究过Redis的http://redis.io/ – 这看起来也很棒,但是对于php-session-handler支持来说更加“不稳定”,并且没有多主复制。 问题是我喜欢使用memcached,但是我希望能够在不丢失一半会话的情况下closures两个盒子中的一个。 有什么build议么?
我们从服务器发送日志,并在每台服务器上使用logstash进行装运。 所以我们从glob "/root/Desktop/Logstash-Input/**/*_log"读取日志。 input { file{ path => "/root/Desktop/Logstash-Input/**/*_log" start_position => "beginning" } } 从这个glob我们从我们想要添加到事件的path提取字段 。 例如:从目录path提取server , logtype等。我们这样做: filter { grok { match => ["path", "/root/Desktop/Logstash-Input/(?<server>[^/]+)/(?<logtype>[^/]+)/(?<logdate>[\d]+.[\d]+.[\d]+)/(?<logfilename>.*)_log"] } } 然后我们使用lumberjack输出插件将这些日志输出到中央logstash服务器。 output { lumberjack { hosts => ["xx.xx.xx.xx"] port => 4545 ssl_certificate => "./logstash.pub" } stdout { codec => rubydebug } } 问题在于,运送到中央服务器的日志会丢失使用grok添加的字段。 例如中央服务器上不存在server , logtype等。 […]
我对Redis实例有一个相当长期的问题。 当SELinux处于enforcing模式时, Redis服务器无法启动: [root@server ~]# service redis start Starting redis-server: [ OK ] 但事实上,它并没有像lsof所显示的那样开始。 它不返回结果: [root@server ~]# lsof -i :6379 为了进一步确认它没有运行,有一个redis日志: [5539] 21 Nov 03:44:34 # Opening port 6379: bind: Permission denied 现在,我对SELinuxpipe理非常新颖,请耐心等待,因为我可能错过了一些东西。 这是我所能看到的: [root@server ~]# semanage port -l | grep "redis" redis_port_t tcp 6379 [root@server ~]# semanage user -l SELinux User Prefix MCS Level […]
我正在使用redis作为caching服务器。 我可以以某种方式configuration多个redis服务器,即使其中一些服务器脱机,cachingfunction齐全(读/写)? 我研究了master-> slave,但是我看到的问题是,如果master失败了,我允许写入slave,一旦master重新启动,它们将被覆盖。 现在,主人只是提供旧的数据。 我唯一可以解决的办法是禁用写入光盘,但是如果我必须重新启动主设备,那么我就会失去一切。 而且我猜如果主人走了,奴隶就不会再同步了。
我一直在CentOS7.2上首次设置了sensu,但是我一直没有能够得到它的工作: 我似乎无法连接到API。 Uchiwa给出了错误: ALERT Datacenter site1 returned: Connection error. Is the Sensu API running?` 我已经试过了: curl -I http://localhost:4567/clients …我没有得到回应。 这里是/var/log/sensu/sensu-api.log http://pastebin.com/wHEHE0bH 我一直在创build一个脚本,使设置可重复。 请参阅下面的脚本显示我的configuration: http ://pastebin.com/QEt5Msku如果您在CentOS7上运行该脚本,它应该重复这个问题。 固定: 问题在下面的答案。 按照一个非官方的指南,在一个新的虚拟机上成功安装了sensu后,我比较了两个设置步骤,并在新build虚拟机的几个版本之后,逐步更换了一些步骤,我想通过非官方指南指出一个稍微不同的URL修复了我的问题(对于CentOS6的回购,但它在7上工作,它只是安装一个非当前版本0.20.3)。 echo '[sensu] name=sensu-main baseurl=http://repos.sensuapp.org/yum/el/6/x86_64/ gpgcheck=0 enabled=1' > /etc/yum.repos.d/sensu.repo
最近,我们注意到由redis引起的生产环境的CPU峰值,这可以在下面看到: 为了解决这个问题,我每天大概两次重新启动redis服务器(这显然很不理想,我想找出根本原因。 以下是我到目前为止所看到的一些事情: 1)查看redis日志文件中的任何exception。 以下似乎是可疑的: 2)研究了nginx的访问日志,看看我们是否遇到exception高的stream量。 答案是不。 3)New Relic透露,这个问题从16日(大约一个月前)的11月21日开始,但是在那个时候没有发布代码。 以下是关于我们设置的一些细节: Redis服务器: Redis server v=2.8.17 sha=00000000:0 malloc=jemalloc-3.6.0 bits=64 build=64a9cf396cbcc4c7 PHP: 5.3.27与fpm Redisconfiguration: daemonize yes pidfile /var/run/redis/redis.pid port 6379 timeout 0 tcp-keepalive 0 loglevel notice logfile /var/log/redis/redis.log syslog-enabled yes databases 16 save 900 1 save 300 10 save 60 10000 stop-writes-on-bgsave-error no rdbcompression yes rdbchecksum yes dbfilename […]
我一直在尝试使用http://www.ntop.org/get-started/download下载的CentOS软件中的ntopng软件来监视networking上发生的事情。 我遇到的问题是我找不到可以删除旧数据的软件的任何部分。 这个软件的磁盘使用率是非常不受控制的,它在几个月后使用了该服务器的79%的空间和87%的inode。 有没有人看到使用ntopng时只有最新的xx天或GB数据的解决scheme? 同时确保它不会耗尽inode。 可以/我应该删除任何旧文件和rrd数据目录中的空目录?