Mudanças entre as edições de "Owncloud distribuído"
Linha 165: | Linha 165: | ||
− | Criar o banco para o Owncloud(como o banco já | + | 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): | Digitar o comando abaixo para entrar no modo de edição do banco(pedirá a senha do banco): | ||
Linha 181: | Linha 181: | ||
</syntaxhighlight> | </syntaxhighlight> | ||
+ | Obs: Em "username" e "password" colocar a senha e usuário desejada para a base de dados owncloud. | ||
Configurar o csync2: | Configurar o csync2: | ||
Linha 216: | Linha 217: | ||
auto none; | auto none; | ||
}</syntaxhighlight> | }</syntaxhighlight> | ||
− | Obs: 1 - Em host debian1 debian2 (...) colocar os nomes dos | + | 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): | + | 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> | ||
Linha 233: | Linha 234: | ||
==Conclusões== | ==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 | + | 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. A solução com utilizando o Raspberry Pi que é de fácil acesso, baixo custo, desempenho satisfatório e baixíssimo consumo energético deixa o projeto ainda mais interessante. |
− | Embora a implementação não seja | + | Embora a implementação não seja complexa temos algumas situações a serem observadas como por exemplo o fato de não haver ainda no repositório oficial o pacote do software galera para a arquitetura ARM(arquitetura do raspberry pi). Também em alguns casos a configuração dos modens e roteadores para encaminhamento de porta pode ser dificultada, além de algumas operadoras bloquearem algumas portas. |
− | Mesmo com as dificuldades apresentadas o projeto é viável e trás 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 disponíveis em seu televisor. | + | Mesmo com as dificuldades apresentadas o projeto é viável e trás 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á baixaddos disponíveis em seu televisor. |
==Referências== | ==Referências== |
Edição das 12h22min de 24 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:
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.
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.
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 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 aplicações csync2 e galera que utiliza da internet para a troca de informações.
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.
Em ambientes residenciais onde não se tem um número de IP fixo deve-se utilizar de ferramentas como o [1] 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 [2]. Para a instalação do sistema no Raspberry Pi siga os passos desse link [3].
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]
- 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
- 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:
- 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:
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:
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. A solução com utilizando o Raspberry Pi que é de fácil acesso, baixo custo, desempenho satisfatório e baixíssimo consumo energético deixa o projeto ainda mais interessante.
Embora a implementação não seja complexa temos algumas situações a serem observadas como por exemplo o fato de não haver ainda no repositório oficial o pacote do software galera para a arquitetura ARM(arquitetura do raspberry pi). Também em alguns casos a configuração dos modens e roteadores para encaminhamento de porta pode ser dificultada, além de algumas operadoras bloquearem algumas portas.
Mesmo com as dificuldades apresentadas o projeto é viável e trás 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á baixaddos disponíveis em seu televisor.
Referências
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/