Scale Out Owncloud 高可用(2)

本文涉及的产品
RDS AI 助手,专业版
RDS MySQL DuckDB 分析主实例,集群系列 4核8GB
RDS MySQL DuckDB 分析主实例,基础系列 4核8GB
简介:

 

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' => 'http://10.45.45.6',


  '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,否则你登陆进去后会报错

clip_image001

查看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这个表时报错,

clip_image001[4]

怀疑是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的状态

clip_image001[6]

 

至此, Owncloud Scale-Out就搭建完成了,中间遇到很多问题,还是万能的Google帮了很大的忙,感谢世界感谢党!!

 

4, 高可用测试

模拟Owncloud1的apache及mysql故障,

clip_image001

如下还能正常访问Owncloud服务

clip_image001[4]

测试上传文件

clip_image001[6]





本文转自 taojin1240 51CTO博客,原文链接:http://blog.51cto.com/taotao1240/1653947,如需转载请自行联系原作者
相关实践学习
如何快速连接云数据库RDS MySQL
本场景介绍如何通过阿里云数据管理服务DMS快速连接云数据库RDS MySQL,然后进行数据表的CRUD操作。
MySQL数据库入门学习
本课程通过最流行的开源数据库MySQL带你了解数据库的世界。 &nbsp; 相关的阿里云产品:云数据库RDS MySQL 版 阿里云关系型数据库RDS(Relational Database Service)是一种稳定可靠、可弹性伸缩的在线数据库服务,提供容灾、备份、恢复、迁移等方面的全套解决方案,彻底解决数据库运维的烦恼。 了解产品详情:&nbsp;https://www.aliyun.com/product/rds/mysql&nbsp;
目录
相关文章
|
敏捷开发 监控 测试技术
深入探索自动化测试框架的选择与构建
【5月更文挑战第30天】在追求高效、可靠的软件发布周期中,自动化测试成为确保产品质量的关键。本文将探讨如何选择合适的自动化测试框架并指导构建一个符合项目需求的框架体系。我们将通过分析不同测试场景和需求,评估Selenium、Appium和JUnit等流行工具的优缺点,并提供策略性建议,以助读者构建出既灵活又稳定的自动化测试环境。
179 3
|
机器学习/深度学习 编解码 人工智能
稠密检索新突破:华为提出掩码自编码预训练模型,大幅刷新多项基准
稠密检索新突破:华为提出掩码自编码预训练模型,大幅刷新多项基准
494 0
|
存储 消息中间件 云计算
|
28天前
|
人工智能 自然语言处理 Shell
🦞 如何在 OpenClaw (Clawdbot/Moltbot) 配置阿里云百炼 API
本教程指导用户在开源AI助手Clawdbot中集成阿里云百炼API,涵盖安装Clawdbot、获取百炼API Key、配置环境变量与模型参数、验证调用等完整流程,支持Qwen3-max thinking (Qwen3-Max-2026-01-23)/Qwen - Plus等主流模型,助力本地化智能自动化。
37799 151
🦞 如何在 OpenClaw (Clawdbot/Moltbot) 配置阿里云百炼 API
|
10天前
|
人工智能 自然语言处理 监控
OpenClaw skills重构量化交易逻辑:部署+AI全自动炒股指南(2026终极版)
2026年,AI Agent领域最震撼的突破来自OpenClaw(原Clawdbot)——这个能自主规划、执行任务的智能体,用50美元启动资金创造了48小时滚雪球至2980美元的奇迹,收益率高达5860%。其核心逻辑堪称教科书级:每10分钟扫描Polymarket近千个预测市场,借助Claude API深度推理,交叉验证NOAA天气数据、体育伤病报告、加密货币链上情绪等多维度信息,捕捉8%以上的定价偏差,再通过凯利准则将单仓位严格控制在总资金6%以内,实现低风险高频套利。
4769 39
|
6天前
|
存储 人工智能 负载均衡
阿里云OpenClaw多Agent实战宝典:从极速部署到AI团队搭建,一个人=一支高效军团
在AI自动化时代,单一Agent的“全能模式”早已无法满足复杂任务需求——记忆臃肿导致响应迟缓、上下文污染引发逻辑冲突、无关信息加载造成Token浪费,这些痛点让OpenClaw的潜力大打折扣。而多Agent架构的出现,彻底改变了这一现状:通过“单Gateway+多分身”模式,让一个Bot在不同场景下切换独立“大脑”,如同组建一支分工明确的AI团队,实现创意、写作、编码、数据分析等任务的高效协同。
1407 22
|
23天前
|
人工智能 安全 机器人
OpenClaw(原 Clawdbot)钉钉对接保姆级教程 手把手教你打造自己的 AI 助手
OpenClaw(原Clawdbot)是一款开源本地AI助手,支持钉钉、飞书等多平台接入。本教程手把手指导Linux下部署与钉钉机器人对接,涵盖环境配置、模型选择(如Qwen)、权限设置及调试,助你快速打造私有、安全、高权限的专属AI助理。(239字)
8520 24
OpenClaw(原 Clawdbot)钉钉对接保姆级教程 手把手教你打造自己的 AI 助手