[BLOG] 新增 Vultr Storage VPS 提供 iscsi 給wordpress 主機使用
本文于1714天之前發表,文章內容可能已經過時。
新增 Vultr Storage VPS 提供 iscsi 給wordpress 主機使用
前幾天因為DO的WP主機速度不理想,就連拿來當作上PTT的跳板都會頓爹
所以把主機換到了vultr 的東京機房,光是ping值就從 14x ms 下降到了 4x ms,整個大改善啊!
而且方案從原本的 10USD 換成了 5USD (1 cpu / 768M/15G) ,裝好FreeBSD拿來跑 WP算是綽綽有餘
不過因為這台還當作 pydio 主機來用, 15G的空間實在不夠用
發TICKET詢問客服能不能增加硬碟空間,客服表示只能upgrade plan
但是再往上一級的10 USD方案,也只有 20G,多了 5 USD 只有多5G空間(好啦 還有流量也增加,問題是我用不到流量啊…)
算一算,實在不是很划算
就在這個摸門特,發現了 vultr 有 Storage Instance !
只要 5USD 就有一台虛擬主機 (1 cpu / 512M/125G SATA HD)
怎麼算都比upgrade 到 10USD的方案划算,而且價格一樣!
二話不說,馬上申請一台,一樣跑FreeBSD 10.2,打算拿來當作儲存空間用
至於要用 sshfs / curlftpfs / nfs /iscsi 則是還沒決定,且戰且走
系統開起來之後,先到管理介面替兩台主機都新增一個 private IP,然後兩台主機都需要重新開機
重新開機後,必須要手動到系統內去新增虛擬 IP
就分別ssh 到這兩台機器,然後用bsdconfig 去設定 Network Management
(By the way , Storage Instance 的效能真的差滿多的,兩台一起設定,就能比較出來)
設定完之後,兩台ping 一下,應該要能通
root@wpstorage:/etc # ping 10.99.0.11
PING 10.99.0.11 (10.99.0.11): 56 data bytes
64 bytes from 10.99.0.11: icmp_seq=0 ttl=64 time=0.469 ms
64 bytes from 10.99.0.11: icmp_seq=1 ttl=64 time=0.715 ms
64 bytes from 10.99.0.11: icmp_seq=2 ttl=64 time=0.511 ms
64 bytes from 10.99.0.11: icmp_seq=3 ttl=64 time=0.755 ms
^C
— 10.99.0.11 ping statistics —
4 packets transmitted, 4 packets received, 0.0% packet loss
round-trip min/avg/max/stddev = 0.469/0.612/0.755/0.124 ms
接下來就來測試怎麼把Storage Instance的空間掛來 WP 使用
先測試比較簡單的 sshfs
在WP主機上,先載入fuse.ko
kldload fuse.ko
然後 sshfs root@10.99.0.11 /mnt
輸入密碼之後,就把Storage主機的硬碟掛載 /mnt 底下了
測試一下速度
root@wp:/iscsi # dd if=/dev/zero of=testfile bs=1k count=100000
100000+0 records in
100000+0 records out
102400000 bytes transferred in 17.661407 secs (1056241 bytes/sec)
WHAT !!!!!?????
這效能是怎麼回事???糟糕到一個不行啊!!!換算起來才 1mb 不到!?
有沒有那麼糟糕啊??看來用 sshfs 行不通!
馬上 umount
既然用fuse 去掛載進來的效能這麼糟糕,那 curlftpfs 應該也不用測試了,跳過,改用 iscsi 好了
翻了一下 google ,好像 FreeBSD 10.2的 iscsi 改用 ctl 來處理
於是參考這篇文章 用FreeBSD10搭建基于ZFS的iSCSI服务 跳過 ZFS 的部分來建立iscsi target
以下這段在 storage 主機操作
首先修改 /etc/rc.conf 加入
ctld_enable=”YES”
接著編輯 ctld 的設定檔
vim /etc/ctld.conf
portal-group san {discovery-auth-group no-authentication listen 10.99.0.10 #改成自己的 IP
}
target iqn.2014-05.com.example:target0 { #target name 可改可不改,就先保留,不要動吧
auth-group no-authentication portal-group san lun 0 { path /mnt/iscsifile #指定 iscsi file 的位置 blocksize 4096 size 100G #指定大小 }
}
建立一個 target(iqn.2014-05.com.example:target0 )、一個 portal-group (san) 不需要認證 (反正這個LAN只有我自己的主機能存取)
再來修改ctld.conf 的權限
chmod 600 /etc/ctl.conf
啟動 ctld 服務service ctld start
檢查 /var/log/messages 看看有沒有啥錯誤,正常來說應該不會有啥問題。
iscsi target 到這邊設定OK,接著來去WP主機建立 iscsi initiator
先載入 iscsi_initiator.ko
kldload -v iscsi_initiator.ko
如果以後開機要自動載入的話
vim /boot/loader.conf
新增底下這一行
iscsi_initiator_load=”YES”
存檔後離開,修改檔案權限
chmod 755 /boot/loader.conf
再來,搜尋一下 iscsi target
iscontrol -v -d targetaddress=10.99.0.10 initiatorname=iqn#targetaddress 要改成 storage主機的 IP
如果一切沒問題,應該會出現這樣的訊息
adding ‘targetaddress=10.99.0.10’I-: cmd=0x3 len=265
SessionType=Discovery
InitiatorName=nxl
MaxBurstLength=131072
HeaderDigest=None,CRC32C
DataDigest=None,CRC32C
MaxRecvDataSegmentLength=65536
ErrorRecoveryLevel=0
DefaultTime2Wait=0
DefaultTime2Retain=0
DataPDUInOrder=Yes
DataSequenceInOrder=Yes
MaxOutstandingR2T=1
T-: cmd=0x23 len=212
MaxBurstLength=131072
HeaderDigest=None
DataDigest=None
MaxRecvDataSegmentLength=131072
ErrorRecoveryLevel=0
DefaultTime2Wait=0
DefaultTime2Retain=0
DataPDUInOrder=Yes
DataSequenceInOrder=Yes
MaxOutstandingR2T=1
I-: cmd=0x4 len=16
SendTargets=All
T-: cmd=0x24 len=75
TargetName=iqn.2014-05.com.example:target0
TargetAddress=10.99.0.10:3260,2
TargetName=iqn.2014-05.com.example:target0
TargetAddress=10.99.0.10:3260,2
I-: cmd=0x6 len=0
T-: cmd=0x26 len=0
雖然很多看不懂,但是看樣子似乎是有找到,把 targetName / TargetAddress 抄下來
接著設定 iscsi initiator的設定檔
vim /etc/iscsi.conf
wpiscsi {
authmethod = CHAP
chapIName = YOUR-ISCSI-USERNAME #認證名稱 沒用到
chapSecret = YOUR-ISCSI-PASSWORD #認證密碼 沒用到
initiatorname = iqn
TargetName = iqn.2014-05.com.example:target0 #改成剛剛搜尋回傳的結果
TargetAddress = 10.99.0.10:3260,2 # 改成剛剛搜尋回傳的結果
}
存檔離開、設定權限
chmod 755 /etc/iscsi.conf
測試連線
iscontrol -c /etc/iscsi.conf -n wpiscsi
正常的話,會出現類似這樣的訊息
iscontrol[8146]: running
dmesg 看一下,最底下應該會出現找到新磁碟的訊息
da0 at iscsi0 bus 0 scbus2 target 0 lun 0da0: <FREEBSD CTLDISK 0001> Fixed Direct Access SPC-4 SCSI device
da0: Serial Number MYSERIAL 0
da0: 102400MB (26214400 4096 byte sectors: 255H 63S/T 1631C)
BINGO !抓到了!
再來就是去bsdconfig 分割,然後掛載
root@wp:/iscsi # mount
/dev/vtbd0p2 on / (ufs, local, soft-updates)
devfs on /dev (devfs, local, multilabel)
/dev/da0s1a on /iscsi (ufs, local, journaled soft-updates)
root@wp:/iscsi #
馬上來測試一下速度看看!可以發現磁碟寫入速度有大幅度的增加!!
root@wp:/iscsi # dd if=/dev/zero of=testfile bs=1k count=10001000+0 records in
1000+0 records out
1024000 bytes transferred in 0.005329 secs (192151364 bytes/sec)
root@wp:/iscsi # dd if=/dev/zero of=testfile bs=1k count=10000
10000+0 records in
10000+0 records out
10240000 bytes transferred in 0.196187 secs (52195094 bytes/sec)
root@wp:/iscsi # dd if=/dev/zero of=testfile bs=1k count=100000
100000+0 records in
100000+0 records out
102400000 bytes transferred in 17.661407 secs (5797953 bytes/sec)
root@wp:/iscsi # dd if=/dev/zero of=testfile bs=1k count=100000
100000+0 records in
100000+0 records out
102400000 bytes transferred in 9.815858 secs (10432099 bytes/sec)
接著編輯 /root/iscsi.sh ,重開機就去執行這個指令,把iscsi 掛進來
#!/bin/sh
iscontrol -c /etc/iscsi.conf -n wpiscsi
sleep 60
mount /dev/da0s1d /iscsi
chmod u+rwx /root/iscsi.sh
大功告成!
日後重開機的話,手動執行 iscsi.sh ,就可以了!