Cassandra 簡易配置與啟動

Contents:

下載程式 (Downloads)

  • 可以在Apache Cassandra的下載網頁下載最新的穩定版本。這是最推薦的方式,下面其他的方法除非是Cassandra的開發人員或是發現bug必須使用最新版本才能修復時才會使用到。筆者撰稿的時候,最新版本的穩定版本0.7.0,接下來的範例也是以0.7.0版為主,此外指令系統環境預設是Ubuntu 10.10。
  • 可以到Apache Cassandra的SVN上下載最新的原始檔自行build, https://svn.apache.org/repos/asf/cassandra/trunk/
    • 或直接用SVN或git check out。
      • svn checkout https://svn.apache.org/repos/asf/cassandra/trunk cassandra
      • git clone git://git.apache.org/cassandra.git
  • 或者也可以在這裡找到 Nightly Build 版本,所謂Nightly Build版就是依據SVN上的最新程式碼每天Build出來的新版本,不過也因為程式碼都是最新的因此可能會有許多其他的問題。

簡單設置 (simple configuration)

Cassandra是利用Java所撰寫的因此在能夠運行JVM的平台就可以運行,此外根據Cassandra Wiki的說明,Cassandra必須在Java 1.6的版本才能運行推薦使用Sun JDK的 1.6 u19, u21或更新的版本。準備好JDK之後,解壓縮剛剛下載的檔案後可以修改下列檔案的設置:

  • conf/cassandra.yaml
    • 必須確認下列三個設置的目錄存在,如果不存在請手動修改該檔案或建立對應的目錄
      • data_file_directories
      • commitlog_directory
      • saved_caches_directory
    • 如果是Unix-Like的系統(如:Ubuntu Linux) 可以用下面的指令建立預設的目錄

      sudo mkdir /var/lib/cassandra
      sudo mkdir /var/lib/cassandra/data
      sudo mkdir /var/lib/cassandra/commitlog
      sudo mkdir /var/lib/cassandra/saved_caches
      sudo mkdir /var/log/cassandra

    • 如果是Windows系統,則一定要修改cassandra.yaml的內容,例如:
      • Windows cassandra settings
      • 用cmd開啟命令模式後,可以用下面的指令快速建立目錄

        mkdir datadata
        mkdir datacommitlog
        mkdir datasaved_caches
        mkdir log

  • conf/log4j.properties
    • 筆者下載的0.7.0壓縮包裡沒有這個檔案,可以將log4j-tools.properties複製到log4j.properties再加以修改。
    • 這個檔案預設的Log Level是INFO等級,如果有特殊需求可以改成更高(在log4j.rootLogger這邊)。
    • 另外log檔案的預設路徑是/var/log/cassandra/system.log。如果特殊需要也可以修改。
    • 如果是Windows的使用者的話,就一定要更改,否則log會寫不進去。

單一節點啟動(Running a single node)

啟動前須注意下面的事項:

  • 前面設置的三個路徑路徑是可以被寫入的。如果建立資料夾用sudo命令來建立時,這些資料夾的owner會是root,所以因此執行Cassandra也必須是root才可以寫入。
    • 或者下面執行的時候都用sudo使用root權限來運行。
    • 可以將上面資料夾的owner改為當前的使用者「sudo chown -Rv $(whoami) /var/lib/cassandra」

sudo chown -Rv $(whoami) /var/lib/cassandra
sudo chown -Rv $(whoami) /var/log/cassandra

  • 無法順利啟動時,請確認系統的JAVA_HOME路徑設置正確。

確認無誤後可以執行 「bin/cassandra -f」 來啟動系統(Windows系統請執行bincassandra.bat)。運行後可以利用「bin/nodetool -host <IP> ring」來查詢運行狀態。

啟動Cassandra叢集(Running a cluster)

一個Cassandra服務稱為一個節點(node),而Cassandra叢集(Cluster)即是啟動個node一起工作,node啟動時會依據seeds的設置來找到其它node,node間的溝通稱為Gossip,為了讓結點可以透過網路進行Gossip,因此也必須設置bind的網路位置。依照前面的說明與設置bind位址預設為localhost,因此只能啟動single node(單一節點)的Cassandra,但如果要啟動多個節點,則必須修改「conf/cassandra.yaml」中的設置。

  • seeds
    • 堤供node啟動時能找到其他node的服務。適合設置較為穩定的node作為seeds
  • listen_address
    • 即為Gossip使用的位址,可以用主機名稱或是用介面的IP位址,請勿使用0.0.0.0來bind所有的介面。
  • rpc_address
    • 即為Thrift,可以使用0.0.0.0來bind所有的介面。

啟動後可以用指令來查詢node的啟動狀態。

usr_name@your-hostname:~$ apache-cassandra-0.7.0/bin/nodetool -h 192.168.1.1 ring
Address         Status State   Load            Owns    Token
114370047407031585825716411201808513080
192.168.1.1 Up     Normal  17.64 KB        58.96%  44541738553819607218745010131931951155
192.168.1.2 Up     Normal  17.48 KB        41.04%  11437004740703158582571641120180851308

參考網頁

Tomcat 5 或 Tomcat 6 在Windowx x64上安裝成Windows Service服務的問題

下午在客戶那邊要把Tomcat 裝成service。一般情況是在用command line在tomcat/bin下

service.bat install

就可以安裝成服務。不過下午這樣裝,安裝成Windows服務都無法啟動,可是開Console卻很正常,在jakarta_service的log中出現下列錯誤:

[2011-01-25 16:34:24] [info] Procrun (2.0.4.0) started
[2011-01-25 16:34:24] [info] Running Service…
[2011-01-25 16:34:24] [info] Starting service…
[2011-01-25 16:34:24] [174  javajni.c] [error] 找不到指定的模組。
[2011-01-25 16:34:24] [994  prunsrv.c] [error] Failed creating java C:Javajre6binclientjvm.dll
[2011-01-25 16:34:24] [1269 prunsrv.c] [error] ServiceStart returned 1
[2011-01-25 16:34:24] [info] Run service finished.
[2011-01-25 16:34:24] [info] Procrun finished.

或是

[2011-01-25 15:58:32] [info] Procrun (2.0.4.0) started
[2011-01-25 15:58:32] [info] Running Service…
[2011-01-25 15:58:32] [info] Starting service…
[2011-01-25 15:58:32] [174  javajni.c] [error] %1 不是正確的 Win32 應用程式 。
[2011-01-25 15:58:32] [994  prunsrv.c] [error] Failed creating java C:Javajdk1.6.0_23jrebinserverjvm.dll
[2011-01-25 15:58:32] [1269 prunsrv.c] [error] ServiceStart returned 1
[2011-01-25 15:58:32] [info] Run service finished.
[2011-01-25 15:58:32] [info] Procrun finished.
[2011-01-25 15:58:50] [info] Procrun (2.0.4.0) started
[2011-01-25 15:58:50] [info] Running Service…
[2011-01-25 15:58:50] [info] Starting service…
[2011-01-25 15:58:50] [994  prunsrv.c] [error] Failed creating java
[2011-01-25 15:58:50] [1269 prunsrv.c] [error] ServiceStart returned 1
[2011-01-25 15:58:50] [info] Run service finished.
[2011-01-25 15:58:50] [info] Procrun finished.

google到的辦法都是要我重裝x64的JDK,可是這一點早就確認了。但是一直還是無法啟動。後來發現,原來我的tomcat是用zip包不是用installer,因此tomcat5.exe還有tomcat5w.exe是x86編譯的(32位元),因此要自己去tomcat的SVN上找到相對應版本的tomcat5.exe、tomcat5w.exe (或tomcat6.exe tomcat6w.exe)。

tomcat的SVN在這: http://svn.apache.org/viewvc/tomcat/

例如我下載5.5.27版的就在這:  http://svn.apache.org/viewvc/tomcat/tc5.5.x/tags/TOMCAT_5_5_27/connectors/procrun/bin/amd64/

但是Stack Overflow裡面tomcat6的路徑是放在: http://svn.apache.org/viewvc/tomcat/tc6.0.x/tags/TOMCAT_6_0_16/res/procrun/amd64/

結構有點不大一樣,總之先到這找到適用的版本,然後找到procrun這個目錄,然後再找amd64 (也就是x64)的版本,下載完後將原本的exe覆蓋。然後再重新安裝service就可以了。

參考:

How to run Tomcat 6 on WinXP 64 bit ? – Stack Overflow

[memo] Ubuntu Linux改Timezone的方式

在ec2上開ubuntu大多是UTC,雖然server是在外國,可是習慣上還是改回台灣的時區比較不會誤會。改時區實在無敵簡單的,基本上就是去/usr/share/zoneinfo裡面找到適當的時區,然後在製作軟連結到/etc/localtime就可以了。下面這個,是台灣時區的下法。

ln -sf /usr/share/zoneinfo/Asia/Taipei /etc/localtime

EC2上的Ubuntu裝ec2-api-tools出現錯誤

因為從2010年11月開始一年,有一台micro主機免費所以開始使用EC2。不過卻發現之前用的alestic提供的Ububtu 10.10的image的EBS空間是切15GB,而免費的quota是10GB所以多出來的5GB變成額外要charge,而我架這個blog也才使用1GB左右的空間而已,所以決定著手調整EBS的size。可是卻發現Ubuntu上沒有預載ec2的api tools,但是嚇了sudo apt-get install ec2-api-tools ec2-ami-tools卻出現下面這種錯誤。

$ sudo apt-get install ec2-ami-tools
Reading package lists… Done
Building dependency tree
Reading state information… Done
Package ec2-ami-tools is not available, but is referred to by another package.
This may mean that the package is missing, has been obsoleted, or
is only available from another source

E: Package ‘ec2-ami-tools’ has no installation candidate

經過google後參考這篇mail ,所以下下面的指令…。不過指令有用sed去改/etc/apt/sources.list的檔案,所以執行前最好先備份一下喔。

$ sudo sed -i.dist ‘s,universe$,universe multiverse,’ /etc/apt/sources.list
$ sudo apt-get update
$ sudo apt-get install ec2-api-tools ec2-ami-tools

結果就成功安裝嚕,可以參考一下嚕。

有點失憶的那些夢想~

中午拿當時去看Cats時買的失敗望遠鏡送給要去看太陽劇團的Apple學姊,中午就跟學姐的老公勇樣一起吃飯,午餐的時候聽勇樣分析了工作出國出差的心得,感覺這樣飛來飛去可以看看各國不同的感覺,好像也不錯。吃完飯之後就走去中山北路的登山用品社看Gore-tex外套,然後最後我繞去天瓏書局看書。

不經意的看到一本「我是一隻IT小小鳥」的書,心裡的第一個OS是:「現在大陸書改寫成繁體的真多阿!」(不知道是來自哪種的sense,一看封面就覺得原本是簡體書)…稍微翻了一下,發現是集合了數個大陸IT人員從求學、就業以來的IT心得…,我沒有細看,不過在每個作者的最前面就是寫著作者的簡歷,我看了好幾個年紀都比我還小,而工作卻都是大公司。內容我沒有詳看,我本來就不喜歡在書店把整本書看完,加上我身上負重 5KG以上,實在沒有耐心。

間單的看了一下別人後想想自己,又想了一下QBQ

現在的我,除了抱怨目前的待遇太低外還有做什麼嗎?技術上有變強嗎?究竟是這個小島困住我,還是我的眼光只有在這個小島里面?我只能當一個平凡的人嗎?…在那一個瞬間,我的腦袋也許爆炸出一百個問號,我不知道,我總覺得我的不做為太久了,我的生活模式與法則只能讓我變成一個一般人,還是有點失敗的那種一般人。

[memo] Ubuntu 安裝Oracle JDK (12.04 / 12.10)

在Ubuntu以往的版本中可以直接透過apt-get install sun-java-jdk來安裝官方版本的JDK,可是Ubuntu 10.04之後將Sun的JDK移到partner的repositoty中(詳情),也因此無法直接下apt-get install sun-java-jdk來安裝JDK。所以必須要把相關資訊加入apt的repository中才能安裝。

Ubuntu 12.04 & 12.10

這個團隊提供。

sudo add-apt-repository ppa:webupd8team/java
sudo apt-get update
sudo apt-get install oracle-java7-installer

 

Ubuntu 11.04 & 11.10 (已失效)

Ubuntu 11.04之後的版本,apt repository的位置與10.x版本不同。

sudo apt-get install python-software-properties
sudo add-apt-repository ppa:ferramroberto/java
sudo apt-get update
sudo apt-get install sun-java6-jdk sun-java6-plugin

 

Ubuntu 10.04 & 10.10

sudo apt-get install python-software-properties
sudo add-apt-repository “deb http://archive.canonical.com/ lucid partner”
sudo apt-get update
sudo apt-get install sun-java6-jdk sun-java6-plugin

需要的話可以用下面的指令把原本系統的open JDK換掉

sudo update-java-alternatives -s java-6-sun

sudo add-apt-repository “deb http://archive.canonical.com/ lucid partner”
sudo apt-get update
sudo apt-get install sun-java6-jdk sun-java6-plugin
sudo update-java-alternatives -s java-6-sun

參考網頁:

http://www.ubuntugeek.com/how-install-sun-java-runtime-environment-jre-in-ubuntu-10-04-lucid-lynx.html
http://blog.cheyingwu.tw/index.php/2010/05/02/ubuntu-10-04-switch-to-sun-jdk/
http://tekibrain.blogspot.tw/2011/05/ubuntu-1104-sun-java-6-jdk.html

我大聲嘶吼~卻沒有人聽見

在廣播裡,有個女孩一個人去了東京。他在東京迪士尼從早上待到晚上,看著夜晚的煙花,她說她在最多歡笑的地方,卻好想哭,然後開始對空氣訴說著她是如何的思念著那段逝去的愛情。同樣下個月要去東京迪士尼的我,無論是開心、難過、感動或是失望,也都同樣無處訴說。

適合攝影用的越野跑鞋 Adidas SNova Riot 3M GTX 開箱

最近因為鞋子幾乎都壞光了,一開始是我踢不爛的鞋子左腳那邊鞋底會進水,然後買了一雙某個說是發明帆船鞋的品牌結果超級難穿,最後僅剩的低筒登山鞋的鞋墊也被我磨破,最後終於決定要買一雙新的鞋子!

在Mobile 01上survey的時候看到Adidas的推廣文章就馬上被勸敗了,這雙Adidas SNova Riot 3M是SuperNova系列的最新鞋款,有出GTX版與非GTX版,也就是包含Gore-Tex防水薄膜的款式與一般的款式,搜尋過一些文章,其實Gore-Tex款的透氣性是不大好的,穿起來會比非GTX款的熱很多,實際去專櫃試穿的結果也是如此,所以如果是想要買來當慢跑鞋的,我個人覺得可能還是要選擇非GTX款的,會比較適合。不過我主要是想穿來拍照、旅行、四處趴趴走,這樣看來選擇Gore-Tex款似乎比較適合。
IMG_2109.jpg

其實我這次購鞋的需求很簡單:

  1. 抓地力強:
    因為拍照需要攀爬到高處或用奇怪的姿勢取景,所以如果鞋子的抓地力好,就更能隨心所欲的進行拍攝的動作。這款Adidas SNova Riot 3M的鞋底是德國馬牌輪胎(Continental)製造的,提供了很好的抓地性。實際穿起來的感覺的抓地力確實不錯,如果拿來跟我另一雙Jack Wolfskin登山鞋的黃金大底(Vibram)相比,Continental的鞋底不但抓地立更佳,而且鞋底很軟更適合做奔跑或半跪姿等彎曲的動作。
    IMG_2121.jpg
    IMG_2128.jpg
  2. 輕巧易於移動
    因為先前那雙登山鞋有個缺點就是他太重了,因此如果可以更輕巧一點,這樣走起路來也比較不會累。所以就以比較輕巧的慢跑鞋類來尋找,正巧看到愛迪達在打這雙越野跑鞋的廣告,覺得正適合我。
  3. 防水
    因為經常會經過一些濕潤的地面或是碰巧遇到小雨,所以鞋子最好可以防水至少需要不容易滲水進去,所以如果是一般的慢跑鞋,為了透氣性大多是水來了就直接進去了,可是這雙GTX
    款,提供了Gore-Tex防水薄膜,可以阻擋水滴直接由鞋面進入,昨天去瑞芳遇到了大雨也涉過了一些水漥,鞋內也沒有因為雨水而濕掉,感覺實在不錯!
    ↓ Gore-Tex製品都會有的Gore-Tex吊牌
    IMG_2130.jpg

    ↓ 此外鞋子上也會有Gore-Tex的標誌
    IMG_2111.jpg

↓ 除此之外去專櫃試穿的時候店員有說這個鞋子的後根面是有彈性的,實際穿後感覺還蠻軟Q的,感覺不錯捏
IMG_2143.jpg

經過台東行 & 昨天的瑞芳行的操練後總體而言,這雙鞋對我來說有85分以上的評價,除了我列的需求都完美達成外,最後軟Q有彈性的鞋底也讓我覺得超棒的,不過缺點就是這雙鞋子不便宜定價接近四千元,然後就是Gore-Tex穿起來卻實會比較熱,容易有腳汗的問題,不過總體而言還算蠻滿意的啦!! 如果還想看其他的照片可以前往我的相簿觀看嚕。

大咪真是個酷咪寶!

我家的大咪是一隻高傲的藍波斯。我覺得他的毛長長的時候最漂亮了,可是每年夏天老媽總是會把大咪拉去剪毛,一來毛長了不剪的話,無論是大咪路過的地方或是抱過的人都會有好多毛毛出現,然後也覺得他好像也很熱,所以每年三、四月天氣開始變熱好的時候,大咪就會被帶去剪毛,然後就會變成這樣→

IMG_0315.jpg

剛剃完毛的時候,就像是一隻肥胖的波斯貓變成活脫脫的巨型老鼠。…不過每到秋天,毛又會自動的澎回來變回高貴的波斯貓了,上次回家的時候台中的傍晚的天空紅得像火燒起來一樣,然後我我看到大咪就這樣靜靜的坐在桌上看著門外。

Continue reading “大咪真是個酷咪寶!”

AP遠端連接MySQL Connection暴增最後造成ERROR 1040 (HY000): Too many connections

PHP連接遠端mysql server最終造成ERROR 1040 (HY000): Too many connections

最近遇到一個很詭異的問題,原本的PHP系統要擴增AP Server並把MySQL移到一台獨立的Server上運作,原本認為這個task幾乎是沒有風險的,沒想到一接上線,大量的Client端的請求不僅無法消化,MySQL這邊的Connection數目竟然會很快地暴增,進而讓MySQL不斷吐Too many connections的錯誤的訊息。

Continue reading “AP遠端連接MySQL Connection暴增最後造成ERROR 1040 (HY000): Too many connections”