Pequeno guia de como utilizar uma base dados externa para aliviar a carga do HA

Tenho andado as voltas a tentar optimizar a minha instance de HASSIO dado a escassez de recursos (RPI3B) .

O 1o passo foi passar o servidor de Node Red (que consome bastante memória) para uma box antiga que tinha aqui encostada e que está actualmente a correr Armlogic (S905) . Tendo em conta que só tinha 1GB de memória RAM disponível ganhei quase 25% de memória adicional .

Mas aquilo de que vos queria falar é de um processo extremamente simples mas muito útil para quem corre o HA através de um cartao SD, a migraçao da base de dados para uma VPS externa !

Neste caso, recomendo utilizarem uma instance Free Tier da AWS (grátis!), sao rápidas, tem disco SSD e é mais do que suficiente para o que queremos !

Entao passando aos passos :

  1. Criar uma instance Free Tier na AWS cloud (eu escolhi Frankfurt dado a proximidade geográfica e menor latencia)

  2. Configurar o security group da AWS para aceitar ligacoes externas na porta 3306 !

    image

  3. Ligar ao servidor através do painel da AWS ou SSH como preferirem e instalar o SQL (no meu caso optei por MARIADB)

    Em Ubuntu :

sudo apt-get update
sudo pt-get install mariadb-server
  1. Criar um utilizador e base de dados

  2. Editar o ficheiro de configuracao Mysql para permitir o acesso remoto dos ips que quiserem na linha onde diz bind-address .
    A localizacao pode mudar, por exemplo no caso de uma instance Ubuntu do AWS o ficheiro seria /etc/mysql/mariadb.conf.d/50-server.cnf

    Tmb é importante ter atencao ao iptables , em princípio quando adicionamos a regra para a porta 3306 no ponto 2 esta já ficou acessível mas poderao ter que desactivar ou adicionar regra para que a porta aceite ligacoes externas dos vossos ips !

  3. Tudo pronto a funcionar, agora basta editar a vossa configuracao do HA e em recorder por os dados da nova base de dados criada da seguinte forma :

db_url: mysql://user:password@1.1.1.1:3306/homeassistant?charset=utf8

E pronto, muito facilmente terao dado um salto em performance e fiabilidade sem terem de estar preocupados com corrupcao de bases de dados , de cartoes, etc .

Edit: Conforme comentado abaixo nos posts dos moderadores esta nao é uma soluçao ideal a longo prazo. Talvez a utilizaçao ideal seja sincronizar a vossa base de dados local com a base de dados externa criada na AWS de forma a terem sempre um backup online disponível !

1 Like

@Tripton obrigado pelo tutorial mas gostava de chamar à atenção para um pormenor. Estive para não aprovar a publicação mas acho que se deve falar mais vezes sobre este tema. Passo a explicar:

A minha opção pela utilização do Home Assistant (e também a de muitos outro utilizadores) foi a total independência do HA da net, podendo trabalhar completamente isolado da mesma. Se a net faltar ou eu quiser cortar a ligação, o HA continua a funcionar. Esta opção deveu-se principalmente por um motivo: segurança.

A tua opção é de facto simples mas é um enorme buraco na segurança da tua instalação. Começa logo por abrires a DB para todos os IPs (até me arrepiei ao ver o 0.0.0.0 no bind) o que quer dizer que qualquer pessoa que tenha algum tempo para “brincar” acede com facilidade à DB. Depois, como o buraco não era suficientemente grande fazes ainda pior, aconselhando a desactivar o iptables…

Se faltar a net ou houver uma falha o que acontece ao teu HA? Mesmo fazendo isso que explicas, não achas que seria mais seguro utilizar uma VPN site2site?

Mais sentido faz ligar um disco SSD por USB e passar para lá a instalação…

2 Likes

Acho que o @j_assuncao disse basicamente tudo o que me passou pela alma enquanto lia o teu post.

O meu comentário ao mesmo é unicamente para reforçar que na minha opinião este não é um caminho a seguir. Se estão no ponto de achar que o RPI não dá para o Hassio e não querem dar o salto para um NUC, uma box android (ver o tópico que refere as que funcionam) poderá ser a melhor opção.

@j_assuncao obrigado pelos reparos, tal como tinha dito escrevi isto em 5mins e foi mm ctrl paste e siga :slight_smile: Ainda estava a pensar rectificar …

Em relaçao à total independencia da net, percebo mas nao acho que isso seja fulcral , eu pelo menos n tenho nada flashado com Tasmota nem nada disso e nunca foi um problema . Uma instance AWS tem também praticamente 100% de uptime e só muito dificilmente ficará offline .

Percebo a questao da segurança mas o facto de conectar com uma base de dados externa nao representa por si só nenhum risco de segurança . Claro que abrir a base de dados ao mundo nao é uma boa ideia e nem devia ter sugerido isso mas a partir do momento que só está acessível aos nossos ips o risco de segurança é 0, a nao ser que abras a porta 22 com uma password tipo admin12345 :smiley: , mas nem é preciso estar nenhum serviço acessível alem do mysql .

Da mesma forma, abrir o nosso Frontend HA através de SSL que possa ser acedido por qualquer um também é um risco (muito maior até) !

O iptables nao há necessidade de activar neste caso em concreto porque a AWS tem a sua própria firewall que bloqueia o acesso externo a todos os ips menos para o serviço que configurarmos, mas em qualquer outro servidor claro que seria péssima ideia desligar .

Em relaçao a questao das falhas de net, concordo contigo, seria talvez melhor através de VPN , vou averiguar esse ponto e rectificar :slight_smile:

Agora se faz mais sentido ou nao ligar um disco SSD ? Nao sei … o que sei é q um disco SSD trás 2 problemas :

  1. Acréscimo de custos que para algumas pessoas pode ser indesejável

  2. Há vários relatos de utilizadores que notaram um ganho significativo de performance ao passar de uma base de dados interna para uma soluçao externa, principalmente quem corre RPis . Supostamente as operaçoes que envolvem a base de dados geram um load adicional no sistema que pode ser bastante notório .

Seja como for, esta nao e 1 solucao para toda a gente, o ideal mesmo seria correr um NUC com SSD . Para mim funciona e noto ganho de performance, ja tenho SSDs que cheguem cá por casa :smile:

Bom, mantenho o que disse :slight_smile: Mete um || Not for Newbies || no título :wink:

O maior problema está na net de casa. Já me falhou várias vezes a net de casa, às vezes meio dia inteiro, e nesses casos não impossibilita o home assistant trabalhar normalmente.

@Tripton obrigado pelo tutorial.
Eu próprio desconhecia essa possibilidade da aws, depois de tudo o que aqui já foi dito , e após o teu segundo post onde demonstras a capacidade de melhor o post, acredito que continuarás a escrever conteúdo para a comunidade.

1 Like

Vou fazer-te uma pergunta que não é de retórica: o que acontece se ficares 6 horas sem ligação à DB?

para a pergunta acima levo em conta uma instalação “normal” com as configurações de alguns componentes como vêm por defeito.

.

Não me parece que um disco SSD de 120Gb por 15€ seja incomportável.

Quando usava Rpi fiz uma coisa que me deu um ganho significativo de performance: passei de Hassio para Raspassio e tirei a DB de dentro do container do HA para um container próprio, com isso ganhei até um tempo de reboot mais baixo.

para a resposta acima baseei-me na minha experiencia pessoal e em nada que tenha ouvido dizer.

@RodolfoVieira de nda, foi mm 1 coisa escrita à pressa e com uma directa em cima :smile: mas eu vou rectificar os pontos e acrescentar mais informaçao útil .

Bem, na verdade nao tinha pensado nisso uma vez que já devem ir 10 anos sem que alguma vez tenha ficado sem acesso a internet por mais do que alguns minutos, mas também é algo extremamente simples de resolver …

  1. Fazer sync entre a nossa base de dados remota e uma bd local
  2. Criar um cronjob que verifique a conectividade a net e que mal detecte que estamos sem conexao faça um sed ao ficheiro de configuraçao para modificar a bd para a nossa cópia local e de ordem de restart ao HA .

Resolvido !

Pois, incomportável nao é mas para algumas pessoas pode nao ser oportuno, nca se sabe … Pessoalmente eu de momento nao tenho um SSD disponível e estou à espera que chegue um novo de 120, pelo que para mim é útil, logo presumo que poderá também ser para outras pessoas .

Se calhar nao será eventualmente uma soluçao definitiva mas para mim tem funcionado bem assim :slight_smile: .

Talvez assim que passe para SSD faça o oposto e sincronize a base de dados local com uma cópia na instance AWS, assim tenho sempre um backup online disponível !

Boa, eu já tive raspassio mas dá-me mais jeito ter isto com Ubuntu + docker para correr outras coisas no meu home server (tal como socks proxy etc) . Quanto ao tirar a db do container do HA acho que só faz sentido correr localmente dessa forma, o princípio é o mesmo de correr a db remotamente .

Só analizaste a pergunta na optica da DB externa. Então e o que se passa do lado do HA?

Nós por cá chamamos a isso Ubuntassio e é exactamente o mesmo que o Raspassio excepto o SO base ser diferente.

P.S.: Ubuntassio é o que uso na minha VM do HA em NUCmox (NUC a correr Proxmox) e até hoje não tive problemas nenhuns.

1 Like

Nao estavamos a discutir so a base de dados ? Se calhar percebi mal o que queres dizer com a parte do lado do HA …

De qualquer forma, eu moro num T2 e mesmo no cenário inverosímil de ficar sem net durante algum tempo em nada isso afecta o normal funcionamento da casa .

Mas eu sou novo nestas andanças do HA e só há pco mais de 1 mes é q comecei a brincar com isto , por isso se calhar esta-me a escapar algo …

De momento tenho tudo a funcionar com zigbee + componentes wifi e a sirene do alarme rf 433mhz com sonoff bridge , mesmo que fique sem net acho que continua tudo a funcionar normalmente excepto o acesso remoto ao HA ?

Lá está, não afecta até afectar…

Do lado do HA nada vai deixar de funcionar devido à falta de net. Mas o que acontece durante a falta de ligação? Vamos tomar como exemplo uma instalação com 200 entidades (qualquer pequena instalação chega a esse valor com facilidade), 10 automações e com os componentes recorder, log e history configurados por defeito.

Todas estas entidades e automações gravam para a DB (assim como algumas funções do HA). Se tiveres uma entidade a gerar dados a cada minuto (em média) tens 60 tentativas de gravação de uma entidade por hora. Sendo 200 entidades (200x60) são 12000 (doze mil) tentativas de gravação para a base de dados.

Acontece que cada erro gerado é gravado no ficheiro home-assistant.log o que poderá provocar uma falta de espaço em disco ou um ficheiro tão grande que o HA não consegue gerir. Em ambos os casos o resultado é o HA deixar de responder.

Claro que estávamos a discutir a DB mas o que acontece do lado do HA também tem a ver com a base de dados. Não havendo ligação à DB, e embora o HA continue a trabalhar, vai ter SEMPRE impacto, podendo em ultimo caso impedir o HA de funcionar.

P.S.: Existem pelo menos dois casos falados aqui no forum nos últimos dias sobre este mesmo problema de o HA para de funcionar por falta de espaço.

Acho que essa situaçao já foi contemplada :slight_smile:

De certeza que nao vai ser por 1 ou 2mins sem acesso a bd que vai colapsar tudo, isso já é criar problemas onde eles n existem na minha modesta opiniao .

Mas ok é smpre útil ter informaçao adicional, já ficamos todos a perceber que correr a bd remotamente sem qualquer tipo de failsafe nao é 1 soluçao mas que com as devidas medidas de contingencia pode funcionar !

Obrigado pela partilha. Contudo, não creio que uma instalação em produção 24/7, mesmo para utilização doméstica, necessite e possa depender das inúmeras limitações que acarreta uma dependência de ter a BD numa cloud sem outros requisitos fundamentais como já aqui foi referido (vpn, múltiplas ligações de internet,…) e despesas adicionais. Como prova de conceito é interessante… mas, pouco viável.

Não obstante do dito acima, faria mais sentido ter o HA na cloud garantindo os requisitos de segurança e redundância. Contudo, existem outros fatores a ter em consideração como a latência e QoS que as ligações domésticas não asseguram.

A título de experiência própria, tive durante algum tempo o meu HA em uma VM na cloud… mas, para garantir não ter qualquer tipo de constrangimentos tive de assegurar 3 ligações de net (fibra, coaxial e rede móvel) , routers, ups, vpn,… e, posso dizer que os sistemas de redundância foram utilizadas diversas vezes por motivos de manutenção dos operadores, falha de energia, …este cenário que tive foi provisório… e, tive por diversas vezes alarmista a disparar pelos motivos “naturais” deste tipo de solução.

Entendo que apesar de interessante é demasiado arriscado e não deva servir de exemplo.

Atualmente, recorro a um cluster de alta disponibilidade com 3 nós em casa. Apesar de aparentar ser uma solução overkill,… a mesma foi criada com base em equipamentos antigos e de baixo consumo ( ~40 watts)… e só recorro a acessos externos para o assistente de voz e backups remotos.

Acredito que faça mais sentido e possas ter maior retorno de investimento se utilizares um NUC e ter uma VM para o HA … e, aproveitares o restante dos recursos disponíveis para fazer de NAS, servidor de IPTV, central VOIP, cloud própria,… e, utilizar o vps para backups, vpn, downloads,…

PS: O nível de segurança como está referido e QoS poderá ter reflexos futuros numa experiência menos tranquila. Considera as minhas palavras como uma preocupação e recomendação… na esperança que o tenhas o teu HA o mais seguro e com o mínimo de constrangimentos.

1 Like