[openstack-dev] [octavia] haproxy fails to receive datagram
Yipei Niu
newypei at gmail.com
Mon Sep 25 08:33:19 UTC 2017
Hi, all,
I encounter some problems when using Octavia. After installing octavia with
devstack, I create a load balancer named lb1 (VIP: 10.0.1.9, IP of VRRP
port: 10.0.1.3) for a subnet (10.0.1.0/24), then a listener, a pool, and
two members. All the resources are created successfully. The two members
(VMs) reside in the same subnet, whose IP are 10.0.1.6 and 10.0.1.7,
respectively. To simulate a web server in each VM, I run "while true; do
echo -e "HTTP/1.0 200 OK\r\n\r\nWelcome to $VM_IP" | sudo nc -l -p 80;done"
to listen on port 80 and return the VM's IP if the request is accepted. I
run "sudo ip netns exec qdhcp-XXXX curl -v $VM_IP" to send requests to VMs,
the "web servers" in VMs work (already added corresponding security rules
to the VMs). Then I tried to run "sudo ip netns exec qdhcp-XXXX curl -v
$VIP" to send requests, the VMs do not respond, and finally returns a
timeout error.
The configuration details in local.conf are as follows.
*[[local|localrc]]*
*DATABASE_PASSWORD=password*
*RABBIT_PASSWORD=password*
*SERVICE_PASSWORD=password*
*SERVICE_TOKEN=password*
*ADMIN_PASSWORD=password*
*HOST_IP=192.168.56.9*
*LOGFILE=/opt/stack/logs/stack.sh.log*
*VERBOSE=True*
*LOG_COLOR=True*
*SCREEN_LOGDIR=/opt/stack/logs*
*# Neutron LBaaS*
*enable_plugin neutron-lbaas https://github.com/openstack/neutron-lbaas.git
<https://github.com/openstack/neutron-lbaas.git>*
*enable_plugin octavia https://github.com/openstack/octavia.git
<https://github.com/openstack/octavia.git>*
*ENABLED_SERVICES+=,q-lbaasv2*
*ENABLED_SERVICES+=,octavia,o-cw,o-hk,o-hm,o-api*
*disable_service horizon*
*disable_service tempest*
To investigate the source of the error, I logon to the amphora. The details
of interfaces of amphora_haproxy network namespace are as follows.
*1: lo: <LOOPBACK> mtu 65536 qdisc noop state DOWN group default qlen 1*
* link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00*
*3: eth1: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1450 qdisc pfifo_fast state
UP group default qlen 1000*
* link/ether fa:16:3e:42:bf:d9 brd ff:ff:ff:ff:ff:ff*
* inet 10.0.1.3/24 <http://10.0.1.3/24> brd 10.0.1.255 scope global eth1*
* valid_lft forever preferred_lft forever*
* inet 10.0.1.9/24 <http://10.0.1.9/24> brd 10.0.1.255 scope global
secondary eth1:0*
* valid_lft forever preferred_lft forever*
* inet6 fe80::f816:3eff:fe42:bfd9/64 scope link*
* valid_lft forever preferred_lft forever*
So I run "sudo ip netns exec amphora-haproxy tcpdump -i eth1 -nn 'tcp'" to
check whether amphora receive the request. The details are as follows.
*tcpdump: verbose output suppressed, use -v or -vv for full protocol decode*
*listening on eth1, link-type EN10MB (Ethernet), capture size 262144 bytes*
*^C06:11:49.048973 IP 10.0.1.2.33700 > 10.0.1.9.80: Flags [S], seq
1717936594, win 28200, options [mss 1410,sackOK,TS val 28032309 ecr
0,nop,wscale 7], length 0*
*06:11:50.031976 IP 10.0.1.2.33700 > 10.0.1.9.80: Flags [S], seq
1717936594, win 28200, options [mss 1410,sackOK,TS val 28032559 ecr
0,nop,wscale 7], length 0*
*06:11:52.026565 IP 10.0.1.2.33700 > 10.0.1.9.80: Flags [S], seq
1717936594, win 28200, options [mss 1410,sackOK,TS val 28033060 ecr
0,nop,wscale 7], length 0*
*06:11:56.002577 IP 10.0.1.2.33700 > 10.0.1.9.80: Flags [S], seq
1717936594, win 28200, options [mss 1410,sackOK,TS val 28034062 ecr
0,nop,wscale 7], length 0*
*06:12:03.909721 IP 10.0.1.2.33700 > 10.0.1.9.80: Flags [S], seq
1717936594, win 28200, options [mss 1410,sackOK,TS val 28036064 ecr
0,nop,wscale 7], length 0*
Based on the trace, we can see that amphora do receive the request, but
haproxy does not send handshake datagram to respond. Then, to see whether
haproxy in the amphora listens on the right IP and port, I print
/var/lib/octavia/ec5ee7c5-7474-424f-9f44-71b338cf3e57/haproxy.cfg in the
console and see the following info.
*# Configuration for lb1*
*global*
* daemon*
* user nobody*
* log /dev/log local0*
* log /dev/log local1 notice*
* stats socket
/var/lib/octavia/ec5ee7c5-7474-424f-9f44-71b338cf3e57.sock mode 0666 level
user*
*defaults*
* log global*
* retries 3*
* option redispatch*
* timeout connect 5000*
* timeout client 50000*
* timeout server 50000*
*frontend ec5ee7c5-7474-424f-9f44-71b338cf3e57*
* option httplog*
* bind 10.0.1.9:80 <http://10.0.1.9:80>*
* mode http*
* default_backend 40537c80-979d-49c9-b3ae-8504812c0f42*
*backend 40537c80-979d-49c9-b3ae-8504812c0f42*
* mode http*
* balance roundrobin*
* server 73dc9a1d-1e92-479b-a6f3-8debd0ea17b8 10.0.1.6:80
<http://10.0.1.6:80> weight 1*
* server 4cdca33f-9cde-4ac2-a5bd-550d3e65f0f2 10.0.1.7:80
<http://10.0.1.7:80> weight 1*
Next, I print the info of all the running haproxy process in the console
and copy it below.
*root 2367 0.0 0.0 4228 740 ? Ss 07:14 0:00
/usr/sbin/haproxy-systemd-wrapper -f /etc/haproxy/haproxy.cfg -p
/run/haproxy.pid*
*haproxy 2370 0.0 0.5 37692 5340 ? S 07:14 0:00
/usr/sbin/haproxy -f /etc/haproxy/haproxy.cfg -p /run/haproxy.pid -Ds*
*haproxy 2371 0.0 0.0 37692 924 ? Ss 07:14 0:00
/usr/sbin/haproxy -f /etc/haproxy/haproxy.cfg -p /run/haproxy.pid -Ds*
*root 2471 0.0 0.0 4228 636 ? Ss 07:14 0:00
/usr/sbin/haproxy-systemd-wrapper -f
/var/lib/octavia/ec5ee7c5-7474-424f-9f44-71b338cf3e57/haproxy.cfg -f
/var/lib/octavia/haproxy-default-user-group.conf -p
/var/lib/octavia/ec5ee7c5-7474-424f-9f44-71b338cf3e57/ec5ee7c5-7474-424f-9f44-71b338cf3e57.pid
-L A2GNEZ_IsG5HmdyY2LmdG3LSOco*
*nobody 2477 0.0 0.5 37676 5824 ? S 07:14 0:00
/usr/sbin/haproxy -f
/var/lib/octavia/ec5ee7c5-7474-424f-9f44-71b338cf3e57/haproxy.cfg -f
/var/lib/octavia/haproxy-default-user-group.conf -p
/var/lib/octavia/ec5ee7c5-7474-424f-9f44-71b338cf3e57/ec5ee7c5-7474-424f-9f44-71b338cf3e57.pid
-L A2GNEZ_IsG5HmdyY2LmdG3LSOco -Ds*
*nobody 2478 0.1 0.3 37676 3140 ? Ss 07:14 0:01
/usr/sbin/haproxy -f
/var/lib/octavia/ec5ee7c5-7474-424f-9f44-71b338cf3e57/haproxy.cfg -f
/var/lib/octavia/haproxy-default-user-group.conf -p
/var/lib/octavia/ec5ee7c5-7474-424f-9f44-71b338cf3e57/ec5ee7c5-7474-424f-9f44-71b338cf3e57.pid
-L A2GNEZ_IsG5HmdyY2LmdG3LSOco -Ds*
*ubuntu 2485 0.0 0.1 12916 1092 pts/0 S+ 07:36 0:00 grep
--color=auto haproxy*
I run strace to trace the activities of all the above processes. When
sending request to the VIP, none of the above processes takes action to
receive the datagram. The details are omitted, since they give little
information.
Above all, I think the haproxy fail to receive the ingress traffic from the
IP and port it listens on.
What do you think? Look forward to your valuable comments. Thank you.
Best regards,
Yipei
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://lists.openstack.org/pipermail/openstack-dev/attachments/20170925/be133566/attachment.html>
More information about the OpenStack-dev
mailing list