ICE之——IceGrid負載均衡部署
阿新 • • 發佈:2019-02-02
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,內容如下
(2)registry和node1的配置檔案config.grid,內容如下<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>
# # 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中配置物件標識,客戶端可以從配置檔案中讀取相應物件標識,這樣物件標識就不需要硬編碼在程式中了。