HAproxy 搭配 Nginx port redirect issue

nginx-logo
HAproxy 是一套高效能分散式系統軟體,後端可搭配 Web 或 SQL 服務,這次在後端搭配 Nginx 出現 port redirect 問題,問題很簡單,在 Haproxy 設定 80 port 對應到內部三台 Nginx 機器,但是 Nginx port 設定 8080,這樣當我們在瀏覽網址如下:
http://aaa.bbb.ccc.ddd/test (請注意,最後沒有 slash 喔)
你會發現 Nginx 將網址轉成
http://aaa.bbb.ccc.ddd:8080/test/
為了避免 Nginx 自動將 port 加入到網址列,我們可以透過設定 port_in_redirect,Nginx 預設將此設定為 On,所以將此設定為 off,並且重新啟動 Nginx 即可
port_in_redirect off;

How to install Gearman on Ubuntu or Debian with MySQL 安裝測試篇

Gearman 可以在背景幫忙處理繁瑣的工作,例如壓縮影片、處理縮圖、發送認證信…等,這次不會提到太多 Gearman 介紹,如果想瞭解 Gearman 可以參考小鐵兄寫的 Gearman 心得,此篇會筆記如何在 Ubuntu or Debian 安裝 Gearman 搭配 MySQL 服務,當然如果你不是使用 MySQL,也可以另外搭配 MemcachedSQLite 都可以 Continue reading “How to install Gearman on Ubuntu or Debian with MySQL 安裝測試篇”

Galera Cluster for MySQL Multi-master Replication

galera_mysql_replication
最近公司買了幾台機架伺服器來處理 HTTP 跟 DB Load balancer,要做到 DB 的分散式架構,首先需要同步多台機器資料,也就是寫入或更動任意一台單筆資料,另外平行的機器也會同時進行更新。同步的好處可以用來做備援及分散處理連線,而要做到此功能,可子參考網路上評價不錯的 Galera Cluster for MySQL 方案。本篇會介紹在 UbuntuCentOS 6.x final 版本如何安裝 Galera 伺服器套件及設定。要架設 Galera Cluster Server,有兩種套件選擇,一個是 Percona XtraDB Cluster 另一個是 MariaDB Galera Cluster,這次作者會介紹後者的安裝。

Galera Cluster 介紹

為什麼要選擇 Galera Cluster Server,它有什麼優點及功能呢?MySQL/Galera 是一套可以同步多台 MySQL/InnoDB 機器的叢集系統,底下可以列出功能。
  • 同步複製資料
  • 可讀取和寫入叢集系統內任一節點
  • 自動偵測節點錯誤,如果有節點當機,則叢集系統自動移除該節點
  • 可任意擴充節點
  • 採用 row level 方式來平行複製資料
從上面功能看來,我們可以平行任意擴充節點,動態增加伺服器到叢集系統,要做到上面功能,就是利用 Galera library 來做到同步資料處理,同步的詳細細節,可以參考 Galera library 連結。這邊就不再多描述了。 Continue reading “Galera Cluster for MySQL Multi-master Replication”

用 Ubuntu 10.10 Live CD 重新安裝 GRUB 2 到 Bootloader

logo-Ubuntu

今天起床打開電腦,Ubuntu 跳出 Warning 訊息,boot 磁區剩下 84MB,所以我手殘進去 /boot/ 目錄,把舊的 Kernel 清除,不小心砍掉 initrd.img-2.6.35-32-generic Linux Image 開機所需要的檔案,結果之後開機出現

You need to load the kernel first

大家好像都是升級 Kernel 之後才會出現上述狀況,網路上找到的解答都不符合我的需求,所以我又往 GRUB2 開機 Boot 去瞭解,新的 GRUB 2 跟原先的 GRUB 的解法已經完全不同了,沒有 /boot/grub/menu.list,而被 /boot/grub/grub.cfg 取代,所以不應該在手動編輯此檔案。grub.cfg 會在有更新 Kernel 版本時,手動執行 update-grub 的時候被修改覆寫。這次發生的原因是在我把舊版 Kernel 刪除,而忘記執行 update-grub,這時候的最佳解法就是透過 Live CD 來救援。

Continue reading “用 Ubuntu 10.10 Live CD 重新安裝 GRUB 2 到 Bootloader”

[筆記] 在 Ubuntu mount DVD ISO 檔案

logo-Ubuntu
在網路上常常下載 ISO 檔案Windows 底下可以透過虛擬光碟看到檔案內容,可是到了 Ubuntu 系統該如何知道 ISO 裡面放了哪些檔案呢?其實很簡單,可以透過 mount 指令就可以做到了喔,參考 Ubuntu 台灣論壇: 如何mount iso檔? [論壇 – Ubuntu基本設定]
$ mount /iso/ubuntu.iso /home/appleboy/ISO/ -t iso9660 -o loop
執行完上述指令,可以發現桌面會多出 DVD 光碟圖示,直接點選就可以了

How to change run levels and init.d scripts in Ubuntu & Debian

Ubuntu 6.10 (Edgy Eft) 之後使用 Upstart 代替原來的 sysinit,而 init 是用來管理 Upstart 的 Daemon,本來系統預設的 runlevel 可以在 /boot/menu.list 或者是 /etc/inittab,可是現在這檔案已經移除了,取而代之的就是 Upstart 管理,可以利用 telinit 來改變系統 runlevel,然而現在 runlevel 的定義跟以前不太一樣了,原先 Ubuntu 跟 Fedora 系列 runlevel 代表意義如下:
0:系統關機 (to halt the system) 1:單一使用者模式 (single-user mode) 2:尚未使用(可由使用者定義) 3:多使用者模式 (文字介面登入) 4:尚未使用 (可由使用者定義) 5:多使用者模式 (含有一個X介面的登入畫面) 6:重新開機 (reboot the system)
轉換成 Upstart 的話,就會變成底下
0:系統關機 (to halt the system) 1:單一使用者模式 (single-user mode) 2:多使用者模式 (含有一個X介面的登入畫面) 3:多使用者模式 (含有一個X介面的登入畫面) 4:多使用者模式 (含有一個X介面的登入畫面) 5:多使用者模式 (含有一個X介面的登入畫面) 6:重新開機(reboot the system)
上面資訊可以在 man telinit 裡面找到,寫得很詳細,現在 Ubuntu 9.10 系統,預設啟用是在 runlevel 2,只要執行 runlevle 指令,就可以查出先前跟目前所設定的 runlevel 值,這些數值是存放在 /var/run/utmp,這是一個 UTMP File,你會發現,現在只要安裝好 Ubuntu Desktop 系統,就會自動啟動,所以常常會看到 Linux 使用者會來詢問如何關閉 gdm 桌面程式,其實有很多手動的方式,init 也管理了開機所需執行的程式,如果是跑 runlevel 2,就會去執行 /etc/rc2.d/* 底下所有的 script 檔案,所以大家可以發現會有 /etc/rcX.d/ (X:0,1,2,3,4,5,6,S),其中的 S 代表 single user mode,我們用 rc2.d 底下的檔案來說明: /ect/rcX.d/ all script (by appleboy46) 大家可以看到,每個檔案命名方式:[S|K]\d{2}script_name,S 代表開機會啟動,K 代表開機不啟動,後面接兩位數字,代表開機優先權順序,這些檔案都是利用 Soft link 方式連接到 /etc/init.d/ 底下,所以修改 /etc/init.d/ 資料夾檔案內容,就可以自動更新 /etc/rc[0-6].d/ 檔案,相當方便吧,那該如何產生對應檔案到 /etc/rc[0-6].d/ 資料夾底下,可以利用 update-rc.d 這指令,update-rc.d 是用來產生或移除 init script links,可以參考 Debian Policy Manual

如何使用 update-rc.d 管理 init script links

利用系統預設值來新增 script links,預設值啟動 runlevels 2-5 跟停止於 runlevels 0, 1 and 6
update-rc.d script_name defaults
或者是可以自行設定執行優先順序跟自訂啟動 runlevel (ps. 請注意後面都有 . 符號)
update-rc.d script_name start 20 2 3 4 5 . stop 20 0 1 6 .
移除這些 script links (-f 參數代表強制移除)
update-rc.d -f script_name remove
2010-01-28 11 52 06 (by appleboy46) 可以看到在 runlevel 0126 是不啟動,345 是啟動 gdm 狀態,在 Ubuntu 9.10 底下,如果不想要開機就執行桌面程式,那就是必須要把 gdm 關閉,可以用下面兩種 command line 關閉
/etc/init.d/gdm stop
service gdm stop
但是這兩種方式只會在開機後手動執行,大家需要的是開機不會啟動,當然可以寫到 /etc/rc.local,因為在 rcX.d 底下會有 S99rc.local 執行,底下分享一下如何修改開機 runlevel,預設值是 2,但是之前都是另用 /etc//inittab 方式來修改,那其實現在這檔案消失了,您也可以自行新增喔,請先看 /etc/init/rc-sysinit.conf
# Default runlevel, this may be overriden on the kernel command-line
# or by faking an old /etc/inittab entry
env DEFAULT_RUNLEVEL=2
在這裡就可以修改系統 runlevel,註解也有說明,可以新增 /etc/inittab 來讓系統讀取其內容
id:2:initdefault: 
最後也是會讀取 /etc/inittab
# Check for default runlevel in /etc/inittab
if [ -r /etc/inittab ]
then
    eval "$(sed -nre 's/^[^#][^:]*:([0-6sS]):initdefault:.*/DEFAULT_RUNLEVEL="\1";/p' /etc/inittab || true)"
fi
所以最後還是會依照 /etc/inittab 寫入的資訊來判斷系統 runlevel,最後才會去執行 rcX.d 所有 script 檔案。不想執行桌面程式,會在網路上找到利用
update-rc.d gdm stop 20 0 1 2 3 4 5 6 .
這樣正常來說不會去啟動 gdm 才對,可是實驗結果,還是會繼續啟動,後來找到 /etc/init/gdm.conf 底下這段程式碼:
start on (filesystem
          and started hal
          and tty-device-added KERNEL=tty7
          and (graphics-device-added or stopped udevtrigger))
stop on runlevel [016]
把 stop on runlevel [016] 改成 stop on runlevel [0123456] 這樣就可以了 參考網站: Choosing different run level in Ubuntu upstart 和ubuntu启动过程原理介绍 [Linux]ubuntu下修改服務的執行等級 [ubuntu] Need to disable gdm

如何在 console 端使用 Tail (View) Multiple Files on UNIX / Linux Console

這在管理 UNIX base 系統方面最重要的地方,不管是維護 Linux or FreeBSD 主機,都要學習如何觀看 log 檔案,系統出問題,不管是 apache 不能啟動,或者是 MySQL 發生錯誤,基本上都可以觀察 /var/log 底下的檔案來達到解決問題,平常在使用 Linux 預設可以用 tail 這個指令,使用方法如下:
tail -F /var/log/message
tail -f /var/log/message
-f 如果在 message 晚上 rotate 檔案的時候,就會停止
-F 持續偵測是否有新檔案,會繼續維持下去
Continue reading “如何在 console 端使用 Tail (View) Multiple Files on UNIX / Linux Console”

[Debian] GNU/Linux 5.0 發布 zhcon 解決終端機亂碼

Debian 釋出了 GNU/Linux 5.0 發布,官方新聞 於2009年02月14日發佈出來,最近想說把自己的 NB 要換成 Debian 5.0 版本,不過之前都是在玩 Ubuntu 的狀況下,所以就找 i386 的 ISO 檔案,利用虛擬機器 VirtualBox,之前也沒有玩過虛擬機器,都是直接燒光碟,拿主機來硬幹,哈哈,不過想說學習一下 VitualBox 來試試看,我參考了一篇 VirtualBox指南,寫的很不錯,我就拿來使用 Debian 5.0 了,不過安裝過程其實還蠻簡易的,可以參考這篇:[教學]圖解Debian Desktop安裝筆記(1),這篇寫的很好,也淺顯易懂,安裝好之後,開機 grub 畫面如下: 2009-02-18_151709 (by appleboy46) Continue reading “[Debian] GNU/Linux 5.0 發布 zhcon 解決終端機亂碼”