Wiki-Quellcode von Cluster-Umgebung

Version 1.1 von MACH ProForms GmbH am 26.04.2022

Zeige letzte Bearbeiter
1 ## Einrichtung Cluster-Umgebung
2
3 Dieses Dokument beschreibt, wie Sie beim Formularserver mehrere WildFly-Server parallel laufen lassen können.
4 Die Anleitung zeigt dies exemplarisch an zwei parallel laufenden WildFly-Servern.
5
6 ### Einrichtung ohne Docker
7
8 #### WildFly Server
9
10 Die Benamung der neuen WildFly Server-Instanzen ist beliebig, die "2" am Ende ist daher nur ein exemplarisches Beispiel.
11
12 Anlegen eines WildFly-Users incl. Homeverzeichnis und Gruppenaufnahme wildfly:
13
14 ````bash
15 useradd -d /opt/wildfly2 -g wildfly wildfly2
16 ````
17
18 Den neuen WildFly-user in die Apache-Gruppe aufnehmen:
19
20 ````bash
21 sudo usermod -a -G www-data wildfly2
22 ````
23
24 WildFly-Ordner kopieren:
25
26 ````bash
27 sudo cp -r wildfly-20.0.1.Final/ wildfly2
28 ````
29
30 Der Besitzer des WildFly-Ordners muss wie folgt angepasst werden:
31
32 ````bash
33 chown -R wildfly2:wildfly wildfly2
34 ````
35
36 Innerhalb des neuen WildFly-Verzeichnisses können die folgenden Verzeichnisse oder Dateien gelöscht werden: logs, tmp, artifact_backups
37
38 sowie die Datei standalone/configuration/logging.properties
39
40 Im neu entstandenen WildFly-Ordner muss die Datei standalone.conf am Ende wie folgt ergänzt werden:
41
42 ````bash
43 JAVA_OPTS="$JAVA_OPTS -Djboss.socket.binding.port-offset=1000 -Djava.io.tmpdir=/tmp/wildfly2 -Djboss.server.log.dir=/opt/wildfly2/standalone/log -Deureka.port=8080
44 -Deureka.serviceUrl.default=http://localhost:8080/server/api/eureka"
45 ````
46
47 #### Einfügen einer neuen Property
48
49 In der Datei /opt/wildfly2/.formsolutions/general.properties muss noch der folgende Eintrag ergänzt werden:
50
51 ````bash
52 clusterPrimaryNode = false
53 ````
54
55 Diese Property sorgt dafür, dass einzelne Bestandteile nur vom primären WildFly ausgeführt werden.
56
57 Aufnahme des neuen WildFlys als Dienst am Beispiel systemctl:
58
59 ````bash
60 mkdir /etc/wildfly2
61 cp wildfly.conf /etc/wildfly2/
62 cp wildfly.service /etc/systemd/system/wildfly2.service
63 ````
64
65 Die Datei muss dann wie folgt angepasst werden:
66
67 ````bash
68 ESC[A[Unit]
69 Description=The WildFly Application Server
70 After=syslog.target network.target
71 Before=httpd.service
72
73 [Service]
74 Environment=LAUNCH_JBOSS_IN_BACKGROUND=1
75 EnvironmentFile=-/etc/wildfly2/wildfly.conf
76 User=wildfly2
77 LimitNOFILE=102642
78 PIDFile=/var/run/wildfly/wildfly2.pid
79 ExecStart=/opt/wildfly2/bin/launch.sh $WILDFLY_MODE $WILDFLY_CONFIG $WILDFLY_BIND
80 StandardOutput=null
81
82 [Install]
83 WantedBy=multi-user.target
84 /etc/systemd/system/wildfly2.service (END)
85 ````
86
87 Kopieren der launch.sh:
88
89 ````bash
90 cp launch.sh /opt/wildfly2/bin/
91 chmod +x /opt/wildfly2/bin/launch.sh
92 ````
93
94 In der kopierten Datei launch.sh muss dann noch das WildFly-Homeverzeichnis angepasst werden auf **/opt/wildfly2**
95
96 Aktivieren des neuen WildFly als Dienst:
97
98 ````bash
99 systemctl start wildfly2.service
100 systemctl enable wildfly2.service
101 ````
102
103 #### Apache
104
105 Sofern noch nicht vorhanden muss das Modul lbmethod_bybusyness sowie proxy_balancer installiert werden **a2enmod lbmethod_bybusyness proxy_balancer**
106
107 ##### Anpassungen in allen vhost-ofs-Dateien
108
109 ````bash
110 Header add Set-Cookie "ROUTEID=.%{BALANCER_WORKER_ROUTE}e; path=/;HttpOnly;Secure" env=BALANCER_ROUTE_CHANGED
111 <Proxy "balancer://wildflycluster">
112 BalancerMember "http://localhost:8080" route=1
113 BalancerMember "http://localhost:9080" route=2
114 ProxySet stickysession=ROUTEID lbmethod=bybusyness
115 </Proxy>
116 ````
117
118 Da bei der WildFly-Konfiguration für die Ports ein Offset von 1000 angegeben wurde, ergibt sich für den zweiten Cluster ein Port von 9080.
119
120 Des Weiteren müssen die ProxyPass- und ProxyPassReverse-Einträge auf den Balancer wie folgt umgestellt werden:
121
122 ````bash
123 ProxyPass /servlet balancer://wildflycluster/servlet
124 ProxyPassReverse /servlet balancer://wildflycluster/servlet
125 ````
126
127 Eintrag in der Datei kndb_settings.inc.php:
128
129 ````bash
130 $config['internalWildflyUrl'] = 'http://localhost:8080';
131 ````
132
133 und zum Abschluss noch den Apache neu starten.
134
135 ### Mit Docker-Umgebung
136
137 #### Apache
138
139 Es müssen zwei neue Apache-Module installiert werden. Dies sind lbmethod_bybusyness und proxy_balancer.
140
141 Dazu öffnen Sie bitte die Datei '/opt/docker/fs/web/image/' und ändern den Eintrag in
142
143 ````bash
144 RUN a2enmod alias headers proxy_http rewrite ssl
145 ````
146
147 in
148
149 ````bash
150 RUN a2enmod alias headers lbmethod_bybusyness proxy_balancer proxy_http rewrite ssl
151 ````
152
153 ##### Anpassungen in allen vhost-ofs-Dateien
154
155 ````bash
156 Header add Set-Cookie "ROUTEID=.%{BALANCER_WORKER_ROUTE}e; path=/;HttpOnly;Secure" env=BALANCER_ROUTE_CHANGED
157 <Proxy "balancer://wildflycluster">
158 BalancerMember "http://wildfly:8080" route=1
159 BalancerMember "http://wildfly:8080" route=2
160 ProxySet stickysession=ROUTEID lbmethod=bybusyness
161 </Proxy>
162 ````
163
164 Des Weiteren müssen die ProxyPass- und ProxyPassReverse-Einträge auf den Balancer wie folgt umgestellt werden:
165
166 ````bash
167 ProxyPass /servlet balancer://wildflycluster/servlet
168 ProxyPassReverse /servlet balancer://wildflycluster/servlet
169 ````
170
171 ##### Eintrag in der Datei kndb_settings.inc.php
172
173 ````bash
174 $config['internalWildflyUrl'] = 'http://wildfly:8080';
175 ````
176
177 ##### WildFly
178
179 ##### Duplizieren von Verzeichnissen
180
181 Damit wir für den zweiten WildFly Server einzelne Bestandteile abschalten können, bekommt in der Docker-Umgebung jeder ein eigenes Properties-Verzeichnis. Dazu kopieren wir das bestehende Verzeichnis wie folgt:
182
183 ````bash
184 cp -r /opt/docker/fs/wildfly/properties /opt/docker/fs/wildfly/properties2
185 ````
186
187 Leider ist es nicht möglich, dass sich die beiden WildFly Server die Deployment-Verzeichnisse teilen. Daher kopieren Sie bitte das Deployment-Verzeichnis wie folgt:
188
189 ````bash
190 cp -r /opt/docker/fs/wildfly/deployments /opt/docker/fs/wildfly/deployments2
191 ````
192
193 ##### Anpassungen an den Properties von wildfly2
194
195 Mit Ausnahme des primären WildFly Servers muss in den general.properties ein weiterer Eintrag hinzugefügt werden:
196
197 In unserem Beispiel erfolgt dies in der /opt/docker/fs/wildfly/properties2/general.properties
198
199 ````bash
200 clusterPrimaryNode=false
201 ````
202
203 ##### Docker-compose.yml
204
205 Sollte bislang nur ein WildFly-Container vorhanden sein, ist es sinnvoll den WildFly-Container in wildfly1 umzubenennen.
206
207 Anschließend kopieren wir den WildFly-Block und fügen diesen erneut ein und benennen den kopierten WildFly-Knoten wildfly2.
208
209 Neben der Anpassung der Volume-Angaben für die Properties und Deployments sollte auch das gemountete Verzeichnis für den neuen WildFly Container angepasst werden.
210
211 Das Beispiel unten zeigt den entsprechenden Abschnitt
212
213 ````bash
214 volumes:
215 - ./logs/wildfly2:/opt/jboss/wildfly/standalone/log
216 - ./secure_html:/srv/secure_html
217 - ./wildfly/config:/opt/jboss/wildfly/standalone/configuration
218 - ./wildfly/deployments2:/opt/jboss/wildfly/standalone/deployments
219 - ./wildfly/properties2:/opt/jboss/.formsolutions
220 ````
221
222 Nach Abschluss der Konfiguration muss der neue Container gestartet werden und der Apache neu gestartet werden. Gegebenenfalls vorhandene Skripte müssen dahingehend ergänzt werden, dass der neue WildFly gestartet und gestoppt wird.
223
224 ### Wichtige Hinweise für das Einspielen von Updates in der Cluster-Lösung
225
226 - Es müssen vor dem Ausführen des Updates alle WildFly-Container gestoppt werden.
227 - Nach Ausführen des Installers muss der Inhalt des deployment-Verzeichnisses in allen Containern ersetzt werden.
228 - Mit Ausnahme der clusterPrimaryNode-Property müssen alle neu einzuführenden Properties in allen WildFly-Containern eingeführt werden.
229 - Die entsprechenden Skripte für Starten und Stoppen müssen so angepasst werden, dass diese alle WildFly-Container miteinbeziehen.