1000 台服务器意味着什么?

如果一个公司有 1000 台或者更多的服务器意味着什么了?我们可以用 MTBF 这个指标来计算。
MTBF 表示平均无故障的时间(Mean Time Between Failure),是一个统计值,显然量越大越准确。
各个服务器的 MTBF 为 mtbf1, mtbf2…则整个服务器集群的 MTBF 为
1/(1/mtbf1 + 1/mtbf2 + …)

也就是说,一台服务器的 MTBF 为 3 年,也就是 3*365,则 1000 台服务器的 MTBF 为:
1/(1000*1/(365*3))=1.095 天

一个公司如果有 1k 台服务器的话,1天就会出现硬盘、电源等问题。如果是万级别的量的话,工程师准备 24h 驻守现场吧 :-(

Nagios 监控不同的网卡

以一个简单的情况来说明问题,默认情况下,Nagios 只会监控(ping, ssh etc)服务器的某一个 IP,这个特定的 IP 宏 $HOSTADDRESS 解释,而该值来自于 host 定义中的 address 指令。
系统默认定义的 ping command 如下:
define command{
        command_name    check_ping
        command_line    $USER1$/check_ping -H $HOSTADDRESS$ -w $ARG1$ -c $ARG2$ -p 100
        }  

显然,该指令只能监控某一个网卡,或者更具体的说是某一个 IP 的健康状况,如果服务器上有多个 IP,就需要重新定义该命令:
define command{
        command_name    check_ping_new
        command_line    $USER1$/check_ping -H $ARG1$ -w $ARG2$ -c $ARG3$ -p 100
        }  

Continue reading

使用 Puppet 安装 deb 包

一般安装一个包可以使用 apt 方式安装,puppet 也提供了这种功能:
class package{

   $apppackage = [
            "screen",
            "htop",
            "expect",
            "traceroute",
            "curl",
            "ethtool"
   ]
    package
        { $apppackage:
                ensure => installed,
        }  
}
Continue reading

解决 nf_conntrack: table full, dropping packet 的几种思路

nf_conntrack 工作在 3 层,支持 IPv4 和 IPv6,而 ip_conntrack 只支持 IPv4。目前,大多的 ip_conntrack_* 已被 nf_conntrack_* 取代,很多 ip_conntrack_* 仅仅是个 alias,原先的 ip_conntrack 的 /proc/sys/net/ipv4/netfilter/ 依然存在,但是新的 nf_conntrack 在 /proc/sys/net/netfilter/ 中,这个应该是做个向下的兼容:
$ pwd
/proc/sys/net/ipv4/netfilter
$ ls
ip_conntrack_buckets          ip_conntrack_tcp_loose                ip_conntrack_tcp_timeout_syn_recv
ip_conntrack_checksum         ip_conntrack_tcp_max_retrans          ip_conntrack_tcp_timeout_syn_sent
ip_conntrack_count            ip_conntrack_tcp_timeout_close        ip_conntrack_tcp_timeout_syn_sent2
ip_conntrack_generic_timeout  ip_conntrack_tcp_timeout_close_wait   ip_conntrack_tcp_timeout_time_wait
ip_conntrack_icmp_timeout     ip_conntrack_tcp_timeout_established  ip_conntrack_udp_timeout
ip_conntrack_log_invalid      ip_conntrack_tcp_timeout_fin_wait     ip_conntrack_udp_timeout_stream
ip_conntrack_max              ip_conntrack_tcp_timeout_last_ack
ip_conntrack_tcp_be_liberal   ip_conntrack_tcp_timeout_max_retrans

$ pwd
/proc/sys/net/netfilter
$ ls
nf_conntrack_acct                  nf_conntrack_tcp_timeout_close
nf_conntrack_buckets               nf_conntrack_tcp_timeout_close_wait
nf_conntrack_checksum              nf_conntrack_tcp_timeout_established
nf_conntrack_count                 nf_conntrack_tcp_timeout_fin_wait
nf_conntrack_events                nf_conntrack_tcp_timeout_last_ack
nf_conntrack_events_retry_timeout  nf_conntrack_tcp_timeout_max_retrans
nf_conntrack_expect_max            nf_conntrack_tcp_timeout_syn_recv
nf_conntrack_generic_timeout       nf_conntrack_tcp_timeout_syn_sent
nf_conntrack_icmp_timeout          nf_conntrack_tcp_timeout_time_wait
nf_conntrack_log_invalid           nf_conntrack_tcp_timeout_unacknowledged
nf_conntrack_max                   nf_conntrack_udp_timeout
nf_conntrack_tcp_be_liberal        nf_conntrack_udp_timeout_stream
nf_conntrack_tcp_loose             nf_log/
conntrack_tcp_max_retrans
Continue reading