ice 文件服务器,Ice组件安装及Ice Grid配置和部署

本文档详细介绍了Ice组件的安装步骤,包括下载、解压、配置Make.rules以及处理依赖问题。接着,文章阐述了Ice Grid的配置和部署过程,包括注册器配置文件、服务配置文件、客户端配置以及计算节点的配置和启动。同时,提供了服务端和客户端代码模板,以确保服务能够正确启动和调用。整个过程旨在建立一个完整的Ice Grid计算平台,实现服务的透明调用和管理。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

Ice组件安装及Ice Grid配置和部署

一、Ice 组件安装

1.下载,去官方网站下载最新版,当前是ice 3.4.2

2.建一个目录(例如 /public),把下载的tar.gz文件复制到这个目录下,解压

tar -zxvf Ice-3.4.2.tar.gz

这样 /public目录下有一个Ice-3.4.2子目录。

3.到cpp子目录(cd /public/Ice-3.4.2/cpp),修改config子目录下的Make.rules文件

此版本的 Make.rules文件有个奇怪的符号,把他修改过来,可以用UltraEdit批量修改

prefix ?= /opt/Ice-$(VERSION)

这里 "?="修改成"="

另外把 /opt/修改成/public,就是我们开始建的目录

在前面定义 VERSION=3.4.2

准备好前面几步后,就可以 make了

如果没有 expat,需要作2步:a.把expat.h复制到/usr/include b.把libexpat.so复制到/usr/lib,否则会出错。

二、Ice Grid配置和部署

1.准备注册器配置文件(如config.master) , 启动注册服务

#IceGrid instance name. 实例名

IceGrid.InstanceName=DemoIceGrid

# IceGrid registry configuration. 注册器信息

IceGrid.Registry.Client.Endpoints=tcp -h lxs02 -p 12000 -t 10000

IceGrid.Registry.Server.Endpoints=tcp -h lxs02 -t 10000

IceGrid.Registry.Internal.Endpoints=tcp -h lxs02 -t 10000

IceGrid.Registry.Data=db/master

IceGrid.Registry.PermissionsVerifier=DemoIceGrid/NullPermissionsVerifier

IceGrid.Registry.AdminPermissionsVerifier=DemoIceGrid/NullPermissionsVerifier

Ice.StdErr=/dev/null #db/master/stderr.txt 标准输出

Ice.StdOut=/dev/null #db/master/stdout.txt 错误输出

Ice.ProgramName=Master

上述内容修改好后,先建好配置文件要求的目录db/master (mkdir -p db/master)

然后,启动 icegridregistry --Ice.Config=config.master --nochdir --daemon就可以开启12000端口,客户端使用这个端口可以透明的调用icegrid后面配置的一整套服务。

2.准备服务配置文件 application.xml,启动多个节点上的服务

本配置文件在上面搭好的平台上启动服务,下面是其中部分内容的解释:

a.第四行server-template部分是模板描述,后面server-instance template=部分应用此模板启动应用实例。

b.第18行开始是节点和应用实例部分。node name属性要在第二步时在平台上用icegridnode在注册器上注册过,node name属性的值要与config.nodeX文件中IceGrid.Node.Name=后面的部分相同。

c.server-instance template=部分要对应上“模板描述”部分的server-template id=,下面parameter name=是模板中的可替换部分参数(一般使用一个可替换参数) ,后面index=部分替换模板中${index}

d.“模板描述”部分exe=是可执行文件的名称,就是启动这个文件,activation="on-demand"表示有请求时才启动,不是部署配置时启动。

e.“replica”系列表示服务启动多个实例,这才能体现grid网格计算的优势。replica-group=部分要与后面replica-group id=部分对应上。表示有4个节点,随机调用某计算节点。

3.准备客户端 config.client,启动icegridadmin --Ice.Config=config.client

Ice.Default.Locator=DemoIceGrid/Locator:tcp -h 192.168.166.160 -p 12000

Ice.Override.Timeout=10000

IceGridAdmin.Username=benoit

IceGridAdmin.Password=dummy

因为 icegridadmin实际上是一个特殊的管理客户端,所有要配置这个config.client。

第一行 Ice.Default.Locator=指向注册器的机器和端口,启动icegridadmin后,就表示对这个注册器后面配置的一整套计算节点和应用、服务进行管理,当注册器没有启动时,就连接不上,那就更谈不上什么管理了。

下面的超时、管理用户名、密码是为了安全使用的。

当注册器启动后(第一步没错的话,注册器就算启动成功了) , 执行 icegridadmin --Ice.Config=config.client能到命令行:

[oracle@lxs02 simple]$ icegridadmin --Ice.Config=config.client

Ice 3.4.2 Copyright 2003-2011 ZeroC, Inc.

>>>

此时可以执行 application add 'application.xml'将上一步骤配置的应用加载进去。

如果配置有错误,修改后重新加载。

加载成功后,这个 icegrid就可以为客户端提供服务了。

4.准备各个 node配置文件(如config.nodeX,这里X=2),启动node(计算节点)

# The IceGrid locator proxy. 定位,指向 注册器的机器名 和12000端口。

Ice.Default.Locator=DemoIceGrid/Locator:tcp -h lxs02 -p 12000

# IceGrid node configuration.

IceGrid.Node.Name=node2

IceGrid.Node.Endpoints=tcp

IceGrid.Node.Data=db/node2

#IceGrid.Node.RedirectErrToOut=1

#IceGrid.Node.Output=db

#IceGrid.Node.RedirectErrToOut=1

# Trace properties.

IceGrid.Node.Trace.Activator=1

上述内容修改好后,先建好配置文件要求的目录db/node2( mkdir -p db/node2)

然后启动 icegridnode --Ice.Config=config.node2 --nochdir --daemon就可以在注册器上注册一个计算节点,因而就可以在此节点上启动计算服务。

上述2步只是建立好了计算的平台,具体服务程序要靠icegridadmin按配置启动起来。

5.服务端代码规范模板

要使服务端能成功启动,服务端按下面模板规范服务代码即可,这已经是ice规范好了的:

class sendrecvServer : public Ice::Application //首先继承Ice::Application

{

public:

virtual int run(int, char*[]);

};

int main(int argc, char* argv[])

{

sendrecvServer app; //实例化上面继承的这个,启动主程序

return app.main(argc, argv);

}

int sendrecvServer::run(int argc, char* argv[])

{

Ice::PropertiesPtr properties = communicator()->getProperties();

Ice::ObjectAdapterPtr adapter = communicator()->createObjectAdapter("sendrecv");

CRM2REQ::sendrecvPtr servant = new sendrecvI; //启动自己的业务接口

adapter->add(servant, communicator()->stringToIdentity(properties->getProperty("Identity")));

adapter->activate();

communicator()->waitForShutdown();

return EXIT_SUCCESS;

}

上面代码除了设计自己业务接口名称,几乎不用修改。编译后就能被 Icegrid执行起来。

6.客户端代码规范模板

要使客户端能成功调用注册器,进而调用服务,只要按下面模板规范服务代码即可,这已经是ice规范好了的:

intmain(int argc, char* argv[])

{

Ice::CommunicatorPtr communicator;

communicator = Ice::initialize(argc, argv);//初始化环境,命令行参数要是--Ice.Config=config.client,即要读取上面config.client的配置文件

Ice::ObjectPrx obj = communicator->stringToProxy("sendrecv");

obj = obj->ice_connectionCached(false);//服务器连接时,改为true,能显著提高tps

obj = obj->ice_locatorCacheTimeout(0);

sendrecvPrx sendrecv = sendrecvPrx::checkedCast(obj);// 得到业务调用接口

sendrecv->sendByteSeq(inMsg);//调用业务

communicator->destroy();//关闭连接

return 0;

}

上面程序都去掉了异常处理部分。

经过上面步骤,就可用./client --Ice.Config=config.client 调用服务了。

本文档更多涉及配置部分,关于业务接口如何编写,另启一篇详细介绍。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值