让我们看看我是否能正确解释这一点:
- 我有两个以太网接口的服务器 - 一个面向外部,一个面向内部。
- 我在一台服务器上有一个数据库(pg),可以从内部网络上的其他机器访问。
- 我在其他服务器上有 RoR 应用程序,并配置为使用所述数据库服务器上的数据库。
- Mongrel Clusters 配置正确 - 我可以启动集群并通过控制台访问 Rails 应用程序。
- 我使用的是 ubuntu 9.10 服务器版本。
- IP 在机器上静态分配 - 没有 DHCP 在工作。
好的,所以问题是在以太网适配器出现之前启动 Mongrel 的 init 脚本。当然,问题是数据库对 Rails 应用程序不可见,因为网络尚未激活。
系统日志启动事件的相关部分发布如下。
我已使用 /usr/sbin/update-rc.d mongrel_cluster defaults 将 mongrel 脚本“正常”添加到 init。我已将“启动顺序”移至 99z_mongrel_cluster。请注意,在下面的系统日志中,mongrel 集群是在 CRON 之后立即执行的,因此似乎我尽可能晚地将它添加到 init.d。
什么看起来正在发生的情况是,以太网接口尝试在初始化周期结束时激活,然后需要一些时间才能激活。我对其中的一些内容不太了解,但看起来我们从 tcpdump 上的 7.537... 转到 eth0 NIC 上的 9.266... 加载需要 1.5 秒以上?
在我的其他使用 DHCP 分配静态 IP 地址的环境中,此功能“正常”运行。
因此,问题是:
有没有办法让 NIC 更快或更快速地加载(根据即将出现的 HD,我猜对于更快的问题的答案是“否”)?
有没有办法确保在继续执行其他初始化任务之前 NIC 处于活动状态?根据我对 LSB 规范的了解,我已将 $network 放入了 mongrel 集群的Required-Start 初始化脚本中(同样,在其他测试环境中不需要这样做)。
我是否需要配置网络以使其加载速度更快?我的 /etc/hosts 和 /etc/resolv.conf看正确的。
驱动程序问题?
非常感谢。我已经为这个问题苦思冥想了好几天了。
Jul 26 15:08:03 web-01 kernel: [ 4.166954] usbhid: v2.6:USB HID core driver
Jul 26 15:08:03 web-01 kernel: [ 4.321657] 0000:03:00.0: eth0: (PCI Express:2.5GB/s:Width x1) 00:30:48:9f:08:cc
Jul 26 15:08:03 web-01 kernel: [ 4.321659] 0000:03:00.0: eth0: Intel(R) PRO/1000 Network Connection
Jul 26 15:08:03 web-01 kernel: [ 4.321743] 0000:03:00.0: eth0: MAC: 3, PHY: 8, PBA No: 0101ff-0ff
Jul 26 15:08:03 web-01 kernel: [ 4.321974] e1000e 0000:04:00.0: PCI INT A -> GSI 17 (level, low) -> IRQ 17
Jul 26 15:08:03 web-01 kernel: [ 4.322008] e1000e 0000:04:00.0: setting latency timer to 64
Jul 26 15:08:03 web-01 kernel: [ 4.322264] alloc irq_desc for 37 on node 0
Jul 26 15:08:03 web-01 kernel: [ 4.322265] alloc kstat_irqs on node 0
Jul 26 15:08:03 web-01 kernel: [ 4.322270] e1000e 0000:04:00.0: irq 37 for MSI/MSI-X
Jul 26 15:08:03 web-01 kernel: [ 4.322271] alloc irq_desc for 38 on node 0
Jul 26 15:08:03 web-01 kernel: [ 4.322272] alloc kstat_irqs on node 0
Jul 26 15:08:03 web-01 kernel: [ 4.322274] e1000e 0000:04:00.0: irq 38 for MSI/MSI-X
Jul 26 15:08:03 web-01 kernel: [ 4.322275] alloc irq_desc for 39 on node 0
Jul 26 15:08:03 web-01 kernel: [ 4.322276] alloc kstat_irqs on node 0
Jul 26 15:08:03 web-01 kernel: [ 4.322278] e1000e 0000:04:00.0: irq 39 for MSI/MSI-X
Jul 26 15:08:03 web-01 kernel: [ 4.397418] scsi6 : 3ware 9000 Storage Controller
Jul 26 15:08:03 web-01 kernel: [ 4.397484] 3w-9xxx: scsi6: Found a 3ware 9000 Storage Controller at 0xfadff000, IRQ: 16.
Jul 26 15:08:03 web-01 kernel: [ 4.481131] 0000:04:00.0: eth1: (PCI Express:2.5GB/s:Width x1) 00:30:48:9f:08:cd
Jul 26 15:08:03 web-01 kernel: [ 4.481133] 0000:04:00.0: eth1: Intel(R) PRO/1000 Network Connection
Jul 26 15:08:03 web-01 kernel: [ 4.481218] 0000:04:00.0: eth1: MAC: 3, PHY: 8, PBA No: 0101ff-0ff
Jul 26 15:08:03 web-01 kernel: [ 4.757252] 3w-9xxx: scsi6: Firmware FE9X 4.10.00.007, BIOS BE9X 4.08.00.002, Ports: 2.
Jul 26 15:08:03 web-01 kernel: [ 4.757743] scsi 6:0:0:0: Direct-Access AMCC 9650SE-2LP DISK 4.10 PQ: 0 ANSI: 5
Jul 26 15:08:03 web-01 kernel: [ 4.768713] sd 6:0:0:0: Attached scsi generic sg0 type 0
Jul 26 15:08:03 web-01 kernel: [ 4.769035] sd 6:0:0:0: [sda] 585916416 512-byte logical blocks: (299 GB/279 GiB)
Jul 26 15:08:03 web-01 kernel: [ 4.769880] sd 6:0:0:0: [sda] Write Protect is off
Jul 26 15:08:03 web-01 kernel: [ 4.769885] sd 6:0:0:0: [sda] Mode Sense: 23 00 10 00
Jul 26 15:08:03 web-01 kernel: [ 4.770609] sd 6:0:0:0: [sda] Write cache: disabled, read cache: enabled, supports DPO and FUA
Jul 26 15:08:03 web-01 kernel: [ 4.772342] sda: sda1 sda2 < sda5 >
Jul 26 15:08:03 web-01 kernel: [ 4.775558] sd 6:0:0:0: [sda] Attached SCSI disk
Jul 26 15:08:03 web-01 kernel: [ 5.278745] PM: Starting manual resume from disk
Jul 26 15:08:03 web-01 kernel: [ 5.278747] PM: Resume from partition 252:1
Jul 26 15:08:03 web-01 kernel: [ 5.278748] PM: Checking hibernation image.
Jul 26 15:08:03 web-01 kernel: [ 5.278922] PM: Resume from disk failed.
Jul 26 15:08:03 web-01 kernel: [ 5.301586] kjournald starting. Commit interval 5 seconds
Jul 26 15:08:03 web-01 kernel: [ 5.301606] EXT3-fs: mounted filesystem with ordered data mode.
Jul 26 15:08:03 web-01 kernel: [ 5.689456] type=1505 audit(1280182081.322:2): operation="profile_load" pid=480 name=/sbin/dhclient3
Jul 26 15:08:03 web-01 kernel: [ 5.689838] type=1505 audit(1280182081.322:3): operation="profile_load" pid=480 name=/usr/lib/NetworkManager/nm-dhcp-client.action
Jul 26 15:08:03 web-01 kernel: [ 5.690045] type=1505 audit(1280182081.322:4): operation="profile_load" pid=480 name=/usr/lib/connman/scripts/dhclient-script
Jul 26 15:08:03 web-01 kernel: [ 5.703353] type=1505 audit(1280182081.332:5): operation="profile_load" pid=481 name=/usr/sbin/tcpdump
Jul 26 15:08:03 web-01 kernel: [ 6.118815] Adding 1949688k swap on /dev/mapper/web--01-swap. Priority:-1 extents:1 across:1949688k
Jul 26 15:08:03 web-01 kernel: [ 6.262044] EXT3 FS on dm-0, internal journal
Jul 26 15:08:03 web-01 kernel: [ 6.298767] udev: starting version 147
Jul 26 15:08:03 web-01 kernel: [ 6.798595] ADDRCONF(NETDEV_UP): eth1: link is not ready
Jul 26 15:08:03 web-01 kernel: [ 6.803872] ip_tables: (C) 2000-2006 Netfilter Core Team
Jul 26 15:08:03 web-01 kernel: [ 6.830538] ADDRCONF(NETDEV_UP): eth0: link is not ready
Jul 26 15:08:03 web-01 kernel: [ 6.834499] lp: driver loaded but no devices found
Jul 26 15:08:03 web-01 kernel: [ 7.285196] kjournald starting. Commit interval 5 seconds
Jul 26 15:08:03 web-01 kernel: [ 7.321785] EXT3 FS on dm-2, internal journal
Jul 26 15:08:03 web-01 kernel: [ 7.321792] EXT3-fs: mounted filesystem with ordered data mode.
Jul 26 15:08:03 web-01 kernel: [ 7.535727] type=1505 audit(1280182083.165:6): operation="profile_replace" pid=868 name=/sbin/dhclient3
Jul 26 15:08:03 web-01 kernel: [ 7.536095] type=1505 audit(1280182083.165:7): operation="profile_replace" pid=868 name=/usr/lib/NetworkManager/nm-dhcp-client.action
Jul 26 15:08:03 web-01 kernel: [ 7.536298] type=1505 audit(1280182083.165:8): operation="profile_replace" pid=868 name=/usr/lib/connman/scripts/dhclient-script
Jul 26 15:08:03 web-01 kernel: [ 7.537283] type=1505 audit(1280182083.165:9): operation="profile_replace" pid=869 name=/usr/sbin/tcpdump
Jul 26 15:08:03 web-01 cron[950]: (CRON) INFO (pidfile fd = 3)
Jul 26 15:08:03 web-01 init: apport pre-start process (943) terminated with status 1
Jul 26 15:08:03 web-01 init: apport post-stop process (958) terminated with status 1
Jul 26 15:08:03 web-01 cron[961]: (CRON) STARTUP (fork ok)
Jul 26 15:08:03 web-01 cron[961]: (CRON) INFO (Running @reboot jobs)
Jul 26 15:08:03 web-01 logger: mongrel: starting mongrel cluster
Jul 26 15:08:04 web-01 kernel: [ 9.266524] e1000e: eth0 NIC Link is Up 1000 Mbps Full Duplex, Flow Control: None
Jul 26 15:08:04 web-01 kernel: [ 9.266892] ADDRCONF(NETDEV_CHANGE): eth0: link becomes ready
Jul 26 15:08:05 web-01 kernel: [ 9.430149] e1000e: eth1 NIC Link is Up 1000 Mbps Full Duplex, Flow Control: None
Jul 26 15:08:05 web-01 kernel: [ 9.430505] ADDRCONF(NETDEV_CHANGE): eth1: link becomes ready
Jul 26 15:08:05 web-01 kernel: [ 9.777969] e1000e: eth0 NIC Link is Down
Jul 26 15:08:07 web-01 kernel: [ 12.056047] e1000e: eth0 NIC Link is Up 1000 Mbps Full Duplex, Flow Control: None
Jul 26 15:08:15 web-01 kernel: [ 19.831671] eth0: no IPv6 routers present
Jul 26 15:08:16 web-01 kernel: [ 20.401469] eth1: no IPv6 routers present
Jul 26 15:08:38 web-01 ntpdate[783]: can't find host ntp.ubuntu.com
Jul 26 15:08:38 web-01 ntpdate[783]: no servers can be used, exiting
Jul 26 15:08:53 web-01 ntpdate[1130]: step time server 91.189.94.4 offset -0.293984 sec
Jul 26 15:17:01 web-01 CRON[1294]: (root) CMD ( cd / && run-parts --report /etc/cron.hourly)
答案1
除非你做了一些奇怪的事情,否则网络会在任何服务启动之前启动,所以我有点惊讶事情没有正常进行。
我不确定你的 /etc/network/interfaces 文件中有什么,但你可能想用 替换任何行allow-hotplug eth0
。auto eth0
热插拔选项意味着在完全协商网络链接之前不会启动接口。
我还会检查您的交换机配置。您可能需要在交换机上启用 portfast 或任何等效功能。Portfast 允许计算机跳过与生成树、VLAN 和以太通道相关的一些协商并更快地建立链接。但您不应在用于连接到其他交换机的任何交换机端口上使用此功能。
答案2
您需要让 Mongrel 的启动依赖于网络的启动。添加如下内容:
start on started networking
到您的/etc/init/mongrel.conf
(或类似)。查看该目录中的其他文件以获取指导或参阅man 5 init
。
答案3
更新 - Dennis,你的建议为我指明了正确的方向,尽管 Ubuntu / Debian 默认不使用 Upstart,而“start on”似乎是 Upstart 的命令。在安装之前,我想看看我是否可以让它与 SysVInit 一起工作。
LSB 使用Required-Start指定此类操作。我最初使用的是$network,它似乎仅在NIC联机时激活,而不一定在获取IP地址或其他网络服务激活时激活。然后我转到了$all,但它不是查询服务,而是将脚本执行移至所有其他初始化脚本的末尾,但不等待服务。
因此,为了解决这个问题,我在Required-Start中添加了$named和$time。$named指的是名称解析,而$time要求在查询时间服务器后设置系统时间。我从系统日志中知道这发生在eth0之后,所以应该是安全的。
谢谢你的帮助——这确实对我有很大帮助。