IceGrid負載均衡部署(轉)

【IceGrid負載均衡部署步驟】
1、環境
主機1:IP=192.168.0.239,上面部署註冊表服務器registry和節點node1,registry和node1運行在同一進程中;
主機2:IP=192.168.0.25,上面部署節點node2;
其中每個節點中包含一個服務程序,服務程序均在節點啓動時啓動。

2、主機1配置
(1)服務程序部署XML:app_rep.xml,內容如下
<icegrid>
<application name="Simple"> #分佈式系統名稱

<server-template id="SimpleServer"> #服務器模板
<parameter name="index"/> #自定義參數index
<server id="SimpleServer-${index}" exe="./server" activation="always"> #服務器id,程序路徑,啓動方式
<adapter name="Hello" endpoints="tcp" replica-group="ReplicatedHelloAdapter"/> #對象適配器配置
<property name="Identity" value="hello"/> #服務器中自定義屬性Identity
</server>
</server-template>

<replica-group id="ReplicatedHelloAdapter"> 
<load-balancing type="round-robin"/> #負載均衡配置,使用輪詢調度方式(最近最少使用算法)
<object identity="hello" type="::Demo::Hello"/> #該replica-group中的對象,客戶端根據該對象標識或類型定位請求
</replica-group>

<node name="node1"> #節點1,對應於服務程序實例SimpleServer-1
<server-instance template="SimpleServer" index="1"/>
</node>

<node name="node2"> #節點2,對應於服務程序實例SimpleServer-2
<server-instance template="SimpleServer" index="2"/>
</node>

</application>

</icegrid>

--------------------------------------------------------
(2)registry和node1的配置文件config.grid,內容如下
#
# The IceGrid instance name.
#
IceGrid.InstanceName=DemoIceGrid 

#
# The IceGrid locator proxy.
#
Ice.Default.Locator=DemoIceGrid/Locator:default -p 12345 #註冊表服務器的端點信息

#
# IceGrid registry configuration.
#
IceGrid.Registry.Client.Endpoints=default -p 12345
IceGrid.Registry.Server.Endpoints=default
IceGrid.Registry.Internal.Endpoints=default
IceGrid.Registry.Data=db/registry #註冊表服務器使用到的目錄
IceGrid.Registry.PermissionsVerifier=DemoIceGrid/NullPermissionsVerifier
IceGrid.Registry.AdminPermissionsVerifier=DemoIceGrid/NullPermissionsVerifier
IceGrid.Registry.SSLPermissionsVerifier=DemoIceGrid/NullSSLPermissionsVerifier
IceGrid.Registry.AdminSSLPermissionsVerifier=DemoIceGrid/NullSSLPermissionsVerifier

#
# IceGrid SQL configuration if using SQL database.
#
#Ice.Plugin.DB=IceGridSqlDB:createSqlDB
#IceGrid.SQL.DatabaseType=QSQLITE

#
# IceGrid node configuration.
#
IceGrid.Node.Name=node1 #節點1,對應於app_rep.xml中node1
IceGrid.Node.Endpoints=default
IceGrid.Node.Data=db/node #節點1用到的目錄
IceGrid.Node.CollocateRegistry=1
#IceGrid.Node.Output=db #將節點上的服務程序的標準輸出重定向到目錄db下,會自動生成輸出文件
#IceGrid.Node.RedirectErrToOut=1 #將節點上的服務程序的標準錯誤重定向到標準輸出

#
# Trace properties.
#
IceGrid.Node.Trace.Activator=1
#IceGrid.Node.Trace.Adapter=2
#IceGrid.Node.Trace.Server=3

#
# Dummy username and password for icegridadmin.
#
IceGridAdmin.Username=foo
IceGridAdmin.Password=bar
----------------------------------------------------------------
3、主機2配置
主機2上只需要配置node2的配置文件config.node即可,內容如下
#
# The IceGrid locator proxy.
#
Ice.Default.Locator=DemoIceGrid/Locator:default -h 192.168.0.239 -p 12345 #註冊表服務器的端點信息

#
# IceGrid node configuration.
#
IceGrid.Node.Name=node2 #節點2,對應於app_rep.xml中node2
IceGrid.Node.Endpoints=default
IceGrid.Node.Data=db/node2
IceGrid.Node.Output=db/node2 #將節點上的服務程序的標準輸出重定向到db/node2目錄下,會自動生成輸出文件
IceGrid.Node.RedirectErrToOut=1

#
# Trace properties.
#
IceGrid.Node.Trace.Activator=1
---------------------------------------------------------------
4、客戶端配置
配置文件:config.client,內容如下:
#
# The IceGrid locator proxy.
#
Ice.Default.Locator=DemoIceGrid/Locator:default -h 192.168.0.239 -p 12345 #只需有註冊表服務器的端點信息即可

5、啓動服務程序
(1)主機1上先啓動註冊表和節點1,執行:icegridnode --Ice.Config=config.grid
(2)主機1上部署服務(只需部署一次,除非修改過app_rep.xml),執行:
icegridadmin --Ice.Config=config.grid -e "application add app_rep.xml"
若要重新部署,執行:icegridadmin --Ice.Config=config.grid -e "application update app_rep.xml"
(3)主機2上啓動節點2,執行:icegridnode --Ice.Config=config.node,此時因爲服務配置爲隨節點啓動,所以服務自動激活;

6、打開客戶端
執行./client,客戶端自動連接註冊表服務器,接下來便可向服務器發起訪問請求。

7、關於程序編碼調整
IceGrid的使用會導致客戶端、服務器的配置文件發生變動,而代碼也只需做極少的改動。主要是客戶端可能會由直接代理換成間接代理。
使用了IceGrid定位服務功能後,客戶端無需知道服務器上對象適配器端點,只需要對象標識或對象適配器標識或replica-group標識
便可以訪問到服務器上的對象。
服務器端可以在xml中配置對象標識,客戶端可以從配置文件中讀取相應對象標識,這樣對象標識就不需要硬編碼在程序中了。 


發佈了10 篇原創文章 · 獲贊 8 · 訪問量 5萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章