• ICE3.7.3集群安装与部署


    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 

  • 相关阅读:
    wingIDE Pro6 破解教程
    C++中的访问权限
    解决wine中文字体方块或乱码
    linux下目录的作用
    linux下查看系统信息
    Windows Eclipse Maven 安装
    Centos SVN 搭建
    Mysql MyISAM 与 InnoDB 效率
    Linux删除除指定后缀外的所有文件
    mysql 多个timestamp设置自动更新 错误:there can be only one TIMESTAMP column with CURRENT_TIMESTAMP
  • 原文地址:https://www.cnblogs.com/gaoyanbing/p/14314920.html
Copyright © 2020-2023  润新知