![Ucarp 在 Centos 6 上启动错误:“您必须提供有效的主机 ID”](https://linux22.com/image/611084/Ucarp%20%E5%9C%A8%20Centos%206%20%E4%B8%8A%E5%90%AF%E5%8A%A8%E9%94%99%E8%AF%AF%EF%BC%9A%E2%80%9C%E6%82%A8%E5%BF%85%E9%A1%BB%E6%8F%90%E4%BE%9B%E6%9C%89%E6%95%88%E7%9A%84%E4%B8%BB%E6%9C%BA%20ID%E2%80%9D.png)
我正在尝试让 ucarp 在 2 台运行 Apache 的 Centos 6 服务器上运行。我已经配置了/etc/sysconfig/carp/vip-001.conf和/etc/sysconfig/网络脚本/eth0和eth0:0例如在 serv1 上:
vip-001.conf:
# Virtual IP configuration file for UCARP
# The number (from 001 to 255) in the name of the file is the identifier
# $Id$
ID=001
# Set the same password on all mamchines sharing the same virtual IP
PASSWORD="MYPASSWD"
# You are required to have an IPADDR= line in the configuration file for
# this interface (so no DHCP allowed)
BIND_INTERFACE="eth0"
# Do *NOT* use a main interface for the virtual IP, use an ethX:Y alias
# with the corresponding /etc/sysconfig/network-scripts/ifcfg-ethX:Y file
# already configured and ith ONBOOT=no
VIP_INTERFACE="eth0:0"
# If you have extra options to add, see "ucarp --help" output
# (the lower the "-k <val>" the higher priority and "-P" to become master ASAP)
OPTIONS="-k 128 -P"
eth0:
DEVICE="eth0"
BOOTPROTO="static"
HWADDR="00:15:5D:09:16:0E"
NM_CONTROLLED="yes"
ONBOOT="yes"
TYPE="Ethernet"
UUID="9cffb321-f06b-49ce-a075-72baecaa0395"
IPADDR=192.168.9.185
NETMASK=255.255.240.0
BROADCAST=192.168.15.255
NETWORK=192.168.0.0
GATEWAY=192.168.15.254
eth0:0:
DEVICE=eth0:0
BOOTPROTO=none
ONBOOT=no
IPADDR=192.168.9.190
NETMASK=255.255.240.0
USERCTL=yes
IPV6INIT=no
Serv2 基本相同,只是 IP 有少许修改。但我无法启动 ucarp(ucarp start),而且一直出现错误:
[ERROR] You must supply a valid virtual host id
有人知道如何修复此问题吗?提前致谢!
编辑 1:好的,经过一些测试,似乎 ucarp 不使用我配置的 vip-001.conf 文件。当我尝试通过使用命令行配置来启动它时:ucarp start --vhid=1 它要求输入密码(我猜我可以使用 --password 选项设置)。那么...我在哪里设置它使用的文件?我查看了 /etc/init.d/carp,但它似乎没问题,而且我没有修改它,所以...
编辑 2:当我尝试通过 sh -x /etc/init.d/carp start 启动 ucarp 时,不断收到“在接口文件 ifcfg-eth0: 中未找到 IPADDR”错误。我不知道如何修复它...
答案1
我发现了问题。
注意初始化脚本中的第 55 行:
BIND_ADDRESS="`ifconfig ${BIND_INTERFACE} | sed -n 's/.*inet addr:\([^ ]*\) .*/\1/p' | head -n 1`"
这是尝试从输出中获取 IP 地址ifconfig eth0
。在英语中,它工作正常,因为ifconfig eth0
返回的内容类似于:
eth0 Link encap:Ethernet HWaddr C6:9B:8E:AF:A7:69
inet addr:192.168.6.192 Bcast:192.168.6.255 Mask:255.255.255.0
inet6 addr: fe80::c49b:8eff:feaf:a769/64 Scope:Link
所以:
# ifconfig eth0 | sed -n 's/.*inet addr:\([^ ]*\) .*/\1/p' | head -n 1
192.168.6.192
但用您的语言(法语?)ifconfig eth0
返回:
eth0 Link encap:Ethernet HWaddr 00:15:5D:09:16:0E
inet adr:192.168.9.185 Bcast:192.168.15.255 Masque:255.255.240.0
adr inet6: fe80::215:5dff:fe09:160e/64 Scope:Lien
请注意,它是“因特网地址“ 代替 ”inet 地址“,所以什么都不返回。这就是启动 UCARP 时ifconfig eth0 | sed -n 's/.*inet addr:\([^ ]*\) .*/\1/p' | head -n 1
得到的结果的原因。no IPADDR found in interface file ifcfg-eth0:
修复方法是打开 init 脚本并将第 55 行更改为:
BIND_ADDRESS="`ifconfig ${BIND_INTERFACE} | sed -n 's/.*inet adr:\([^ ]*\) .*/\1/p' | head -n 1`"
(只需删除“d”字符)
$IPADDR
或者更简单的方法是从中获取的值/etc/sysconfig/network-scripts/ifcfg-eth0
:
BIND_ADDRESS=${IPADDR}
答案2
在 vip-001.conf 等文件中,您无需设置 ID,它来自文件名。删除以 ID 开头的那行。
Serv2 也应该在 .conf 文件中具有略微不同的 k 值来设置优先级。