本文将介绍ice搭建高可用集群环境的详细操作步骤,实现 register 的主从备份、双服务器节点负载均衡等功能
1、下载:
到官网 http://www.zeroc.com/ 下载最新的Ice-x.x.x.msi (windows)版本
2、安装:
双击下载下来的安装文件,安装到自己喜欢的目录下(例:D:\Program Files\ZeroC)
3、环境配置:
设置ICE的环境变量 ICEJ_HOME = D:\Program Files\ZeroC\ice-x.x.x
同时将 %ICEJ_HOME%\bin 目录添加到 Path 路径中
下边介绍一个伪集群环境的配置和搭建步骤,节点情况如下:
主注册节点(Master):tcp -h 127.0.0.1 -p 4061
从注册节点(Replica):tcp -h 127.0.0.1 -p 4062
服务节点node1: tcp -p 5062
服务节点node2: tcp -p 5063
1、编写主注册节点 register_master.conf 配置文件
IceGrid.InstanceName=DemoGrid #设置注册节点的实例名称,其它的配置均基于该名字配置
IceGrid.Registry.Client.Endpoints=tcp -p 4061 #设置用于监听客户端连接的协议类型及端口
IceGrid.Registry.Data=D:\ice_service\register\data #设置主注册节点的数据存储目录
IceGrid.Registry.Server.Endpoints=tcp #设置与服务器节点之间通讯的协议类型,不指定端口则由系统自动分配
IceGrid.Registry.Internal.Endpoints=tcp #
IceGrid.Registry.AdminPermissionsVerifier=DemoGrid/NullPermissionsVerifier #指定进入管理系统的安全验证方式
IceGridAdmin.Username=test #设置管理用户名
IceGridAdmin.Password=test #设置管理密码
2、编写从注册节点 register_slave.conf 配置文件
Ice.Default.Locator=DemoGrid/Locator:tcp -h 127.0.0.1 -p 4061 #指定主注册节点的位置
IceGrid.Registry.Client.Endpoints=tcp -p 4062 #设置用于监听客户端连接的协议类型及端口
IceGrid.Registry.Data=D:\ice_service\register\replica_data #设置主注册节点的数据存储目录
IceGrid.Registry.Server.Endpoints=tcp #设置与服务器节点之间通讯的协议类型,不指定端口则由系统自动分配
IceGrid.Registry.Internal.Endpoints=tcp #
IceGrid.Registry.AdminPermissionsVerifier=DemoGrid/NullPermissionsVerifier #指定进入管理系统的安全验证方式
IceGridAdmin.Username=test #设置管理用户名
IceGridAdmin.Password=test #设置管理密码
IceGrid.Registry.Server.Endpoints=tcp #设置与服务器节点之间通讯的协议类型,不指定端口则由系统自动分配
IceGrid.Registry.Internal.Endpoints=tcp #
IceGrid.Registry.AdminPermissionsVerifier=DemoGrid/NullPermissionsVerifier #指定进入管理系统的安全验证方式
IceGridAdmin.Username=test #设置管理用户名
IceGridAdmin.Password=test #设置管理密码
3、编写服务节点 node1.conf 配置文件
Ice.Default.Locator=DemoGrid/Locator:tcp -h 127.0.0.1 -p 4061 #指定主注册节点的位置
IceGrid.Node.Data=D:\ice_service\node\data #设置节点1相关数据的存储目录
IceGrid.Node.Endpoints=tcp -p 5062 #指定节点1用于监听客户端连接的端口号
IceGrid.Node.Name=MyNode1 #指定节点1的名称
Ice.StdErr=D:\ice_service\node\logs\node.stderr.log #指定错误日志文件
Ice.StdOut=D:\ice_service\node\logs\node.stdout.log #指定标准输出流日志文件
4、编写服务节点 node2.conf 配置文件
Ice.Default.Locator=DemoGrid/Locator:tcp -h 127.0.0.1 -p 4061 #指定主注册节点的位置
IceGrid.Node.Data=D:\ice_service\node\data2 #设置节点1相关数据的存储目录
IceGrid.Node.Endpoints=tcp -p 5063 #指定节点1用于监听客户端连接的端口号
IceGrid.Node.Name=MyNode2 #指定节点2的名称
Ice.StdErr=D:\ice_service\node\logs\node2.stderr.log #指定错误日志文件
Ice.StdOut=D:\ice_service\node\logs\node2.stdout.log #指定标准输出流日志文件
IceGrid.Node.Endpoints=tcp -p 5063 #指定节点1用于监听客户端连接的端口号
IceGrid.Node.Name=MyNode2 #指定节点2的名称
Ice.StdErr=D:\ice_service\node\logs\node2.stderr.log #指定错误日志文件
Ice.StdOut=D:\ice_service\node\logs\node2.stdout.log #指定标准输出流日志文件
5、编写IceBox.Service服务及相应的实现类
1)编写slice配置文件,内容如下:
module
com{
module mop{
module
interf{
module generated{
interface CalcServiceIce{
double
calc(double d1,double d2);
};
interface MessageServiceIce{
string sendMessage(string
msg ); //string全为小写
};
};
};
};
};
2)使用eclipse的slice2java插件将该配置文件生成相应的java源码
3)编写实现类 MessageServiceIceImpl 实现第二步生成的抽象类 _MessageServiceIceDisp ,代码如下:
package com.mop.ice.serv;
import Ice.Current;
import com.mop.interf.generated._MessageServiceIceDisp;
public class MessageServiceIceImpl extends _MessageServiceIceDisp{
private static final long serialVersionUID = -6954195427744180145L;
@Overridepublic String sendMessage(String msg, Current __current) {System.out.println("recv:"+msg);return "msg handled success";}
}
4)编写IceBox.Service服务类,用于将服务配置到icegrid中:
package com.mop.ice.icebox;
import com.mop.ice.serv.MessageServiceIceImpl;import Ice.Communicator;import IceBox.Service;public class MessageServiceI extends Ice.ObjectImpl implements Service {/****/private static final long serialVersionUID = 43338146304475187L;private Ice.ObjectAdapter _adapter;@Overridepublic void start(String name, Communicator ci, String[] args) {_adapter=ci.createObjectAdapter(name);_adapter.add(new MessageServiceIceImpl(), Ice.Util.stringToIdentity("IceBoxTest"));_adapter.activate();}@Overridepublic void stop() {if(_adapter!=null){_adapter.deactivate();}}}
5)将上述生成的类和自己编写的两个类打包,并放到指定的lib目录下
6、编写xml配置文件 app.xml ,在icegrid中集成icebox服务
activation="on-demand">
endpoints="tcp"/>
servClass="com.mop.ice.IceService"/>
3、将第一步写好的IceService 类随同前一部分的内容重新打包,并放到指定的lib目录中
4、执行命令:
> icegridadmin -u test -p test --Ice.Default.Locator="IceGrid/Locator:tcp -p 4061:tcp -p 5061" -e "application update 'app.xml' "
5、使用前一部分编写好的客户端进行测试,即可成功!