IP-SAN:實現廉價安全的儲存
在這篇部落格中,小編要來講講SAN的原理以及實現啦,讀者應該還記得小編在前面在講HA和LB群集的時候解決後端的儲存用的技術是什麼麼,NAS(網路附加儲存),當然這種技術的效率是比較低的啦,如果企業對於資料儲存的速率要求比較高的話,這種技術果斷不能滿足需求啦,因此就引出了SAN(儲存區域網路)啦,簡單的說它提供一種塊級別的檔案共享,前方伺服器直接可以將後方儲存介質當做本地磁碟來使用啦,人們採用包括光纖通道技術(這個速度可是相當的快啦,一般IDC都會採用這種技術)、磁碟陣列、磁帶櫃、光碟櫃(en)的各種技術進行實現。
實現SAN的網路型別
讀者想想在大多數的物理儲存中都是使用SCSI介面進行伺服器和磁碟驅動器裝置之間的通訊。因為它們的匯流排拓撲結構(系統匯流排)並不適用於網路環境,所以它們並沒有使用底層物理連線介質(比如連線電纜)。相對地,它們採用其它底層通訊協議作為映象層來實現網路連線:
1.光纖通道協議 (FCP, Fibre Channel Protocol), 最常見的通過光纖通道來對映SCSI的一種連線方式(FC-SAN);
這一種的連線方式的效率是最高的,但是同時代價是最高的,主要貴在硬體裝置上,如光纖交換機,一般IDC都會使用這種技術
2.iSCSI, 基於TCP/IP的SCSI對映(IP-SAN);
這一種的效率要低很多,但是代價也要低太多啦,今天小編要實現的就是這一種啦
3.HyperSCSI, 基於乙太網的SCSI對映;
4.ATA over Ethernet, 基於乙太網的ATA對映;
5.使用光纖通道連線的FICON,常見與大型機環境;
6.Fibre Channel over Ethernet (FCoE),基於乙太網的FC協議;
7.iSCSI Extensions for RDMA (iSER), 基於InfiniBand (IB)的iSCSI連線;
8.iFCP[1] 或 SANoIP[2] 基於IP網路的光纖通道協議(FCP).
IP-SAN的實現
1. 網路拓撲
2. 具體實現
這裡要使用到iSCSI技術,小編簡單介紹一下iSCSI,iSCSI利用了TCP/IP的port 860 和 3260 作為溝通的渠道。透過兩部計算機之間利用iSCSI的協議來交換SCSI命令,讓計算機可以透過高速的區域網集線來把SAN模擬成為本地的儲存裝置。
iSCSI使用 TCP/IP 協議(一般使用TCP埠860和3260)。 本質上,iSCSI 讓兩個主機通過 IP 網路相互協商然後交換 SCSI 命令。這樣一來,iSCSI 就是用廣域網模擬了一個常用的高效能本地儲存匯流排,從而建立了一個儲存區域網(SAN)。不像某些 SAN 協議,iSCSI 不需要專用的電纜;它可以在已有的交換和 IP 基礎架構上執行。
在使用上,前端的伺服器充當著initiator(發起者),後端的儲存充當著target,由前端伺服器找到後端的儲存,然後使用
軟體需求:
小編這裡的OS是linux 5.4 光碟自帶有相關的軟體包
1.後端儲存:
scsi-target-utils-0.0-5.20080917snap.el5.i386.rpm //將後端儲存伺服器模擬成為target
perl-Config-General-2.40-1.el5.noarch.rpm //target的依賴包
2.前端伺服器:
iscsi-initiator-utils-6.2.0.871-0.10.el5.i386.rpm //將前端服務改變成為initiator
後端儲存配置:
Step 1. 安裝軟體包並啟動服務
# rpm -ivh perl-Config-General-2.40-1.el5.noarch.rpm
# rpm -ivh scsi-target-utils-0.0-5.20080917snap.el5.i386.rpm
安裝完成之後查詢一下軟體包都產生了哪些檔案
# rpm -ql scsi-target-utils
/etc/rc.d/init.d/tgtd //服務指令碼
/etc/sysconfig/tgtd
/etc/tgt/targets.conf //配置檔案
/usr/sbin/tgt-admin
/usr/sbin/tgt-setup-lun
/usr/sbin/tgtadm //這個比較的常用啦,就是將儲存作為一種target資源,以便前端伺服器能找到
/usr/sbin/tgtd
/usr/share/doc/scsi-target-utils-0.0
/usr/share/doc/scsi-target-utils-0.0/README
/usr/share/doc/scsi-target-utils-0.0/README.iscsi
/usr/share/doc/scsi-target-utils-0.0/README.iser
/usr/share/doc/scsi-target-utils-0.0/README.lu_configuration
/usr/share/doc/scsi-target-utils-0.0/README.mmc
/usr/share/man/man8/tgt-admin.8.gz
/usr/share/man/man8/tgt-setup-lun.8.gz
/usr/share/man/man8/tgtadm.8.gz
啟動服務
# service tgtd start
Step 2. 建立target資源
tgtadm 語法
–lld [driver] –op new –mode target –tid=[id] –targetname [name] //新增資源
–lld [driver] –op delete –mode target –tid=[id] //刪除資源
–lld [driver] –op show –mode target //檢視資源
–lld [driver] –op new –mode=logicalunit –tid=[id] –lun=[lun] –backing-store [path] //繫結磁碟
–lld [driver] –op bind –mode=target –tid=[id] –initiator-address=[address] //指定哪些IP端的伺服器能夠訪問到target資源
# tgtadm –lld iscsi –op new –mode target –tid=1 –targetname iqn.2013-06.com.back:disk
小編這裡有/dev/sdb1可以作為target的磁碟
# tgtadm –lld iscsi –op new –mode=logicalunit –tid=1 –lun=1 –backing-store /dev/sdb1
# tgtadm –lld iscsi –op show –mode target //檢視資源情況
Target 1: iqn.2013-06.com.back:disk
System information:
Driver: iscsi
State: ready //狀態已經準備好了
I_T nexus information:
LUN information:
LUN: 0
Type: controller
SCSI ID: deadbeaf1:0
SCSI SN: beaf10
Size: 0 MB
Online: Yes
Removable media: No
Backing store: No backing store
LUN: 1 //這裡就是小編新增進的磁碟資訊啦
Type: disk
SCSI ID: deadbeaf1:1
SCSI SN: beaf11
Size: 10734 MB
Online: Yes
Removable media: No
Backing store: /dev/sdb1
Account information:
ACL information:
Step 3. 建立是算完成啦,還要考慮安全性啦,這裡基於IP地址進行限制
# tgtadm –lld iscsi –op bind –mode=target –tid=1 –initiator-address=192.168.30.0/24 //只允許30網段的訪問
再檢視一下資訊後方會多出下面的資訊啦
當然上述的配置可以直接寫在配置文件中,以便以後使用
在/etc/tgt/targets.conf中新增下面內容就是了
<target iqn.2013-06.com.back:disk>
List of files to export as LUNs
backing-store /dev/sdb1
# Authentication :
# if no “incominguser” is specified, it is not used
#incominguser backup secretpass12
# Access control :
# defaults to ALL if no “initiator-address” is specified
initiator-address 192.168.30.0/24
</target>
Step 4. 基於CHAP的登陸認證(雙向認證)
依然修改/etc/tgt/targets.conf,找到# Authentication :新增下面的兩行
incominguser web1totarget 123456 //web1登陸的使用者名稱和密碼
incominguser web2totarget 123456 //web2登陸的使用者名稱和密碼
outgoinguser targettoweb 654321 //target向web伺服器進行認證
再次查詢一下target資源狀態
前端伺服器配置
拿web1為例
Step 1. 安裝軟體包並啟動服務
# yum install iscsi-initiator-utils
啟動服務
# service iscsi start
Step 2. 初始化發起端名稱以及CHAP認證配置
# vim /etc/iscsi/initiatorname.iscsi
InitiatorName=iqn.2013-06.com.web1
chap認證配置(雙向)
# vim /etc/iscsi/iscsid.conf
node.session.auth.authmethod = CHAP
node.session.auth.username = web1totarget
node.session.auth.password = 123456
node.session.auth.username_in = targettoweb
node.session.auth.password_in = 654321
Step 3. 發起連線
# iscsiadm –mode discovery –type sendtargets –portal 192.168.30.3
Step 4. 登陸
# iscsiadm –mode node –targetname iqn.2013-06.com.back:disk –portal 192.168.30.3 –login
Logging in to [iface: default, target: iqn.2013-06.com.back:disk, portal: 192.168.30.3,3260]
Login to [iface: default, target: iqn.2013-06.com.back:disk, portal: 192.168.30.3,3260]: successful
此時如果在後端儲存檢視資訊的話會看到
# tgtadm –lld iscsi –op show –mode=target
Target 1: iqn.2013-06.com.back:disk
System information:
Driver: iscsi
State: ready
I_T nexus information:
I_T nexus: 1
Initiator: iqn.2013-06.com.web2
Connection: 0
IP Address: 192.168.30.2
I_T nexus: 2
Initiator: iqn.2013-06.com.web1
Connection: 0
IP Address: 192.168.30.1
Step 5.前端伺服器檢視磁碟列表
讀者會發現多了一塊磁碟啦
6.進行相關的格式化分割槽掛載(用的ext3檔案系統)
切換到掛載目錄下進行檔案操作
# mount /dev/sdb1 /mnt/back/
# cd /mnt/back/
# touch f1
# ll
總計 16
-rw-r–r– 1 root root 0 06-07 21:39 f1
drwx—— 2 root root 16384 06-07 21:37 lost+found
但是這種方式是有問題的,ext3檔案系統沒有鎖機制和推送機制,意思就是如果兩個web站點同時建立的新檔案沒法相互看見,為了解決這個問題,那就要使用新的檔案系統啦,小編這裡就用oracle的檔案系統OCFS2來實現啦。
7.OCFS2檔案系統的實現
軟體需求:
ocfs2-2.6.18-164.el5-1.4.7-1.el5.i686.rpm
ocfs2-tools-1.4.4-1.el5.i386.rpm
ocfs2console-1.4.4-1.el5.i386.rpm
這裡小編還是在web1的伺服器上做配置為例
Step 1:安裝軟體包:
# rpm -ivh ocfs2* //web2的伺服器上也需要安裝
Step 2:修改hosts檔案和hostname
# vim /etc/hosts
192.168.30.1 reserver1.com
192.168.30.2 reserver2.com
# vim /etc/sysconfig/network
HOSTNAME=reserver1.com //web2的主機名就是reserver2.com啦
兩個web伺服器的hosts檔案是一致的,這裡可以用scp將web1的hosts檔案傳遞給web2
# scp /etc/hosts 192.168.30.2:/etc/
Step 3:配置群集節點
# o2cb_ctl -C -n ocfs2 -t cluster –i //建立一個名為ocfs2的群集
# o2cb_ctl -C -n reserver1.com -t node -a number=0 -a ip_address=192.168.30.1 -a ip_port=7777 -a cluster=ocfs2 //在群集中加入節點(web1)
# o2cb_ctl -C -n reserver2.com -t node -a number=1 -a ip_address=192.168.30.2 -a ip_port=7777 -a cluster=ocfs2 //在群集中加入節點(web2)
這樣一來就會在/etc/ocfs2/的目錄下產生群集配置檔案cluster.conf ,同樣小編用scp傳輸過去
# scp /etc/ocfs2/cluster.conf 192.168.30.2:/etc/ocfs2/ //注意web2的/etc/ocfs2目錄要事先建立
Step 4:啟動群集服務
這裡記著兩邊伺服器都要啟動
# service o2cb enable //確認配置是否有效
Writing O2CB configuration: OK
Loading filesystem “configfs”: OK
Mounting configfs filesystem at /sys/kernel/config: OK
Loading filesystem “ocfs2_dlmfs”: OK
Mounting ocfs2_dlmfs filesystem at /dlm: OK
Starting O2CB cluster ocfs2: OK
# service o2cb start //啟動服務
Cluster ocfs2 already online
# service o2cb status //檢視服務狀態(web1的)
Driver for “configfs”: Loaded
Filesystem “configfs”: Mounted
Driver for “ocfs2_dlmfs”: Loaded
Filesystem “ocfs2_dlmfs”: Mounted
Checking O2CB cluster ocfs2: Online
Heartbeat dead threshold = 31
Network idle timeout: 30000
Network keepalive delay: 2000
Network reconnect delay: 2000
Checking O2CB heartbeat: Not active
Step 5:格式化檔案系統並掛載
先格式化檔案系統,這裡的-N引數指明的是最大的連結節點數
# mkfs -t ocfs2 -N 2 /dev/sdb1 //這裡只需要在一個伺服器上做就是了
掛載
# mount /dev/sdb1 /mnt/back/ //掛載的工作兩邊伺服器都要做
檢視一下兩邊的群集狀態
# service o2cb status //web1的狀態
Driver for “configfs”: Loaded
Filesystem “configfs”: Mounted
Driver for “ocfs2_dlmfs”: Loaded
Filesystem “ocfs2_dlmfs”: Mounted
Checking O2CB cluster ocfs2: Online
Heartbeat dead threshold = 31
Network idle timeout: 30000
Network keepalive delay: 2000
Network reconnect delay: 2000
Checking O2CB heartbeat: Active //啟用狀態
# service o2cb status //web2的狀態
Driver for “configfs”: Loaded
Filesystem “configfs”: Mounted
Driver for “ocfs2_dlmfs”: Loaded
Filesystem “ocfs2_dlmfs”: Mounted
Checking O2CB cluster ocfs2: Online
Heartbeat dead threshold = 31
Network idle timeout: 30000
Network keepalive delay: 2000
Network reconnect delay: 2000
Checking O2CB heartbeat: Active //啟用狀態
Step 6:檢查是否可推送和鎖機制
在web1伺服器上建立一個檔案看看能不能在web2上看到
# cd /mnt/back/
# touch web1
在web2上查詢
先在web1上編輯檔案web1,同時在web2上也編輯
[root@reserver1 back]# vim web1
[root@reserver2 back]# vim web1
好啦,到此為止小編我要將的東東就完成啦,讀者你要是感覺有用的話就自己動手做做吧。。。。。。。
本文轉自 chenming421 51CTO部落格,原文連結:http://blog.51cto.com/wnqcmq/1219054
相關文章
- 實戰:用“廉價”的NFS作為K8S後端儲存NFSK8S後端
- 區塊鏈資訊儲存是如何實現安全儲存區塊鏈
- CentOS 6.4下Cman+RGManager+iSCSI+GFS2+cLVM實現廉價可擴充套件的叢集共享儲存CentOSLVM套件
- 使用Linux實現廉價的備份伺服器Linux伺服器
- LG推出廉價版“谷歌眼鏡” 功能強大 虛擬現實谷歌
- 儲存系統實現-構建自己的儲存系統(一)
- innodb儲存引擎鎖的實現(一)儲存引擎
- 廉價版iphone和iphone區別介紹 iPhone廉價版少了些什麼?iPhone
- 優秀的程式反而是廉價
- 徵文是群眾智慧的廉價方法
- 廉價冗餘磁碟陣列陣列
- 雲端儲存的“安全隱擾”
- 如何安全的儲存密碼密碼
- 使用Java實現在SQLserver中實現圖片的儲存JavaSQLServer
- 雲端儲存安全標準和最佳實踐
- vertica 如何實現儲存過程?儲存過程
- InnoDB儲存引擎MVCC實現原理儲存引擎MVC
- 三層儲存技術保障雲服務的儲存安全
- 雲端儲存系統的安全威脅的五點表現
- 實現鍵值對儲存(二):以現有鍵值對儲存為模型模型
- 哪裡的物件儲存好?國內價效比高的雲端儲存推薦!物件
- 2.9.3 安全的外部密碼儲存密碼
- Go實現簡單的K-V儲存Go
- 圖的儲存與遍歷C++實現C++
- MongoDB分片儲存的叢集架構實現MongoDB架構
- perl 實現shell 命令的檔案儲存操作
- Infinispan 8 中新的 Redis 快取儲存實現Redis快取
- 佇列的鏈式儲存結構的實現佇列
- NOSQL儲存的基於事件的事務實現SQL事件
- 安卓實現賬號密碼儲存安卓密碼
- QQ聊天記錄儲存如何實現?
- PHP實現多儲存過程呼叫PHP儲存過程
- 用鍵值儲存實現MVCC模式MVC模式
- 實現鍵值對儲存(五):雜湊表實現
- 蘋果公司會生產廉價的iPhone嗎?蘋果iPhone
- 實現鍵值對儲存(一):什麼是鍵值對儲存,為什麼要實現它
- HTML5中的網路儲存實現方式HTML
- AES實現財務資料的加密解密儲存加密解密