ICE3.7.3集群安装与部署

摘要:
ICE3.7.3集群安装与部署前言:本文ice3.7.3基于ubuntu16.04版安装,如果版本不一致可能造成离线安装包缺少依赖或者依赖版本过低或过高的问题,需要重新下载安装包。本安装包包含openjdk_1.8.0_242无需自己下载安装。
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进入输入模式,输入下面的内容

debfile:///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

ICE3.7.3集群安装与部署第1张

然后 new Connection >> Direct Connection >> Connect to Master Registry >> Manual Endpoint >> An endpoint string >> 输入tcp -h $(icegrid-master_IP)或$(icegrid-slave_IP) -p 4061 >> 输入用户名密码,我们这里没设随便输入一下就可以了然后finish连接成功

ICE3.7.3集群安装与部署第2张

也可以使用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 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" 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" />

</node>

<node name="node2">

<server-instance template="acdTemp" />

</node>

<node name="node3">

<server-instance template="acdTemp" />

</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

免责声明:文章转载自《ICE3.7.3集群安装与部署》仅用于学习参考。如对内容有疑问,请及时联系本站处理。

上篇3--Redis事务 ;配置文件详解 ;数据持久化如何在centos下卸载干净nginx下篇

宿迁高防,2C2G15M,22元/月;香港BGP,2C5G5M,25元/月 雨云优惠码:MjYwNzM=

相关文章

marshaller unmarshaller解析xml和读取xml

JAXB(Java Architecture for XML Binding) 是一个业界的标准,是一项可以根据XML Schema产生Java类的技术。该过程中,JAXB也提供了将XML实例文档反向生成Java对象树的方法,并能将Java对象树的内容重新写到XML实例文档。从另一方面来讲,JAXB提供了快速而简便的方法将XML模式绑定到Java表示,从而...

字符串常量池---Java

字符串常量池:程序当中直接写上的双引号字符串,就在字符串常量池中。 对于基本类型来说,==是进行数值的比较。对于引用类型来说,==是进行【地址值】的比较。 1 public class Demo02StringPool { 2 3 public static void main(String[] args) { 4 String str1 = "...

1034 Head of a Gang (30 分)(图的遍历or并查集)

dfs #include<bits/stdc++.h> using namespace std; const int N=3000; int mp[N][N]; int weight[N]; int vis[N]; map<string,int>si; map<int,string>is; map<string...

Java如何连接Access数据库(两种方式实例代码)

import java.sql.*; public class ConnectAccess { /** * 1:先建立一个access文件a1.mdb,并放在D:/下; * 2:在数据库文件a1.mdb中建立一个表Table1; * 3:为Table1添加一列,并插入至少一条记录; * 4:本文是一个完整的类...

smali 语言语法

Androidkiller 可以反编译Android的apk,生成一种.smali代码。(这理解好像不对) 网上找了一篇smali的语法手册,可以方便查找,文章名《Smali文件语法参考》 手册地址:http://blog.csdn.net/litton_van/article/details/7843490 网上有一篇smali的语法讲解(java与sm...

基于SSM的数据库表字段查询应用

一、简介根据配置的数据源,可以查询该数据源下所有的数据库、表、以及字段说明。 二、前端代码<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd"> <html> <...