版權聲明:本文爲博主原創文章,轉載需標註原創作者以及原創地址。
ICE3.7.3集羣安裝與部署
前言:
本文ice3.7.3基於ubuntu16.04版安裝,如果版本不一致可能造成離線安裝包缺少依賴或者依賴版本過低或過高的問題,需要重新下載安裝包。本安裝包包含openjdk_1.8.0_242無需自己下載安裝。
準備五臺ubuntu16.04(三臺也可以)icegrid-master、icegrid-slave、node1、node2、node3
本文使用ubuntu用戶並在ubuntu用戶目錄下安裝、實際已需求爲準
- 安裝ice客戶端(五臺服務器都需要安裝)
1、解壓縮
tar -zxvf offlinePkg.tar.gz;
2、修改配置文件
sudo vim /etc/apt/sources.list
首先把sources.list裏的內容全部刪除:
保證光標在第一行,按下Esc進入命令行模式執行如下指令
:1,$d
然後就可用刪除所有內容,按a進入輸入模式,輸入下面的內容
deb file:///home/ubuntu/ offlinePkg/
注意: offlinePkg後面有一個斜槓,前面還要有空格
/home/ubuntu 解壓文件的的目錄
保存輸入的內容:
按下Esc鍵進入命令行模式
輸入 :wq 然後按enter鍵就可以保存並退出了
3、更新本地源並安裝
sudo apt-get update
sudo apt-get install zeroc-ice-all-runtime zeroc-ice-all-dev
執行完上述指令之後一直輸入Y就可以
安裝完之後查看是否成功
執行:icegridnode --version
如果你看到顯示了 3.7.3,則說明安裝成功了。
- 創建ice服務
1、添加Ice grid master服務(在icegrid-master服務器執行)
mkdir ice #創建ice文件夾
mkdir ice/ice-conf #創建ice配置文件夾
mkdir ice/registry_master #創建ice數據文件夾
chmod -R +777 ./ice #給ice文件夾賦值權限
cd ice/ice-conf 進入ice配置文件夾
vim registry_master.cfg
按i進入編輯界面,輸入以下內容:
IceGrid.InstanceName=BGCCIceGrid
# tcp協議可以根據實際需求換成ws協議等
# 用本機IP替換 $(icegrid-master_IP)
IceGrid.Registry.Client.Endpoints=tcp -h $(icegrid-master_IP) -p 4061
IceGrid.Registry.Server.Endpoints=tcp -t 30000 -h $(icegrid-master_IP)
IceGrid.Registry.Internal.Endpoints=tcp -t 30000 -h $(icegrid-master_IP)
IceGrid.Registry.AdminPermissionsVerifier=BGCCIceGrid/NullPermissionsVerifier
IceGrid.Registry.ReplicaName=Master
#註冊中心數據保存路徑,需要手動創建文件夾
IceGrid.Registry.LMDB.Path=/home/ubuntu/ice/registry_master
IceGrid.Registry.DynamicRegistration=1
退出並保存
2、添加Ice grid slave服務(在icegrid-slave服務器執行)
mkdir ice #創建ice文件夾
mkdir ice/ice-conf #創建ice配置文件夾
mkdir ice/registry_slave #創建ice數據文件夾
chmod -R +777 ./ice #給ice文件夾賦值權限
cd ice/ice-conf #進入ice配置文件夾
vim registry_slave.cfg
按i進入編輯界面,輸入以下內容:
# icegrid-master IP替換 $(icegrid-master_IP)
Ice.Default.Locator=BGCCIceGrid/Locator:tcp -h $(icegrid-master_IP) -p 4061
IceGrid.Registry.ReplicaName=slave
IceGrid.InstanceName=BGCCIceGrid
# tcp協議可以根據實際需求換成ws協議等
# 用本機IP替換 $(icegrid-slave_IP)
IceGrid.Registry.Client.Endpoints=tcp -h $(icegrid-slave_IP) -p 4061
IceGrid.Registry.Server.Endpoints=tcp -t 30000 -h $(icegrid-slave_IP)
IceGrid.Registry.Internal.Endpoints=tcp -t 30000 -h $(icegrid-slave_IP)
IceGrid.Registry.AdminPermissionsVerifier=BGCCIceGrid/NullPermissionsVerifier
#註冊中心數據保存路徑,需要手動創建文件夾
IceGrid.Registry.LMDB.Path=/home/ubuntu/ice/registry_slave
IceGrid.Registry.DynamicRegistration=1
退出並保存
3、添加node1服務(在node1服務器執行)
mkdir ice #創建ice文件夾
mkdir ice/ice-conf #創建ice配置文件夾
mkdir ice/node1 #創建ice數據文件夾
chmod -R +777 ./ice #給ice文件夾賦值權限
cd ice/ice-conf 進入ice配置文件夾
vim node1.cfg
按i進入編輯界面,輸入以下內容:
# The IceGrid locator proxy.
# icegrid-master IP替換 $(icegrid-master_IP)
# icegrid-slave IP替換 $(icegrid-slave_IP)
Ice.Default.Locator=BGCCIceGrid/Locator:tcp -h $(icegrid-master_IP) -p 4061:tcp -h $(icegrid-slave_IP) -p 4061
#節點名
IceGrid.Node.Name=node1
#指定節點1用於堅挺客戶端連接的端口號
# tcp協議可以根據實際需求換成ws協議等
IceGrid.Node.Endpoints=tcp -p 5062
#節點1相關數據的存儲目錄
IceGrid.Node.Data=/home/ubuntu/ims-service/node1/data
#IceGrid.Node.CollocateRegistry=1
#IceGrid.Node.Output=db
#IceGrid.Node.RedirectErrToOut=1
IceGrid.Node.CollocateRegistry=0
#指定錯誤日誌文件,若爲指定,則直接在node1目錄下生成
Ice.StdErr=/home/ubuntu/ims-service/node1/logs/stdErr.log
Ice.StdOut=/home/ubuntu/ims-service/node1/logs/stdOut.log
Ice.Trace.Network=2
Ice.Trace.Protocol=1
IceGrid.Node.Trace.Activator=3
IceGrid.Registry.Trace.Discovery=2
IceGrid.Registry.Trace.Locator=2
退出並保存
4、添加node2服務(在node2服務器執行)
mkdir ice #創建ice文件夾
mkdir ice/ice-conf #創建ice配置文件夾
mkdir ice/node2 #創建ice數據文件夾
chmod -R +777 ./ice #給ice文件夾賦值權限
cd ice/ice-conf 進入ice配置文件夾
vim node2.cfg
按i進入編輯界面,輸入以下內容:
# The IceGrid locator proxy.
# icegrid-master IP替換 $(icegrid-master_IP)
# icegrid-slave IP替換 $(icegrid-slave_IP)
Ice.Default.Locator=BGCCIceGrid/Locator:tcp -h $(icegrid-master_IP) -p 4061:tcp -h $(icegrid-slave_IP) -p 4061
#節點名
IceGrid.Node.Name=node2
#指定節點2用於堅挺客戶端連接的端口號
# tcp協議可以根據實際需求換成ws協議等
IceGrid.Node.Endpoints=tcp -p 5062
#節點1相關數據的存儲目錄
IceGrid.Node.Data=/home/ubuntu/ims-service/node2/data
#IceGrid.Node.CollocateRegistry=1
#IceGrid.Node.Output=db
#IceGrid.Node.RedirectErrToOut=1
IceGrid.Node.CollocateRegistry=0
#指定錯誤日誌文件,若爲指定,則直接在node2目錄下生成
Ice.StdErr=/home/ubuntu/ims-service/node2/logs/stdErr.log
Ice.StdOut=/home/ubuntu/ims-service/node2/logs/stdOut.log
Ice.Trace.Network=2
Ice.Trace.Protocol=1
IceGrid.Node.Trace.Activator=3
IceGrid.Registry.Trace.Discovery=2
IceGrid.Registry.Trace.Locator=2
退出並保存
5、添加node3服務(在node3服務器執行)
mkdir ice #創建ice文件夾
mkdir ice/ice-conf #創建ice配置文件夾
mkdir ice/node3 #創建ice數據文件夾
chmod -R +777 ./ice #給ice文件夾賦值權限
cd ice/ice-conf 進入ice配置文件夾
vim node3.cfg
按i進入編輯界面,輸入以下內容:
# The IceGrid locator proxy.
# icegrid-master IP替換 $(icegrid-master_IP)
# icegrid-slave IP替換 $(icegrid-slave_IP)
Ice.Default.Locator=BGCCIceGrid/Locator:tcp -h $(icegrid-master_IP) -p 4061:tcp -h $(icegrid-slave_IP) -p 4061
#節點名
IceGrid.Node.Name=node3
#指定節點3用於堅挺客戶端連接的端口號
# tcp協議可以根據實際需求換成ws協議等
IceGrid.Node.Endpoints=tcp -p 5062
#節點3相關數據的存儲目錄
IceGrid.Node.Data=/home/ubuntu/ims-service/node3/data
#IceGrid.Node.CollocateRegistry=1
#IceGrid.Node.Output=db
#IceGrid.Node.RedirectErrToOut=1
IceGrid.Node.CollocateRegistry=0
#指定錯誤日誌文件,若爲指定,則直接在node3目錄下生成
Ice.StdErr=/home/ubuntu/ims-service/node3/logs/stdErr.log
Ice.StdOut=/home/ubuntu/ims-service/node3/logs/stdOut.log
Ice.Trace.Network=2
Ice.Trace.Protocol=1
IceGrid.Node.Trace.Activator=3
IceGrid.Registry.Trace.Discovery=2
IceGrid.Registry.Trace.Locator=2
退出並保存
- 發佈ice服務
1、啓動Ice grid master服務(在icegrid-master服務器執行)
cd /home/ubuntu/ ice/ice-conf
icegridregistry --Ice.Config=registry_master.cfg &
2、啓動Ice grid slave服務(在icegrid-slave服務器執行)
cd /home/ubuntu/ ice/ice-conf
icegridregistry --Ice.Config=registry_slave.cfg &
3、啓動node1服務(在node1服務器執行)
cd /home/ubuntu/ ice/ice-conf
icegridnode --Ice.Config=node1.cfg &
4、啓動node2服務(在node2服務器執行)
cd /home/ubuntu/ ice/ice-conf
icegridnode --Ice.Config=node2.cfg &
5、啓動node3服務(在node3服務器執行)
cd /home/ubuntu/ ice/ice-conf
icegridnode --Ice.Config=node3.cfg &
目前爲止這zeroc ice環境已經建好。
可以同過安裝ice Windows版查看,找到IceGrid GUI並運行,點擊Log into an IceGrid Registry
然後 new Connection >> Direct Connection >> Connect to Master Registry >> Manual Endpoint >> An endpoint string >> 輸入tcp -h $(icegrid-master_IP)或$(icegrid-slave_IP) -p 4061 >> 輸入用戶名密碼,我們這裏沒設隨便輸入一下就可以瞭然後finish連接成功
也可以使用ubuntu命令查看
icegridadmin -u test -p test --Ice.Default.Locator="BGCCIceGrid/Locator:tcp -h $(icegrid-master_IP)或$(icegrid-slave_IP) -p 4061" #連接icegirid
不過這個不太直觀
- 部署ice服務
本部署以java爲示例
在classpath創建slice文件夾 >> 在slice文件夾內創建ice-test.ice文件
1、ice-test.ice書寫ice內容如下:
module acd
{
// acd接口,客戶端向服務器請求操作
interface AcdService
{
string sayHello(string deviceNumber);
};
};
2、生成ICE接口並實現
public class AcdServiceImpl implements AcdService, Service {
private ObjectAdapter _adapter;
private static Logger log = LoggerFactory.getLogger(AcdServiceImpl.class);
@Override
public String sayHello(String deviceNumber, Current current) {
return "hello:" + deviceNumber;
}
@Override
public void start(String name, Communicator communicator, String[] arg2) {
this._adapter = communicator.createObjectAdapter(name);
com.zeroc.Ice.Object object = this;
//communicator.stringToIdentity已棄用
//this._adapter.add(object, communicator.stringToIdentity(name));
this._adapter.add(object, Util.stringToIdentity(name));
this._adapter.activate();
log.info(name + " started ");
}
@Override
public void stop() {
log.info(this._adapter.getName() + " stoped ");
this._adapter.destroy();
}
}
3、書寫日誌服務
public class Slf4jLoggerI implements com.zeroc.Ice.Logger {
private org.slf4j.Logger logger;
private String prefix;
public Slf4jLoggerI(String loggerName){
this.logger = LoggerFactory.getLogger(loggerName);
}
public com.zeroc.Ice.Logger cloneWithPrefix(String prefix) {
this.prefix = prefix;
return new Slf4jLoggerI(prefix);
}
public void error(String message) {
this.logger.error(message);
}
public String getPrefix(){
return this.prefix;
}
public void print(String message) {
this.logger.info(message);
}
public void trace(String category, String message) {
this.logger.trace(category + " " + message);
}
public void warning(String message) {
this.logger.warn(message);
}
}
public class Slf4jIceBoxServer {
public static void main(String[] args) {
InitializationData initData = new InitializationData();
initData.properties = Util.createProperties();
initData.properties.setProperty("Ice.Admin.DelayCreation", "1");
initData.logger = new Slf4jLoggerI("ICE -- SYSTEM");
Server.main(args);
}
}
4、書寫IceGrid配置文件ice-acd.xml
<icegrid>
<application name="acd">
<properties id="MultiThreaded">
<property name="Ice.PrintStackTraces" value="1"/>
<property name="Ice.Trace.Retry" value="2"/>
<property name="Ice.Trace.Network" value="1"/>
<property name="Ice.Trace.ThreadPool" value="1"/>
<property name="Ice.Trace.Locator" value="1"/>
</properties>
<server-template id="acdTemp">
<parameter name="id"/>
<icebox id="acd${id}" exe="java" activation="on-demand">
<properties>
<properties refid="MultiThreaded"/>
</properties>
<option>-Xmx256M</option>
<option>-DAppHome=/home/ubuntu/ims-service/node${id}</option>
<option>-DAppId=acd${id}</option>
<option>-agentlib:jdwp=transport=dt_socket,address=18167,server=y,suspend=n</option>
<env>CLASSPATH=/usr/share/java/*:/home/ubuntu/ice/ice-project/ice-acd/lib/*:/home/ubuntu/ice/ice-project/ice-acd/classes</env>
<option>com.acd.start.Slf4jIceBoxServer</option>
<service name="acdService" entry="com.acd.serviceIce.AcdServiceImpl">
<adapter name="acdService" id="acdService${id}" endpoints="tcp" replica-group="acdService">
<property name="Ice.ThreadPool.Server.Size" value="4"/>
<property name="Ice.ThreadPool.Server.SizeMax" value="100"/>
<property name="Ice.ThreadPool.Server.SizeWarn" value="40"/>
<property name="acdService.Endpoints" value="tcp" />
</adapter>
</service>
</icebox>
</server-template>
<replica-group id="acdService">
<load-balancing type="round-robin" />
<object identity="acdService" type="::acd::acdapi"/>
</replica-group>
<node name="node1">
<server-instance template="acdTemp" id="1"/>
</node>
<node name="node2">
<server-instance template="acdTemp" id="2"/>
</node>
<node name="node3">
<server-instance template="acdTemp" id="3"/>
</node>
</application>
</icegrid>
5、部署
1) 將ice-acd.xml放到icegrid-master、icegrid-slave服務器的/home/ubuntu/ice/ice-conf下
2) 在node1、node2、node3下分別創建/home/ubuntu/ice/ice-project/ice-acd目錄
3) 在node1、node2、node3下將javaclass文件和依賴的lib包放到/home/ubuntu/ice/ice-project/ice-acd目錄下
4) 在icegrid-master連接icegirid
5) 執行application add /home/ubuntu/ice/ice-conf/ice-acd.xml
6) 執行server start acd1
7) 執行server start acd2
8) 執行server start acd3
9) 在icegrid-slave連接icegirid
10) 查看是否同步成功
11) icegrid常用命令
部署:
application add app.xml 添加iceBox配置文件
remove application_name 刪除
list 查看
啓動:
server list 查看
server start server_name(查看出來的) 啓動
remove server_name 停止
需要用的的軟件包
鏈接: https://pan.baidu.com/s/14mbbYeePL1PSup6T5XiDrg 提取碼: vhth