2017年2月19日 星期日

Cassandra Cluster Tutorial


壹、前言

寫這篇文的原因與心得可以用同一句話來述說:「千萬不要無腦rm -rf 。」不小心把整個環境的東西刪除的下場就是只能全部從來一遍,就趁這個機會紀錄一下環境的設定以免之後又發生一樣的事。

貳、安裝環境

1. 作業系統:CentOS7
2. 節點數量:4
centos02: 192.168.1.2 (使用這台作為seed node)
centos03: 192.168.1.3
centos04: 192.168.1.4
centos05: 192.168.1.5
3. Cassandra版本:DataStax Distribution of Apache Cassandra 3.2
註:使用這個版本的原因如Cassandra Tutorial - 安裝篇這篇文所說,在這邊就不再贅述,但是有一點很重要,官方版本的Cassandra在目前(20170220)已經更新到3.10了,Datastax也不再提供版本的更新與維護,因此對於使用新版本的人這篇文章或許不是很能符合你的需求,在參考前可能會需要注意一下。

參、步驟

1. 修改Cassandra設定檔
設定檔預設是放在 /etc/cassandra/conf/cassandra.yaml

修改第10行
cluster_name: 'Test Cluster'
cluster中的每個實體都必須使用相同設定

修改第343行
- seeds: "127.0.0.1"
將所有節點的 - seeds: "127.0.0.1" 設定為 seed node 的 ip,讓他們知道在加入 cluster 時(只有在加入當下才需要)要從哪一台電腦取得其他節點的資訊,此外 seed 可以一個以上,如果有超過一個 seed 的話,ip 以逗號隔開,例如 "<ip>,<ip>,<ip>"。
在本例中設定為 - seeds: "192.168.1.2"

修改第472行
listen_address: localhost
Cassandra內部在溝通資料時使用的ip就在這邊設定 (Cassandra's internal storage protocol uses the listen_address.),因此所有節點皆要將之設為自己的 ip 或 hostname ,以便讓其他節點知道傳送資料時知道要送到哪裡去,如果是設定為 hostname 的話,所有節點的 /etc/hostname, /etc/hosts 或 DNS 等皆要進行設定。
centos02>>listen_address: 192.168.1.2
centos03>>listen_address: 192.168.1.3
centos04>>listen_address: 192.168.1.4
centos05>>listen_address: 192.168.1.5

修改第546行
rpc_address: localhost
Client端與server溝通時 (Thrift RPC service and native transport) 使用的地址
centos02>>rpc_address: 192.168.1.2
centos03>>rpc_address: 192.168.1.3
centos04>>rpc_address: 192.168.1.4
centos05>>rpc_address: 192.168.1.5

註:之後如果要使用cqlsh的話必須在後面接上想要連接的server的ip才可以用,例如cqlsh 192.168.1.4


到這裡cassandra.yaml的設定就算完成了 ^_^

    2. 啟動cluster
    因為所有node在啟動時都會先與seed溝通,因此必須先啟動seed node,啟動完seed node後再啟動其他節點

    # service cassandra start

    之後可以檢查cluster節點的狀態
    #nodetool status

    由下圖可以發現我們的四個節點都已經成功地彼此連接了!

    2016年12月21日 星期三

    解決CentOS無法掛載(mount) NTFS檔案系統設備的問題

    今天想要複製檔案到隨身碟時發現插下去怎麼沒有反應,雖然可以顯示隨身碟已經插上電腦,但要進行讀寫時出現了一大串錯誤訊息,但是可以看到裡面有這麼一句話
    Error mounting: mount: unknown filesystem type 'ntfs'
    原來CentOS不能辨識NTFS這個檔案系統的東西阿,搜尋後發現需要安裝ntfs-3g才能正常存取這種檔案系統,安裝方法如下
    #yum install ntfs-3g

    然後系統顯示
    No package ntfs-3g available.
    Error: Nothing to do
    居然從yum裡面找不到,原來要從epel裡面才找的到阿。

    補充:EPEL (Extra Packages for Enterprise Linux) 是一個由 Fedora Special Interest Group 社群所維護的套件庫,其主要目的是提供各種企業級的 Linux 一些額外的高品質套件,這個套件庫可用於RHEL、CentOS、Scientific Linux 與Oracle Linux。

    正確的安裝方法如下
    先安裝EPEL套件包
    #yum install -y epel-release

    安裝以EPEL以後就可以用yum安裝ntfs-3g囉
    #yum install -y ntfs-3g

    安裝完以後,如果將來需要掛載NTFS檔案格式的設備時就不會再發生問題了!

    2016年12月20日 星期二

    輕鬆解決 VirtualBox is already locked by a session (or being locked or unlocked)

    話說前幾天實驗室跳電,雖然伺服器會自己重開機,但虛擬機並不會跟著重開(懶得設定的下場),遠端開啟虛擬機的指令如之前的文章所述

    $VBoxManage startvm centos03

    在正常情況下,執行成功應該會出現這個訊息
    Waiting for VM "centos03" to power on...
    VM "centos03" has been successfully started.
    但是這次的執行出現的卻是
    VBoxManage: error: The machine 'centos03' is already locked by a session (or being locked or unlocked)
    VBoxManage: error: Details: code VBOX_E_INVALID_OBJECT_STATE (0x80bb0007), component MachineWrap, interface IMachine, callee nsISupports
    VBoxManage: error: Context: "LaunchVMProcess(a->session, sessionType.raw(), env.raw(), progress.asOutParam())" at line 589 of file VBoxManageMisc.cpp
    那要怎麼解決呢?先試試看最白癡的方法直接重開好了,反正也沒再跑甚麼東西,因此我們執行關閉虛擬機指令

    $ VBoxManage controlvm centos03 poweroff

    正常的情況下應該會出現
    0%...10%...20%...30%...40%...50%...60%...70%...80%...90%...100%
    但在這個例子中出現的卻是
    VBoxManage: error: Invalid machine state: Starting (must be Running, Paused or Stuck)
    VBoxManage: error: Details: code VBOX_E_INVALID_VM_STATE (0x80bb0002), component ConsoleWrap, interface IConsole, callee nsISupports
    VBoxManage: error: Context: "PowerDown(progress.asOutParam())" at line 231 of file VBoxManageControlVM.cpp
    現在是甚麼情況?開也開不了關也關不了,怎麼辦呢?這時候只要執行只下命令就好

    $ VBoxManage startvm centos03 --type emergencystop

    這條指令不會聽出任何提示訊息,執行完就直接關閉虛擬機器,因此我們隨後可以直接再次開啟這台虛擬機器就解決囉

    2016年11月13日 星期日

    How to install VirtualBox on CentOS 7 using command line


    前言


    最近已經將資料庫在練習的環境測試完了,接下來就該用實驗室的電腦做一點比較正式的環境架設了,但最怕麻煩的我怎麼可能乖乖蹲在實驗室架設環境呢?來回實驗室要快半小時耶,瘋了喔這麼累,在家裡躺在床上用SSH(Secure Shell)遠端實驗室電腦才是王道阿,網路上大多數的教學都是教大家如何在圖形化介面下安裝與設定虛擬機器,這對我這種懶人來說太麻煩了,所以誕生了一個寫一個完全使用command line來安裝VirtualBox教學的念頭,作為小懶人間的小小交流。
      因為平常習慣用的是CentOS,所以下面的指令皆用建立CentOS虛擬機為例。


    步驟


    Step1:安裝虛擬機器

    由於Yum預設的伺服器中並沒有內建VirtualBox軟體庫(Repository)的相關資訊,因此我們必須自己建立一個VirtualBox的repo檔,並安裝目前最新版(20161107)的VirtualBox。
    #cd /etc/yum.repos.d
    #wget http://download.virtualbox.org/virtualbox/rpm/rhel/virtualbox.repo
    #yum install -y VirtualBox-5.1.x86_64

    Step2:建立虛擬機器

    #VBoxManage createvm --name centos
    createvm:建立一個虛擬機器檔案
    --name後面加虛擬機器的名字
    這個命令在執行成功後會在你的家目錄底下建立VirtualBox VMs/centos/centos.vbox

    Step3:幫虛擬機器建立硬碟檔案

    #VBoxManage createhd --filename centos --size 1000
    createhd:建立硬碟
    --filename後面加上剛剛建立的虛擬機器檔名
    --size是硬碟大小,以MB(Megabyte)為單位,100MB只是示範使用

    Step4:讓VirtualBox找到你的虛擬機器檔案

    #VBoxManage registervm '/home/user/VirtualBox VMs/centos/centos.vbox'
    registervm後面接虛擬機器檔案的完整路徑,前後用引號圈起來
    (其實也可以在createvm階段就進行這個操作,只要在filename打完後,空一格加上--register就好,但因為個人習慣才把這個步驟在這個階段進行。)

    Step5:虛擬機器的更多設定

    #VBoxManage modifyvm centos --ostype RedHat_64 --memory 512 --vram 10 --accelerate3d on --audio alsa --audiocontroller ac97 --nic1 nat --nictype1 82540EM --cableconnected1 on
    modifyvm後面接虛擬機器的名稱,讓你對指定虛擬機器進行更多設定
    --ostype在使用圖形化介面版本新增虛擬機器時,有沒有印象有一欄是要選擇虛擬機器類型?
    那個步驟就是在這邊進行,注意使用的系統是不是64位元的,像我使用的是64位元的CentOS 7,因此我的類型是輸入RedHat_64 (底下會附上比較常見的幾種,如果使用的作業系統沒有在底下看到可以執行$VBoxManage list ostypes查閱。)
    --memory 設定給予虛擬機器的記憶體大小,記憶體大小以MB(Megabyte)為單位,512MB只是示範使用。
    --vram 顯示記憶體大小,記憶體大小以MB(Megabyte)為單位,10MB只是示範使用
    --accelerate3d 是否啟動3D加速
    --audio後接主機的音效驅動程式,可以選擇的有none, null, oss, alsa , pulse
    --audiocontroller後接音效晶片,可以選擇的有ac97, hda, sb16(這部分還不確定理解是否正確)
    --nic後面不用空格接上網路卡編號(1~n),之後空格接上模式,可以選擇的有none, null, nat, bridged, intnet, hostonly, vde
    --nictype後面不用空格接上網路卡編號(1~n),之後空格接上網路卡的類型,可以選擇的選項有Am79C970A, Am79C973, 82540EM, 82543GC, 82545EM, virtio
    --cableconnected後面不用空格接上網路卡編號(1~n),選擇是否連接

    作業系統與ostype對照
    Debian (32-bit)----->Debian
    Debian (64-bit)----->Debian_64
    Fedora (32-bit)----->Fedora
    Fedora (64-bit)----->Fedora_64
    Red Hat (32-bit)--->RedHat
    Red Hat (64-bit)--->RedHat_64
    Ubuntu (32-bit)---->Ubuntu
    Ubuntu (64-bit)---->Ubuntu_64
    FreeBSD (32-bit)-->FreeBSD
    FreeBSD (64-bit)-->FreeBSD_64

    Step8:設定虛擬機的儲存設備連接埠

    首先我想新增一個IDE給虛擬機器連接光碟機
    $VBoxManage storagectl centos --name IDE --add ide --controller PIIX4 --bootable on
    再新增一個SATA給虛擬機器連接硬碟
    $VBoxManage storagectl centos --name SATA --add sata --controller IntelAhci --bootable on
    storagectl後面加上目標虛擬機器的名稱
    --name可以讓你幫這個儲存裝置命名,你要想取啥甚至連Trump都行
    --add後面接上你的介面,可以選擇的有ide, sata, scsi, floppy
    --controller後接的為控制晶片,可以選擇的有LsiLogic, LSILogicSAS, BusLogic, IntelAhci, PIIX3, PIIX4, ICH6, I82078(對這方面較沒研究,因此在這邊都選擇最常見的,IDE對PIIX4,SATA對IntelAhci)
    --bootable選擇on讓他可以啟動

    Step9:將儲存設備接上虛擬機器

    設定虛擬機器連接埠所連接的對象(硬碟),並且放入虛擬機器的硬碟檔案
    #VBoxManage storageattach centos --storagectl SATA --port 0 --device 0 --type hdd --medium /home/user/VirtualBox\ VMs/centos/centos.vdi
    設定虛擬機器連接埠所連接的對象(光碟機),並且放入虛擬機器的光碟檔案
    #VBoxManage storageattach centos --storagectl IDE --port 0 --device 0 --type dvddrive --medium /home/user/CentOS-7-x86_64-Everything-1511.iso
    storageattach後面接目標虛擬機器
    --storagectl後面接剛剛透過--name所命名的連接埠
    --port儲存設備接上的port
    --device設定該裝置在該port上的編號
    --type後接該儲存設備的型態,可以使用的有dvddrive, hdd, fdd
    --medium後接上欲放入的檔案完整路徑

    Step10:啟動
    經過10個步驟的摧殘,終於可以啟動與關閉虛擬機器了
    #VBoxManage startvm centos
    #VBoxManage controlvm centos poweroff

    總結


      以上就是如何在Linux安裝、設定並且啟動虛擬機器的方法,如果要遠端重灌的話,需要開啟遠端桌面伺服器VRDE,這部分還沒有時做過,因此不在本文章中討論。

    【Linux教學】授權使用者使用sudo

    在管理伺服器的時候,不建議直接使用root進行控制,雖然在執行指令時完全不用考慮權限問題非常方便 (我自己以前也常常這樣,直到刪掉不該刪的東西...),為了不要讓這種悲劇再次發生在你我身邊,大家在管理伺服器時建議使用可以用超級使用者權限的用戶登入即可,有需要時加個sudo就好,底下附上如何讓使用者取得使用sudo權限的方法。

    要讓使用者使用sudo,必須修改/etc/sudoers這個文件,但是因為這個文件的擁有者與群組皆為root所有,且為唯獨檔(-r--r-----),因此必須先取得root密碼才可以進行修改。

    1. 登入root或是執行su指令,並輸入root密碼,用超級使用者的身分操作系統
    2. 修改/etc/sudoers這個檔案
    #vim /etc/sudoers
    在大約98行的地方可以找到
    root    ALL=(ALL)       ALL
    在它底下新增一行
    username  ALL=(ALL)       ALL
    (username為欲給予使用sudo權限的使用者)
    :wq儲存

    儲存完之後,該user就可以使用sudo了

    2016年11月5日 星期六

    (under construction)Linux指令筆記

    隨手放一些常常忘記的指令以備不時之需~

    1. 查看系統版本
    #uname -a

    2. 檢查SELinux (Security Enhanced Linux) 狀態
    #getenforce

    →修改SELinux狀態
    #vim /etc/selinux/config
    修改SELINUX=enforcing
    SELinux的模式可分為三種模式,以下取自於鳥哥的Linux私房菜
    1. enforcing:強制模式,代表 SELinux 運作中,且已經正確的開始限制 domain/type 了。
    2. permissive:寬容模式:代表 SELinux 運作中,不過僅會有警告訊息並不會實際限制domain/type 的存取。
    3. disabled:關閉,SELinux 並沒有實際運作。
    3. 修改ip
    #ifconfig <device_name> <ip_addr> 
    其他網卡資料的修改

    #vim /etc/sysconfig/network-scripts/<device_name>

    4. hostname
    檢查hostname
    #hostnamectl

    修改hostname
    CentOS 7更新了修改hostname的方法,現在只需要
    # hostnamectl set-hostname <new_hostname>

    2016年10月30日 星期日

    【翻譯練習2】Eh Bee Family - THIS WILL GIVE YOU NIGHTMARES!!

    Eh Bee Family 一發佈就剛好滑到

    還真的是沒有大多數人的惡夢XDD

    發現so last month聽不太懂就來研究看看

    原來是old的意思R

    最重要的是

    Miss Monkey還是一如往常的可愛 <3