Wiki-Quellcode von Cluster-Umgebung

Zuletzt geändert von MACH ProForms GmbH am 09.09.2024

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