Implantação de servidor Web e revisão do processo de armadilhas on-line

Em maio, um servidor web C++ foi implantado e lançado. Revendo o passado e aprendendo coisas novas, este artigo resume o conhecimento do processo de implantação;

  • Solução inicial: https://blog.csdn.net/BinBinCome/article/details/129750951?spm=1001.2014.3001.5501
  • Solução posterior: https://blog.csdn.net/BinBinCome/article/details/129796690?spm=1001.2014.3001.550

A seguir está um mapa mental do conteúdo geral deste artigo:
Insira a descrição da imagem aqui

1. Solução inicial

Princípio:
Quando o usuário efetua logout (logout) ou a rede é desconectada, o terminal receberá o sinal HUP (hangup) e fechará todos os seus processos filhos. Portanto, nossa solução tem duas formas: ou deixar o processo ignorar o sinal do HUP , ou deixar o processo rodar em uma nova sessão e se tornar um processo filho que não pertence a este terminal.

Método 1: o processo ignora o sinal HUP

Comando:
nohup (sem desligar, sem desligar): usado para executar comandos em segundo plano do sistema sem desligar. Sair do terminal não afetará a execução do programa. Por padrão (quando não redirecionado), um arquivo chamado nohup.out será enviado para o diretório atual. Se o arquivo nohup.out no diretório atual não for gravável, a saída será redirecionada para o arquivo $HOME/nohup.out .
usar:

nohup ./IM_chat >> IMchat.log 2>&1 &
    - ./IM_chat : 当前文件目录下的新坑项目可执行文件
    - >> IMchat.log 2>&1: 将标准错误 2 重定向到标准输出 &1 ,标准输出 &1 再被重定向输入到 IMchat.log 文件中
    - & : 让命令在后台执行,终端退出后命令仍旧执行

Outros conhecimentos:
1. 0, 1, 2 no Linux: 0 é entrada padrão, entrada padrão, 1 é saída padrão, saída padrão, 2 é erro padrão, saída de erro padrão 2. Método para interromper um processo em execução: ps
-aux
| grep "IM_chat"
Kill - 9 Número do processo
Conhecimento da versão da resposta do PID AI:
No Linux, 0, 1 e 2 são descritores de arquivo especiais usados ​​para representar entrada padrão (stdin), saída padrão (stdout) e erro padrão (stderr). Eles desempenham um papel importante no redirecionamento de E/S e nas operações de pipeline.

  1. Entrada padrão (stdin): Descritor de arquivo 0, geralmente associado à entrada do teclado. Quando um programa precisa obter entrada do usuário, ele pode ler o fluxo de entrada padrão para receber os dados de entrada do usuário. Por exemplo, via entrada de linha de comando ou leitura de dados do terminal.
  2. Saída padrão (stdout): Descritor de arquivo 1, geralmente associado ao monitor. Quando um programa produz uma saída, por padrão a saída é enviada para o fluxo de saída padrão e exibida no terminal. O fluxo de saída padrão pode ser redirecionado para um arquivo por meio da operação de redirecionamento para que a saída possa ser salva no arquivo.
  3. Erro Padrão (stderr): Descritor de arquivo 2, também geralmente associado ao monitor. Semelhante à saída padrão, mas o fluxo de erro padrão é usado para gerar mensagens de erro e de aviso em vez da saída normal do programa. Normalmente, as mensagens de erro são impressas diretamente no terminal, independentemente do redirecionamento de saída padrão.
    Esses conceitos envolvem o mecanismo de entrada e saída (E/S) do Linux e o conceito de descritores de arquivo:
  • Entrada e saída (E/S): refere-se ao processo de troca de dados entre o sistema do computador e dispositivos externos. No Linux, a entrada pode vir do teclado, de arquivos ou da saída de outros processos. A saída pode ser exibida no terminal, gravada em um arquivo ou enviada para outros processos.
  • Descritor de arquivo: No Linux, cada arquivo aberto (incluindo dispositivos e pipes) é associado a um identificador inteiro exclusivo chamado descritor de arquivo. 0, 1 e 2 são descritores de arquivo predefinidos, correspondendo à entrada padrão, saída padrão e erro padrão, respectivamente.
  • Redirecionamento de E/S: Através da operação de redirecionamento, o local padrão de entrada ou saída do programa pode ser alterado. Use símbolos especiais como <, > e >> para direcionar a entrada/saída de uma origem/destino para outra. Por exemplo, redirecione a saída de um comando para um arquivo ou leia a entrada de um arquivo em vez do teclado.
  • Operações de Pipe: Pipes permitem que a saída de um processo seja passada diretamente para a entrada de outro processo para obter comunicação entre processos. Usando o símbolo |, você pode conectar a saída de um comando à entrada de outro comando, formando uma cadeia de tubos.
    Esses mecanismos facilitam o controle de fluxos de entrada e saída em sistemas Linux, bem como lidam com redirecionamentos de entrada e saída e operações de pipe, aumentando assim a flexibilidade e escalabilidade do programa.

Método 2: o processo é executado em uma nova sessão

Depois que o serviço começou a funcionar, depois de um tempo acessei a página pessoal do servidor que escrevi e descobri que estava fora do ar! Então, verifiquei os logs e não encontrei problemas, então tentei executar o processo em uma nova sessão;
screen fornece um emulador de terminal ANSI/VT100, que permite executar vários pseudoterminais em tela cheia em um terminal real. Se houver um grande número de comandos que precisam ser executados em um plano de fundo estável, você poderá evitar fazer isso para cada comando;

yum -y install   screen                # 安装screen
screen -dmS sessionname         # 建立一个处于断开模式下的会话,sessionname可更改为自己的服务名
screen -list                                 # 列出所有会话,查看是否建立会话
screen -r sessionname                 # 重新连接指定会话,运行自己的服务

Use as teclas de atalho CTRL + a + d para desconectar temporariamente a sessão atual. Saia da conexão do terminal e verifique se o serviço está funcionando de forma estável

O plano inicial desta vez é combinar nohup e & no srceen. A versão final também pode adicionar configuração systemctl para iniciar automaticamente na inicialização! Artigos de referência:

  • https://www.linuxprobe.com/process-run-in-background.html
  • https://blog.csdn.net/Pan_peter/article/details/128875714

2. Soluções posteriores

Depois de funcionar sem problemas por cerca de meio mês, descobri acidentalmente que o serviço estava fora do ar novamente, não aguentava mais e ninguém conseguia ver se minha página pessoal estava funcionando todos os dias! Execute diretamente o script para verificar automaticamente se o serviço está em execução a cada período de tempo. Se não estiver em execução, reinicie-o! (Os scripts a seguir podem ser definidos e modificados por você mesmo, e os scripts são usados ​​informalmente)

#!/bin/sh

while true

do

ps -ef | grep "temporaryfile" | grep -v "grep"
#查找系统中含有"temporaryfile"字符的进程,并且排除grep本身的进程。
if [ "$?" -eq 1 ]
#如果未运行
then

python3 /home/xxx/xxxxxx.py
#启动应用,修改成自己的启动应用脚本或命令

echo "process has been restarted!"

else

echo "process already started!"

fi

sleep 60

done

Artigo de referência: https://zhuanlan.zhihu.com/p/599421452

3. Considerações Finais

Embora o método de script seja muito bom e o serviço esteja em execução até hoje, 3/09/2023, ele não desligou, mas não posso deixar de pensar em duas questões: 1. Por que
o serviço inicial do servidor web travou acima? Não consegui analisar o motivo, mesmo depois de olhar os registros.
2. Como os serviços de back-end das grandes empresas são operados e mantidos? Não preciso iniciar manualmente e verificar os processos um por um ou usar um script.

ai Resposta:
As implantações de back-end do Linux em grandes empresas geralmente empregam soluções mais complexas e abrangentes. Essas soluções podem incluir:

  1. Tecnologia de conteinerização: Use tecnologia de contêiner (como Docker) para empacotar aplicativos e suas dependências em imagens de contêiner portáteis, alcançando assim isolamento e escalabilidade.
  2. Implantação automatizada: Use ferramentas automatizadas (como Ansible, Chef ou Puppet) para gerenciar e implantar servidores e aplicativos para obter um processo de implantação rápido e confiável.
  3. Alta disponibilidade e balanceamento de carga: Use balanceadores de carga e ferramentas de gerenciamento de cluster para garantir alta disponibilidade e escalabilidade do sistema.
  4. Registro e monitoramento: Use ferramentas de registro e monitoramento (como pilha ELK, Prometheus, Grafana, etc.) para coletar, analisar e monitorar a operação do sistema, bem como solucionar problemas e otimizar o desempenho.

O motivo da falha do serviço é difícil de rastrear devido ao longo tempo (cerca de alguns meses atrás), mas a segunda questão pode continuar a promover um progresso infinito!

1. Tecnologia Docker: Depois de ler o tutorial w3c, comecei com sucesso e usei-o para construir um campo de tiro vulhub; https://www.w3cschool.cn/docker/docker-command-manual.html
2. Ferramenta de implantação automatizada: K8s, usado para implantação automática, um sistema de código aberto para escalar e gerenciar aplicativos em contêineres, isso parece precisar ser aprendido;
3. Balanceamento de carga e alta disponibilidade : Cluster de balanceamento de carga – Zhihu, abrindo a porta para um novo mundo. que a implementação da tecnologia de balanceamento de carga é exceto nginx, que eu conheço Além da tecnologia de software, há também a implementação da tecnologia de hardware;4.
Ferramentas de log e monitoramento : Elastic Stack (Elasticsearch Logstash e Kibana)
Elastic Stack, geralmente abreviado como ELK, é uma ferramenta popular de concentração, análise e visualização de log três em um que pode centralizar grandes quantidades de dados e logs de vários servidores em um único servidor.
ELK Stack consiste em 3 produtos diferentes:
Logstash
Logstash é um pipeline de dados gratuito e de código aberto que coleta dados de log e eventos e até mesmo processa os dados e os transforma na saída desejada. Use um proxy chamado “beats” para enviar dados do servidor remoto para o logstash. "beats" envia um grande número de métricas e logs do sistema para o Logstash, que é então processado. Em seguida, ele alimenta os dados para o Elasticsearch.
pesquisa elástica
Desenvolvido no Apache Lucene, o Elasticsearch é um mecanismo de pesquisa e análise distribuído de código aberto que funciona com quase todos os tipos de dados, estruturados e não estruturados. Isso inclui dados de texto, numéricos e geoespaciais.
Foi lançado pela primeira vez em 2010. Elasticsearch é o componente principal da pilha ELK, conhecido por sua velocidade, escalabilidade e API REST. Ele armazena, indexa e analisa grandes quantidades de dados passados ​​do Logstash.
Os dados do Kibana
são finalmente passados ​​para o Kibana, uma plataforma de visualização WebUI que roda junto com o Elasticsearch. O Kibana permite explorar e visualizar dados e logs de séries temporais do Elasticsearch. Ele visualiza dados e registros em painéis intuitivos em vários formatos, como gráficos de barras, gráficos de pizza, histogramas, etc.

Ainda há muito que aprender e não há limite para progredir! Abaixo estão alguns artigos de referência.

Artigo de referência:

  1. https://zhuanlan.zhihu.com/p/604456459#:~:text=6%E4%B8%AA%E6%AF%94%E8%BE%83%E5%A5%BD%E7%94%A8 %E7%9A%84%E5%BC%80%E6%BA%90%E9%9B%86%E4%B8%AD%E5%BC%8F%E6%97%A5%E5%BF%97%E7 %AE%A1%E7%90%86%E5%B7%A5%E5%85%B7%201%201%E3%80%81ManageEngine%20Log360%202%202%E3%80%81Elastic%20Stack%EF%BC %88Elasticsearch%20Logstash,3%203%E3%80%81Graylog%204%204%E3%80%81Fluentd%205%205%E3%80%81LOGalyze%206%206%E3%80%81NXlog
  2. https://zhuanlan.zhihu.com/p/231806045#%E9%9B%86%E7%BE%A4%E6%98%AF%E4%BB%80%E4%B9%88%EF%BC%9F
  3. https://zhuanlan.zhihu.com/p/38982164
  4. https://kubernetes.io/

Acho que você gosta

Origin blog.csdn.net/BinBinCome/article/details/132644944
Recomendado
Clasificación