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

De MediaWiki do Campus São José
Ir para navegação Ir para pesquisar
 
(27 revisões intermediárias pelo mesmo usuário não estão sendo mostradas)
Linha 1: Linha 1:
 
==O projeto==
 
==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"'').
+
O '''Owncloud''' é um serviço ''web'' para armazenamento e compartilhamento de arquivos similar ao Dropbox e ao Google Drive, baseado no conceito de '''"computação em nuvem"''' (''"cloud computing"''). O principal diferencial do Owncloud é que ele pode ser implementado de forma privada, já que, pelo fato de 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. A implementação típica do owncloud provê um servidor ''web'' rodando os serviços e armazenando os arquivos.  
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:
+
O objetivo do projeto é utilizar esta ferramenta para implementar um serviço de armazenamento de arquivos '''descentralizado''' e utilizar a internet para sincronizar os arquivos em locais diferentes. Esta implementação traz alguns benefícios:
  
 
1. Redundância geográfica dos arquivos<br>
 
1. Redundância geográfica dos arquivos<br>
2. Melhor velocidade de ''upload'' e ''download'' em diferentes locais(quando conectado a rede local)<br>
+
2. Melhor velocidade de ''upload'' e ''download'' em diferentes locais (quando conectado a rede local)<br>
3. Alta disponibilidade
+
3. Alta disponibilidade<br>
 
+
4. Compartilhamento de recurso entre os clientes do ''cluster''
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.
 
  
 +
Outro diferencial do projeto é a utilização de ''RaspberryPis''(computadores baratos do tamanho de um cartão de crédito e que consomem pouca energia) como servidores rodando as aplicações necessárias à implementação. O armazenamento fica a cargo de HD's externos conectados aos RaspberryPis. Esta implementação torna-se viável e interessante para que pessoas comuns configurem e instalem nas casas de parentes próximos, podendo assim, compartilhar os arquivos (como fotos, músicas e filmes) de maneira fácil.
  
 
==Desenvolvimento:==
 
==Desenvolvimento:==
Linha 17: Linha 16:
 
===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.
+
[https://mariadb.org/ 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.
+
[http://galeracluster.com/ 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.
+
[http://oss.linbit.com/csync2/ 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.
  
 
[[Arquivo:Raspberry_Pi_B+_top.jpg|250px|direita|texto|borda]]
 
[[Arquivo:Raspberry_Pi_B+_top.jpg|250px|direita|texto|borda]]
  
  
'''Raspberry Pi''' é um computador do tamanho de um cartão de crédito, que se conecta a um monitor de computador ou TV, e usa um teclado e um mouse padrão, desenvolvido no Reino Unido pela Fundação Raspberry Pi. Todo o hardware é integrado numa única placa. O principal objetivo é promover o ensino em Ciência da Computação básica em escolas.
+
[https://www.raspberrypi.org/ Raspberry Pi] é um computador do tamanho de um cartão de crédito, que se conecta a um monitor de computador ou TV, e usa um teclado e um mouse padrão, desenvolvido no Reino Unido pela Fundação Raspberry Pi. Todo o hardware é integrado numa única placa.
  
  
O Raspberry Pi juntamente com um HD é todo o Hardware necessário para a implementação. A fonte de alimentação do Raspberry deve ser de boa qualidade e com no mínimo 2A de corrente para funcionar com o HD externo. Em algumas implementações com mais de um HD, RAID e outros deve se utilizar um HUB USB alimentado externamente.
+
O Raspberry Pi juntamente com um HD externo é todo o Hardware necessário para a implementação. A fonte de alimentação do Raspberry deve ser de boa qualidade e com no mínimo 2A de corrente para funcionar com o HD externo. Em algumas implementações com mais de um HD, RAID ou outros deve-se utilizar um HUB USB alimentado externamente.
  
  
Linha 35: Linha 34:
 
<br><br>
 
<br><br>
  
O diagrama abaixo ilustra como é feita a comunicação entre as aplicações de forma que garanta a distribuição dos conteúdos. Podemos ver que os nós têm implementado a mesma infraestrutura com o Owncloud, banco e os arquivos. A comunicação, ou o ''"cluster"'' é implementado pelas ferramentas csync2 e galera.  
+
O diagrama abaixo ilustra como é feita a comunicação entre as aplicações de forma que garanta a distribuição dos conteúdos. Podemos ver que os nós têm implementado a mesma infraestrutura com o Owncloud, o banco e os arquivos. A comunicação, ou ''"cluster"'', é implementado pelas aplicações Csync2 e Galera que utilizam da internet para a troca de informações.  
  
 
[[Arquivo:Diagrama_owncloud_dist.jpg|650px|borda|centro]]
 
[[Arquivo:Diagrama_owncloud_dist.jpg|650px|borda|centro]]
 
<br>
 
<br>
  
Com o funcionamento correto do ''cluster'' teremos a seguinte situação, os diferentes nós da estruturas acessando os "mesmos" arquivos e banco. Isso de forma transparente. Ou seja, quem acessar por exemplo o nó 1 (debian1.sj.ifsc.edu.br/owncloud) e fazer o upload do arquivo na sua conta e posteriormente acessar outro nó (debian2.sj.ifsc.edu.br/owncloud) poderá acessar seu arquivo.
+
Com o funcionamento correto do ''cluster'' teremos a seguinte situação: os diferentes nós da estruturas acessando os "mesmos" arquivos e banco de forma transparente. Ou seja, quem acessar por exemplo o nó 1 (debian1.sj.ifsc.edu.br/owncloud) e fazer o upload do arquivo na sua conta e posteriormente acessar outro nó (debian2.sj.ifsc.edu.br/owncloud) poderá acessar o arquivo.
 
   
 
   
 
[[Arquivo:Diagrama_owncloud_dist2.jpg‎|600px|borda|centro]]
 
[[Arquivo:Diagrama_owncloud_dist2.jpg‎|600px|borda|centro]]
  
Em ambientes residenciais onde não se tem um número de IP fixo deve-se utilizar de ferramentas como o [http://www.noip.com/pt-BR] para que os nós possam se comunicar pela internet.
+
Em ambientes residenciais, onde não se tem um número de IP fixo, deve-se utilizar ferramentas como o [http://www.noip.com/pt-BR NoIP] para que os nós possam se comunicar pela internet. Em alguns casos é necessário configurar encaminhamento de porta nos modens e/ou roteadores.
 
 
  
 
==Implementação:==
 
==Implementação:==
 
   
 
   
Baixe a imagem do sistema Raspbian Jessie Lite no link [https://www.raspberrypi.org/downloads/raspbian/]. Para a instalação do sistema no Raspberry pi siga os passos desse link [https://www.raspberrypi.org/documentation/installation/installing-images/linux.md].
+
Baixe a imagem do sistema Raspbian Jessie Lite no link https://www.raspberrypi.org/downloads/raspbian/. Para a instalação do sistema no Raspberry Pi siga os passos desse link https://www.raspberrypi.org/documentation/installation/installing-images/linux.md.
  
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 como root (#):'''
  
Adicionando o repositório do Owncloud:
+
Adicionar o repositório do Owncloud:
 
<code>
 
<code>
 
wget -nv https://download.owncloud.org/download/repositories/stable/Debian_8.0/Release.key -O Release.key
 
wget -nv https://download.owncloud.org/download/repositories/stable/Debian_8.0/Release.key -O Release.key
Linha 62: Linha 60:
 
</syntaxhighlight>
 
</syntaxhighlight>
  
Adicionando o repositório do mariadb e galera:
+
Adicionar o repositório do mariadb e galera:
 
<code>
 
<code>
 
apt-get install software-properties-common
 
apt-get install software-properties-common
Linha 71: Linha 69:
 
</syntaxhighlight>
 
</syntaxhighlight>
  
Instalando os pacotes necessários
+
Instalar os pacotes necessários:
 
<code>
 
<code>
 
aptitude update
 
aptitude update
Linha 78: Linha 76:
 
</syntaxhighlight>
 
</syntaxhighlight>
  
Vai pedir senha do banco, por garantia coloque a mesma senha em todos.
+
Obs: durante a instalação irá pedir senha do banco, por garantia colocar a mesma senha em todos.
 +
 
 +
As aplicações se comunicam utilizando o nome das maquinas, ou seja, as maquinas precisam "enxergar" as outras através de um nome. Caso tenha configurado no DNS não será necessário a configuração abaixo(arquivo /etc/hosts).
  
 
Modificar o arquivo /etc/hosts para colocar o ip e nome de todas as maquinas, por exemplo:
 
Modificar o arquivo /etc/hosts para colocar o ip e nome de todas as maquinas, por exemplo:
 
<code>
 
<code>
 +
(...)
 
192.168.15.228    debian1
 
192.168.15.228    debian1
 
192.168.15.229    debian2
 
192.168.15.229    debian2
 
192.168.15.230    debian3
 
192.168.15.230    debian3
 +
(...)
 
</syntaxhighlight>
 
</syntaxhighlight>
  
Crie e edite o arquivo /etc/mysql/conf.d/galera.cnf com o conteúdo:
+
Crir e editar o arquivo /etc/mysql/conf.d/galera.cnf com o conteúdo:
 
<code>
 
<code>
 
[mysqld]
 
[mysqld]
Linha 106: Linha 108:
 
wsrep_sst_method=rsync
 
wsrep_sst_method=rsync
 
</syntaxhighlight>
 
</syntaxhighlight>
 +
Obs: Em "wsrep_cluster_address=gcomm://debian1,debian2,debian3" no local de debian1,debian2... colocar o nome das maquinas do nó.
  
Pare o serviço mysql em todos os nós:
+
Parar o serviço mysql em todos os nós:
 
<code>
 
<code>
 
debian1 # systemctl stop mysql
 
debian1 # systemctl stop mysql
Linha 113: Linha 116:
 
debian2 # systemctl stop mysql
 
debian2 # systemctl stop mysql
 
   
 
   
debian3 # systemctl stop mysqllmente
+
debian3 # systemctl stop mysql
 
   
 
   
 
</syntaxhighlight>
 
</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.
+
Copiar 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:
+
Criar e iniciar o cluste no primeiro nó:
 
<code>
 
<code>
 
debian1# galera_new_cluster
 
debian1# galera_new_cluster
 
</syntaxhighlight>
 
</syntaxhighlight>
  
Verifique a quantidade de usuários no cluster com o comando(irá pedir a senha do banco):
+
Iniciar os serviços mysql em cada nó do cluster.
 
<code>
 
<code>
mysql -u root -p -e 'SELECT VARIABLE_VALUE as "cluster size" FROM INFORMATION_SCHEMA.GLOBAL_STATUS WHERE VARIABLE_NAME="wsrep_cluster_size"'
+
systemctl start mysql
 
</syntaxhighlight>
 
</syntaxhighlight>
  
Inicie os serviços mysql nos outros nós e verifique com o comando acima se estão entrando no cluster.
+
Verificar a quantidade de usuários no cluster com o comando(irá pedir a senha do banco):
 
<code>
 
<code>
systemctl start mysql
+
mysql -u root -p -e 'SELECT VARIABLE_VALUE as "cluster size" FROM INFORMATION_SCHEMA.GLOBAL_STATUS WHERE VARIABLE_NAME="wsrep_cluster_size"'
 
</syntaxhighlight>
 
</syntaxhighlight>
 
+
Deverá aparecer algo semelhante a(em caso de 3 nós):
Deverá aparecer algo como isso(em caso de 3 nós):
 
 
<code>
 
<code>
 
+--------------+
 
+--------------+
Linha 145: Linha 146:
 
</syntaxhighlight>
 
</syntaxhighlight>
  
Quando o sistema for reiniciado por algum motivo(como queda de energia por exemplo) deve ser feito os procedimentos abaixo:
+
'''Obs: Quando o sistema for reiniciado por algum motivo(como queda de energia por exemplo) deverá ser feito os procedimentos abaixo:
 
+
'''
Crie e inicie o cluster em um dos nós:
+
Criar e iniciar o cluster em um dos nós:
 
<code>
 
<code>
 
debian1# galera_new_cluster
 
debian1# galera_new_cluster
 
</syntaxhighlight>
 
</syntaxhighlight>
  
Verifique a quantidade de usuários no cluster com o comando(irá pedir a senha do banco):
+
Iniciar os serviços mysql em cada nó do cluster.
 
<code>
 
<code>
mysql -u root -p -e 'SELECT VARIABLE_VALUE as "cluster size" FROM INFORMATION_SCHEMA.GLOBAL_STATUS WHERE VARIABLE_NAME="wsrep_cluster_size"'
+
systemctl start mysql
 
</syntaxhighlight>
 
</syntaxhighlight>
 
+
Verificar a quantidade de usuários no cluster com o comando(irá pedir a senha do banco):
Inicie os serviços mysql nos outros nós e verifique com o comando acima se estão entrando no cluster.
 
 
<code>
 
<code>
systemctl start mysql
+
mysql -u root -p -e 'SELECT VARIABLE_VALUE as "cluster size" FROM INFORMATION_SCHEMA.GLOBAL_STATUS WHERE VARIABLE_NAME="wsrep_cluster_size"'
 
</syntaxhighlight>
 
</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):
+
Criar o banco para o Owncloud(como o banco já está sendo replicado só é necessários digitar os passos abaixo em um dos nós):
  
Digite o comando abaixo para entrar no modo de edição do banco(pedirá a senha do banco):
+
Digitar o comando abaixo para entrar no modo de edição do banco(pedirá a senha do banco):
 
<code>mysql -uroot -p</syntaxhighlight>
 
<code>mysql -uroot -p</syntaxhighlight>
  
Dentro digite:
+
Dentro digitar:
 
<code>
 
<code>
 
CREATE USER 'username'@'localhost' IDENTIFIED BY 'password';
 
CREATE USER 'username'@'localhost' IDENTIFIED BY 'password';
Linha 179: Linha 179:
  
 
</syntaxhighlight>
 
</syntaxhighlight>
 +
Obs: Em "username" e "password" colocar a senha e usuário desejada para a base de dados owncloud.
  
Configurando o csync2:
+
Configurar o csync2:
  
 
Criar os certificados com os comandos abaixo em todas as maquinas:
 
Criar os certificados com os comandos abaixo em todas as maquinas:
Linha 191: Linha 192:
 
*Obs: não preencha as informações pedidas(Common Name (CN)...), somente dê enter.
 
*Obs: não preencha as informações pedidas(Common Name (CN)...), somente dê enter.
  
Crie a pasta /etc/csync2 em todos os nós:
+
Criar a pasta /etc/csync2 em todos os nós:
 
<code>mkdir /etc/csync2</syntaxhighlight>
 
<code>mkdir /etc/csync2</syntaxhighlight>
  
Gere uma chave em um dos nós e copie para os outros:
+
Gerar uma chave em um dos nós e copiar para os outros:
 
<code>
 
<code>
 
csync2 -k /etc/csync2/exemplo.key
 
csync2 -k /etc/csync2/exemplo.key
Linha 204: Linha 205:
 
</syntaxhighlight>
 
</syntaxhighlight>
  
Em todas os servidores crie e edite o arquivo /etc/csync2.cfg com o seguinte conteúdo:
+
Em todas os servidores criar e editar o arquivo /etc/csync2.cfg com o seguinte conteúdo:
 
<code>
 
<code>
 
# Grupo de sincronização
 
# Grupo de sincronização
Linha 214: Linha 215:
 
         auto none;
 
         auto none;
 
}</syntaxhighlight>
 
}</syntaxhighlight>
 +
Obs: 1 - Em host debian1 debian2 (...) colocar os nomes dos nós. 2 - Os arquivos e pastas após "include" são os que o csync2 irá sincronizar.
  
Crie um agendamento na crontab, colando o conteúdo a seguir no arquivo /etc/cron.d/csync2(sincroniza a cada 1 min):
+
Criar um agendamento na crontab dos nós, colando o conteúdo a seguir no arquivo /etc/cron.d/csync2 (sincroniza a cada 1 min):
  
 
<code>*/1 * * * * root /usr/sbin/csync2 -x > /dev/null 2> /dev/null</syntaxhighlight>
 
<code>*/1 * * * * root /usr/sbin/csync2 -x > /dev/null 2> /dev/null</syntaxhighlight>
  
[[Arquivo:Conf_inicial_owncloud_1.jpg‎|600px]]
+
Acessar em um navegador o endereço de cada nó como por exemplo 192.168.1.1/owncloud ou debian1.sj.ifsc.edu.br/owncloud e configurar conforme a figuras abaixo:<br>
[[Arquivo:Conf_inicial_owncloud_2.jpg|600px]]
+
[[Arquivo:Conf_inicial_owncloud_1.jpg‎|600px|borda]]
 +
<br>
 +
Obs: Digitar um usuário para ser o administrador do sistema e senha e clicar em Storage & Database.
 +
 
 +
Configurar com as informações digitadas anteriormente no passo de criação da base de dados:<br>
 +
 
 +
[[Arquivo:Conf_inicial_owncloud_2.jpg|600px|borda]]]
  
 
==Conclusões==
 
==Conclusões==
  
==Referências==
+
O projeto do Owncloud implementado de forma distribuída apresenta vários benefícios e facilidades que podem ser utilizadas suprindo alguns problemas quanto a privacidade e segurança de arquivos, perda de backups com queima de HD, pen drive e DVD's. Os recursos entre os participantes dos ''cluster'' é compartilhado, ou seja, cada um tem a sua infraestrutura mas o compartilhamento é necessário para a redundância. A solução utilizando o Raspberry Pi deixa o projeto ainda mais interessante, pois ele é um hardware de fácil acesso, baixo custo, desempenho satisfatório e baixíssimo consumo energético.
 +
 
 +
Embora a implementação não seja complexa, há algumas situações a serem observadas como por exemplo: ainda não existe o pacote do software ''galera'' para a arquitetura ARM (arquitetura do raspberry pi) no repositório oficial; em alguns casos a configuração dos modens e roteadores para encaminhamento de porta pode ser dificultada; e algumas operadoras bloqueiam portas. 
 +
 
 +
Mesmo com as dificuldades apresentadas o projeto é viável e traz características que podem ser exploradas com a utilização do Raspberry Pi e um sistema de armazenamento de arquivos pessoal e redundante. Uma dessas características é instalar junto um aplicativo de ''media center'', por exemplo o [https://kodi.tv/about/ Kodi], e deixa-lo conectado a televisores. Os filmes, fotos e vídeos podem ser compartilhados com outros usuários que fazem parte do cluster e estes também teriam os filmes já baixados disponíveis em seu televisor.
  
http://tobias.ws/blog/sincronizando-arquivos-com-csync2/
+
Como projeto futuro pode se testar a compilação do software Galera para ARM e com isso fazer testes de velocidade do sincronismo dos arquivos nas principais velocidades de Internet contratadas por consumidores em suas residências, que são de 10, 15 e 30 Mbps.
  
https://blog.sprinternet.at/2016/03/mariadb-10-1-galera-cluster-on-debian-8-jessie/
+
==Referências==
  
 
https://doc.owncloud.org/server/9.0/admin_manual/configuration_database/linux_database_configuration.html
 
https://doc.owncloud.org/server/9.0/admin_manual/configuration_database/linux_database_configuration.html
  
 
http://oss.linbit.com/csync2/paper.pdf
 
http://oss.linbit.com/csync2/paper.pdf
 +
 +
http://tobias.ws/blog/sincronizando-arquivos-com-csync2/
 +
 +
https://blog.sprinternet.at/2016/03/mariadb-10-1-galera-cluster-on-debian-8-jessie/

Edição atual tal como às 17h12min de 24 de julho de 2016

O projeto

O Owncloud é um serviço web para armazenamento e compartilhamento de arquivos similar ao Dropbox e ao Google Drive, baseado no conceito de "computação em nuvem" ("cloud computing"). O principal diferencial do Owncloud é que ele pode ser implementado de forma privada, já que, pelo fato de 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. A implementação típica do owncloud provê um servidor web rodando os serviços e armazenando os arquivos.

O objetivo do projeto é utilizar esta ferramenta para implementar um serviço de armazenamento de arquivos descentralizado e utilizar a internet para sincronizar os arquivos em locais diferentes. Esta implementação traz 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
4. Compartilhamento de recurso entre os clientes do cluster

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

Desenvolvimento:

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.

texto


Raspberry Pi é um computador do tamanho de um cartão de crédito, que se conecta a um monitor de computador ou TV, e usa um teclado e um mouse padrão, desenvolvido no Reino Unido pela Fundação Raspberry Pi. Todo o hardware é integrado numa única placa.


O Raspberry Pi juntamente com um HD externo é todo o Hardware necessário para a implementação. A fonte de alimentação do Raspberry deve ser de boa qualidade e com no mínimo 2A de corrente para funcionar com o HD externo. Em algumas implementações com mais de um HD, RAID ou outros deve-se utilizar um HUB USB alimentado externamente.


Raspberry e hd.jpg

O diagrama abaixo ilustra como é feita a comunicação entre as aplicações de forma que garanta a distribuição dos conteúdos. Podemos ver que os nós têm implementado a mesma infraestrutura com o Owncloud, o banco e os arquivos. A comunicação, ou "cluster", é implementado pelas aplicações Csync2 e Galera que utilizam da internet para a troca de informações.

Diagrama owncloud dist.jpg


Com o funcionamento correto do cluster teremos a seguinte situação: os diferentes nós da estruturas acessando os "mesmos" arquivos e banco de forma transparente. Ou seja, quem acessar por exemplo o nó 1 (debian1.sj.ifsc.edu.br/owncloud) e fazer o upload do arquivo na sua conta e posteriormente acessar outro nó (debian2.sj.ifsc.edu.br/owncloud) poderá acessar o arquivo.

Diagrama owncloud dist2.jpg

Em ambientes residenciais, onde não se tem um número de IP fixo, deve-se utilizar ferramentas como o NoIP para que os nós possam se comunicar pela internet. Em alguns casos é necessário configurar encaminhamento de porta nos modens e/ou roteadores.

Implementação:

Baixe a imagem do sistema Raspbian Jessie Lite no link https://www.raspberrypi.org/downloads/raspbian/. Para a instalação do sistema no Raspberry Pi siga os passos desse link https://www.raspberrypi.org/documentation/installation/installing-images/linux.md.

Os passos abaixo devem ser feitos em todas os nós como root (#):

Adicionar 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>

Adicionar 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>

Instalar os pacotes necessários: aptitude update

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

Obs: durante a instalação irá pedir senha do banco, por garantia colocar a mesma senha em todos.

As aplicações se comunicam utilizando o nome das maquinas, ou seja, as maquinas precisam "enxergar" as outras através de um nome. Caso tenha configurado no DNS não será necessário a configuração abaixo(arquivo /etc/hosts).

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>

Crir e editar 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> Obs: Em "wsrep_cluster_address=gcomm://debian1,debian2,debian3" no local de debian1,debian2... colocar o nome das maquinas do nó.

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

debian2 # systemctl stop mysql

debian3 # systemctl stop mysql

</syntaxhighlight>


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

Criar e iniciar o cluste no primeiro nó: debian1# galera_new_cluster </syntaxhighlight>

Iniciar os serviços mysql em cada nó do cluster. systemctl start mysql </syntaxhighlight>

Verificar 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> Deverá aparecer algo semelhante a(em caso de 3 nós): +--------------+ | cluster size | +--------------+ | 3 | +--------------+ </syntaxhighlight>

Obs: Quando o sistema for reiniciado por algum motivo(como queda de energia por exemplo) deverá ser feito os procedimentos abaixo: Criar e iniciar o cluster em um dos nós: debian1# galera_new_cluster </syntaxhighlight>

Iniciar os serviços mysql em cada nó do cluster. systemctl start mysql </syntaxhighlight> Verificar 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>


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

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

Dentro digitar: 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> Obs: Em "username" e "password" colocar a senha e usuário desejada para a base de dados owncloud.

Configurar 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.

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

Gerar uma chave em um dos nós e copiar 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 criar e editar 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> Obs: 1 - Em host debian1 debian2 (...) colocar os nomes dos nós. 2 - Os arquivos e pastas após "include" são os que o csync2 irá sincronizar.

Criar um agendamento na crontab dos nós, 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>

Acessar em um navegador o endereço de cada nó como por exemplo 192.168.1.1/owncloud ou debian1.sj.ifsc.edu.br/owncloud e configurar conforme a figuras abaixo:
Conf inicial owncloud 1.jpg
Obs: Digitar um usuário para ser o administrador do sistema e senha e clicar em Storage & Database.

Configurar com as informações digitadas anteriormente no passo de criação da base de dados:

Conf inicial owncloud 2.jpg]

Conclusões

O projeto do Owncloud implementado de forma distribuída apresenta vários benefícios e facilidades que podem ser utilizadas suprindo alguns problemas quanto a privacidade e segurança de arquivos, perda de backups com queima de HD, pen drive e DVD's. Os recursos entre os participantes dos cluster é compartilhado, ou seja, cada um tem a sua infraestrutura mas o compartilhamento é necessário para a redundância. A solução utilizando o Raspberry Pi deixa o projeto ainda mais interessante, pois ele é um hardware de fácil acesso, baixo custo, desempenho satisfatório e baixíssimo consumo energético.

Embora a implementação não seja complexa, há algumas situações a serem observadas como por exemplo: ainda não existe o pacote do software galera para a arquitetura ARM (arquitetura do raspberry pi) no repositório oficial; em alguns casos a configuração dos modens e roteadores para encaminhamento de porta pode ser dificultada; e algumas operadoras bloqueiam portas.

Mesmo com as dificuldades apresentadas o projeto é viável e traz características que podem ser exploradas com a utilização do Raspberry Pi e um sistema de armazenamento de arquivos pessoal e redundante. Uma dessas características é instalar junto um aplicativo de media center, por exemplo o Kodi, e deixa-lo conectado a televisores. Os filmes, fotos e vídeos podem ser compartilhados com outros usuários que fazem parte do cluster e estes também teriam os filmes já baixados disponíveis em seu televisor.

Como projeto futuro pode se testar a compilação do software Galera para ARM e com isso fazer testes de velocidade do sincronismo dos arquivos nas principais velocidades de Internet contratadas por consumidores em suas residências, que são de 10, 15 e 30 Mbps.

Referências

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

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

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

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