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>pull/7575/head
parent
59198f5bcd
commit
4fa9057a3e
|
@ -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