...
Code Block |
---|
[Host Controller] 04:18:00,475 WARN [org.jboss.as.host.controller] (Remoting "gacivs-test02.javaforum.hu:MANAGEMENT" I/O-1) JBAS010914: Connection to remote host-controller closed. Trying to reconnect. ... [Host Controller] 04:22:00,116 INFO [org.jboss.as.host.controller] (domain-connection-threads - 1) JBAS010916: Reconnected to master |
Adminisztráció
A WildFly alapvetően két módon adminisztrálható:
- CLI (Command Line Interface) felületen át (ez a preferált módszer, mert a későbbiekben könnyen reprodukálható egy környezet a CLI futtatással)
- vagy Web felületről.
Mind a két módszerhez szükséges egy admin felhasználó, amelyet a master példánynál kell létrehoznunk a más ismert add-user.sh futtatásával:
...
A WildFly az általunk megadott IP címen fog a 9990 porton indítani egy management-console alkalmazást, amely lehetővé teszi a webes felületen való adminisztrációt, itt láthatjuk a kialakított topológiát és a két szervert, amelyeket az alapértelmezett konfiguráció szerint elindít a WildFly:
...
TCP!
Mint említettem volt, a legtöbb VPS és Cloud szolgáltató nem igazán engedi az UDP (multicast) kommunikációt, még akkor se, amikor adnak egy 10.x.x.x tartományt, mint privát hálózat. A WildFly viszont alapból multicast csatornán áll egy csoportba, ezért rá kell beszélnünk, hogy ezt TCP csatornán művelje, illetve a betérő vagy kieső tagokat TCP csatornán tartsa nyilván. Ehhez az alábbi parancsot kell kiadnunk, hogy a "mindenügyi" JGroups TCP-n kapcsolódjon össze:
Code Block |
---|
cd /profile=full-ha/subsystem=jgroups
./stack=tcpping:add
cd stack=tcpping
./transport=TRANSPORT:add(type=TCP,socket-binding=jgroups-tcp)
:add-protocol(type=TCPPING)
:add-protocol(type=MERGE2)
:add-protocol(type=FD_SOCK,socket-binding=jgroups-tcp-fd)
:add-protocol(type=FD)
:add-protocol(type=VERIFY_SUSPECT)
:add-protocol(type=BARRIER)
:add-protocol(type=pbcast.NAKACK)
:add-protocol(type=UNICAST2)
:add-protocol(type=pbcast.STABLE)
:add-protocol(type=pbcast.GMS)
:add-protocol(type=UFC)
:add-protocol(type=MFC)
:add-protocol(type=FRAG2)
:add-protocol(type=RSVP)
cd protocol=TCPPING
./property=initial_hosts/:add(value="10.129.216.43[7750],10.129.215.37[7750]")
./property=port_range/:add(value=0)
./property=timeout/:add(value=3000)
./property=num_initial_members/:add(value=3)
cd ../..
:write-attribute(name=default-stack,value=tcpping) |
Figyeljünk arra, hogy a 7750-es port úgy jön ki, hogy 7600 + 150, mert ennyi a porteltolása a full-ha profilban a server-two csoportnak!
Ezek után a két példány szépen egymásra fog találni:
Code Block |
---|
[Server:server-two] 07:18:21,671 INFO [org.infinispan.remoting.transport.jgroups.JGroupsTransport] (Incoming-1,shared=tcpping) ISPN000094: Received new cluster view: [gacivs-test01.javaforum.hu:server-two/web|1] (2) [gacivs-test01.javaforum.hu:server-two/web, gacivs-test02.javaforum.hu:server-two/web] |
HTTP cluster
A felhasználói oldalról a HTTP kiszolgálás folyamatossága és folytonossága a szempont, így konfiguráljunk be egy Apache HTTPD szervert, ehhez a WildFly (és JBoss) mellé csomagolt mod_cluster modult tudjuk használni.
Elsőképp szerezzük meg a cluster-test alkalmazást a WildFly dokumentumok között említett helyről (git clone git:
//github.com/liweinan/cluster-demo.git
), majd telepítsük:
Code Block |
---|
[domain@localhost:9990 /] deploy cluster-demo.war --server-groups=other-server-group |
UDP helyett TCP!
Mivel TCP alapokon fogunk kommunikálni az Apache alá telepített mod_cluster modullal, ezért CLI használatával kapcsoljuk ki a hirdetést és konfiguráljuk be a HTTP proxy példányok IP címét és port számát:
Code Block |
---|
$ bin/jboss-cli.sh
You are disconnected at the moment. Type 'connect' to connect to the server or 'help' for the list of supported commands.
[disconnected /] connect gacivs-test-master
[domain@gacivs-test-master:9990 /] /profile=full-ha/subsystem=modcluster/mod-cluster-config=configuration/:write-attribute(name=advertise,value=false)
{
"outcome" => "success",
"result" => undefined,
"server-groups" => {"other-server-group" => {"host" => {
"gacivs-test01.javaforum.hu" => {"server-two" => {"response" => {
"outcome" => "success",
"result" => undefined,
"response-headers" => {
"operation-requires-restart" => true,
"process-state" => "restart-required"
}
}}},
"gacivs-test02.javaforum.hu" => {"server-two" => {"response" => {
"outcome" => "success",
"result" => undefined,
"response-headers" => {
"operation-requires-restart" => true,
"process-state" => "restart-required"
}
}}}
}}}
} |
Láthatjuk, hogy a master végrehajtotta a slave példányokon a kért módosítást (ellenőrizni is tudjuk ezt a webes felületen), de kiírta, hogy szükséges lesz az alkalmazásszerver példányok újraindítása. Még mielőtt ezt megtennénk, állítsuk be a proxy címeket is:
Code Block |
---|
[domain@gacivs-test-master:9990 /] /profile=full-ha/subsystem=modcluster/mod-cluster-config=configuration/:write-attribute(name=proxy-list,value="10.129.214.116:10001,10.129.216.43:10001,10.129.215.37:10001")
{
"outcome" => "success",
"result" => undefined,
"server-groups" => {"other-server-group" => {"host" => {
"gacivs-test01.javaforum.hu" => {"server-two" => {"response" => {
"outcome" => "success",
"result" => undefined,
"response-headers" => {
"operation-requires-restart" => true,
"process-state" => "restart-required"
}
}}},
"gacivs-test02.javaforum.hu" => {"server-two" => {"response" => {
"outcome" => "success",
"result" => undefined,
"response-headers" => {
"operation-requires-restart" => true,
"process-state" => "restart-required"
}
}}}
}}}
} |
...mert itt se ússzuk meg az újraindítást, de még mindig ne indítsuk újra a kiszolgálókat, mert a Sticky Session kikapcsolásához úgyis újra kellene indítani:
Code Block |
---|
[domain@gacivs-test-master:9990 /] /profile=full-ha/subsystem=modcluster/mod-cluster-config=configuration/:write-attribute(name=sticky-session,value=false)
{
"outcome" => "success",
"result" => undefined,
"server-groups" => {"other-server-group" => {"host" => {
"gacivs-test01.javaforum.hu" => {"server-two" => {"response" => {
"outcome" => "success",
"result" => undefined,
"response-headers" => {
"operation-requires-restart" => true,
"process-state" => "restart-required"
}
}}},
"gacivs-test02.javaforum.hu" => {"server-two" => {"response" => {
"outcome" => "success",
"result" => undefined,
"response-headers" => {
"operation-requires-restart" => true,
"process-state" => "restart-required"
}
}}}
}}}
} |
...ezért most indítsuk újra:
Code Block |
---|
[domain@gacivs-test-master:9990 /] /server-group=other-server-group:stop-servers
{
"outcome" => "success",
"result" => undefined,
"server-groups" => undefined
}
[domain@gacivs-test-master:9990 /] /server-group=other-server-group:start-servers
{
"outcome" => "success",
"result" => undefined,
"server-groups" => undefined
}
[domain@gacivs-test-master:9990 /] ls /host=gacivs-test01.javaforum.hu/server-config=server-two
interface path auto-start=true group=other-server-group priority=undefined socket-binding-port-offset=150
jvm system-property cpu-affinity=undefined name=server-two socket-binding-group=undefined status=STARTED
[domain@gacivs-test-master:9990 /] ls /host=gacivs-test02.javaforum.hu/server-config=server-two
interface path auto-start=true group=other-server-group priority=undefined socket-binding-port-offset=150
jvm system-property cpu-affinity=undefined name=server-two socket-binding-group=undefined status=STARTED |
...ami után persze panaszkodni fognak az egyes példányok, hogy nem tudnak csatlakozni a megadott címre, mert ott még nincs Apache HTTPD szerver:
Code Block |
---|
[Server:server-two] 05:01:58,840 ERROR [org.jboss.modcluster] (UndertowEventHandlerAdapter - 1) MODCLUSTER000043: Failed to send INFO to gacivs-test02/10.129.215.37:10001: java.net.ConnectException: Connection refused |
Az Apache HTTPD és mod_cluster beállítása
Telepítsünk egy httpd csomagot, töltsük le a legfrissebb mod_cluster kiadást a megfelelő Linux rendszerhez:
Code Block |
---|
# yum install httpd
# wget http://downloads.jboss.org/mod_cluster//1.2.6.Final/linux-x86_64/mod_cluster-1.2.6.Final-linux2-x64-so.tar.gz
# cd /etc/httpd/modules/
# tar xzvf /root/mod_cluster-1.2.6.Final-linux2-x64-so.tar.gz |
Ezek után kicsit konfigurálnunk kell a /etc/httpd/conf/httpd.conf fájl szerkesztésével (diff kimenet):
Code Block |
---|
192c192
< LoadModule proxy_balancer_module modules/mod_proxy_balancer.so
---
> #LoadModule proxy_balancer_module modules/mod_proxy_balancer.so
202a203,207
> LoadModule slotmem_module modules/mod_slotmem.so
> LoadModule manager_module modules/mod_manager.so
> LoadModule proxy_cluster_module modules/mod_proxy_cluster.so
> LoadModule advertise_module modules/mod_advertise.so
>
1009a1015,1040
>
> Listen 0.0.0.0:10001
> MemManagerFile /var/cache/httpd
>
> <VirtualHost 0.0.0.0:10001>
> <Directory />
> Order deny,allow
> Deny from all
> Allow from all
> </Directory>
>
> <Location /mod_cluster-manager>
> SetHandler mod_cluster-manager
> Order deny,allow
> Deny from all
> Allow from all
> </Location>
>
> KeepAliveTimeout 60
> MaxKeepAliveRequests 0
>
> ManagerBalancerName other-server-group
> AdvertiseFrequency 5
> ServerAdvertise off
> EnableMCPMReceive
> </VirtualHost> |
A httpd szolgáltatás elindítása után már láthatjuk bármelyik publikus IP címen a mod_cluster státusz és menedzsment felületét:
Illetve bármelyik IP címen az adott alkalmazást: