Scale Out Owncloud 高可用(1)

上一篇文章讲述了如何部署Owncloud单机版《企业私有云Owncloud(2)-单机版 安装和配置》,只是做个demo,不适用于真实的企业应用,一方面是性能问题,大量用户访问会造成前端Web Server资源不够处理;另一方面,易出现单点故障,中间任何一个component故障,owncloud都无法继续提供服务。因此在真实企业应用中需要部署高可用版本,在OwncloudServerAdminManual.pdf中 Chapter10.2 Scaling Across Multiple Machines介绍了三个部件的高可用。

- Application layer  -----Haproxy Apache    
- Database Layer  -----Mysql NDB    
- Storage Layer   -----GlusterFS

如下是我测试环境中Scale-out Owncloud的部署方案,共有6台Server

Haproxy Server: 既是Apache Server的proxy,也是Mysql Server的Proxy

Owncloud1, mysql1,Apache 部署在同一台机器上,10.45.45.6

Owncloud2, mysql2,Apache 部署在同一台机器上,10.45.45.8

Owncloud3, Apache部署在10.45.45.1,作为backup server,即Owncloud1和Owncloud2同时故障时,Owncloud3会接管

NDB1, Mysql Cluster 存储引擎1, 10.45.45.9

NDB2, Mysql Cluster 存储引擎2, 10.45.45.10

本篇分为三部分,先从MySQL集群开始,然后是Owncloud集群,最后是Haproxy的配置

1, MySQL NDB Cluster

分为三个component:

1), management node,管理其它节点,开启、关闭、备份。要启动Cluster,首先是管理节点,然后是NDBD节点,最后是SQL节点。

2), Data node,存储cluster数据

3), SQL node,提供mysql服务,使用ndbcluster engine

到官网http://dev.mysql.com/downloads/cluster 下载包,mysql-cluster-gpl-7.4.6-linux-glibc2.5-x86_64.tar.gz,无需编译

1.1 管理节点

只需两个文件,直接从解压下来的文件包复制过去

cp bin/ndb_mgm* /usr/local/bin    
chmod +x /usr/local/bin/ndb_mgm*

编辑配置文件 /var/lib/mysql-cluster/config.ini

[ndbd default]

NoOfReplicas=2

DataMemory=80M

IndexMemory=18M

[tcp default]

portnumber=2202

[ndb_mgmd]

hostname=10.45.45.7

datadir=/var/lib/mysql-cluster

[ndbd]

hostname=10.45.45.9

datadir=/usr/local/mysql/data

[ndbd]

hostname=10.45.45.10

datadir=/usr/local/mysql/data

[mysqld]

hostname=10.45.45.8

[mysqld]

hostname=10.45.45.6

启动管理节点 [[email protected] ~]# ndb_mgmd -f /var/lib/mysql-cluster/config.ini --initial 【初次时需要添加initial,之后就无需再加initial参数】

1.2 Data Node

Data node只需两个文件

cp bin/ndbd /usr/local/bin/ndbd    
cp bin/ndbmtd /usr/local/bin/ndbmtd    
chmod +x bin/ndbd /usr/local/bin/ndbd    
chmod +x bin/ndbmtd /usr/local/bin/ndbmtd

Data node 和 SQL 节点的/etc/my.cnf 配置文件是完全一样的

[mysqld]

ndbcluster

datadir=/usr/local/mysql

socket=/var/lib/mysql/mysql.sock

ndb-connectstring=10.45.45.7

[mysql_cluster]

ndb-connectstring=10.45.45.7

[[email protected] ~]# ndbd --initial 【初次时需要添加initial】    
2015-05-08 10:17:48 [ndbd] INFO     -- Angel connected to ‘10.45.45.7:1186‘    
2015-05-08 10:17:48 [ndbd] INFO     -- Angel allocated nodeid: 3

  1.3 SQL节点

useradd mysql

tar mysql-cluster-gpl-7.4.6-linux-glibc2.5-x86_64.tar.gz –C /usr/local/mysql

chown -R root /usr/local/mysql    
chown -R mysql /usr/local/mysql/data    
chgrp -R mysql /usr/local/mysql

创建系统数据库, /usr/local/mysql/scripts/mysql_install_db --user=mysql --basedir=/usr/local/mysql --datadir=/usr/local/mysql

启动mysql服务,[[email protected] bin]#/usr/local/mysql/bin/mysqld_safe --user=mysql &

-------------------------------------------------------

至此,NDB Cluster 部署完成

登录到管理节点上看各个节点的状态

[[email protected] ~]# ndb_mgm    
-- NDB Cluster -- Management Client --    
ndb_mgm> show    
Connected to Management Server at: localhost:1186    
Cluster Configuration    
---------------------    
[ndbd(NDB)]     2 node(s)    
id=2    @10.45.45.9  (mysql-5.6.24 ndb-7.4.6, Nodegroup: 0)    
id=3    @10.45.45.10  (mysql-5.6.24 ndb-7.4.6, Nodegroup: 0, *)

[ndb_mgmd(MGM)] 1 node(s)    
id=1    @10.45.45.7  (mysql-5.6.24 ndb-7.4.6)

[mysqld(API)]   2 node(s)    
id=4    @10.45.45.8  (mysql-5.6.24 ndb-7.4.6)    
id=5    @10.45.45.6  (mysql-5.6.24 ndb-7.4.6)

参考文档:http://www.cnblogs.com/StanBlogs/archive/2011/06/14/2080986.html

-------------------------------------------------------------------------------------------

接下来如上一篇文章《企业私有云Owncloud(2)-单机版 安装和配置》中所述,需要创建Owncloud需要的数据库用户名密码

mysql>CREATE USER ‘cloudtest‘@‘localhost‘ IDENTIFIED BY ‘password‘;  
mysql>CREATE DATABASE IF NOT EXISTS owncloud;  
mysql>GRANT ALL PRIVILEGES ON owncloud.* TO ‘username‘@‘localhost‘ IDENTIFIED BY ‘password‘;

mysql>flush priveleges;

mysql>quit;

注意:由于此环境中Owncloud是通过Haproxy访问SQL的,所以需要给cloudtest用户赋予远程访问的权限,否则owncloud配置会报错

mysql>CREATE USER ‘cloudtest‘@‘%‘ IDENTIFIED BY ‘123456;

mysql> grant all privileges on *.* to ‘cloudtest‘@‘%‘ identified by ‘123456‘ with grant option;

-------------------------------------------------------------------------------------------

MySQL Cluster就到这里,由于在初次配置Owncloud时需要指定MySQL IP, 因此需要使用Proxy代理,让MySQL对外只提供一个IP。常见的代理有HAproxy和MySQL Proxy,这里由于我的Apache Server也使用HAProxy。为了部署方便,也使用HAproxy做MySQL Cluster代理。需要在haproxy修改配置文件haproxy.cfg

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

listen mysql    
    bind 0.0.0.0:3306    
    mode tcp    
    option tcplog    
    balance roundrobin    
    server mysql1 10.45.45.6:3306 weight 1 check    
    server mysql2 10.45.45.8:3306 weight 1 check

然后启动haproxy进程: haproxy –f haproxy.cfs

ps,我们在配置Owncloud数据库的时候使用10.45.45.7(HAproxy)IP,这样任何一台MySQL故障,都不会影响Owncloud正常运行。

由于篇幅限制,本篇就到这里,有问题的可以留言,下一篇讲Owncloud集群搭建!

时间: 2024-10-10 02:01:39

Scale Out Owncloud 高可用(1)的相关文章

Scale Out Owncloud 高可用(2)

接上篇<企业私有云Owncloud(2)-单机版 安装和配置>及<Scale Out Owncloud 高可用(1)>,本篇继续讲部署Owncloud集群及HAproxy 2, Owncloud Cluster配置 2.1,Owncloud 是主要用来存取用户文件的,那这些文件是存在哪里呢?上一篇文章讲过是这个参数 'datadirectory' => '/var/www/html/owncloud/data'决定的,这个目录是存在Linux本机的.那万一这台Linux本机故

nopCommerce 3.9 大波浪系列 之 使用Redis主从高可用缓存

一.概述 nop支持Redis作为缓存,Redis出众的性能在企业中得到了广泛的应用.Redis支持主从复制,HA,集群. 一般来说,只有一台Redis是不可行的,原因如下: 单台Redis服务器会发生单点故障,并且单服务器需要处理所有的请求会导致压力较大. 单台Redis服务器内存容量有限,不易扩展. 第一个问题可以通过Redis主从模式实现单节点的高可用(HA). 从节点(slave)是主节点(master)副本,当主节点(master)宕机后,Redis 哨兵(Sentinel)会自动将从

【亲述】Uber容错设计与多机房容灾方案 - 高可用架构系列

此文是根据赵磊在[QCON高可用架构群]中的分享内容整理而成.转载请事先联系赵磊及相关编辑. 赵磊,Uber高级工程师,08年上海交通大学毕业,曾就职于微软,后加入Facebook主要负责Messenger的后端消息服务.这个系统在当时支持Facebook全球5亿人同时在线.目前在Uber负责消息系统的构建并推进核心服务在高可用性方向的发展. 前言 赵磊在7月21号的全球架构师峰会深圳站上,做了主题演讲:Uber高可用消息系统构建,对于这个热门主题,高可用架构群展开了热议,大家对分布式系统中的各

在Kubernetes上运行高可用的WordPress和MySQL

WordPress是用于编辑和发布Web内容的主流平台.在本教程中,我将逐步介绍如何使用Kubernetes来构建高可用性(HA)WordPress部署. WordPress由两个主要组件组成:WordPress PHP服务器和用于存储用户信息.帖子和网站数据的数据库.我们需要让整个应用程序中这两个组件在高可用的同时都具备容错能力. 在硬件和地址发生变化的时候,运行高可用服务可能会很困难:非常难维护.借助Kubernetes以及其强大的网络组件,我们可以部署高可用的WordPress站点和MyS

部署kubernetes1.8.3高可用集群

Kubernetes作为容器应用的管理平台,通过对pod的运行状态进行监控,并且根据主机或容器失效的状态将新的pod调度到其他node上,实现了应用层的高可用. 针对kubernetes集群,高可用性还包含以下两个层面的考虑: etcd存储的高可用 master节点的高可用 在开始之前,先贴一下架构图: etcd作为kubernetes的中心数据库,必须保证其不是单点.不过etcd集群的部署很简单,这里就不细说了,之前写过一键部署脚本,有兴趣的同学可以往前翻. 在k8s全面容器化加上各种验证机制

三:QJM HDFS高可用

本文介绍的是HDFS的一种HA方案.虽然有checkpoint node \backup node等,但是不能实现自动的failover. http://hadoop.apache.org/docs/r2.6.3/hadoop-project-dist/hadoop-hdfs/HDFSHighAvailabilityWithQJM.html 1.在2.0.0版本以下,namenode是单个的,如果namenode宕机,就会导致整个集群不可用.QJM 是HA的一种实现方式,通过master/sla

《高可用MySQL》1 – Windows环境下压缩版MySQL安装

近日在读O'REILIY系列的<高可用MySQL>, 自然少不了主从(Master-Slave)配置和横向扩展相关的内容. Master-Slave这东西吧.在很多公司都是标配.开发中基本天天都用.遇到的问题自然也不少(如主从不同步,Master宕机).但操作权限很有限.有些东西,仅仅有自己看了.做了,才干真正知道原理是什么,也才干更好的去把握. 本文是高可用MySQL的第一篇读书笔记,主要记录Windows环境下压缩版MySQL(基于安装版的傻瓜式安装过程这里不再提及)的安装过程. 1. 从

搭建一个redis高可用系统

一.单个实例 当系统中只有一台redis运行时,一旦该redis挂了,会导致整个系统无法运行. 单个实例 二.备份 由于单台redis出现单点故障,就会导致整个系统不可用,所以想到的办法自然就是备份(一般工业界认为比较安全的备份数应该是3份).当一台redis出现问题了,另一台redis可以继续提供服务. 备份 三.自动故障转移 虽然上面redis做了备份,看上去很完美.但由于redis目前只支持主从复制备份(不支持主主复制),当主redis挂了,从redis只能提供读服务,无法提供写服务.所以

Linux高可用集群方案之heartbeat基础原理及逻辑架构

 这篇文章我们主要学习heartbeat高可用集群的基础原理及逻辑架构,以及heartbeat的简单配置  ll  本文导航    · heartbeat之基本原理   · heartbeat之集群组件   · heartbeat之心跳连接   · heartbeat之脑裂(资源争用.资源隔离) · heartbeat之配置文件   · heartbeat至高可用集群配置  ll  要求  掌握heartbeat高可用集群的相关组件及简单配置   heartbeat之基本原理  heartbea