GitLab_가이드

다중 노드/HA 배포

구일칠구 2022. 8. 2. 01:53

다중 노드/HA 배포

한 번에 하나의 부 릴리스만 업그레이드할 수 있습니다. 따라서 13.6에서 13.7로, 13.8에서는 아닙니다. 부 릴리스를 두 개 이상 시도하면 업그레이드가 실패할 수 있습니다.

웹(Puma) 노드 앞에서 로드 밸런서 사용

Puma를 사용하면 단일 노드 제로 다운타임 업데이트가 더 이상 불가능합니다. 다운타임 없는 업데이트로 HA를 달성하려면 두 노드에 연결을 적절하게 분배하는 로드 밸런서와 함께 최소 두 개의 노드를 사용해야 합니다.

애플리케이션 노드 앞의 로드 밸런서는 서비스가 트래픽을 수락하는지 여부를 확인하기 위해 적절한 상태 확인 엔드포인트를 확인하도록 구성되어야 합니다. Puma의 경우 /-/readiness엔드포인트를 사용해야 하며 /readinessSidekiq 및 기타 서비스에는 엔드포인트를 사용할 수 있습니다.

웹(Puma) 노드의 업그레이드는 하나 이상의 노드가 항상 트래픽을 처리할 수 있도록 롤링 방식으로 수행되어야 합니다. 이는 제로 다운타임을 보장하기 위해 필요합니다.

Puma는 업그레이드의 일부로 블랙아웃 기간에 들어갑니다. 이 기간 동안 노드는 계속 연결을 수락하지만 해당 상태 확인 엔드포인트를 비정상으로 표시합니다. 이를 본 로드 밸런서는 이들을 정상적으로 연결 해제해야 합니다.

현재 처리 중인 모든 요청을 완료한 후에만 Puma가 다시 시작됩니다. 이는 데이터 및 서비스 무결성을 보장합니다. 다시 시작되면 상태 확인 엔드포인트가 정상으로 표시됩니다.

로드 밸런서를 사용하여 HA 인스턴스를 최신 GitLab 버전으로 업데이트하려면 다음 순서로 노드를 업데이트해야 합니다.

  1. 하나의 애플리케이션 노드를 배포 노드로 선택하고 다음 단계를 완료하십시오.
    1. 에 빈 파일을 만듭니다 /etc/gitlab/skip-auto-reconfigure. 이렇게 하면 gitlab-ctl reconfigure기본적으로 GitLab을 자동으로 중지하고, 모든 데이터베이스 마이그레이션을 실행하고, GitLab을 다시 시작하는 업그레이드가 실행되지 않습니다.
    2.  sudo touch /etc/gitlab/skip-auto-reconfigure
                
    3. GitLab 패키지를 업데이트합니다.Community Edition 사용자인 경우 위 명령에서 로 바꿉니다 gitlab-ee. gitlab-ce
    4. # Debian/Ubuntu
                sudo apt-get update && sudo apt-get install gitlab-ee
                
                # Centos/RHEL
                sudo yum install gitlab-ee
                
    5. 정기적인 마이그레이션과 최신 코드를 제자리에 두십시오. 이 단계를 실행하기 전에 배포 노드의 /etc/gitlab/gitlab.rb구성 파일이 gitlab_rails['auto_migrate'] = true정기적인 마이그레이션을 허용해야 합니다.
    6. sudo SKIP_POST_DEPLOYMENT_MIGRATIONS=true gitlab-ctl reconfigure
                
    7. 서비스가 최신 코드를 사용하는지 확인합니다.
    8. sudo gitlab-ctl hup puma
                sudo gitlab-ctl restart sidekiq
                
  2. 다른 Puma/Sidekiq 노드에서 다음 단계를 차례로 완료하십시오. 다음 노드로 진행하기 전에 항상 이러한 노드 중 하나 이상이 작동 및 실행 중이고 로드 밸런서에 연결되어 있는지 확인하십시오.
    1. GitLab 패키지를 업데이트하고 패키지의 reconfigure일부로 실행 되는지 확인 하십시오. 그렇지 않은 경우( /etc/gitlab/skip-auto-reconfigure파일이 있기 때문에 ) sudo gitlab-ctl reconfigure수동으로 실행 합니다.
    2. 서비스가 최신 코드를 사용하는지 확인:
    3. sudo gitlab-ctl hup puma
                sudo gitlab-ctl restart sidekiq
                
  3. 배포 노드에서 배포 후 마이그레이션을 실행합니다.
  4.    sudo gitlab-rake db:migrate
          

지탈리 클러스터

Gitaly Cluster 는 Gitaly와 Praefect 구성 요소를 사용하여 구축됩니다. 애플리케이션의 나머지 부분과 별개로 자체 PostgreSQL 데이터베이스가 있습니다.

메인 애플리케이션을 업데이트하기 전에 Praefect를 업데이트해야 합니다. Praefect 노드 중 하나를 Praefect 배포 노드로 선택하십시오. 여기에서 새로운 Omnibus 패키지를 먼저 설치하고 데이터베이스 마이그레이션을 실행합니다.

Praefect 배포 노드

  • 에 빈 파일을 만듭니다 /etc/gitlab/skip-auto-reconfigure. 이렇게 하면 gitlab-ctl reconfigure기본적으로 GitLab을 자동으로 중지하고, 모든 데이터베이스 마이그레이션을 실행하고, GitLab을 다시 시작하는 업그레이드가 실행되지 않습니다.
  • sudo touch /etc/gitlab/skip-auto-reconfigure
          
  • praefect['auto_migrate'] = true에 설정되어 있는지 확인하십시오 ./etc/gitlab/gitlab.rb

Praefect 배포 노드 를 제외한 모든 Praefect 노드

  • reconfigure데이터베이스 마이그레이션이 자동으로 실행 되지 않도록 하려면 praefect['auto_migrate'] = false이 에 설정되어 있는지 확인 /etc/gitlab/gitlab.rb하십시오.

Praefect 배포 노드

  • GitLab 패키지를 업데이트합니다.Community Edition 사용자인 경우 위 명령에서 로 바꿉니다 gitlab-ee.gitlab-ce
  • # Debian/Ubuntu
          sudo apt-get update && sudo apt-get install gitlab-ee
          
          # Centos/RHEL
          sudo yum install gitlab-ee
          
  • Praefect 데이터베이스 마이그레이션을 적용하고 Praefect를 다시 시작하려면 다음을 실행하십시오.
  • sudo gitlab-ctl reconfigure
          

Praefect 배포 노드 를 제외한 모든 Praefect 노드

  • GitLab 패키지를 업데이트합니다.Community Edition 사용자인 경우 위 명령에서 로 바꿉니다 gitlab-ee.gitlab-ce
  • sudo apt-get update && sudo apt-get install gitlab-ee
          
  • 노드가 최신 코드를 실행 중인지 확인하십시오.
  • sudo gitlab-ctl reconfigure