命中有時終須有 命中無時莫強求
Ceph pgs stuck in 'incomplete' state ,ops blocked
Ceph OSD 又再次發生 disk failure,結果在手動修復硬碟時操作不當,整個 disk partition table 都消失了。即使把備份的 disk patition table 寫回去之後,依然無法解決問題。
OpenStack Nova cannot reboot instance - Unable to create tap device
早上因為某種因素,將 nova compute 強制重開機。當開機完成之後,使用 nova reboot --hard <server>
的方式,想要開啟instance 卻失敗,在 /var/log/nova/nova-compute.log
中看到以下錯誤訊息:
2015-02-11 16:10:54.110 ERROR nova.compute.manager [req-a3d9cf35-82ee-4857-b69d-99ef0c8ca753 b6a90e8c63ad4612917655fb9b04ad92 ecb687200c6a4574bdaf3ea3633c6b3f] [instance: 7bdad622-dd70-49d7-89ca-827d2e86367f] Cannot reboot instance: Unable to create tap device tape10b9639-d8: Device or resource busy
OpenStack Nova error: libVirt cannot get CPU affinity of process 30619
Nova-compute 無法運行,在 log 中發現:
2015-02-11 15:34:05.511 30827 TRACE nova File "/usr/lib/python2.7/dist-packages/eventlet/tpool.py", line 187, in doit
2015-02-11 15:34:05.511 30827 TRACE nova result = proxy_call(self._autowrap, f, *args, **kwargs)
2015-02-11 15:34:05.511 30827 TRACE nova File "/usr/lib/python2.7/dist-packages/eventlet/tpool.py", line 147, in proxy_call
2015-02-11 15:34:05.511 30827 TRACE nova rv = execute(f,*args,**kwargs)
2015-02-11 15:34:05.511 30827 TRACE nova File "/usr/lib/python2.7/dist-packages/eventlet/tpool.py", line 76, in tworker
2015-02-11 15:34:05.511 30827 TRACE nova rv = meth(*args,**kwargs)
2015-02-11 15:34:05.511 30827 TRACE nova File "/usr/lib/python2.7/dist-packages/libvirt.py", line 2096, in vcpus
2015-02-11 15:34:05.511 30827 TRACE nova if ret == -1: raise libvirtError ('virDomainGetVcpus() failed', dom=self)
2015-02-11 15:34:05.511 30827 TRACE nova libvirtError: cannot get CPU affinity of process 30619: No such process
2015-02-11 15:34:05.511 30827 TRACE nova
Ceph OSD stuck in an existing executable needed to interrupt.
上週 Ceph cluster 掛掉,結果是某個 OSD 一直起不來。
解決 vsftpd: "500 OOPS: priv_sock_get_cmd"
最近結案了,開啟之前架好的 FTP server,準備上傳文件,卻發現不能登入 FTP server。在 FileZilla 上看到 client 的錯誤訊息是:
回應: 500 OOPS: priv_sock_get_cmd
在 server 端,/var/log/syslog
裡面看到:
Dec 25 16:46:21 portal kernel: [3212645.906540] type=1326 audit(1419497181.480:11): auid=4294967295 uid=65534 gid=65534 ses=4294967295 pid=22778 comm="vsftpd" sig=31 syscall=96 compat=0 ip=0x7fff19ffec9e code=0x0
Install Instiki on Ubuntu 12.04
Instiki 是一個用 Ruby 開發的 wiki 系統,特色是非常的 light weight、可以使用 Markdown 語法等。詳細介紹就暫時略過。
本次安裝的環境如下:
Operating system | Ruby version |
---|---|
Ubuntu 12.04 | 1.9.1 (install by RVM) |
安裝步驟
Configure Ruby environment
Instiki 官網 Installation 是使用 Ruby 1.9.1 作為範例,為了避免麻煩,因此決定採用跟官網一樣的版本。 不過 Ubuntu 預設的版本已經是 1.9.3 (?) 以上了,況且根據之前搞 CloudFoundry 的經驗,Ruby 的版本最好還是用 RVM 來進行管理。
設定 Libvirt 使用 Open vSwitch
最近經常需要將 VM (KVM) 開在 Open vSwitch 的 bridge 上。雖然 libvirt 有 Open vSwitch driver,但是 virt-manager 並無法辨別與設定 Open vSwitch。在這之前,都是要先建立好 VM ,然後手動修改 XML 檔,重新 virsh define
之後才能使用。
每個 VM 都要手動設定真的很麻煩
幸好找到了一個很棒解決方案: [Setting up Libvirt to use Open vSwitch][1]
Hadoop SecondaryNameNode 、CheckpointNode 與 Backup Node 觀念整理
為了要管理 lab 裡的 Hadoop cluster,針對 Hadoop 的 NameNode、SecondaryNameNode、CheckpointNode 與 BackupNode 做個了survay。
NameNode
Hadoop 的 metadata 是存放在運行 Namenode 的 server 的 memory 裡面,而 Namenode 的工作就是將 clients 對 metadata 的讀寫修改紀錄在edits裡。
當 Namenode 被啟動的時候,會先合併 HDFS 上的 fsimage 與 edits,取得完整的 metadata。此時,原本的 fsimage 會被更新。
之後,在 NameNode 運作的期間,client 對 metadata 的 access 還是只會記錄在新的 edits 裡,直到下一次 NameNode restart 的時候,周而復始的更新 fsimage、產生新的 edits。
復原 OpenStack 中被刪除的 instance
上週五在測試 puppet 全自動安裝 Openstack compute,大概是 class dependency 沒有設好的原因,總之 puppet 在安裝 compute 時總是會漏掉許多設定值。因此,我不斷地做 install/uninstall 來做測試。
Unstall 時已經很習慣用 apt-get –purge install nova-* quantum-* 。原本這行指令並沒有甚麼問題,但在於實驗的cloud環境,將 /var/lib/nova/instance
用 ceph 分享給所有 compute。
所以…悲劇發生了,所有 running 中 VM 的 instance 都被我刪除了。這個問題整個周末都沒有發現,是昨天上班時,我問效維新安裝的伺服器是否有發生狀況,這時我們才發現了這個大問題。
所幸,Linux 有個保護機制,當一個 file 被某些 process 佔用時,如果將該檔案刪除,此時系統只會將檔案 mark 為 (deleted)。 這樣一來其他 process、user 是讀取不到該檔案,但是該檔案還是繼續存在於 file system 中,直到那些所佔用 process 都結束了,這些 file 才會消失。
回到正題,cloud 上的 VM instance 被刪除會發生甚麼狀況呢?
- VM 沒有關機,但是他也不能做 clone (在 Openstack Dashbard 上是 snaphost 功能)
- VM 一旦關機,instance 就會被刪掉 => user 的資料消失(除非 user 放在 volume 裡面,而我們系統將 volume 獨立開來)
萬一整個 cloud 上所有 user 的資料都消失了,那我想我應該會被罵到死吧= =
萬幸的是我終於找到方法了