环境:JBoss Fuse 6.2.0 + Maven 3.2.2
本实验跟上一个实验有关。
1. 学习重点
(1)创建 fabric
(2)创建 container
(3)创建 profile
2. 创建 fabric
简单的创建命令:fabric:create --wait-for-provisioning
创建 fabric 时,只有一个 fabric server,其中安装了 registry service,它也是 fabric 中的第一个 container,默认名称 root。其它 container 是 root container 的子 container。
如果想修改第一个 container 的名字,修改 InstallDir/etc/system.properties 文件内容。
对于 fabric 中的第一个 container,不必修改名字;但是如果想加入其它 fabric 中的 root container,就要修改相关信息,防止冲突。
所有的 containers 存储在 InstallDir/instances 目录下。
复杂的创建命令:
fabric:create --new-user AdminUser
--new-user-password AdminPass
--new-user-role Administrator
--resolver manualip
--manual-ip 127.0.0.1
--zookeeper-password ZooPass
--wait-for-provisioning
--new-user, --new-user-password, 和 --new-user-role 用于指定新管理员。
--zookeeper-password 用于连接由 ZooKeeper 实现的 Fabric registry service。
所有的Fabric registry service 节点位于 InstallDir/fabric 目录下。
大多数情况下,访问 fabric registry service 时,不需要输入 Zookeeper 口令,因为它保存在当前 session 中。但是当加入一个 container 到一个 fabric 中时,需要提供 Zookeeper 口令。
建议生产环境中,为 fabric server 配置静态 IP 地址,并使用 --resolver 指定端口,使用 --manual-ip 指定 IP。
3. 创建 child container
(1)简单的创建命令:fabric:container-create-child root child 2
输出如下:
Creating new instance on SSH port 8102 and RMI ports 1100/44445 at: /Users/maping/Redhat/fuse/jboss-fuse-6.2.0.redhat-133/instances/child
Creating new instance on SSH port 8103 and RMI ports 1101/44446 at: /Users/maping/Redhat/fuse/jboss-fuse-6.2.0.redhat-133/instances/child2
The following containers have been created successfully:
Container: child2.
Container: child.
这里假定你的 root container 名字就是 root。
子 containers 也存储在 InstallDir/instances 目录下。
可以看出,创建成功了两个子 container,每个 container 都使用了默认的 default profile。
完整命令语法:
fabric:container-create-child [--help] [--ensemble-server] [--profile profileID] [--version version] [--jvm-opts jvmOpts] [--resolver policy] {parent} {name} [number]
// TODO 如何在创建时指定子 container 的名字?
(2)查看 container 列表:fabric:container-list
[id] [version] [type] [connected] [profiles] [provision status]
root* 1.0 karaf yes fabric success
fabric-ensemble-0000-1
jboss-fuse-full
child 1.0 karaf yes default success
child2 1.0 karaf yes default success
// TODO 如何修改 container 名称?
(3)停止 container
每个子 containers 运行在它自己的 JVM 中,因此即使 root container 被停掉,子 container 还会保持运行。因此要停止整个 fabric,要先停止子 container,然后再执行 shutdown 命令。
fabric:container-stop child
fabric:container-stop child2
shutdown
而启动子 container 时,要先启动 root container,再启动子 container。
startup
fabric:container-start child
fabric:container-start child2
4. 创建 profile
一个 profile 是一个 fabric 中的基本部署单元。可以发布一个或多个 profiles 到一个 container 中。
fabric profile 可以包含如下信息:
fabric:profile-create --parent feature-cxf gs-cxf-base
profile 支持继承,比如当部署到集群中多个 server 时,除了 IP 地址和端口之外,其它部署内容都一样。这时,可以先创建一个 base profile。
每个 server 可以继承该 base profile,然后加上自己的特别的设置。
(2)为 gs-cxf-base 添加 get-started features repository
profile-edit -r mvn:org.fusesource.example/get-started/1.0-SNAPSHOT/xml/features gs-cxf-base
(3)为 gs-cxf-base 添加 cxf-http-jetty feature 和 get-started-cxf feature
profile-edit --feature cxf-http-jetty gs-cxf-base
profile-edit --feature get-started-cxf gs-cxf-base
(4)创建 child profile gs-cxf-01 和 gs-cxf-02
profile-create --parent gs-cxf-base gs-cxf-01
profile-create --parent gs-cxf-base gs-cxf-02
(5)修改 profile gs-cxf-01 和 gs-cxf-02 的属性
profile-edit -p org.fusesource.example.get.started/portNumber=8185 gs-cxf-01
profile-edit -p org.fusesource.example.get.started/portNumber=8186 gs-cxf-02
5. 发布 profile
(1)发布 gs-cxf-01 profile 到 child container:fabric:container-change-profile child gs-cxf-01
(2)发布 gs-cxf-02 profile 到 child2 container:fabric:container-change-profile child2 gs-cxf-02
(3)启动子 container:container-start child
(4)查看 container:watch container-list
(5)连接到子 container:container-connect child
(6)列出 CXF Endpoint:cxf:list-endpoints
Name State Address BusID
[FabricResource ] [Started ] [/fabric8 ] [io.fabric8.fabric-rest-cxf140787777 ]
[HelloWorldImplPort ] [Started ] [http://0.0.0.0:8185/cxf/HelloWorld ] [org.fusesource.example.cxf-basic-cxf531356605]
6. 修改 profile
默认情况下,修改一个已经发布到 container 的 profile 会立即生效,这是因为 container 中的 fabric agent 会实时监控 container 的变化,然后把变化告知 fabric server。
实际情况下,修改立即生效可能不是一个好主意,更多是灰度升级,比如先升级一个 container 看看有没有问题,没有问题再升级其它 container。
为了保证原子级事务提交所有的改动,fabric 提供了 profile 版本化功能。
比如一开始,container 指向的是某个 profile 的 1.0 版本。
接着创建了该 profile 的 2.0 版本,这个新版本在应用到 container 之前,其中的改动对 container 没有生效。
最后你可以升级 container 使用新版本的 profile。
(1)创建 profile 新版本
fabric:version-create
该命令会把所有的 profile 都拷贝一份作为升级的版本。
也就是说,所有的 profile 必须是同一个版本,不能有的 profile 使用 1.0 版本,有的 profile 使用 1.1 版本。
(2)查看 profile 版本
fabric:version-list
(3)修改 profile gs-cxf-01 1.1 版本,把端口改为 8087:
fabric:profile-edit -p org.fusesource.example.get.started/portNumber=8187 gs-cxf-01 1.1
注意这里指定了 profile 以及版本号,说明改的是哪个 profile 的哪个版本。
(4)升级 container child2 到版本 1.1:fabric:container-upgrade 1.1 child2
(5)回滚 container child2 到版本 1.0:fabric:container-rollback 1.0 child2
参考文献:
1. Red_Hat_JBoss_Fuse-6.2-Getting_Started-en-US.pdf
本实验跟上一个实验有关。
1. 学习重点
(1)创建 fabric
(2)创建 container
(3)创建 profile
简单的创建命令:fabric:create --wait-for-provisioning
创建 fabric 时,只有一个 fabric server,其中安装了 registry service,它也是 fabric 中的第一个 container,默认名称 root。其它 container 是 root container 的子 container。
如果想修改第一个 container 的名字,修改 InstallDir/etc/system.properties 文件内容。
对于 fabric 中的第一个 container,不必修改名字;但是如果想加入其它 fabric 中的 root container,就要修改相关信息,防止冲突。
所有的 containers 存储在 InstallDir/instances 目录下。
复杂的创建命令:
fabric:create --new-user AdminUser
--new-user-password AdminPass
--new-user-role Administrator
--resolver manualip
--manual-ip 127.0.0.1
--zookeeper-password ZooPass
--wait-for-provisioning
--new-user, --new-user-password, 和 --new-user-role 用于指定新管理员。
--zookeeper-password 用于连接由 ZooKeeper 实现的 Fabric registry service。
所有的Fabric registry service 节点位于 InstallDir/fabric 目录下。
大多数情况下,访问 fabric registry service 时,不需要输入 Zookeeper 口令,因为它保存在当前 session 中。但是当加入一个 container 到一个 fabric 中时,需要提供 Zookeeper 口令。
建议生产环境中,为 fabric server 配置静态 IP 地址,并使用 --resolver 指定端口,使用 --manual-ip 指定 IP。
3. 创建 child container
(1)简单的创建命令:fabric:container-create-child root child 2
输出如下:
Creating new instance on SSH port 8102 and RMI ports 1100/44445 at: /Users/maping/Redhat/fuse/jboss-fuse-6.2.0.redhat-133/instances/child
Creating new instance on SSH port 8103 and RMI ports 1101/44446 at: /Users/maping/Redhat/fuse/jboss-fuse-6.2.0.redhat-133/instances/child2
The following containers have been created successfully:
Container: child2.
Container: child.
这里假定你的 root container 名字就是 root。
子 containers 也存储在 InstallDir/instances 目录下。
可以看出,创建成功了两个子 container,每个 container 都使用了默认的 default profile。
完整命令语法:
fabric:container-create-child [--help] [--ensemble-server] [--profile profileID] [--version version] [--jvm-opts jvmOpts] [--resolver policy] {parent} {name} [number]
// TODO 如何在创建时指定子 container 的名字?
(2)查看 container 列表:fabric:container-list
[id] [version] [type] [connected] [profiles] [provision status]
root* 1.0 karaf yes fabric success
fabric-ensemble-0000-1
jboss-fuse-full
child 1.0 karaf yes default success
child2 1.0 karaf yes default success
// TODO 如何修改 container 名称?
(3)停止 container
每个子 containers 运行在它自己的 JVM 中,因此即使 root container 被停掉,子 container 还会保持运行。因此要停止整个 fabric,要先停止子 container,然后再执行 shutdown 命令。
fabric:container-stop child
fabric:container-stop child2
shutdown
而启动子 container 时,要先启动 root container,再启动子 container。
startup
fabric:container-start child
fabric:container-start child2
4. 创建 profile
一个 profile 是一个 fabric 中的基本部署单元。可以发布一个或多个 profiles 到一个 container 中。
fabric profile 可以包含如下信息:
- features repositories的URL
- 需要安装的 features 列表
- 需要安装的 bundles 列表(打成 JAR 包,可以是 OSGi bundle/Fuse Application Bundles/WAR)
- OSGi Config Admin service 的配置
- 影响 Apache Karaf 的 Java 环境变量(etc/config.properties)
- 影响安装后的 bundles 的 Java 环境变量(etc/system.properties)
fabric:profile-create --parent feature-cxf gs-cxf-base
profile 支持继承,比如当部署到集群中多个 server 时,除了 IP 地址和端口之外,其它部署内容都一样。这时,可以先创建一个 base profile。
每个 server 可以继承该 base profile,然后加上自己的特别的设置。
(2)为 gs-cxf-base 添加 get-started features repository
profile-edit -r mvn:org.fusesource.example/get-started/1.0-SNAPSHOT/xml/features gs-cxf-base
(3)为 gs-cxf-base 添加 cxf-http-jetty feature 和 get-started-cxf feature
profile-edit --feature cxf-http-jetty gs-cxf-base
profile-edit --feature get-started-cxf gs-cxf-base
(4)创建 child profile gs-cxf-01 和 gs-cxf-02
profile-create --parent gs-cxf-base gs-cxf-01
profile-create --parent gs-cxf-base gs-cxf-02
(5)修改 profile gs-cxf-01 和 gs-cxf-02 的属性
profile-edit -p org.fusesource.example.get.started/portNumber=8185 gs-cxf-01
profile-edit -p org.fusesource.example.get.started/portNumber=8186 gs-cxf-02
5. 发布 profile
(1)发布 gs-cxf-01 profile 到 child container:fabric:container-change-profile child gs-cxf-01
(2)发布 gs-cxf-02 profile 到 child2 container:fabric:container-change-profile child2 gs-cxf-02
(3)启动子 container:container-start child
(4)查看 container:watch container-list
(5)连接到子 container:container-connect child
(6)列出 CXF Endpoint:cxf:list-endpoints
Name State Address BusID
[FabricResource ] [Started ] [/fabric8 ] [io.fabric8.fabric-rest-cxf140787777 ]
[HelloWorldImplPort ] [Started ] [http://0.0.0.0:8185/cxf/HelloWorld ] [org.fusesource.example.cxf-basic-cxf531356605]
6. 修改 profile
默认情况下,修改一个已经发布到 container 的 profile 会立即生效,这是因为 container 中的 fabric agent 会实时监控 container 的变化,然后把变化告知 fabric server。
实际情况下,修改立即生效可能不是一个好主意,更多是灰度升级,比如先升级一个 container 看看有没有问题,没有问题再升级其它 container。
为了保证原子级事务提交所有的改动,fabric 提供了 profile 版本化功能。
比如一开始,container 指向的是某个 profile 的 1.0 版本。
接着创建了该 profile 的 2.0 版本,这个新版本在应用到 container 之前,其中的改动对 container 没有生效。
最后你可以升级 container 使用新版本的 profile。
(1)创建 profile 新版本
fabric:version-create
该命令会把所有的 profile 都拷贝一份作为升级的版本。
也就是说,所有的 profile 必须是同一个版本,不能有的 profile 使用 1.0 版本,有的 profile 使用 1.1 版本。
(2)查看 profile 版本
fabric:version-list
(3)修改 profile gs-cxf-01 1.1 版本,把端口改为 8087:
fabric:profile-edit -p org.fusesource.example.get.started/portNumber=8187 gs-cxf-01 1.1
注意这里指定了 profile 以及版本号,说明改的是哪个 profile 的哪个版本。
(4)升级 container child2 到版本 1.1:fabric:container-upgrade 1.1 child2
(5)回滚 container child2 到版本 1.0:fabric:container-rollback 1.0 child2
参考文献:
1. Red_Hat_JBoss_Fuse-6.2-Getting_Started-en-US.pdf
没有评论:
发表评论