mirror of https://github.com/ceph/ceph-ansible.git
ceph-handler: use haproxy maintenance for rgw restarts
RGW currently restarts without waiting for existing connections to
close. By adjusting the HAProxy weight before the restart, we can
ensure that no active connections are disrupted during the restart
process.
Signed-off-by: Seena Fallah <seenafallah@gmail.com>
(cherry picked from commit 4fa9057a3e
)
pull/7579/head
parent
438da91b32
commit
9737947dde
|
@ -420,6 +420,7 @@ dummy:
|
||||||
# RGW handler checks
|
# RGW handler checks
|
||||||
#handler_health_rgw_check_retries: 5
|
#handler_health_rgw_check_retries: 5
|
||||||
#handler_health_rgw_check_delay: 10
|
#handler_health_rgw_check_delay: 10
|
||||||
|
#handler_rgw_use_haproxy_maintenance: false
|
||||||
|
|
||||||
# NFS handler checks
|
# NFS handler checks
|
||||||
#handler_health_nfs_check_retries: 5
|
#handler_health_nfs_check_retries: 5
|
||||||
|
|
|
@ -412,6 +412,7 @@ handler_health_mds_check_delay: 10
|
||||||
# RGW handler checks
|
# RGW handler checks
|
||||||
handler_health_rgw_check_retries: 5
|
handler_health_rgw_check_retries: 5
|
||||||
handler_health_rgw_check_delay: 10
|
handler_health_rgw_check_delay: 10
|
||||||
|
handler_rgw_use_haproxy_maintenance: false
|
||||||
|
|
||||||
# NFS handler checks
|
# NFS handler checks
|
||||||
handler_health_nfs_check_retries: 5
|
handler_health_nfs_check_retries: 5
|
||||||
|
|
|
@ -11,6 +11,7 @@ else
|
||||||
RGW_PROTOCOL=http
|
RGW_PROTOCOL=http
|
||||||
fi
|
fi
|
||||||
INSTANCES_NAME=({% for i in rgw_instances %}{{ i.instance_name }} {% endfor %})
|
INSTANCES_NAME=({% for i in rgw_instances %}{{ i.instance_name }} {% endfor %})
|
||||||
|
HAPROXY_BACKEND=({% for i in rgw_instances %}{{ i.haproxy_backend | default('rgw-backend') }} {% endfor %})
|
||||||
RGW_IPS=({% for i in rgw_instances %}{{ i.radosgw_address }} {% endfor %})
|
RGW_IPS=({% for i in rgw_instances %}{{ i.radosgw_address }} {% endfor %})
|
||||||
RGW_PORTS=({% for i in rgw_instances %}{{ i.radosgw_frontend_port }} {% endfor %})
|
RGW_PORTS=({% for i in rgw_instances %}{{ i.radosgw_frontend_port }} {% endfor %})
|
||||||
RGW_ZONE="{{ rgw_zone }}"
|
RGW_ZONE="{{ rgw_zone }}"
|
||||||
|
@ -78,19 +79,38 @@ check_rest() {
|
||||||
}
|
}
|
||||||
|
|
||||||
for ((i=0; i<${RGW_NUMS}; i++)); do
|
for ((i=0; i<${RGW_NUMS}; i++)); do
|
||||||
# First, restart the daemon
|
|
||||||
|
|
||||||
# Check if systemd unit exists
|
# Check if systemd unit exists
|
||||||
# This is needed for new instances as the restart might trigger before the deployment
|
# This is needed for new instances as the restart might trigger before the deployment
|
||||||
if systemctl list-units --full --all | grep -q "ceph-radosgw@rgw.${RGW_ZONE}.${HOST_NAME}.${INSTANCES_NAME[i]}"; then
|
if ! systemctl list-units --full --all | grep -q "ceph-radosgw@rgw.${RGW_ZONE}.${HOST_NAME}.${INSTANCES_NAME[i]}"; then
|
||||||
systemctl restart ceph-radosgw@rgw.${RGW_ZONE}.${HOST_NAME}.${INSTANCES_NAME[i]}
|
|
||||||
else
|
|
||||||
echo "Systemd unit ceph-radosgw@rgw.${RGW_ZONE}.${HOST_NAME}.${INSTANCES_NAME[i]} does not exist."
|
echo "Systemd unit ceph-radosgw@rgw.${RGW_ZONE}.${HOST_NAME}.${INSTANCES_NAME[i]} does not exist."
|
||||||
continue
|
continue
|
||||||
fi
|
fi
|
||||||
|
|
||||||
|
{% if handler_rgw_use_haproxy_maintenance %}
|
||||||
|
# set server weight to 0 on haproxy
|
||||||
|
echo "set weight ${HAPROXY_BACKEND[i]}/${INSTANCES_NAME[i]} 0" | socat stdio {{ haproxy_socket_path }}
|
||||||
|
|
||||||
|
# wait for the connections to drop
|
||||||
|
retries={{ handler_rgw_haproxy_maintenance_retries | default(60) }}
|
||||||
|
while [ $retries -gt 0 ]; do
|
||||||
|
if [ "$(echo "show servers conn ${HAPROXY_BACKEND[i]}" | socat stdio {{ haproxy_socket_path }} | grep "${HAPROXY_BACKEND[i]}/${INSTANCES_NAME[i]} " | awk '{ print $7 }')" -eq 0 ]; then
|
||||||
|
break
|
||||||
|
fi
|
||||||
|
sleep 1
|
||||||
|
let retries=retries-1
|
||||||
|
done
|
||||||
|
{% endif %}
|
||||||
|
|
||||||
|
# Restart the daemon
|
||||||
|
systemctl restart ceph-radosgw@rgw.${RGW_ZONE}.${HOST_NAME}.${INSTANCES_NAME[i]}
|
||||||
|
|
||||||
# Check socket files
|
# Check socket files
|
||||||
check_socket ${i}
|
check_socket ${i}
|
||||||
# Check rest
|
# Check rest
|
||||||
check_rest ${i}
|
check_rest ${i}
|
||||||
|
|
||||||
|
{% if handler_rgw_use_haproxy_maintenance %}
|
||||||
|
# set server weight to 100 on haproxy
|
||||||
|
echo "set weight ${HAPROXY_BACKEND[i]}/${INSTANCES_NAME[i]} 100" | socat stdio {{ haproxy_socket_path }}
|
||||||
|
{% endif %}
|
||||||
done
|
done
|
||||||
|
|
Loading…
Reference in New Issue