-
-
Notifications
You must be signed in to change notification settings - Fork 74
/
restart_clients.sh.j2
100 lines (89 loc) · 3.51 KB
/
restart_clients.sh.j2
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
#!/bin/bash
# This performs a more-or-less graceful restart of zope clients.
# Strategy: For each client,
# 1) Mark it down for maintenance in haproxy;
# 2) stop client;
# 3) start client; wait long enough for it to start listening
# 4) Fetch the homepage directly from the client to load the cache.
# This will be the first request the client receives,
# since haproxy hasn't have marked it live yet.
# So, when haproxy marks it live, the cache will be warm.
# 5) Mark the client available in haproxy.
#
# Please regard this script as experimental. Before use, read it and make
# sure it's reasonable for your situation.
#
# This script is meant to be run as root as it needs access to supervisor
# and the haproxy socket.
if [ `whoami` != 'root' ]; then
echo "The restart script needs to control haproxy, varnish and supervisor."
echo "It must be run as superuser -- typically via sudo."
exit 1
fi
FLUSH="yes"
for option; do
case $option in
--noflush | noflush | -noflush | --NOFLUSH | NOFLUSH | -NOFLUSH)
FLUSH="no"
;;
*)
echo "usage: restart_clients.sh [noflush]"
echo
echo "Specify 'noflush' to skip flushing the varnish cache."
exit 1
;;
esac
done
{{ item.plone_restart_pre_script|default(plone_restart_pre_script) }}
{% for client in range(0, item.plone_client_count|default(plone_client_count)|int) %}
{% if install_loadbalancer %}
echo "Marking client {{ client + 1 }} down for maintenance"
echo "disable server {{ item.plone_instance_name|default(plone_instance_name) }}/client{{ client + 1 }}" | socat /var/run/haproxy.sock stdio > /dev/null
{% endif %}
echo Restarting client {{ client + 1 }}
supervisorctl stop {{ item.plone_instance_name|default(plone_instance_name) }}_zeoclient{{ client + 1 }}
echo Waiting a bit...
sleep 20
supervisorctl start {{ item.plone_instance_name|default(plone_instance_name) }}_zeoclient{{ client + 1 }}
echo Waiting a bit...
sleep 30
echo Fetch site homepages to warm cache
{% for vhost in item.webserver_virtualhosts %}
{% if vhost.zodb_path is defined %}
echo " {{ vhost.zodb_path }}"
{% for warm_path in vhost.warm_paths|default(['/']) %}
{% if vhost.warm_paths|default(['/'])|length > 1 %}
echo " {{ warm_path }}"
{% endif %}
curl http://localhost:{{ item.plone_client_base_port|default(plone_client_base_port)|int + client }}{{ vhost.zodb_path }}{{ warm_path }} -s -o - > /dev/null
{% endfor %}
{% endif %}
{% endfor %}
{% if install_loadbalancer %}
echo "Marking client {{ client + 1 }} available"
echo "enable server {{ item.plone_instance_name|default(plone_instance_name) }}/client{{ client + 1 }}" | socat /var/run/haproxy.sock stdio > /dev/null
{% endif %}
{% if client + 1 < item.plone_client_count|default(plone_client_count) %}
echo
echo "Waiting between clients"
sleep 60
echo
{% endif %}
{% endfor %}
if [ $FLUSH = "yes" ]; then
{% if install_proxycache %}
echo Purging varnish cache
{% for vhost in item.webserver_virtualhosts %}
{% if vhost.zodb_path is defined %}
echo " {{ vhost.zodb_path }}"
{% if vhost.get('protocol', 'http') == 'https' %}
varnishadm "ban req.url ~ /VirtualHostBase/https/{{ vhost.hostname }}:{{ vhost.port|default('443') }}{{ vhost.zodb_path }}/VirtualHostRoot/"
{% else %}
varnishadm "ban req.url ~ /VirtualHostBase/http/{{ vhost.hostname }}:{{ vhost.port|default('80') }}{{ vhost.zodb_path }}/VirtualHostRoot/"
{% endif %}
{% endif %}
{% endfor %}
{% endif %}
fi
{{ item.plone_restart_post_script|default(plone_restart_post_script) }}
echo Done