SmartOS + Node.js + Mongodb
2013年4月9日 星期二
MiCloud Dev Blogger: SmartOS上檢視系統資源
MiCloud Dev Blogger: SmartOS上檢視系統資源: SmartOS - 分支自Solaris的IllumosMiCloud SmartOS在檢視系統資源部分與一般Linux比較不一樣,原因是因為Bare-Metal的虛擬化方式,讓GuestOS系統使用的指令必須重新設計,而透過 jinf 方式來檢視是不錯的方式,他可以帶...
2013年1月3日 星期四
SmartOS Service Management Framework (SMF)
SmartOS Service Management Framework (SMF)
1. 下載SMF Manifest範例
wget --no-check-certificate http://github.com/isaacs/joyent-node-on-smart-example/raw/master/node-hello-world-service-manifest.xml
範例截取如下:
<!-- node-hello-world-service-manifest.xml --> <?xml version="1.0"?> <!DOCTYPE service_bundle SYSTEM "/usr/share/lib/xml/dtd/service_bundle.dtd.1"> <service_bundle type="manifest" name="simon-test-service"> <service name="site/simon-test-service" type="service" version="1"> <create_default_instance enabled="true"/> <single_instance/> <dependency name="network" grouping="require_all" restart_on="refresh" type="service"> <service_fmri value="svc:/milestone/network:default"/> </dependency> <dependency name="filesystem" grouping="require_all" restart_on="refresh" type="service"> <service_fmri value="svc:/system/filesystem/local"/> </dependency> <method_context working_directory="/root/simon-test"> <method_credential user="root" group="root" privileges="basic,net_privaddr" /> <method_environment> <envvar name="PATH" value="/opt/node/bin:/usr/local/bin:/usr/bin:/usr/sbin:/bin"/> <envvar name="HOME" value="/root"/> </method_environment> </method_context> <exec_method type="method" name="start" exec="/opt/node/bin/node /root/simon-test/app.js" timeout_seconds="60"/> <exec_method type="method" name="stop" exec=":kill" timeout_seconds="60"/> <property_group name="startd" type="framework"> <propval name="duration" type="astring" value="child"/> <propval name="ignore_error" type="astring" value="core,signal"/> </property_group> <property_group name="application" type="application"> </property_group> <stability value="Evolving"/> <template> <common_name> <loctext xml:lang="C">node.js simon-test service</loctext> </common_name> </template> </service> </service_bundle> |
2. 匯入SMF
svccfg import node-hello-world-service-manifest.xml
3. 檢視匯入服務狀態
[root@MiCloudGW01 ~]# svcs -a | grep simon-test
disabled 2:26:46 svc:/site/simon-test-service:default
4. 啓動服務
[root@MiCloudGW01 ~]# svcadm enable simon-test-service
[root@MiCloudGW01 ~]# svcs -a | grep simon-test
online 2:34:04 svc:/site/simon-test-service:default
5. 關閉服務
[root@MiCloudGW01 ~]# svcadm disable simon-test-service
[root@MiCloudGW01 ~]# svcs -a | grep simon-test
disabled 2:34:48 svc:/site/simon-test-service:default
6. 檢視服務LOG記錄
# tail -f `svcs -L simon-test`
PS: svcs -L [service name] 將顯示記錄檔所在位置
7. 檢視其他人的manifest怎麼寫的
[root@MiCloudGW01 ~]# svccfg export mysql
<?xml version='1.0'?>
<!DOCTYPE service_bundle SYSTEM '/usr/share/lib/xml/dtd/service_bundle.dtd.1'>
<service_bundle type='manifest' name='export'>
<service name='network/mysql' type='service' version='0'>
<create_default_instance enabled='true'/>
<single_instance/>
<dependency name='fs' grouping='require_all' restart_on='none' type='service'>
<service_fmri value='svc:/system/filesystem/local'/>
</dependency>
<dependency name='net' grouping='require_all' restart_on='none' type='service'>
<service_fmri value='svc:/network/loopback'/>
</dependency>
<method_context working_directory='/var/mysql'>
<method_credential group='mysql' user='mysql'/>
<method_environment>
<envvar name='LD_PRELOAD_32' value='/usr/lib/extendedFILE.so.1'/>
</method_environment>
</method_context>
<exec_method name='start' type='method' exec='/opt/local/share/smf/mysql-server/method start' timeout_seconds='18446744073709551615'/>
<exec_method name='stop' type='method' exec='/opt/local/share/smf/mysql-server/method stop' timeout_seconds='18446744073709551615'/>
<stability value='Evolving'/>
<template>
<common_name>
<loctext xml:lang='C'>MySQL RDBMS</loctext>
</common_name>
<documentation>
<manpage title='MySQL 5.5' section='1'/>
<doc_link name='mysql.com' uri='http://dev.mysql.com/docs'/>
</documentation>
</template>
</service>
</service_bundle>
8. 刪除已匯入的SMF
# svccfg delete simon-test-service
9. 其它進階功能,請參考svccfg man page
# man svccfg
Reference:
svccfg import node-hello-world-service-manifest.xml
3. 檢視匯入服務狀態
[root@MiCloudGW01 ~]# svcs -a | grep simon-test
disabled 2:26:46 svc:/site/simon-test-service:default
4. 啓動服務
[root@MiCloudGW01 ~]# svcadm enable simon-test-service
[root@MiCloudGW01 ~]# svcs -a | grep simon-test
online 2:34:04 svc:/site/simon-test-service:default
5. 關閉服務
[root@MiCloudGW01 ~]# svcadm disable simon-test-service
[root@MiCloudGW01 ~]# svcs -a | grep simon-test
disabled 2:34:48 svc:/site/simon-test-service:default
6. 檢視服務LOG記錄
# tail -f `svcs -L simon-test`
PS: svcs -L [service name] 將顯示記錄檔所在位置
7. 檢視其他人的manifest怎麼寫的
[root@MiCloudGW01 ~]# svccfg export mysql
<?xml version='1.0'?>
<!DOCTYPE service_bundle SYSTEM '/usr/share/lib/xml/dtd/service_bundle.dtd.1'>
<service_bundle type='manifest' name='export'>
<service name='network/mysql' type='service' version='0'>
<create_default_instance enabled='true'/>
<single_instance/>
<dependency name='fs' grouping='require_all' restart_on='none' type='service'>
<service_fmri value='svc:/system/filesystem/local'/>
</dependency>
<dependency name='net' grouping='require_all' restart_on='none' type='service'>
<service_fmri value='svc:/network/loopback'/>
</dependency>
<method_context working_directory='/var/mysql'>
<method_credential group='mysql' user='mysql'/>
<method_environment>
<envvar name='LD_PRELOAD_32' value='/usr/lib/extendedFILE.so.1'/>
</method_environment>
</method_context>
<exec_method name='start' type='method' exec='/opt/local/share/smf/mysql-server/method start' timeout_seconds='18446744073709551615'/>
<exec_method name='stop' type='method' exec='/opt/local/share/smf/mysql-server/method stop' timeout_seconds='18446744073709551615'/>
<stability value='Evolving'/>
<template>
<common_name>
<loctext xml:lang='C'>MySQL RDBMS</loctext>
</common_name>
<documentation>
<manpage title='MySQL 5.5' section='1'/>
<doc_link name='mysql.com' uri='http://dev.mysql.com/docs'/>
</documentation>
</template>
</service>
</service_bundle>
8. 刪除已匯入的SMF
# svccfg delete simon-test-service
9. 其它進階功能,請參考svccfg man page
# man svccfg
Reference:
NodeStack (NodeJS + MongoDB + SmartOS)
NodeStack (NodeJS + MongoDB + SmartOS)
何謂NodeStack(擷取自官網http://nodestack.org公開文件):
- Application Development Stack
- Lean & Powerful
- Open Source Technologies
- Strong Community & Vendor Support
總之,NodeStack是一個由SmartOS為底層作業系統,搭配MontoDB服務, NodeJS語言所堆疊出來的架構,類似常見於WEB開發的LAMP (Linux + Apache + MySQL + PHP)架構,主要都是希望給開發人員從OS、AP Server、程式語言到資料庫一個完整的開發環境,透過OS提供這些開發環境完整的相容與快速的安裝之後,可以讓開發者盡量無痛的,趕快投入開發的工程。
SmartMachines
SmartMachine為源自於Solaris的Ilumus分支的Linux系統,為使用ZFS為系統磁碟格式的Bare-Metal虛擬系統,透過Thin Provision的方式提供Guest OS各式資源,這也讓SmartOS具備接近於實體主機的高效能,甚至可以達到動態的資源調整與重新分配,並且可以透過ZFS達到快速的將運行中的Guest OS做Snapshot備份。
1. SmartOS的Snapshot:
有別於其餘作業系統的snapshot,SmartOS針對snapshot後的物件,另外mount於作業系統可見的磁碟中,使用者可以透過mount point直接存取snapshot中的檔案,而不用直接restore...更方便!
# ls -l /checkpoints/
2. SmartOS SMF:
SmartOS提供SMF(Service Management Framework)服務架構,該服務源自於Solaris之Deamon管理方式,讓開發人員可以透過簡單的XML定義來撰寫Daemon服務。SMF並會協助管理您掛載服務的生命週期,並且透過設定中給予的參數,更可以自動重新啟動已經Crash的服務,讓您管理您的服務更加方便!趕快把你的程式加到SMF吧!
顯示所有服務:
# svcs -a
查看服務LOG位置:
# svcs -L [服務名稱]
啟動服務:
# svcadm start [服務名稱]
關閉服務
# svcadm stop [服務名稱]
匯入設定檔:
# svccfg import [服務設定檔]
查看設定檔:
# svccfg export [服務設定檔]
|
3. SmartOS套件安裝程式:
SmartOS預設採用類似Linux系統的yum, apt-get等操作方式的pkgin系列指令操作安裝相關服務套件,套件庫更由Joyent原廠維護,每季更新。
查詢套件
# pkgin search [套件關鍵字]
安裝套件
# pkgin install [套件關鍵字]
移除套件
# pkgin remove [套件關鍵字]
|
SmartOS Mongodb
Montodb為目前火紅的NoSQL資料庫的一支,透過文件型態的Key-Value模式提供快速的儲存與查詢功能,即使收容大量資料,依然能夠維持高效能運作,而在SmartOS中,透過pkgin能夠快速的安裝Mongodb,並提供服務:
安裝Mongodb (原SmallPackage中已經預載...)
# pkgin search mongodb
# pkgin install mongodb-[version]
啟動服務:
# svcadm enable mongodb
確認服務是否啟動:
# svcs mongodb
STATE STIME FMRI
online 12月_13 svc:/pkgsrc/mongodb:default
本地端連線DB
# mongo
MongoDB shell version: 2.2.0
connecting to: test
>
設定提供外部連線
# vi /opt/local/etc/mongodb.conf
|
SmartOS Node.js
Node.js為具備Non-Block與Event Driven的Server Side JavaScript程式語言,能夠快速建構出輕量化且高效能的網路服務或網站,廣受時下受開發者社群青睞,並且在開發社群成長快速的程式語言。在短時間已內於github上已累積大量的優質開放原始碼套件,可供開發人員使用。而SmartOS中,預設支援pkgin直接安裝Node.js之服務,並讓您可以搭配Console 指令、Shell腳本、互動模式或執行檔方式進行操作:
安裝Node.js (原SmallPackage中已經預載...)
# pkgin search node
# pkgin install node-[version]
指令列直接使用node.js
# node
> console.log('Hello')
Hello
在Shell中使用Node.js
# vi test.sh
#!/bin/bash
node -e "
var os = require('os')
os.loadavg()
"
# sh test.sh
[1,2,0]
使用expressjs建立web framework
安裝expressjs
# npm install express -g
建立web專案
# express [YourProject]
# cd [YourProject] && npm install
啟動服務:
# node app.js
|
訂閱:
文章 (Atom)