Octavia:尝试删除不可变的负载均衡器

时间:2020-10-02 06:49:26

标签: openstack

我有一个要删除的负载均衡器(请参阅下面的状态)。我已经删除了其池中的实例。完全公开:这是在我重新启动的Devstack上,并在其中手动创建了 lb-mgmt-network 路由的地方。重新启动后,我可能忽略了一个细节。负载平衡器在重新启动之前可以正常工作。

删除负载均衡器的第一步是删除其池成员。失败如下:

$ alias olb='openstack loadbalancer'
$ olb member delete website-pool 08f55..
Load Balancer 1ff... is immutable and cannot be updated. (HTTP 409)

如何使其可变?

下面,在重新创建 o-hm0 路由并重新启动双耳瓶之后,请查看负载均衡器的状态。它的配置状态为ERROR,但是according to the API,这应该使我可以将其删除:

$ olb status show kubelb
{
    "loadbalancer": {
        "id": "1ff7682b-3989-444d-a1a8-6c91aac69c45",
        "name": "kubelb",
        "operating_status": "ONLINE",
        "provisioning_status": "ERROR",
        "listeners": [
            {
                "id": "d3c3eb7f-345f-4ded-a7f8-7d97e3af0fd4",
                "name": "weblistener",
                "operating_status": "ONLINE",
                "provisioning_status": "ACTIVE",
                "pools": [
                    {
                        "id": "9b0875e0-7d16-4ebc-9e8d-d1b90d4264a6",
                        "name": "website-pool",
                        "provisioning_status": "ACTIVE",
                        "operating_status": "ONLINE",
                        "members": [
                            {
                                "id": "08f55bba-260a-4b83-ad6d-f9d6b44f0e2c",
                                "name": "",
                                "operating_status": "NO_MONITOR",
                                "provisioning_status": "ACTIVE",
                                "address": "172.16.0.21",
                                "protocol_port": 80
                            },
                            {
                                "id": "f7665e90-dad0-480e-8ef4-65e0a042b9fa",
                                "name": "",
                                "operating_status": "NO_MONITOR",
                                "provisioning_status": "ACTIVE",
                                "address": "172.16.0.22",
                                "protocol_port": 80
                            }
                        ]
                    }
                ]
            }
        ]
    }
}

2 个答案:

答案 0 :(得分:0)

如果我对文档和源代码的理解正确,那么可以删除但不能对其进行修改,以置备状态为ERROR的负载均衡器。不幸的是,只有在删除其池和侦听器后才能删除它,这会修改负载均衡器。在我看来就像是鸡和鸡蛋的问题。我通过从头开始重新创建云来“解决”此问题。我想我也可以清理数据库。

对stack.sh日志文件的分析表明,还需要执行一些其他步骤才能使Devstack云能够重新启动。为了使Octavia做好准备:

  • 创建 / var / run / octavia ,由堆栈用户拥有
  • 确保o-hm0已启动
  • 为o-hm0提供正确的MAC和IP地址,这两个地址都在Neutron端口 octavia-health-manager-standalone-listen-port
  • 的详细信息中找到
  • 为来自o-hm0的流量添加netfilter规则

在这一点上,我觉得我可以重新启动Devstack并仍然可以使用负载均衡器。奇怪的是,所有负载平衡器的 operating_status (以及其侦听器和池的 operating_status )都处于脱机状态。但是,这并不妨碍他们正常工作。我还没有找到如何使它在线的方法。

如果有人感兴趣,下面是重启Devstack后我使用的脚本。此外,我还更改了Netplan配置,以便br-ex获取服务器的IP地址(在下面进一步介绍)。

restore-devstack脚本:

$ cat restore-devstack

source ~/devstack/openrc admin admin

if losetup -a | grep -q /opt/stack/data/stack-volumes
then echo loop devices are already set up
else
    sudo losetup -f --show --direct-io=on /opt/stack/data/stack-volumes-default-backing-file
    sudo losetup -f --show --direct-io=on /opt/stack/data/stack-volumes-lvmdriver-1-backing-file
    echo restarting Cinder Volume service
    sudo systemctl restart devstack@c-vol
fi
sudo lvs
openstack volume service list
echo
echo recreating /var/run/octavia
sudo mkdir /var/run/octavia
sudo chown stack /var/run/octavia
echo
echo setting up the o-hm0 interface
if ip l show o-hm0 | grep -q 'state DOWN'
then sudo ip l set o-hm0 up
else echo o-hm0 interface is not DOWN
fi

HEALTH_IP=$(openstack port show octavia-health-manager-standalone-listen-port -c fixed_ips -f yaml | grep ip_address | cut -d' ' -f3)
echo health monitor IP is $HEALTH_IP
if ip a show dev o-hm0 | grep -q $HEALTH_IP
then echo o-hm0 interface has IP address
else sudo ip a add ${HEALTH_IP}/24 dev o-hm0
fi
HEALTH_MAC=$(openstack port show octavia-health-manager-standalone-listen-port -c mac_address -f value)
echo health monitor MAC is $HEALTH_MAC
sudo ip link set dev o-hm0 address $HEALTH_MAC
echo o-hm0 MAC address set to $HEALTH_MAC
echo route to loadbalancer network:
ip r show 192.168.0.0/24
echo
echo fix netfilter for Octavia
sudo iptables -A INPUT -i o-hm0 -p udp -m udp --dport 20514 -j ACCEPT
sudo iptables -A INPUT -i o-hm0 -p udp -m udp --dport 10514 -j ACCEPT
sudo iptables -A INPUT -i o-hm0 -p udp -m udp --dport 5555 -j ACCEPT
echo fix netfilter for Magnum
sudo iptables -A INPUT -d 192.168.1.200/32 -p tcp -m tcp --dport 443 -j ACCEPT
sudo iptables -A INPUT -d 192.168.1.200/32 -p tcp -m tcp --dport 80 -j ACCEPT
sudo iptables -A INPUT -d 192.168.1.200/32 -p tcp -m tcp --dport 9511 -j ACCEPT

Netplan配置:

$ cat /etc/netplan/00-installer-config.yaml
# This is the network config written by 'subiquity'
network:
  ethernets:
    enp1s0:
      dhcp4: no
    br-ex:
      addresses: [192.168.1.200/24]
      nameservers: { addresses: [192.168.1.16,1.1.1.1] }
      gateway4: 192.168.1.1
  version: 2

答案 1 :(得分:0)

当负载均衡器处于ERROR状态时,有两个选择:

  1. 使用级联删除选项(cli上的--cascade)删除负载均衡器。
  2. 在云修复后,使用故障转移API告诉Octavia修复负载平衡器。

在Octavia中,操作状态是已测量/已观察状态。如果他们不联机,则lb-mgmt-net可能存在网络配置问题,并且运行状况心跳消息(UDP 5555)无法将其返回给运行状况管理器控制器。

也就是说,重新启动后devstack无法设置为工作。特别是中子和网络接口将处于不正确的状态。如您所见,您可以手动重新配置这些文件,通常可以使它们重新工作。