接上篇《》及《本篇继续讲部署Owncloud集群及HAproxy
2, Owncloud Cluster配置
2.1,Owncloud 是主要用来存取用户文件的,那这些文件是存在哪里呢?上一篇文章讲过是这个参数 'datadirectory' => '/var/www/html/owncloud/data'决定的,这个目录是存在Linux本机的。那万一这台Linux本机故障,那用户文件就无法读取了,而且在Cluster环境中还会出现一致性问题。因此我们需要一个NAS共享存储,这里用一台windows 2003共享一个目录,然后挂载到两台Owncloud上。
mkdir /mnt/cifs
mount -t cifs //XXXX/share /mnt/cifs -o username=administrator,password=123456,uid=48,gid=48,file_mode=0770,dir_mode=0770注:一定要加0700,否则后面初次配置Owncloud时会报错大概是说此目录不是0700,不安全。
修改/etc/fstab 开机自动挂载
//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配置和单机版基本一样,只需修改几个地方
[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' => ', 'overwritehost' => 'Brohaproxy', <--Client访问的统一hostname(Haproxy的hostname),比如用户输入来访问 '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 local0defaults
mode http stats uri /haproxy-stats timeout connect 5000ms timeout client 50000ms timeout server 50000msfrontend http-in
bind *:80 mode http log global option httplog option forwardfor option httpclose default_backend brodybackend 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的配置文件一起写进去,一起执行,成功后,通过 可以看到各个Server的状态
至此, Owncloud Scale-Out就搭建完成了,中间遇到很多问题,还是万能的Google帮了很大的忙,感谢世界感谢党!!
4, 高可用测试
模拟Owncloud1的apache及mysql故障,
如下还能正常访问Owncloud服务
测试上传文件