4.2. Pacemaker 中配置的虚拟 IP 地址
每个 IPaddr2 资源设置客户端用来请求访问服务的虚拟 IP 地址。如果分配给该 IP 地址的 Controller 节点停机,则会将 IP 地址重新分配给不同的控制器。在本例中,您可以看到当前设置为侦听特定虚拟 IP 地址的每个控制器(overcloud-controller-0、-1 等)。
ip-192.168.1.150 (ocf::heartbeat:IPaddr2): Started overcloud-controller-0
ip-10.200.0.6 (ocf::heartbeat:IPaddr2): Started overcloud-controller-1
ip-172.16.0.10 (ocf::heartbeat:IPaddr2): Started overcloud-controller-1
ip-172.16.0.11 (ocf::heartbeat:IPaddr2): Started overcloud-controller-0
ip-172.18.0.10 (ocf::heartbeat:IPaddr2): Started overcloud-controller-2
ip-172.19.0.10 (ocf::heartbeat:IPaddr2): Started overcloud-controller-2
请注意,每个 IP 地址最初附加到特定的控制器(例如 192.168.1.150 在 overcloud-controller-0上启动)。但是,如果该控制器停机,则会将其 IP 地址重新分配给集群中的其他控制器。以下是刚刚显示的 IP 地址的描述以及它们最初分配的 IP 地址:
- 192.168.1.150 :公共 IP 地址(从 network-environment.yaml中的 ExternalAllocationPools 分配)
- 10.200.0.6: 控制器虚拟 IP 地址(dhcp_start 和 dhcp_end 范围在 undercloud.conf中设置为 10.200.0.5-10.200.0.24)
- 172.16.0.10: IP 地址,提供对控制器上的 OpenStack API 服务的访问(从 network-environment.yaml中的 InternalApiAllocationPools 分配)
- 172.16.0.11: IP 地址提供对控制器上 Redis 服务的访问(从 network-environment.yaml中的 InternalApiAllocationPools 分配)
- 172.18.0.10: 存储虚拟 IP 地址,提供对 Glance API 和 Swift 代理服务的访问(从 network-environment.yaml中的 StorageAllocationPools 分配)
- 172.19.0.10: IP 地址,提供对存储管理的访问(从 network-environment.yaml中的 StorageMgmtAlloctionPools 分配)
您可以使用 pcs 命令查看 Pacemaker 中设置的特定 IPaddr2 地址的详情。例如,要查看特定虚拟 IP 地址的超时和其他相关信息,请为 IPaddr2 资源之一输入以下内容:
$ sudo pcs resource show ip-192.168.1.150
Resource: ip-192.168.1.150 (class=ocf provider=heartbeat type=IPaddr2)
Attributes: ip=192.168.1.150 cidr_netmask=32
Operations: start interval=0s timeout=20s (ip-192.168.1.150-start-timeout-20s)
stop interval=0s timeout=20s (ip-192.168.1.150-stop-timeout-20s)
monitor interval=10s timeout=20s (ip-192.168.1.150-monitor-interval-10s)
如果您登录到当前分配给侦听地址 192.168.1.150 的控制器,请运行以下命令来确保其处于活动状态,并确保服务主动侦听该地址:
$ ip addr show vlan100
9: vlan100: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc noqueue state UNKNOWN
link/ether be:ab:aa:37:34:e7 brd ff:ff:ff:ff:ff:ff
inet 192.168.1.151/24 brd 192.168.1.255 scope global vlan100
valid_lft forever preferred_lft forever
inet 192.168.1.150/32 brd 192.168.1.255 scope global vlan100
valid_lft forever preferred_lft forever
$ sudo netstat -tupln | grep 192.168.1.150
tcp 0 0 192.168.1.150:6080 0.0.0.0:* LISTEN 4333/haproxy
tcp 0 0 192.168.1.150:9696 0.0.0.0:* LISTEN 4333/haproxy
tcp 0 0 192.168.1.150:8000 0.0.0.0:* LISTEN 4333/haproxy
tcp 0 0 192.168.1.150:8003 0.0.0.0:* LISTEN 4333/haproxy
tcp 0 0 192.168.1.150:8004 0.0.0.0:* LISTEN 4333/haproxy
tcp 0 0 192.168.1.150:8773 0.0.0.0:* LISTEN 4333/haproxy
tcp 0 0 192.168.1.150:8774 0.0.0.0:* LISTEN 4333/haproxy
tcp 0 0 192.168.1.150:5000 0.0.0.0:* LISTEN 4333/haproxy
tcp 0 0 192.168.1.150:8776 0.0.0.0:* LISTEN 4333/haproxy
tcp 0 0 192.168.1.150:8777 0.0.0.0:* LISTEN 4333/haproxy
tcp 0 0 192.168.1.150:9292 0.0.0.0:* LISTEN 4333/haproxy
tcp 0 0 192.168.1.150:8080 0.0.0.0:* LISTEN 4333/haproxy
tcp 0 0 192.168.1.150:80 0.0.0.0:* LISTEN 4333/haproxy
tcp 0 0 192.168.1.150:35357 0.0.0.0:* LISTEN 4333/haproxy
udp 0 0 192.168.1.150:123 0.0.0.0:* 459/ntpd
...
tcp 0 0 0.0.0.0:22 0.0.0.0:* LISTEN 2471/sshd
tcp 0 0 0.0.0.0:4567 0.0.0.0:* LISTEN 10064/mysqld
...
udp 0 0 0.0.0.0:51475 0.0.0.0:* 545/dhclient
udp 0 0 0.0.0.0:123 0.0.0.0:* 459/ntpd
udp 0 0 0.0.0.0:161 0.0.0.0:* 1633/snmpd
...
ip 命令显示 vlan100 接口正在侦听 192.168.1.150 和 192.168.1.151 IPv4 地址。在 netstat 命令的输出中,您可以看到侦听 192.168.1.150 接口的所有进程。除了 ntpd 进程(在端口 123 上监听监听),haproxy 进程是唯一侦听 192.168.1.150 的进程。另外,请注意,通过 192.168.1.150 (sshd、mysqld、dhclient、ntpd 等)侦听所有本地地址的进程也提供。
netstat 输出中显示的端口号可帮助您识别确切的服务 haproxy 正在侦听。您可以在 /etc/haproxy/haproxy.cfg 文件中查看这些端口号所代表的服务。下面是几个示例:
- TCP 端口 6080: nova_novncproxy
- TCP 端口 9696: neutron
- TCP 端口 8000: heat_cfn
- TCP 端口 8003: heat_cloudwatch
- TCP 端口 80: horizon
目前,在 haproxy.cfg 中,所有这三个控制器都特别侦听 192.168.1.150 服务。但是,目前只有 controller-0 在外部侦听 192.168.1.150。因此,如果 controller-0 停机,HAProxy 只需要将 192.168.1.150 重新分配给另一个控制器,并且所有服务都已在运行。