IceGrid负载均衡部署 z
2016-01-27 21:45
260 查看
【IceGrid负载均衡部署步骤】
1、环境
主机1:IP=192.168.0.239,上面部署注册表服务器registry和节点node1,registry和node1运行在同一进程中;
主机2:IP=192.168.0.25,上面部署节点node2;
其中每个节点中包含一个服务程序,服务程序均在节点启动时启动。
2、主机1配置
(1)服务程序部署XML:app_rep.xml,内容如下
<icegrid>
<application name="Simple"> #分布式系统名称
<server-template id="SimpleServer"> #服务器模板
<parameter name="index"/> #自定义参数index
<server id="SimpleServer-${index}" exe="./server" activation="always"> #服务器id,程序路径,启动方式
<adapter name="Hello" endpoints="tcp" replica-group="ReplicatedHelloAdapter"/> #对象适配器配置
<property name="Identity" value="hello"/> #服务器中自定义属性Identity
</server>
</server-template>
<replica-group id="ReplicatedHelloAdapter">
<load-balancing type="round-robin"/> #负载均衡配置,使用轮询调度方式(最近最少使用算法)
<object identity="hello" type="::Demo::Hello"/> #该replica-group中的对象,客户端根据该对象标识或类型定位请求
</replica-group>
<node name="node1"> #节点1,对应于服务程序实例SimpleServer-1
<server-instance template="SimpleServer" index="1"/>
</node>
<node name="node2"> #节点2,对应于服务程序实例SimpleServer-2
<server-instance template="SimpleServer" index="2"/>
</node>
</application>
</icegrid>
--------------------------------------------------------
(2)registry和node1的配置文件config.grid,内容如下
#
# The IceGrid instance name.
#
IceGrid.InstanceName=DemoIceGrid
#
# The IceGrid locator proxy.
#
Ice.Default.Locator=DemoIceGrid/Locator:default -p 12345 #注册表服务器的端点信息
#
# IceGrid registry configuration.
#
IceGrid.Registry.Client.Endpoints=default -p 12345
IceGrid.Registry.Server.Endpoints=default
IceGrid.Registry.Internal.Endpoints=default
IceGrid.Registry.Data=db/registry #注册表服务器使用到的目录
IceGrid.Registry.PermissionsVerifier=DemoIceGrid/NullPermissionsVerifier
IceGrid.Registry.AdminPermissionsVerifier=DemoIceGrid/NullPermissionsVerifier
IceGrid.Registry.SSLPermissionsVerifier=DemoIceGrid/NullSSLPermissionsVerifier
IceGrid.Registry.AdminSSLPermissionsVerifier=DemoIceGrid/NullSSLPermissionsVerifier
#
# IceGrid SQL configuration if using SQL database.
#
#Ice.Plugin.DB=IceGridSqlDB:createSqlDB
#IceGrid.SQL.DatabaseType=QSQLITE
#
# IceGrid node configuration.
#
IceGrid.Node.Name=node1 #节点1,对应于app_rep.xml中node1
IceGrid.Node.Endpoints=default
IceGrid.Node.Data=db/node #节点1用到的目录
IceGrid.Node.CollocateRegistry=1
#IceGrid.Node.Output=db #将节点上的服务程序的标准输出重定向到目录db下,会自动生成输出文件
#IceGrid.Node.RedirectErrToOut=1 #将节点上的服务程序的标准错误重定向到标准输出
#
# Trace properties.
#
IceGrid.Node.Trace.Activator=1
#IceGrid.Node.Trace.Adapter=2
#IceGrid.Node.Trace.Server=3
#
# Dummy username and password for icegridadmin.
#
IceGridAdmin.Username=foo
IceGridAdmin.Password=bar
----------------------------------------------------------------
3、主机2配置
主机2上只需要配置node2的配置文件config.node即可,内容如下
#
# The IceGrid locator proxy.
#
Ice.Default.Locator=DemoIceGrid/Locator:default -h 192.168.0.239 -p 12345 #注册表服务器的端点信息
#
# IceGrid node configuration.
#
IceGrid.Node.Name=node2 #节点2,对应于app_rep.xml中node2
IceGrid.Node.Endpoints=default
IceGrid.Node.Data=db/node2
IceGrid.Node.Output=db/node2 #将节点上的服务程序的标准输出重定向到db/node2目录下,会自动生成输出文件
IceGrid.Node.RedirectErrToOut=1
#
# Trace properties.
#
IceGrid.Node.Trace.Activator=1
---------------------------------------------------------------
4、客户端配置
配置文件:config.client,内容如下:
#
# The IceGrid locator proxy.
#
Ice.Default.Locator=DemoIceGrid/Locator:default -h 192.168.0.239 -p 12345 #只需有注册表服务器的端点信息即可
5、启动服务程序
(1)主机1上先启动注册表和节点1,执行:icegridnode --Ice.Config=config.grid
(2)主机1上部署服务(只需部署一次,除非修改过app_rep.xml),执行:
icegridadmin --Ice.Config=config.grid -e "application add app_rep.xml"
若要重新部署,执行:icegridadmin --Ice.Config=config.grid -e "application update app_rep.xml"
(3)主机2上启动节点2,执行:icegridnode --Ice.Config=config.node,此时因为服务配置为随节点启动,所以服务自动激活;
6、打开客户端
执行./client,客户端自动连接注册表服务器,接下来便可向服务器发起访问请求。
7、关于程序编码调整
IceGrid的使用会导致客户端、服务器的配置文件发生变动,而代码也只需做极少的改动。主要是客户端可能会由直接代理换成间接代理。
使用了IceGrid定位服务功能后,客户端无需知道服务器上对象适配器端点,只需要对象标识或对象适配器标识或replica-group标识
便可以访问到服务器上的对象。
服务器端可以在xml中配置对象标识,客户端可以从配置文件中读取相应对象标识,这样对象标识就不需要硬编码在程序中了。
1、环境
主机1:IP=192.168.0.239,上面部署注册表服务器registry和节点node1,registry和node1运行在同一进程中;
主机2:IP=192.168.0.25,上面部署节点node2;
其中每个节点中包含一个服务程序,服务程序均在节点启动时启动。
2、主机1配置
(1)服务程序部署XML:app_rep.xml,内容如下
<icegrid>
<application name="Simple"> #分布式系统名称
<server-template id="SimpleServer"> #服务器模板
<parameter name="index"/> #自定义参数index
<server id="SimpleServer-${index}" exe="./server" activation="always"> #服务器id,程序路径,启动方式
<adapter name="Hello" endpoints="tcp" replica-group="ReplicatedHelloAdapter"/> #对象适配器配置
<property name="Identity" value="hello"/> #服务器中自定义属性Identity
</server>
</server-template>
<replica-group id="ReplicatedHelloAdapter">
<load-balancing type="round-robin"/> #负载均衡配置,使用轮询调度方式(最近最少使用算法)
<object identity="hello" type="::Demo::Hello"/> #该replica-group中的对象,客户端根据该对象标识或类型定位请求
</replica-group>
<node name="node1"> #节点1,对应于服务程序实例SimpleServer-1
<server-instance template="SimpleServer" index="1"/>
</node>
<node name="node2"> #节点2,对应于服务程序实例SimpleServer-2
<server-instance template="SimpleServer" index="2"/>
</node>
</application>
</icegrid>
--------------------------------------------------------
(2)registry和node1的配置文件config.grid,内容如下
#
# The IceGrid instance name.
#
IceGrid.InstanceName=DemoIceGrid
#
# The IceGrid locator proxy.
#
Ice.Default.Locator=DemoIceGrid/Locator:default -p 12345 #注册表服务器的端点信息
#
# IceGrid registry configuration.
#
IceGrid.Registry.Client.Endpoints=default -p 12345
IceGrid.Registry.Server.Endpoints=default
IceGrid.Registry.Internal.Endpoints=default
IceGrid.Registry.Data=db/registry #注册表服务器使用到的目录
IceGrid.Registry.PermissionsVerifier=DemoIceGrid/NullPermissionsVerifier
IceGrid.Registry.AdminPermissionsVerifier=DemoIceGrid/NullPermissionsVerifier
IceGrid.Registry.SSLPermissionsVerifier=DemoIceGrid/NullSSLPermissionsVerifier
IceGrid.Registry.AdminSSLPermissionsVerifier=DemoIceGrid/NullSSLPermissionsVerifier
#
# IceGrid SQL configuration if using SQL database.
#
#Ice.Plugin.DB=IceGridSqlDB:createSqlDB
#IceGrid.SQL.DatabaseType=QSQLITE
#
# IceGrid node configuration.
#
IceGrid.Node.Name=node1 #节点1,对应于app_rep.xml中node1
IceGrid.Node.Endpoints=default
IceGrid.Node.Data=db/node #节点1用到的目录
IceGrid.Node.CollocateRegistry=1
#IceGrid.Node.Output=db #将节点上的服务程序的标准输出重定向到目录db下,会自动生成输出文件
#IceGrid.Node.RedirectErrToOut=1 #将节点上的服务程序的标准错误重定向到标准输出
#
# Trace properties.
#
IceGrid.Node.Trace.Activator=1
#IceGrid.Node.Trace.Adapter=2
#IceGrid.Node.Trace.Server=3
#
# Dummy username and password for icegridadmin.
#
IceGridAdmin.Username=foo
IceGridAdmin.Password=bar
----------------------------------------------------------------
3、主机2配置
主机2上只需要配置node2的配置文件config.node即可,内容如下
#
# The IceGrid locator proxy.
#
Ice.Default.Locator=DemoIceGrid/Locator:default -h 192.168.0.239 -p 12345 #注册表服务器的端点信息
#
# IceGrid node configuration.
#
IceGrid.Node.Name=node2 #节点2,对应于app_rep.xml中node2
IceGrid.Node.Endpoints=default
IceGrid.Node.Data=db/node2
IceGrid.Node.Output=db/node2 #将节点上的服务程序的标准输出重定向到db/node2目录下,会自动生成输出文件
IceGrid.Node.RedirectErrToOut=1
#
# Trace properties.
#
IceGrid.Node.Trace.Activator=1
---------------------------------------------------------------
4、客户端配置
配置文件:config.client,内容如下:
#
# The IceGrid locator proxy.
#
Ice.Default.Locator=DemoIceGrid/Locator:default -h 192.168.0.239 -p 12345 #只需有注册表服务器的端点信息即可
5、启动服务程序
(1)主机1上先启动注册表和节点1,执行:icegridnode --Ice.Config=config.grid
(2)主机1上部署服务(只需部署一次,除非修改过app_rep.xml),执行:
icegridadmin --Ice.Config=config.grid -e "application add app_rep.xml"
若要重新部署,执行:icegridadmin --Ice.Config=config.grid -e "application update app_rep.xml"
(3)主机2上启动节点2,执行:icegridnode --Ice.Config=config.node,此时因为服务配置为随节点启动,所以服务自动激活;
6、打开客户端
执行./client,客户端自动连接注册表服务器,接下来便可向服务器发起访问请求。
7、关于程序编码调整
IceGrid的使用会导致客户端、服务器的配置文件发生变动,而代码也只需做极少的改动。主要是客户端可能会由直接代理换成间接代理。
使用了IceGrid定位服务功能后,客户端无需知道服务器上对象适配器端点,只需要对象标识或对象适配器标识或replica-group标识
便可以访问到服务器上的对象。
服务器端可以在xml中配置对象标识,客户端可以从配置文件中读取相应对象标识,这样对象标识就不需要硬编码在程序中了。
相关文章推荐
- JVM总结(二):JVM的内存分配策略
- 刷题
- 第十章数组和指针 p267
- 傅里叶级数的理解
- 用简单的C语言实现多任务轮流切换(模拟操作系统线程机制)
- 用简单的C语言实现多任务轮流切换(模拟操作系统线程机制)
- STM32 printf 重定向问题
- 用简单的C语言实现多任务轮流切换(模拟操作系统线程机制)
- ice介绍 z
- ObjC语法练习 冒泡排序、选择排序、矩阵相乘
- [Javascript] Web APIs: Persisting browser data with window.localStorage
- Bestcoder#69
- stack around the variable “res” was corrupted
- 计算机原理-w位无符号和有符号位数最大值和最小值公式
- 年度总结
- 大数据入门:各种大数据技术介绍
- ERROR! The server quit without updating PID file (/usr/local/var/mysql/ericliu.pid).
- 点击Button选择切换背景图片设置
- CSS 布局实例系列(四)如何实现容器中每一行的子容器数量随着浏览器宽度的变化而变化?
- 【Python学习笔记】输出现在的时间