在wildfly 21中搭建cluster叢集
阿新 • • 發佈:2020-12-30
[toc]
# 簡介
wildfly是一個非常強大的工具,我們可以輕鬆的使用wildfly部署應用程式,更為強大的是,wildfly可以很方便的部署cluster應用。
今天我們通過一個例子來講解下wildfly如何構建cluster應用。
# 下載軟體和相關元件
假如我們有兩個host,一個稱為master,一個稱為slave,我們需要在兩個機子上面安裝wildfly,構建成domain模式。然後需要在Domain controller主機上面安裝mod_cluster和httpd以組成叢集。
![](https://img-blog.csdnimg.cn/20201020215454928.png?x-oss-process=image/watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_0,text_aHR0cDovL3d3dy5mbHlkZWFuLmNvbQ==,size_25,color_8F8F8F,t_70)
首先我們需要下載wildfly-21.0.0.Final.zip,解壓之後,執行domain.sh以開啟domain模式。
# 配置domain
我們需要將master配置為domain controller,根據我們之前的文章,首先配置interfaces,我們需要修改domain/configuration/host.xml:
~~~xml
~~~
因為我們master的ip地址是10.211.55.7,所以需要修改相應的值。這裡使用的是master對外的ip地址,從而可以供slave連線到master。
同樣的,我們需要修改slave的interface值:
~~~xml
~~~
也需要修改相應的ip地址。
接下來是修改host name :
~~~xml
//master
//slave
~~~
在slave中,我們還需要配置domain-controller,從而讓slave可以連線到master:
~~~xml
~~~
接下來,我們需要建立用於連線的security-realm,通過add-user.sh命令,我們可以建立新增使用者。
這裡我們建立兩個使用者,第一個使用者叫做admin,使用來進行domain管理的使用者。
第二個使用者叫做slave,這個使用者用來slave連線到master。
還記得add-user.sh命令是怎麼用的嗎?下面是建立admin使用者的輸出:
~~~sh
./add-user.sh
Enter the details of the new user to add.
Realm (ManagementRealm) :
Username : admin
Password recommendations are listed below. To modify these restrictions edit the add-user.properties configuration file.
- The password should not be one of the following restricted values {root, admin, administrator}
- The password should contain at least 8 characters, 1 alphabetic character(s), 1 digit(s), 1 non-alphanumeric symbol(s)
- The password should be different from the username
Password : passw0rd!
Re-enter Password : passw0rd!
The username 'admin' is easy to guess
Are you sure you want to add user 'admin' yes/no? yes
About to add user 'admin' for realm 'ManagementRealm'
Is this correct yes/no? yes
~~~
如果是slave使用者,則需要在下面的問題提示的時候,回答yes
~~~sh
Is this new user going to be used for one AS process to connect to another AS process?
e.g. for a slave host controller connecting to the master or for a Remoting connection for server to server EJB calls.
yes/no? yes
To represent the user add the following to the server-identities definition
~~~
有了slave使用者,我們就可以使用這個使用者來配置slave的ManagementRealm了:
~~~xml
~~~
這樣配置過後,slave和master就可以進行連線了。
# 建立應用程式
這裡我引用的是官網的demo程式。實際上就是一個非常簡單的web應用。程式碼地址 https://github.com/liweinan/cluster-demo/ 。
我們簡單進行一下講解,基本的程式碼邏輯就是在session中存放一個時間資料,然後嘗試從不同的server中取出,看是否一致,如果一致的話說明cluster叢集是有效的。
~~~java
//設定session的值
session.setAttribute("current.time", new java.util.Date());
//獲取session的值
session.getAttribute("current.time")
~~~
cluster中最重要的就是session共享,或者說session複製。我們可以簡單的在web.xml中使用distributable標籤即可。
~~~xml
Archetype Created Web Application
~~~
這就是我們應用程式的全部了。
# 部署應用程式
這次我們從web console中進行應用程式的部署。
開啟 http://10.211.55.7:9990 ,輸入我們建立的admin使用者名稱和密碼,即可進入管理介面。
預設情況下,會建立3個服務,分別是server-one,server-two和server-three。
server-one,server-two是預設啟動的,他們屬於main-server-group。而server-three是不啟動的,它屬於other-server-group。
我們看下other-server-group的配置:
~~~xml
~~~
other-server-group使用的profile是full-ha,看名字就知道整個profile是為高可用設計的。那麼這個profile有什麼特別之處呢?
~~~xml
...
...
...
...
...
~~~
這個profile中和ha有關的就是infinispan,jgroup和modcluster。通過這些元件,wildfly就可以來進行cluster的組建。
因為server-three預設是停止狀態的,我們需要在master和slave中分別啟動他們。
在Manage Deployments頁面,點選Add Content,然後選擇我們之前的demo應用程式cluster-demo.war,上傳即可。
![](https://img-blog.csdnimg.cn/20201020230716960.png?x-oss-process=image/watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_0,text_aHR0cDovL3d3dy5mbHlkZWFuLmNvbQ==,size_25,color_8F8F8F,t_70)
好了,程式已經部署好了,我們可以分別訪問:
http://10.211.55.7:8330/cluster-demo/ 和 http://10.211.55.2:8330/cluster-demo/ 來檢視應用程式的頁面。
現在為止,兩個應用程式還是獨立的,並沒有組合成cluster,接下來我們將會進行cluster的配置。
還有一點要注意的是,我們需要將master和slave中的server-three修改成不同的名字,如果是相同的名字,那麼我們在後面使用的mod_cluster將會報錯,因為在同一個server group中不允許出現兩個相同的名字。
~~~xml
~~~
# 叢集配置
軟體部署好之後,我們需要在master機子上面使用mod_cluster + apache httpd 來啟用叢集功能。
首先安裝httpd:
~~~sh
sudo yum install httpd
~~~
然後下載mod_cluster:
~~~sh
http://www.jboss.org/mod_cluster/downloads
~~~
將其解壓縮到 /etc/httpd/modules ,然後修改 /etc/httpd/conf/httpd.conf
新增下面的modules:
~~~sh
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
~~~
並且註釋掉下面的modules:
~~~sh
#LoadModule proxy_balancer_module modules/mod_proxy_balancer.so
~~~
因為proxy_balancer_module是和proxy_cluster_module相沖突的。
然後修改httpd監聽 10.211.55.7:80。
最後還要在httpd.conf中配上mod_cluster-manager的監聽埠:
~~~xml
Order deny,allow
Deny from all
Allow from 10.211.55.
# This directive allows you to view mod_cluster status at URL http://10.211.55.4:10001/mod_cluster-manager
SetHandler mod_cluster-manager
Order deny,allow
Deny from all
Allow from 10.211.55.
KeepAliveTimeout 60
MaxKeepAliveRequests 0
ManagerBalancerName other-server-group
AdvertiseFrequency 5
~~~
我們可以使用service httpd start啟動httpd服務即可。
我們可以通過訪問 http://10.211.55.7/cluster-demo/ 來訪問叢集服務了。
> 注意,雖然是叢集模式,但是我們所有的請求都要先到master機子上面做轉發。
# 總結
wildfly內建了很多強大的元件支援,不愧為工業標準的典範。值的學習。
> 本文作者:flydean程式那些事
>
> 本文連結:[http://www.flydean.com/wildfly-cluster-domain/](http://www.flydean.com/wildfly-cluster-domain/)
>
> 本文來源:flydean的部落格
>
> 歡迎關注我的公眾號:「程式那些事」最通俗的解讀,最深刻的乾貨,最簡潔的教程,眾多你不知道的小技巧等你來