Apache Karaf用戶指導

本文由OSGi China提供  轉載鏈接:http://osgi.com.cn/article/7289403

Apache Karaf用戶指導

一 安裝karaf

本章講述如何在windows和unix平臺安裝Apache Karaf,這裏你將知道預先要安裝什麼軟件,如何下載並且安裝Karaf。

預安裝需求

  • 硬件:
      - 20M磁盤剩餘空間。
  • 操作系統:
    • Windows:Windows vista,Windows XP sp2,windows2000。- Unix:Ubuntu Linux,Powerdog Linux,MacOS,AIX,HP-UX,Solaris,任何支持java的unix平臺。
  • 環境:
    • Java SE 1.5x或者更高。- 環境變量JAVAHOME必須設置爲java運行時的安裝目錄,比如C:\Program Files\Java\jdk1.6.026。按住windows和break鍵切換到高級選項,點擊環境變量,把上面的路徑加入到變量中。

從源碼構建

如果你想從源碼構建KARAF,需求會有點不同:

  • 硬件:
      - 200M磁盤空間便於apache karaf源碼展開或者是SVN的驗證,以及maven構建和依賴maven組件的下載。
  • 環境:
    • JDK 1.5或者是更高。- Apache maven 2.2.1.

在windows上構建

這過程說明如何下載和安裝windows上的源碼文件。注:Karaf需要java5編譯,構建和運行。

  • 在瀏覽器輸入http://karaf.apache.org/index/community/download.html.
  • 滾動到“Apache Karaf”區域選擇需要的鏈接。源碼文件名稱類似於:apache-karaf-x.y-src.zip.
  • 解壓縮zip文件到你選擇的目錄中,請記住非法java路徑的限制,比如!,%等。
  • 用maven 2.2.1 或者更高的java5來構建karaf。 構建karaf的方法如下:
    • Cd [karaf安裝路徑]\src- Mvn
      這兩個步驟均需要10到15分鐘。
  • 用zip工具加壓文件,windows的路徑是 [karaf安裝路徑]\assembly\target\apache-karaf-x.y.zip
  • 轉到開始karaf一節

在Unix上構建

本過程將講述如何在unix系統上下載和安裝源碼文件。這裏假定unix機器上有瀏覽器,沒有瀏覽器的請參照前面二進制unix安裝區域。注:Karaf需要java5編譯,構建和運行。

  1. 在瀏覽器輸入http://karaf.apache.org/ download.html.
  2. 滾動到“Apache Karaf”區域選擇需要的鏈接。源碼文件名稱類似於:apache-karaf-x.y-src.zip.
  3. 解壓縮zip文件到你選擇的目錄中,例如:gunzip apache-karaf-x.y-src.tar.gz tar xvf apache-karaf-x.y-src.tar請記住非法java路徑的限制,比如!,%等
  4. 用maven構建karaf建議方法如下: cd [karaf安裝路徑]\src cvn 5.解壓縮剛剛創建的文件 cd [karaf安裝路徑]/assembly/target gunzip apache-karaf-x.y.tar.gz tar xvf apache-karaf-x.y.tar
  5. 轉到開始karaf一節

Windows安裝過程

這裏說明如何在windows系統上下載和安裝二進制文件。

  • 在瀏覽器輸入http://karaf.apache.org/index/community/download.html.
  • 滾動到“Apache Karaf”區域選擇需要的鏈接。源碼文件名稱類似於:apache-karaf-x.y-src.zip.
  • 解壓縮zip文件到你選擇的目錄中,請記住非法java路徑的限制,比如!,%等。
  • 轉到開始karaf一節
  • 可選:在Windows中啓用彩色控制檯輸出
      - 提示:如果你安裝karaf到很深的路徑或者是非法的java路徑,!,%等,你可以創建一個bat文件來執行:subst S: "C:\your very % problematic path!\KARAF" 這樣karaf的路徑是 s: 這樣的短類型。

Unix安裝過程

這裏屬於如何在unix系統上下載和安裝二進制文件。

  1. 在瀏覽器輸入http://karaf.apache.org/ download.html.
  2. 滾動到“Apache Karaf”區域選擇需要的鏈接。源碼文件名稱類似於:apache-karaf-x.y.tar.gz
  3. 解壓縮zip文件到你選擇的目錄中,例如:gunzip apache-karaf-x.y.tar.gz tar xvf apache-karaf-x.y.tar 請記住非法java路徑的限制,比如!,%等。
  4. 轉到開始karaf一節

安裝後的步驟

在開始使用karaf之前強烈建議設置指向JDK的JAVA_HOME用來定位java可執行文件,並且應該配置爲指向已安裝java se5或者6的根目錄。

二 目錄結構

Karaf安裝目錄結構如下:

  • /bin: 啓動腳本
  • /etc: 初始化文件
  • /data: 工作目錄
  • /cache: OSGi框架包緩存
  • /generated-bundles: 部署使用的臨時文件夾
  • /log: 日誌文件
  • /deploy: 熱部署目錄
  • /instances: 含有子實例的目錄
  • /lib: 包含引導庫
  • /lib/ext:JRE擴展目錄
  • /lib/endorsed: 贊同庫目錄
  • /system: OSGi包庫,作爲一個Maven2存儲庫

Data文件夾包括karaf所有的工作和臨時文件,如果你想從一個初始狀態重啓,你可以清空這個目錄,這和“恢復初始化設置”一樣的效果。

三 啓動和停止karaf

本章介紹如何啓動和停止Apache Karaf和各種可用的選項。

啓動karaf

  • Windows下:打開一個控制檯窗口,更改到安裝目錄,並運行Karaf。對於二進制文件,運行 Cd [karaf安裝目錄] 然後輸入:bin\karaf.bat

  • Linux下:打開一個控制檯窗口,更改到安裝目錄,並運行Karaf。運行 Cd [karaf安裝目錄] 然後輸入:bin\karaf 警告:karaf運行後不要關閉控制檯,否則會終止karaf(除非用非控制檯啓動karaf)。

非控制檯啓動karaf

沒有控制檯也可以啓動karaf,它總可以是用遠程SSH訪問,是用下面的命令: bin\karaf.bat server 或者是unix下:bin/karaf server

在後臺啓動karaf

採用以下命令可以輕易地在後臺進程啓動karaf: Bin\start.bat 或者在unix下:bin/start

重置模式啓動karaf

清空[karaf安裝目錄]\data文件夾就可以簡單的在重置模式啓動karaf,爲方便起見,在karaf啓動腳本使用以下參數也可以實現重置啓動: bin/start clean

停止karaf

無論是windows還是unix,你都可以在karaf控制檯採用以下命令來停止它: osgi:shutdown, 或者簡單的是:shutdown

Shutdown命令會詢問你是否真的想要停止,如果你確認停止並且拒絕確認信息,你可以用-f或者-force選項: osgi:shutdown –f, 也可以用時間參數來延遲停止,時間參數有不同的形式。

首先,可以是絕對時間各式hh:mm。第二,也可以是+m,其中m是等待的分。現在就是+0。

下面的命令可以在10:35am關閉karaf:

osgi:shutdown 10:35

下面的命令在10分鐘後關閉karaf:

osgi:shutdown +10

如果你在主控制檯運行,用註銷或者Ctrl+D退出控制檯也可以終止karaf實例。 在控制檯你可以運行如下命令:

bin\stop.bat

或者在unix下:

bin/stop

四 使用控制檯

查看可用的命令

按提示鍵tab可以在控制檯看到可用的命令列表:

root@root> <tab>Display all 182 possibilities? (y or n)
*:help                           addurl                           admin:change-opts
admin:change-rmi-registry-port   admin:change-ssh-port            admin:connect
admin:create                     admin:destroy                    admin:list
admin:rename                     admin:start                      admin:stop
bundle-level                     cancel                           cat
change-opts                      change-rmi-registry-port         change-ssh-port
clear                            commandlist                      config:cancel
config:edit                      config:list                      config:propappend
config:propdel                   config:proplist                  config:propset
config:update                    connect                          create
create-dump                      destroy                          dev:create-dump
dev:dynamic-import               dev:framework                    dev:print-stack-traces
dev:restart                      dev:show-tree                    dev:watch
display                          display-exception                dynamic-import
each                             echo                             edit
exec                             exports                          features:addurl
features:info                    features:install                 features:list
features:listrepositories        features:listurl                 features:listversions
features:refreshurl              features:removerepository        features:removeurl
features:uninstall               framework                        get
grep                             head                             headers
help                             history                          if
imports                          info                             install
jaas:cancel                      jaas:commandlist                 jaas:list
jaas:manage                      jaas:roleadd                     jaas:roledel
jaas:update                      jaas:useradd                     jaas:userdel
jaas:userlist                    java                             list
listrepositories                 listurl                          listversions
log:clear                        log:display                      log:display-exception
log:get                          log:set                          log:tail
logout                           ls                               manage
more                             new                              osgi:bundle-level
osgi:headers                     osgi:info                        osgi:install
osgi:list                        osgi:ls                          osgi:refresh
osgi:resolve                     osgi:restart                     osgi:shutdown
osgi:start                       osgi:start-level                 osgi:stop
osgi:uninstall                   osgi:update                      packages:exports
packages:imports                 print-stack-traces               printf
propappend                       propdel                          proplist
propset                          refresh                          refreshurl
removerepository                 removeurl                        rename
resolve                          restart                          roleadd
roledel                          set                              shell:cat
shell:clear                      shell:each                       shell:echo
shell:exec                       shell:grep                       shell:head
shell:history                    shell:if                         shell:info
shell:java                       shell:logout                     shell:more
shell:new                        shell:printf                     shell:sleep
shell:sort                       shell:tac                        shell:tail
show-tree                        shutdown                         sleep
sort                             ssh                              ssh:ssh
ssh:sshd                         sshd                             start
start-level                      stop                             tac
tail                             uninstall                        update
useradd                          userdel                          userlist
watch
root@root>

獲得命令的幫助

要查看一個特定的命令的幫助,在命令後加--help或使用help命令加上命令的名稱:

karaf@root> features:list --help
  1. 描述

        features:list       列出庫中定義的所有功能。
  2. 語法

        features:list [options]
  3. 選項

        --help               顯示此幫助信息
        -i, --installed      只列出已安裝的功能列表

更多…

所有可用命令列表和它們的用法,也可以在一個專門的章節。

你在開發指南會獲得更多的shell語法的深入引導。

如開發指南解釋的那樣,控制檯可以很容易的被新命令擴展。

五 網絡控制檯

Karaf Web控制檯提供了一個運行時的圖形概述。

你可以是用它來:

  1. 安裝和卸載功能
  2. 啓動,停止,安裝捆綁
  3. 創建子實例
  4. 配置Karaf
  5. 查看日誌信息

安裝web控制檯

默認情況下web控制檯是不安裝的,安裝請在karaf提示中運行以下命令: root@karaf> features:install webconsole

訪問Web控制檯

訪問本地運行的一個karaf實例,在瀏覽器輸入: http://localhost:8181/system/console 使用karaf用戶名和karaf密碼來登錄系統,如果你修改過用戶名或密碼,請是用修改後的。

改變web控制檯端口號

默認情況下,控制檯在8181端口運行,你可以通過創建屬性文件etc/org.ops4j.pax.web.cfg並在後面添加如下屬性設置(改成任意你想要的端口號)來改變端口:

org.osgi.service.http.port=8181

六 遠程控制檯

使用遠程實例

初始化遠程實例

用它本地控制檯管理karaf實例不總是有意義的,你可以用遠程控制檯遠程管理karaf。

當你啓動karaf時,它使任何其他Karaf控制檯或純SSH客戶端可以通過SSH訪問遠程控制檯。遠程控制檯提供本地控制檯的所有功能,並通過運行它裏面的容器和服務給遠程用戶完全控制。

SSH主機名和端口號在配置文件[karaf安裝目錄]/etc/org.apache.karaf.shell.cfg用以下默認值配置:

sshPort=8101
sshHost=0.0.0.0
sshRealm=karaf
hostKey=${karaf.base}/etc/host.key

你可以用初始化命令或者編輯上面的文件更改這個配置,但是需要重啓ssh控制檯以便它是用新的參數。

# define helper functions
bundle-by-sn = { bm = new java.util.HashMap ;  each (bundles) { $bm put ($it symbolicName) $it } ; $bm get $1 }
bundle-id-by-sn = { b = (bundle-by-sn $1) ; if { $b } { $b bundleId } { -1 } }
# edit config
config:edit org.apache.karaf.shell
config:propset sshPort 8102
config:update 
# force a restart
osgi:restart --force (bundle-id-by-sn org.apache.karaf.shell.ssh)

遠程連接和斷開

使用ssh:ssh命令

你可以使用ssh:ssh命令來連接遠程karaf控制檯。 karaf@root> ssh:ssh -l karaf -P karaf -p 8101 hostname

注意:默認的密碼是karaf,但是我們強烈建議個更改。在安全模塊查看更多信息。 爲了確定你已經連接到正確的karaf實例,輸入ssh:info在karaf提示符。返回當前連接的實例的信息,如下所示。

Karaf
  Karaf home  /local/apache-karaf-2.0.0
  Karaf base  /local/apache-karaf-2.0.0
  OSGi Framework  org.eclipse.osgi - 3.5.1.R35x_v20090827
JVM
  Java Virtual MachineJava HotSpot(TM) Server VM version 14.1-b02
  ...

使用karaf客戶端

Karaf允許你安全的連接到遠程karaf實例而不必運行本地karaf實例。

例如,在同一臺機器上快速連接在server模式下運行的karaf實例,在karaf安裝目錄運行以下命令: bin/client。 通常情況下,你需要提供主機名,端口,用戶名和密碼來連接到遠程實例。如果你使用的客戶端在一個較大的腳本,你可以附加控制檯命令如下: bin/client -a 8101 -h hostname -u karaf -p karaf features:install wrapper

顯示可用的客戶端選項,輸入:

> bin/client --help
Apache Karaf client
  -a [port] specify the port to connect to
  -h [host] specify the host to connect to
  -u [user] specify the user name
  -p [password] specify the password
  --helpshows this help message
  -vraise verbosity
  -r [attempts] retry connection establishment (up to attempts times)
  -d [delay]intra-retry delay (defaults to 2 seconds)
  [commands]commands to run

如果沒有指定的命令,客戶端將在互動模式。

使用純SSH客戶端

你也可以使用你的unix系統中的純SSH客戶端或者windows SSH客戶端像putty來連接。 ~$ ssh -p 8101 karaf@localhost karaf@localhost's password:

從遠程控制檯斷開

按Ctrl+D,shell:logout或者簡單的在karaf提示符輸入logout就可以斷開遠程控制檯。

關閉遠程實例

使用遠程控制檯

如果你已經用ssh:ssh命令或者karaf客戶端連接到遠程控制檯,你可以用使用osgi:shutdown命令來停止遠程實例。 注意:在遠程控制檯按Ctrl + D鍵,簡單地關閉遠程連接並返回到本地shell。

使用karaf客戶端

使用karaf客戶端停止遠程實例,在karaf安裝目錄/lib目錄運行以下命令: bin/client -u karaf -p karaf -a 8101 hostname osgi:shutdown

七 子實例

管理子實例

一個Karaf的子實例是一個副本,你可以分別啓動和部署應用程序。實例不包含的完整副本Karaf,但只有一個配置文件和數據文件夾的副本,其中包含了所有運行中的信息,日誌文件和臨時文件。

使用管理控制檯命令

管理控制檯命令允許您在同一臺機器創建和管理Karaf實例。每一個新的運行時是運行時創建的子實例。您可以輕鬆地使用的名稱管理子實例,而不是網絡地址。有關管理命令的詳細信息,請參閱管理命令。

創建子實例

你可以在karaf控制檯輸入admin:create創建新的運行時實例.

如下例子所示,admin:create將使運行時在活動的運行時{實例/名稱}目錄創建新的運行時安裝。新的實例是一個新的karaf實例並且分配一個SSH端口號基於始於8101的增量和一個RMI註冊端口號基於始於1099的增量。

karaf@root>admin:create finn
Creating new instance on SSH port 8106 and RMI port 1100 at: /home/fuse/esb4/instances/finn
Creating dir:  /home/fuse/esb4/instances/finn/bin
Creating dir:  /home/fuse/esb4/instances/finn/etc
Creating dir:  /home/fuse/esb4/instances/finn/system
Creating dir:  /home/fuse/esb4/instances/finn/deploy
Creating dir:  /home/fuse/esb4/instances/finn/data
Creating file: /home/fuse/esb4/instances/finn/etc/config.properties
Creating file: /home/fuse/esb4/instances/finn/etc/java.util.logging.properties
Creating file: /home/fuse/esb4/instances/finn/etc/org.apache.felix.fileinstall-deploy.cfg
Creating file: /home/fuse/esb4/instances/finn/etc/org.apache.karaf.log.cfg
Creating file: /home/fuse/esb4/instances/finn/etc/org.apache.karaf.features.cfg
Creating file: /home/fuse/esb4/instances/finn/etc/org.ops4j.pax.logging.cfg
Creating file: /home/fuse/esb4/instances/finn/etc/org.ops4j.pax.url.mvn.cfg
Creating file: /home/fuse/esb4/instances/finn/etc/startup.properties
Creating file: /home/fuse/esb4/instances/finn/etc/system.properties
Creating file: /home/fuse/esb4/instances/finn/etc/org.apache.karaf.shell.cfg
Creating file: /home/fuse/esb4/instances/finn/etc/org.apache.karaf.management.cfg
Creating file: /home/fuse/esb4/instances/finn/bin/karaf
Creating file: /home/fuse/esb4/instances/finn/bin/start
Creating file: /home/fuse/esb4/instances/finn/bin/stop
karaf@root>

改變子實例端口號

你可以使用admin:change-ssh-port命令來改變分配給子實例的SSH端口號。命令語法是: admin:change-ssh-port 實例 端口號,需要注意的必須停止子實例才能運行此命令。

同樣,你可以使用admin:change-rmi-registry-port命令改變分配給子實例的RMI註冊端口號。命令的語法是: admin:change-rmi-registry-port instance port,需要注意的必須停止子實例才能運行此命令。

啓動子實例

新的子實例在停止狀態下被創建,用admin:start命令來啓動子實例並使之準備主機應用。這個命令需要一個標識你想啓動的子實例的instance-name參數。

列出所有容器實例

要查看一個特定的安裝下運行的所有Karaf實例的列表,使用admin:list命令。

karaf@root>admin:list
  SSH Port   RMI Port   State   Pid  Name
[8107] [  1106] [Started ] [10628] harry
[8101] [  1099] [Started ] [20076] root
[8106] [  1105] [Stopped ] [15924] dick
[8105] [  1104] [Started ] [18224] tom
karaf@root>

連接到子實例

你可以使用admin:connect命令連接到開始的子實例遠程控制檯,這需要三個參數: admin:connect [-u username] [-p password] instance, 一旦你連接到子實例,karaf提示符顯示現在實例的名字,如下: karaf@harry>

停止一個子實例

在實例自己內部停止一個子實例,輸入osgi:shutdown或者簡單的shutdown。 遠程停止子實例,換句話說,從父或者兄弟實例,使用admin:stop: admin:stop instance

註銷一個子實例

你可以使用admin:destroy命令永久的刪除一個停止的子實例:

*admin:destroy instance*

請注意只有停止的實例可以被註銷。

使用管理腳本

你也可以管理本地的karaf實例,在karaf安裝目錄/bin目錄下的管理員腳本提供了像管理員控制檯相同的命令,除了admin:connect。

> bin/admin
Available commands:
  change-ssh-port - Changes the secure shell port of an existing container instance.
  change-rmi-registry-port - Changes the RMI registry port (used by management layer) of an existing container instance.
  create - Creates a new container instance.
  destroy - Destroys an existing container instance.
  list - List all existing container instances.
  start - Starts an existing container instance.
  stop - Stops an existing container instance.
Type 'command --help' for more help on the specified command.

例如,列出所有本機器的karaf實例,輸入:

bin/admin list

八 安全

管理用戶名和密碼

默認安全配置使用一個位於 karaf安裝目錄/etc/users.properties屬性文件存儲授權的用戶和他們的密碼。

默認的用戶名是karaf,與之相關聯的密碼也是karaf。我們強烈建議在將karaf轉移到產品前通過編輯上面的文件修改默認密碼。

在karaf中用戶現在被使用在三個地方:

  • 訪問SSH控制檯
  • 訪問JMX管理層
  • 訪問web控制檯

這三種方式的全部委託基於安全認證的相同的JAAS。 users.properties文件包含一或者多行,每行都定義了一個用戶,密碼和相關的角色。 user=password[,role][,role]...

管理角色

JAAS角色可以被各種組件使用。三個管理層(SSH,JMX和web控制檯)都使用用基於認證系統的全局角色。默認的角色名稱在etc/system.properties中使用karaf.admin.role系統屬性配置,並且默認值是admin。對管理層進行身份驗證的所有用戶必須有這個角色的定義。

這個值的語法如下: [classname:]principal

其中classname是主要對象的類名(默認以org.apache.karaf.jaas.modules.RolePrincipal),主要是這一類(默認爲admin)的主要的名稱。 注意,可以使用以下配置ConfigAdmin對於一個給定的層改變角色:

Layer PID Value
SSH org.apache.karaf.shell sshRole
JMX org.apache.karaf.management jmxRole
Web org.apache.karaf.webconsole role

啓用密碼加密

爲了避免密碼是純文本,密碼可以加密存儲在配置文件中。 這可以通過以下命令輕易的實現:

# edit config
config:edit org.apache.karaf.jaas
config:propset encryption.enabled true
config:update 
# force a restart
dev:restart

用戶第一次登錄,密碼將在 etc/users.properties 配置文件中被自動的加密。加密密碼在前面加上{CRYPT},因此很容易識別。

管理領域

更多關於更改默認領域或者部署新領域信息將會在開發者指南中被提供。

部署安全供應商

有些應用程序需要特定的安全性提供者可用,如BouncyCastle。JVM在這些jar包的使用上施加一些限制:他們必須簽署和引導類路徑上可用。部署這些供應商的方法之一是把他們放在位於$ JAVAHOME/ JRE/ lib / ext的JRE文件夾中並且修改安全策略配置($JAVAHOME/jre/lib/security/java.security)以登記等供應商。

雖然這種方法工作的很好,他將會有全局的影響並且需要你配置所有相應的服務器。

Karaf提供了一個簡單的方式來配置額外的安全性提供者:

  • 把你的供應商jar放在karaf-install-dir/lib/ext中
  • 修改初始化文件 karaf-install-dir/etc/config.properties ,添加如下屬性: org.apache.karaf.security.providers = xxx,yyy 這個屬性的值是一個逗號分隔的提供商類名的註冊名單。 例如:org.apache.karaf.security.providers = org.bouncycastle.jce.provider.BouncyCastleProvider 此外,你可能想向系統中捆綁的供應商的類提供訪問,使所有束可以訪問那些。它可以通過在相同的配置文件中修改org.osgi.framework.bootdelegation 屬性來實現: org.osgi.framework.bootdelegation = ...,org.bouncycastle*

九 故障轉移部署

Karaf提供故障轉移功能,使用一個簡單的鎖定文件系統或JDBC鎖定機制。在這兩種情況下,一個容器級鎖系統允許綁定預裝到副Karaf實例,以提供更快的故障轉移性能。

簡單文件鎖定

簡單文件鎖定機制用於駐留在同一臺主機的實例故障轉移配置。 要使用這個功能,按照如下形式編輯$KARAF_HOME/etc/system.properties文件中的每個系統上的主/從設置:

karaf.lock=true
karaf.lock.class=org.apache.felix.karaf.main.SimpleFileLock
karaf.lock.dir=<PathToLockFileDirectory>
karaf.lock.delay=10

說明:確保karaf.lock.dir屬性指向相同的主從實例目錄,以便當主釋放從,從只能獲得鎖定。

JDBC鎖定

JDBC鎖定機制的目的就是爲了存在單獨機器上的故障轉移配置。在此部署中,主實例擁有一個Karaf鎖定數據庫上的表上的鎖,如果主失去了鎖,等待從進程獲得鎖定表,並全面啓動它的容器。

要使用這個功能,按照如下形式設置每個系統上的主/從設置:

  • 更新CLASSPATH包含JDBC驅動程序

  • 更新KARAF_HOME/bin/ karaf腳本有獨特的JMX遠程端口設置,如果實例駐留在同一主機上

  • 更新KARAF_HOME的/ etc/ system.properties文件如下:

        karaf.lock=true
        karaf.lock.class=org.apache.felix.karaf.main.DefaultJDBCLock
        karaf.lock.level=50
        karaf.lock.delay=10
        karaf.lock.jdbc.url=jdbc:derby://dbserver:1527/sample
        karaf.lock.jdbc.driver=org.apache.derby.jdbc.ClientDriver
        karaf.lock.jdbc.user=user
        karaf.lock.jdbc.password=password
        karaf.lock.jdbc.table=KARAF_LOCK
        karaf.lock.jdbc.clustername=karaf
        karaf.lock.jdbc.timeout=30

說明:

  • 如果JDBC驅動程序不在classpath中會失敗。
  • 將創建數據庫名稱“sample”,如果它不存在於數據庫。
  • Karaf的第一個實例來獲得鎖定表的是主實例。
  • 如果數據庫連接丟失,主實例嘗試正常關閉,主數據庫服務恢復時允許一個從的實例成爲主,前主將需要手動重新啓動。

Oracle的JDBC鎖定

在JDBC鎖定情況下如果你採用oracle作爲你的數據庫,在$KARAF_HOME/etc/system.properties 文件中的karaf.lock.class 屬性必須指向org.apache.felix.karaf.main.OracleJDBCLock。 否則,對於你的設置初始化system.properties文件是正常的,例如:

karaf.lock=true
karaf.lock.class=org.apache.felix.karaf.main.OracleJDBCLock
karaf.lock.jdbc.url=jdbc:oracle:thin:@hostname:1521:XE
karaf.lock.jdbc.driver=oracle.jdbc.OracleDriver
karaf.lock.jdbc.user=user
karaf.lock.jdbc.password=password
karaf.lock.jdbc.table=KARAF_LOCK
karaf.lock.jdbc.clustername=karaf
karaf.lock.jdbc.timeout=30

正如默認的JDBC鎖定設置,Oracle JDBC驅動包必須在calsspath中,爲了確保如此你可以在karaf啓動之前複製ojdbc14.jar到karaf的lib文件夾下。 說明:karaf.lock.jdbc.url 需要活動的SID,這意味着在使用這個特定的鎖之前你必須手動創建數據庫實例。

容器級鎖定

容器級鎖定允許綁定預裝到從內核的實例,以提供更快的故障轉移性能。容器級鎖被簡單的文件和JDBC鎖定機制支持。 爲了實現容器及說定,添加如下內容到$KARAF_HOME/etc/system.properties 文件中在每個系統的主從設置上:

karaf.lock=true
karaf.lock.level=50
karaf.lock.delay=10

Karaf.log.level屬性告訴karaf實例引導過程帶來的OSGI容器有多遠。分配相同級別的綁定或者是更低的也會在那個karaf實例中被啓動。

綁定開始級別在$KARAF_HOME/etc/startup.properties指定,以jar.name=levle的形式。核心系統綁定級數低於50,用戶綁定級別大於50。

級別 行爲
1 一個“冷”的備用實例,核心綁定不會被加載到容器中,從實例將等待指導鎖定需要啓動服務器。
<50 一個“熱”的備用實例,核心捆綁將被加載到容器,從實例等待指導鎖需要啓動用戶級別綁定。控制檯對於每個從實例可以在這個級別訪問。
>50 這個設置不建議作爲用戶捆綁被啓動。

注意:擋在同一主機上使用“熱”備用,你需要設置JMX遠程端口爲唯一值以避免綁定衝突,你可以編輯karaf啓動腳本以包括以下內容:

DEFAULT_JAVA_OPTS="-server $DEFAULT_JAVA_OPTS 
-Dcom.sun.management.jmxremote.port=1100 
-Dcom.sun.management.jmxremote.authenticate=false
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章