Mudanças entre as edições de "Owncloud distribuído"

De MediaWiki do Campus São José
Ir para navegação Ir para pesquisar
Linha 19: Linha 19:
 
==Implementação:==
 
==Implementação:==
  
=Principais ferramentas adicionais utilizadas=
+
===Principais ferramentas adicionais utilizadas===
  
 
Maria-DB: MariaDB é um banco de dados que surgiu como fork do MySQL, criado pelo próprio fundador do projeto após sua aquisição pela Oracle. O owncloud requer um banco de dados onde são guardados os usuários criados, as configurações de usuário e os índices para os arquivos salvos.
 
Maria-DB: MariaDB é um banco de dados que surgiu como fork do MySQL, criado pelo próprio fundador do projeto após sua aquisição pela Oracle. O owncloud requer um banco de dados onde são guardados os usuários criados, as configurações de usuário e os índices para os arquivos salvos.
  
Galera: O galera implementa um cluster de banco de dados síncrono multi-mestre disponibilizando uma alta disponibilidade de banco de dados. Ou seja, quando o Galera Cluster está em uso, podemos direcionar a leitura e gravação em qualquer nó, e qualquer nó individual pode ficar indisponível sem interrupção nas operações. Como o projeto  
+
Galera: O galera implementa um cluster de banco de dados síncrono multi-mestre disponibilizando uma alta disponibilidade de banco de dados. Ou seja, quando o Galera Cluster está em uso, podemos direcionar a leitura e gravação em qualquer nó, e qualquer nó individual pode ficar indisponível sem interrupção nas operações. Como o projeto é implementar o Owncloud de forma distribuida se faz necessário a utilização de um cluster de banco de dados.
 +
 
 +
Csync2: é um cluster de arquivos, um cliente bidirecional para sincronizar arquivos. A principal diferença para o Rsync por exemplo é a bidirecionalidade, ou seja, no rsync se alguém apaga um arquivo em um dos nós ele é resincronizado, e no csync2 reconhece ele apaga nos outros nós.
  
Csync2:
 
  
 
Os passos abaixo devem ser feitos em todas os nós da implementação
 
Os passos abaixo devem ser feitos em todas os nós da implementação

Edição das 10h07min de 20 de julho de 2016

O projeto

O Owncloud é um serviço web para armazenamento e compartilhamento de arquivos similar ao Dropbox ou Google Drive. O principal diferencial do Owncloud é que ele pode ser implementado de forma privada. Por ser um software de código aberto qualquer pessoa ou empresa pode baixar e instalar na sua estrutura e ficar responsável pelos dados e pelo funcionamento do serviço. É baseado no conceito de "computação em nuvem" ("cloud computing"). A implementação típica do owncloud provê um servidor web rodando os serviços e armazenando os arquivos. A ideia do trabalho é utilizar dessa ferramenta para implementar um serviço de armazenamento de arquivos descentralizado e utilizar a internet para sincronizar os arquivos em locais diferentes.

Essa implementação traria alguns benefícios:

1. Redundância geográfica dos arquivos
2. Melhor velocidade de upload e download em diferentes locais(quando conectado a rede local)
3. Alta disponibilidade

Outro diferencial do projeto é a utilização de raspberry pi(computadores baratos do tamanho de um cartão de crédito e que consomem pouca energia) como servidores rodando as aplicações necessárias a implementação. O armazenamento fica a cargo de HD's externos conectados aos raspberry pi. Esta implementação tornasse viável e interessante para que pessoas comuns configurem e instalem nas casas de parentes próximos, podendo compartilhar os arquivos, como por exemplo fotos, músicas e filmes, de maneira fácil.


Desenvolvimento:

Implementação:

Principais ferramentas adicionais utilizadas

Maria-DB: MariaDB é um banco de dados que surgiu como fork do MySQL, criado pelo próprio fundador do projeto após sua aquisição pela Oracle. O owncloud requer um banco de dados onde são guardados os usuários criados, as configurações de usuário e os índices para os arquivos salvos.

Galera: O galera implementa um cluster de banco de dados síncrono multi-mestre disponibilizando uma alta disponibilidade de banco de dados. Ou seja, quando o Galera Cluster está em uso, podemos direcionar a leitura e gravação em qualquer nó, e qualquer nó individual pode ficar indisponível sem interrupção nas operações. Como o projeto é implementar o Owncloud de forma distribuida se faz necessário a utilização de um cluster de banco de dados.

Csync2: é um cluster de arquivos, um cliente bidirecional para sincronizar arquivos. A principal diferença para o Rsync por exemplo é a bidirecionalidade, ou seja, no rsync se alguém apaga um arquivo em um dos nós ele é resincronizado, e no csync2 reconhece ele apaga nos outros nós.


Os passos abaixo devem ser feitos em todas os nós da implementação

Adicionando o repositório do Owncloud: wget -nv https://download.owncloud.org/download/repositories/stable/Debian_8.0/Release.key -O Release.key

apt-key add - < Release.key

sh -c "echo 'deb http://download.owncloud.org/download/repositories/stable/Debian_8.0/ /' >> /etc/apt/sources.list.d/owncloud.list" </syntaxhighlight>

Adicionando o repositório do mariadb e galera: apt-get install software-properties-common

apt-key adv --recv-keys --keyserver keyserver.ubuntu.com 0xcbcb082a1bb943db

add-apt-repository 'deb [arch=amd64,i386] http://mirror.edatel.net.co/mariadb/repo/10.1/debian jessie main' </syntaxhighlight>

Instalando os pacotes necessários aptitude update

aptitude install -y rsync galera-3 mariadb-server owncloud csync2 </syntaxhighlight>

Vai pedir senha do banco, por garantia coloque a mesma senha em todos.

Modificar o arquivo /etc/hosts para colocar o ip e nome de todas as maquinas, por exemplo: 192.168.15.228 debian1 192.168.15.229 debian2 192.168.15.230 debian3 </syntaxhighlight>

Crie e edite o arquivo /etc/mysql/conf.d/galera.cnf com o conteúdo: [mysqld]

  1. mysql settings

binlog_format=ROW default-storage-engine=innodb innodb_autoinc_lock_mode=2 innodb_doublewrite=1 query_cache_size=0 query_cache_type=0 bind-address=0.0.0.0

  1. galera settings

wsrep_on=ON wsrep_provider=/usr/lib/galera/libgalera_smm.so wsrep_cluster_name="cluster_db" wsrep_cluster_address=gcomm://debian1,debian2,debian3 wsrep_sst_method=rsync </syntaxhighlight>

Pare o serviço mysql em todos os nós: debian1 # systemctl stop mysql

debian2 # systemctl stop mysql

debian3 # systemctl stop mysqllmente

</syntaxhighlight>

Os passos abaixo devem ser feitos somente em um dos nós:

Copie o conteúdo de /etc/mysql/debian.cnf do primeiro nó para os outros para que todos fiquem com o mesmo conteúdo.

Crie e inicie o cluste: debian1# galera_new_cluster </syntaxhighlight>

Verifique a quantidade de usuários no cluster com o comando(irá pedir a senha do banco): mysql -u root -p -e 'SELECT VARIABLE_VALUE as "cluster size" FROM INFORMATION_SCHEMA.GLOBAL_STATUS WHERE VARIABLE_NAME="wsrep_cluster_size"' </syntaxhighlight>

Inicie os serviços mysql nos outros nós e verifique com o comando acima se estão entrando no cluster. systemctl start mysql </syntaxhighlight>

Deverá aparecer algo como isso(em caso de 3 nós): +--------------+ | cluster size | +--------------+ | 3 | +--------------+ </syntaxhighlight>


Criando o banco para o Owncloud(como o banco já estão sendo replicado só é necessários digitar os passos abaixo em um deles):

Digite o comando abaixo para entrar no modo de edição do banco(pedirá a senha do banco): mysql -uroot -p</syntaxhighlight>

Dentro digite: CREATE USER 'username'@'localhost' IDENTIFIED BY 'password';

CREATE DATABASE IF NOT EXISTS owncloud;

GRANT ALL PRIVILEGES ON owncloud.* TO 'username'@'localhost' IDENTIFIED BY 'password';

quit

</syntaxhighlight>

Configurando o csync2:

Criar os certificados com os comandos abaixo em todas as maquinas: openssl genrsa -out /etc/csync2_ssl_key.pem 1024 openssl req -new -key /etc/csync2_ssl_key.pem -out /etc/csync2_ssl_cert.csr openssl x509 -req -days 600 -in /etc/csync2_ssl_cert.csr -signkey /etc/csync2_ssl_key.pem -out /etc/csync2_ssl_cert.pem </syntaxhighlight>

  • Obs: não preencha as informações pedidas(Common Name (CN)...), somente dê enter.

Crie a pasta /etc/csync2 em todos os nós: mkdir /etc/csync2</syntaxhighlight>

Gere uma chave em um dos nós e copie para os outros: csync2 -k /etc/csync2/exemplo.key

exemplo: scp /etc/csync2/exemplo.key debian2:/etc/csync2

scp /etc/csync2/exemplo.key debian3:/etc/csync2 </syntaxhighlight>

Em todas os servidores crie e edite o arquivo /etc/csync2.cfg com o seguinte conteúdo:

  1. Grupo de sincronização

group exemplo {

       host debian1 debian2 debian3;
       key /etc/csync2/exemplo.key;
       include /var/www/owncloud/data;
       include /etc/mysql/debian.cnf;
       auto none;

}</syntaxhighlight>

Crie um agendamento na crontab, colando o conteúdo a seguir no arquivo /etc/cron.d/csync2(sincroniza a cada 1 min):

*/1 * * * * root /usr/sbin/csync2 -x > /dev/null 2> /dev/null</syntaxhighlight>

texto
texto

http://tobias.ws/blog/sincronizando-arquivos-com-csync2/

https://blog.sprinternet.at/2016/03/mariadb-10-1-galera-cluster-on-debian-8-jessie/

https://doc.owncloud.org/server/9.0/admin_manual/configuration_database/linux_database_configuration.html

http://oss.linbit.com/csync2/paper.pdf