关于如何使用 JBoss 5 进行热部署的想法
Thoughts on How to Hotdeploy using JBoss 5
我正在尝试看看这是否可行。我将首先向您介绍应用程序当前 运行s.
的背景
应用程序部署到 4 个独立的节点(使用 'all' 配置)。 ServerA 上的 2 个节点和 ServerB 上的 2 个节点分别命名为 node1、node2、node3、node4。
该应用程序位于 Web 服务器 运行ning apache 和 mod_jk 之后以重定向流量。
假设当前部署的是版本 1.0.0。
我将尝试部署 1.0.1,它只会有一个小的变化。
目标是关闭 node4,将版本 1.0.1 部署到 node4(同时 node1-node3 仍在运行并且 运行ning)。
他们将共享同一个数据库,只要我们的代码不需要我们更新数据库中的任何内容,理论上这应该没问题。
下一步是使用 apache + mod_jk 将流量定向到仅负载平衡节点 1-节点 3。 node4 将被直接访问。
node4 将测试 运行ning 版本 1.0.1。
Apache + mod_jk 将更改为服务于 node4。
1.0.1版本将部署到node1-node3。
所有节点现在应该是 运行ning 版本 1.0.1.
我知道这是非常高的水平,我已经面临问题(更不用说特定于应用程序的问题)。
我只想知道还有什么其他方法可以解决这个问题或 JBoss 我可以 运行 解决的具体问题。
我是否应该将 hotdeploy 节点放在不同的集群中,然后让其余节点稍后加入?
任何建议都会有所帮助。谢谢
您可以利用前面带有 mod_jk 的 Apache,假设您的配置中有如下内容:
JkMount /myapp/* workerApp
JkWorkersFile /etc/httpd/conf/workerApp.properties
好吧,不要使用名为 workerApp.properties 的文件,而是使用这 3 个文件:
- workerApp-deploy1.properties
- 将包含仅连接到节点 4 的配置
- workerApp-deploy2.properties
- 将包含仅连接到节点 1,2 和 3 的配置
- workerApp-normal.properties
- 这将是您的实际工人档案
现在 wokerApp.properties 不是文件而是 link,所以在正常情况下:
ln -s workerApp-normal.properties workerApp.properties
部署新版本时
rm -f workerApp.properties
ln -s workerApp-deploy2.properties workerApp.properties
reload apache
现在您可以在节点 4 上部署新版本,所有请求都将通过节点 1、2 和 3 进行路由。在节点 4 上部署就绪后:
rm -f workerApp.properties
ln -s workerApp-deploy1.properties workerApp.properties
reload apache
在这种情况下,所有客户端都将路由到节点 4,您可以在其他节点上升级版本。完成后:
rm -f workerApp.properties
ln -s workerApp-normal.properties workerApp.properties
reload apache
并且您可以在服务器之间平衡所有请求。
这还有另一个优点,例如,您可以使用不同的一组工作人员定义像 preflighttest.yourcompany.com 这样的 VirtualHost,这样您就可以在节点 4 上测试您的新版本,然后再将其有效地投入生产。
希望对您有所帮助。
我正在尝试看看这是否可行。我将首先向您介绍应用程序当前 运行s.
的背景应用程序部署到 4 个独立的节点(使用 'all' 配置)。 ServerA 上的 2 个节点和 ServerB 上的 2 个节点分别命名为 node1、node2、node3、node4。 该应用程序位于 Web 服务器 运行ning apache 和 mod_jk 之后以重定向流量。 假设当前部署的是版本 1.0.0。 我将尝试部署 1.0.1,它只会有一个小的变化。
目标是关闭 node4,将版本 1.0.1 部署到 node4(同时 node1-node3 仍在运行并且 运行ning)。 他们将共享同一个数据库,只要我们的代码不需要我们更新数据库中的任何内容,理论上这应该没问题。 下一步是使用 apache + mod_jk 将流量定向到仅负载平衡节点 1-节点 3。 node4 将被直接访问。 node4 将测试 运行ning 版本 1.0.1。 Apache + mod_jk 将更改为服务于 node4。 1.0.1版本将部署到node1-node3。 所有节点现在应该是 运行ning 版本 1.0.1.
我知道这是非常高的水平,我已经面临问题(更不用说特定于应用程序的问题)。
我只想知道还有什么其他方法可以解决这个问题或 JBoss 我可以 运行 解决的具体问题。
我是否应该将 hotdeploy 节点放在不同的集群中,然后让其余节点稍后加入?
任何建议都会有所帮助。谢谢
您可以利用前面带有 mod_jk 的 Apache,假设您的配置中有如下内容:
JkMount /myapp/* workerApp
JkWorkersFile /etc/httpd/conf/workerApp.properties
好吧,不要使用名为 workerApp.properties 的文件,而是使用这 3 个文件:
- workerApp-deploy1.properties
- 将包含仅连接到节点 4 的配置
- workerApp-deploy2.properties
- 将包含仅连接到节点 1,2 和 3 的配置
- workerApp-normal.properties
- 这将是您的实际工人档案
现在 wokerApp.properties 不是文件而是 link,所以在正常情况下:
ln -s workerApp-normal.properties workerApp.properties
部署新版本时
rm -f workerApp.properties
ln -s workerApp-deploy2.properties workerApp.properties
reload apache
现在您可以在节点 4 上部署新版本,所有请求都将通过节点 1、2 和 3 进行路由。在节点 4 上部署就绪后:
rm -f workerApp.properties
ln -s workerApp-deploy1.properties workerApp.properties
reload apache
在这种情况下,所有客户端都将路由到节点 4,您可以在其他节点上升级版本。完成后:
rm -f workerApp.properties
ln -s workerApp-normal.properties workerApp.properties
reload apache
并且您可以在服务器之间平衡所有请求。
这还有另一个优点,例如,您可以使用不同的一组工作人员定义像 preflighttest.yourcompany.com 这样的 VirtualHost,这样您就可以在节点 4 上测试您的新版本,然后再将其有效地投入生产。
希望对您有所帮助。