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