Recuperação automática. - Fórum Comunidade Gamer
Inicial	Índice Servidores de Jogos Life is Feudal: Your Own Recuperação automática.
Recuperação automática.
Mensagem#1 » 13 Mar 2015, 03:55
Como alguns já sabiam, eu estive desenvolvendo um programa nos horários livres para reiniciar o servidor Life is Feudal sozinho em caso de travamento.
Isso é importante por conta de vários bugs de crash do servidor e por eu nem sempre poder estar disponível para os restarts manuais.
Chegou a fase final, de testes.
Fiz as mudanças necessárias no DB, e ajustei o servidor agora pra ter animais = 100.
Se der crash por algum motivo, o programa deve encerrar o processo e iniciar outro.
A checagem está a cada 5 segundos, com timeout de 10 segundos.
Quando inicia o monitoramento aguarda 30 minutos antes de voltar a verificar, pra dar tempo de ter o servidor rodando certinho antes de voltar a monitorar.
E para minha surpresa as mudanças fizeram o servidor subir mais rápido, mesmo com animais 100 o servidor levou apenas 5 minutos para estar disponível no lobby.
Agora vou deixar assim, e ver o que acontece quando tiver o primeiro crash do servidor.
Quem presenciar um desses acontecimentos na minha ausência por gentileza poste aqui horário que caiu, se voltou e quanto tempo levou... por gentileza.
Segue abaixo uma screenshot do programa trabalhando:
Re: Recuperação automática.
Mensagem#2 » 13 Mar 2015, 13:14
Parece que tem funcionado.
Houve restart as 9:50 e as 10:20.
Já da pra manter os animais funcionando.
Registrado em: 24 Fev 2015, 17:36
Mensagem#3 » 18 Mar 2015, 17:05
SacredUno
Registrado em: 01 Abr 2015, 14:32
Mensagem#4 » 09 Abr 2015, 03:38
Guthred escreveu: SHOOOW!
Bem útil, em barbicha.
Espero que ajude no próximo update.
Mensagem#5 » 09 Abr 2015, 22:46
SacredUno escreveu:
HUAHAUAHAUAHAUA, comédia!
Registrado em: 29 Mar 2015, 22:05
Mensagem#6 » 12 Abr 2015, 23:48
Aparentemente o servidor não suporta a morte de coelhinhos e entra em luto quando eles são mortos.
Mensagem#7 » 13 Abr 2015, 17:57
Surgiu um tipo novo de erro no servidor que o meu recover não reconhecia ainda.
Eu inclui na programação o tratamento desse novo erro e agora ele deve reiniciar o servidor quando isso acontecer.
Ainda existe um outro tipo de situação, onde o servidor fica em loop em alguma função, mas ainda responde ao ping interno e neste ponto meu recover não tem como identificar e vai depender dos devs arrumarem o bug.
Ainda falta eu melhorar o código. Fiz apenas o principal pra manter tudo rodando.
Mensagem#8 » 13 Ago 2015, 14:23
No momento o restart automático não está ativo.
O jogo depois desse patch "trava" na hora do amanhecer e o programa estava identificando isso e reiniciando o servidor.
Até eu modificar o código pra tratar dessa nova situação o programa ficará desligado.
Registrado em: 08 Ago 2015, 03:59
Mensagem#9 » 14 Ago 2015, 14:33
Olá Binary, não quero me intrometer no seu programa de restart, apenas estou dando uma sugestão, é o seguinte você disse que retirou o programa porque durante o amanhecer o server fica algum tempo sem responder e o seu programa estava reiniciando o server por conta disso certo? Imagino eu que para saber se o server está respondendo ou não você ou inicia uma nova conexão através do seu programa ou apenas dá um ping com uma conexão já estabelecida por ele certo? Bem se for isso uma possível solução seria o seguinte, ao amanhecer o travamento nunca passou de 5 minutos (na verdade 2, mas vamos pegar o pior caso), então se for como eu imagino, não poderia vc tentar essa conexão ou ping e caso não respondesse você apenas incrementa-se um contador e tentasse de novo depois de 1 minuto e só após 5 ou 10 tentativas falhas ele então reiniciasse o server, porque daí já teriam se passado mais de 10 minutos e daí com certeza não é só a travada do amanhecer.
Estou aqui só como um programador de jogos mala tentando se alugar e ajudar a levantar o servidor automaticamente, porque ele caiu e acho que vou ficar a tarde inteira sem jogar por conta disso, e vou ter que tomar o meu remédio para não ficar ansioso huahauahuahauahuahauha
Mensagem#10 » 14 Ago 2015, 16:15
A verdade nua e crua é que eu sei como resolver isso, apenas não tive tempo ainda pra fazer as mudanças no programa.
Tem o meu trabalho que me toma bastante tempo, gerenciar um provedor de internet não é mole.
Tem o trabalho nos projetos da comunidade, que vão além do que vocês visualizam aqui no fórum, coisas pro futuro, conversas com outros grupos, reuniões pra conseguir apoio, etc.
No final disso tudo sobre pouco tempo.
Que eu uso pra estudar, me manter atualizado e reciclar conhecimento, fazer manutenção em máquinas (as minhas e do datacenter), etc.
Nos finais de semana que consigo atualizar os códigos e por em prática.
Já que você é programador eu vou dar mais detalhes como funciona hoje o programa, resumidamente.
O servidor tem uma espécie de ping interno, um pacote UDP com um byte específico que enviado ao servidor ele responde com 0x00. Caso ele responder com esse byte de retorno, tudo ok.
Caso não responder, após o timeout eu inicio a sequencia de reinicialização.
mata processo morto do servidor, desliga MYsql, liga mysql, liga servidor, aguarda 10 minutos pra ele se estabelecer e volta a monitorar.
Depois veio o bug do "patching world" ou "waiting for server", que é a porta TCP que deixa de esperar conexão, impedindo novos players de entrarem. ainda assim o pacote UDP respondia.
Então eu adicionei mais uma checagem, verificando também a porta TCP.
Agora depois desse patch o pacote UDP que não é respondido quando tem as funções que rodam no "amanhecer".
Vocês notam no jogo que até trava quando isso acontece. Isso porque o servidor não faz mais nada enquanto está processando isso.
Era pra ter uma thread separada respondendo os pings, mas nada... Culpa dos devs.
Ping local ICMP sempre iria resultar em resposta positiva porque o programa roda local, na mesma máquina onde está o Lif server.
A alteração que vou fazer é justamente na primeira vez que falhar ele esperar 5 minutos, fazer nova checagem e se falhar novamente eu inicio o processo de restart.
Vou precisar de meia hora pra refazer os códigos, e tempo pra testar tudo em produção.
Imagine que eu preciso tirar umas 3 horas pra ter certeza que tudo ta certo e poder partir pra outra tarefa.