上一篇文章讲述了如何部署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
启动管理节点 [root@Brohaproxy ~]# 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
[root@localhost ~]# 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/
mv mysql-cluster-gpl-7.4.6-linux-glibc2.5-x86_64/ 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服务,[root@localhost bin]#/usr/local/mysql/bin/mysqld_safe --user=mysql &
-------------------------------------------------------
至此,NDB Cluster 部署完成
登录到管理节点上看各个节点的状态
[root@Brohaproxy ~]# 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)
添加自启动,编辑/etc/rc.local加上
/usr/local/bin/ndb_mgmd -f /var/lib/mysql-cluster/config.ini
注意要加上绝对路径
参考文档: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> 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集群搭建!