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

De MediaWiki do Campus São José
Ir para navegação Ir para pesquisar
 
(3 revisões intermediárias pelo mesmo usuário não estão sendo mostradas)
Linha 16: 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.
+
[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.
  
  
Linha 43: Linha 43:
 
[[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 ferramentas como o http://www.noip.com/pt-BR para que os nós possam se comunicar pela internet. Em alguns casos é necessário configurar encaminhamento de porta nos modens e/ou roteadores.
+
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:==
Linha 236: Linha 236:
 
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.   
 
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/ , 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.
+
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.
  
 
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.
 
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.

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/