接上篇《企業私有云Owncloud(2)-單機版 安裝和配置》及《Scale Out Owncloud 高可用(1)》,本篇繼續講部署Owncloud集羣及HAproxyphp
2, Owncloud Cluster配置html
2.1,Owncloud 是主要用來存取用戶文件的,那這些文件是存在哪裏呢?上一篇文章講過是這個參數 'datadirectory' => '/var/www/html/owncloud/data'決定的,這個目錄是存在Linux本機的。那萬一這臺Linux本機故障,那用戶文件就沒法讀取了,並且在Cluster環境中還會出現一致性問題。所以咱們須要一個NAS共享存儲,這裏用一臺windows 2003共享一個目錄,而後掛載到兩臺Owncloud上。node
mkdir /mnt/cifs
mount -t cifs //XXXX/share /mnt/cifs -o username=administrator,password=123456,uid=48,gid=48,file_mode=0770,dir_mode=0770mysql
注:必定要加0700,不然後面初次配置Owncloud時會報錯大概是說此目錄不是0700,不安全。web
修改/etc/fstab 開機自動掛載sql
//XXXX/share /mnt/cifs cifs username=administrator,password=123456,uid=48,gid=48,file_mode=0770,dir_mode=0770 0 0數據庫
2.2,Owncloud Cluster很簡單,兩臺Owncloud Server配置和單機版基本同樣,只需修改幾個地方apache
[root@localhost cifs]# cat /var/www/html/owncloud/config/config.php
<?php
$CONFIG = array (
'datadirectory' => '/mnt/cifs',
'dbtype' => 'mysql',
'version' => '8.0.2.0',
'dbname' => 'owncloud2',
'dbhost' => '10.45.45.7',
'dbtableprefix' => 'oc_',
'dbuser' => 'cloudtest2',
'dbpassword' => '123456',
'installed' => true,
'instanceid' => 'ocn0m72xv1hv',
'passwordsalt' => 'ICXFSADFsg0yFWFASDFMaFtx/',
'secret' => 'F5b3zTmrVSAFDSCzYHN8dj.p8GCoRDAFtZWASDFSA',
'trusted_domains' =>
array (
0 => '10.45.45.6',
),
'overwrite.cli.url' => 'http://10.45.45.6',windows
'overwritehost' => 'Brohaproxy', <--Client訪問的統一hostname(Haproxy的hostname),好比用戶輸入http://brohaproxy來訪問
'overwriteprotocol' => 'http', <—http or https
'overwritewebroot' => '', <--不要填
'proxy' => '10.45.45.7', <--可加可不加
);安全
apache的配置都單機版同樣,只需修改httpd.conf文件的兩個參數
而後分別打開兩臺Owncloud Server的web界面,進行初次配置owncloud數據庫的時候使用10.45.45.7(HAproxy)IP。以後Owncloud會建立本身的數據庫以及21個表,建立完成後,因爲系統數據庫及表是默認建立的,所以沒有指定這21個表是NDB engine,咱們須要手動一個個修改這些表爲NDB engine,不然你登錄進去後會報錯
查看owncloud.log 以下
{"reqId":"c26309ede525205498a3c16b7e40b617","remoteAddr":"10.0.0.2","app":"index","message":"Exception: {\"Message\":\"An exception occurred while executing 'SELECT `configvalue`, `appid` FROM `oc_appconfig` WHERE `configkey` = ?' with params [\\\"enabled\\\"]:\\n\\nSQLSTATE[42S02]: Base table or view not found: 1146 Table 'owncloud2.oc_appconfig' doesn't exist\",\"Code\":0,\"Trace\":\"#0 \\\/var\\\/www\\\/html\\\/owncloud\\\/3rdparty\\\/doctrine\\\/dbal\\\/lib\\\/Doctrine\\\/DBAL\\\/DBALException.php(116): Doctrine\\\\DBAL\\\\Driver\\\\AbstractMySQLDriver->convertException('An exception oc...',
這是由於這個表只存在於一臺mysql Server上,沒有在兩臺mysql上同步,所以當owncloud讀取到另外一臺mysql時,會找不到這張表。咱們只要手動修改alter table oc_appconfig engine=ndb;總共修改21個表,這樣表就會徹底同步。但在修改oc_share_external這個表時報錯,
懷疑是mountpoint的類型佔字符超出了,手動修改成varchar(3700),
mysql> alter table oc_share_external modify mountpoint varchar(3700);
Query OK, 0 rows affected (0.55 sec)
Records: 0 Duplicates: 0 Warnings: 0
搞定,至於後面會不會由於修改這個參數遇到問題,這我就不知道了。
3, HAproxy配置
global
daemon
maxconn 256
log 127.0.0.1 local0
defaults
mode http
stats uri /haproxy-stats
timeout connect 5000ms
timeout client 50000ms
timeout server 50000ms
frontend http-in
bind *:80
mode http
log global
option httplog
option forwardfor
option httpclose
default_backend brody
backend brody
mode http
balance roundrobin #也可使用其餘策略
cookie LBN insert indirect nocache #使用Source策略無需加,如使用rr就須要加,不然HAproxy會兩次轉發才能正常訪問
server serverA 10.45.45.6:80 cookie node1 weight 3 maxconn 32 check
server serverB 10.45.45.8:80 cookie node2 weight 3 maxconn 32 check
server serverC 10.45.45.1:80 cookie node3 weight 3 maxconn 32 check backup #必定要加check,不然HAproxy不知道Server狀態,沒法failover
能夠將MySQL HAproxy的配置文件一塊兒寫進去,一塊兒執行,成功後,經過http://brohaproxy/haproxy-stats 能夠看到各個Server的狀態
至此, Owncloud Scale-Out就搭建完成了,中間遇到不少問題,仍是萬能的Google幫了很大的忙,感謝世界感謝黨!!
4, 高可用測試
模擬Owncloud1的apache及mysql故障,
以下還能正常訪問Owncloud服務
測試上傳文件