在某些狀況下爲了實現Windows多臺服務器負載均衡,須要使用共享來作圖片及附件的上傳空間。html
這個時候就須要使用到Samba、IIS虛擬目錄等相關技術node
Web服務器使用upload做爲上傳的目錄,如今須要使用2臺服務器作負載均衡,後臺使用一臺Samba服務器做爲文件共享存儲web
1.創建Samba文件服務器bash
卸載舊的samba組件,CentOS 6默認安裝的是3.6的版本服務器
for a in `rpm -qa|grep samba`; do rpm -e --nodeps $a;done
2.安裝Samba 4負載均衡
yum -y install samba4 samba4-common samba4-client
3.創建共享用戶
ide
說明:因爲Windows在IIS中站點下是不能直接經過磁盤映射的方式做爲站點路徑,必須使用原始的\\192.168.10.2\sns\upload這樣的目錄,而此時訪問共享的用戶就是應用程序池的用戶。測試
這個時候就能夠2種選擇:spa
a.samba使用匿名訪問可讀寫unix
b.修改站點應用程序池用戶爲訪問samba用戶
第一種:使用匿名方式訪問共享
爲共享建立系統用戶及組
groupadd -g 8800 smbgroup
useradd -g smbgroup -s /sbin/nologin -d /dev/null smbuser
建立共享目錄
mkdir /data/share
chown -R smbuser.smbgroup /data/share
chmod -R 755 /data/share
4.配置Samba
/etc/samba/smb.conf
[global] workgroup = WORKGROUP server string = FileServer #hosts allow = 127. 192.168.10 log file = /var/log/samba/log.%m max log size = 50 security = user passdb backend = tdbsam map to guest = bad user guest account = smbuser create mask = 0775 force create mode = 0775 directory mask = 0775 force directory mode = 0775 unix charset = cp936 dos charset = cp936 use sendfile=yes write raw = yes read raw = yes max xmit=65535 aio read size = 16384 aio write size = 16384 [upload] comment = sns path = /var/www/html/upload browseable = no guest ok = yes writable = yes #valid users = @smbgroup
說明:在samba 4版本里面security這個值已經廢棄了share,server。所以配置匿名訪問就須要
security = user map to guest = bad user
5.測試samba
[root@gz17img40 samba]# testparm Load smb config files from /etc/samba/smb.conf Processing section "[upload]" Loaded services file OK. Server role: ROLE_STANDALONE Press enter to see a dump of your service definitions # Global parameters [global] dos charset = cp936 unix charset = cp936 server string = FileServer security = USER map to guest = Bad User guest account = smbuser log file = /var/log/samba/log.%m max log size = 50 max xmit = 65535 idmap config * : backend = tdb create mask = 0775 force create mode = 0775 directory mask = 0775 force directory mode = 0775 aio read size = 16384 aio write size = 16384 use sendfile = Yes [upload] comment = sns path = /var/www/html/upload read only = No guest ok = Yes browseable = No
6.設置啓動服務及開機啓動
/etc/init.d/nmb start /etc/init.d/smb start chkconfig nmb on chkconfig smb on
第二部分:Windows IIS使用共享做爲路徑
舉例:
我須要在站點的SignPDF路徑下創建PDF虛擬路徑
1.點擊「站點」--》對應的SignPDF目錄,右擊「SignPDF」,選擇「創建虛擬目錄」
2.輸入別名,咱們這裏輸入「PDF」,而後選擇對應的物理路徑。
注意:
|
第二種:採用用戶名和密碼的方式訪問共享
爲共享建立系統用戶及組
groupadd -g 8800 smbgroup
useradd -g smbgroup -s /sbin/nologin -d /dev/null smbuser
建立共享目錄
mkdir /data/share
chown -R smbuser.smbgroup /data/share
chmod -R 755 smbuser.smbgroup /data/share
建立smb訪問帳號及密碼,smb帳號要在系統中有同名帳號,不然建立失敗
smbpasswd -a smbuser
輸入密碼123456
4.配置Samba
/etc/samba/smb.conf
[global] workgroup = WORKGROUP server string = FileServer #hosts allow = 127. 192.168.10 log file = /var/log/samba/log.%m max log size = 50 security = user passdb backend = tdbsam #map to guest = bad user #guest account = smbuser create mask = 0775 force create mode = 0775 directory mask = 0775 force directory mode = 0775 unix charset = cp936 dos charset = cp936 use sendfile=yes write raw = yes read raw = yes max xmit=65535 aio read size = 16384 aio write size = 16384 [upload] comment = sns path = /var/www/html/upload browseable = no #guest ok = yes writable = yes valid users = @smbgroup
這裏對比上面匿名訪問的註釋了
#map to guest = bad user #guest account = smbuser 在共享的時候修改了 #guest ok = yes valid users = @smbgroup
5.測試samba
[root@gz17img40 samba]# testparm Load smb config files from /etc/samba/smb.conf Processing section "[upload]" Loaded services file OK. Server role: ROLE_STANDALONE Press enter to see a dump of your service definitions # Global parameters [global] dos charset = cp936 unix charset = cp936 server string = FileServer security = USER log file = /var/log/samba/log.%m max log size = 50 max xmit = 65535 idmap config * : backend = tdb create mask = 0775 force create mode = 0775 directory mask = 0775 force directory mode = 0775 aio read size = 16384 aio write size = 16384 use sendfile = Yes [upload] comment = sns path = /var/www/html/upload read only = No browseable = No valid users = @smbgroup
這個時候就能夠經過訪問\\192.168.10.20\upload,輸入用戶名密碼smbuser,123456
6.設置啓動服務及開機啓動
/etc/init.d/nmb start /etc/init.d/smb start chkconfig nmb on chkconfig smb on
第二部分:Windows IIS使用共享做爲路徑
舉例:
我須要在站點的SignPDF路徑下創建PDF虛擬路徑
1.在系統中建立smbuser,密碼必定要與上面建立的smbuser的密碼一致也爲123456
2.點擊「站點」--》對應的SignPDF目錄,右擊「SignPDF」,選擇「創建虛擬目錄」
3.輸入別名,咱們這裏輸入「PDF」,而後選擇對應的物理路徑,並點擊「鏈接爲」,輸入帳號smbuser密碼123456
4.如今就能夠正常訪問共享裏的文件及內容了,可是你會發現沒法上傳。這是由於須要在web.config中定義用戶名密碼,在<system.web>下增長
<identity impersonate="true" userName="smbuser" password="123456" />
如今就能夠正常上傳圖片了
問題:
1.在配置Samba後發如今A節點創建的目錄,B節點沒法寫入,這是由於2個用戶是一致的可是用戶的組不一致。好比A服務器主機名爲ServerA,B服務器的主機名爲ServerB,所以在Samba中的A節點對應的權限就是ServerA\smbuser,B服務器對應的權限就是ServerB\smbuser,這就是形成2臺服務器權限不一致的問題。
在smb.conf中添加
create mask = 0775 force create mode = 0775 directory mask = 0775 force directory mode = 0775
再重啓服務便可
2.根據上面處理後仍然沒法寫入,就多是對.NET臨時目錄沒有設置寫入權限
將上面的smbuser給下列目錄
C:\Windows\Microsoft.NET\Framework64\v4.0.30319\Temporary ASP.NET Files C:\Windows\Microsoft.NET\Framework64\v2.0.50727\Temporary ASP.NET Files
寫入權限便可