새 보조 사이트 구성
GitLab v19.5Offering: GitLab Self-Managed
요약
이 단계는 보조 Geo 사이트 설정의 마지막 단계입니다. 보조 사이트를 구성하는 기본 단계는 다음과 같습니다: 이 문서는 첫 번째 항목을 다룹니다. 기본 사이트와 보조 사이트 양쪽의 사전 요구 사항: 보조 사이트에는 사용자 지정 인증을 설정하지 않습니다.
이 단계는 보조 Geo 사이트 설정의 마지막 단계입니다. 설정 과정의 각 단계는 문서에 나온 순서대로 완료해야 합니다. 그렇지 않다면 진행하기 전에 이전 단계를 모두 완료합니다.
보조 사이트를 구성하는 기본 단계는 다음과 같습니다:
- 기본 사이트와 보조 사이트 사이에 필요한 구성을 복제합니다.
- 각 보조 사이트에 추적 데이터베이스를 구성합니다.
- 각 보조 사이트에서 GitLab을 시작합니다.
이 문서는 첫 번째 항목을 다룹니다. 테스트나 프로덕션 환경에서 실행하기 전에 모든 단계를 먼저 끝까지 읽어 보기를 권장합니다.
기본 사이트와 보조 사이트 양쪽의 사전 요구 사항:
보조 사이트에는 사용자 지정 인증을 설정하지 않습니다. 이는 기본 사이트가 처리합니다. 보조 사이트는 읽기 전용 복제본이므로 Admin 영역에 접근해야 하는 변경은 기본 사이트에서 수행해야 합니다.
1단계. GitLab 시크릿 값 수동 복제#
GitLab은 여러 시크릿 값을 /etc/gitlab/gitlab-secrets.json 파일에 저장하며,
이 파일은 한 사이트의 모든 노드에서 동일해야 합니다. 사이트 간에 이 값을 자동으로
복제하는 수단이 마련되기 전까지(이슈 3789 참고),
보조 사이트의 모든 노드에 수동으로 복제해야 합니다.
-
기본 사이트의 Rails 노드에 SSH로 접속해 다음 명령을 실행합니다:
sudo cat /etc/gitlab/gitlab-secrets.json복제해야 할 시크릿이 JSON 형식으로 표시됩니다.
-
보조 Geo 사이트의 각 노드에 SSH로 접속해
root사용자로 로그인합니다:sudo -i -
기존 시크릿을 백업합니다:
mv /etc/gitlab/gitlab-secrets.json /etc/gitlab/gitlab-secrets.json.`date +%F` -
기본 사이트의 Rails 노드에 있는
/etc/gitlab/gitlab-secrets.json을 보조 사이트의 각 노드로 복사하거나, 노드 사이에서 파일 내용을 복사해 붙여 넣습니다:sudo editor /etc/gitlab/gitlab-secrets.json # paste the output of the `cat` command you ran on the primary # save and exit -
파일 권한이 올바른지 확인합니다:
chown root:root /etc/gitlab/gitlab-secrets.json chmod 0600 /etc/gitlab/gitlab-secrets.json -
변경 사항이 적용되도록 보조 사이트의 Rails, Sidekiq, Gitaly 노드를 각각 재구성합니다:
gitlab-ctl reconfigure gitlab-ctl restart
2단계. 기본 사이트의 SSH 호스트 키 수동 복제#
GitLab은 시스템에 설치된 SSH 데몬과 통합되며, 모든 접근 요청을 처리하는
사용자(일반적으로 git)를 지정합니다.
재해 복구 상황에서는 GitLab 시스템 관리자가 보조 사이트를 기본 사이트로 승격합니다. 기본 도메인의 DNS 레코드도 새 기본 사이트 (이전의 보조 사이트)를 가리키도록 업데이트해야 합니다. 이렇게 하면 Git 원격과 API URL을 변경하지 않아도 됩니다.
이 과정에서 SSH 호스트 키가 일치하지 않아 새로 승격된 기본 사이트로 향하는 모든 SSH 요청이 실패합니다. 이를 방지하려면 기본 사이트의 SSH 호스트 키를 보조 사이트에 수동으로 복제해야 합니다.
SSH 호스트 키 경로는 사용하는 소프트웨어에 따라 다릅니다:
- OpenSSH를 사용한다면 경로는
/etc/ssh입니다. gitlab-sshd를 사용한다면 경로는/var/opt/gitlab/gitlab-sshd입니다.
다음 단계에서 <ssh_host_key_path>를 사용 중인 경로로 바꿉니다:
-
보조 사이트의 각 Rails 노드에 SSH로 접속해
root사용자로 로그인합니다:sudo -i -
기존 SSH 호스트 키를 백업합니다:
find <ssh_host_key_path> -iname 'ssh_host_*' -exec cp {} {}.backup.`date +%F` \; -
기본 사이트에서 SSH 호스트 키를 복사합니다:
root 사용자로 기본 사이트에서 SSH 트래픽을 처리하는 노드(보통 주 GitLab Rails 애플리케이션 노드) 중 하나에 접근할 수 있다면:
# Run this from the secondary site, change `<primary_site_fqdn>` for the IP or FQDN of the server scp root@<primary_node_fqdn>:<ssh_host_key_path>/ssh_host_*_key* <ssh_host_key_path>sudo권한이 있는 사용자로만 접근할 수 있다면:# Run this from the node on your primary site: sudo tar --transform 's/.*\///g' -zcvf ~/geo-host-key.tar.gz <ssh_host_key_path>/ssh_host_*_key* # Run this on each node on your secondary site: scp <user_with_sudo>@<primary_site_fqdn>:geo-host-key.tar.gz . tar zxvf ~/geo-host-key.tar.gz -C <ssh_host_key_path> -
보조 사이트의 각 Rails 노드에서 파일 권한이 올바른지 확인합니다:
chown root:root <ssh_host_key_path>/ssh_host_*_key* chmod 0600 <ssh_host_key_path>/ssh_host_*_key -
키 지문이 일치하는지 확인하려면 각 사이트의 기본 노드와 보조 노드 양쪽에서 다음 명령을 실행합니다:
for file in <ssh_host_key_path>/ssh_host_*_key; do ssh-keygen -lf $file; done다음과 비슷한 출력이 나오며, 두 노드에서 동일해야 합니다:
1024 SHA256:FEZX2jQa2bcsd/fn/uxBzxhKdx4Imc4raXrHwsbtP0M root@serverhostname (DSA) 256 SHA256:uw98R35Uf+fYEQ/UnJD9Br4NXUFPv7JAUln5uHlgSeY root@serverhostname (ECDSA) 256 SHA256:sqOUWcraZQKd89y/QQv/iynPTOGQxcOTIXU/LsoPmnM root@serverhostname (ED25519) 2048 SHA256:qwa+rgir2Oy86QI+PZi/QVR+MSmrdrpsuH7YyKknC+s root@serverhostname (RSA) -
기존 개인 키에 대응하는 공개 키가 올바른지 확인합니다:
# This will print the fingerprint for private keys: for file in <ssh_host_key_path>/ssh_host_*_key; do ssh-keygen -lf $file; done # This will print the fingerprint for public keys: for file in <ssh_host_key_path>/ssh_host_*_key.pub; do ssh-keygen -lf $file; done[!note] 개인 키 명령과 공개 키 명령의 출력은 같은 지문을 생성해야 합니다.
-
보조 사이트의 각 Rails 노드에서 OpenSSH의
sshd또는gitlab-sshd서비스를 재시작합니다:-
OpenSSH의 경우:
# Debian or Ubuntu installations sudo service ssh reload # CentOS installations sudo service sshd reload -
gitlab-sshd의 경우:sudo gitlab-ctl restart gitlab-sshd
-
-
SSH가 여전히 정상 동작하는지 확인합니다.
새 터미널에서 GitLab 보조 서버에 SSH로 접속합니다. 접속할 수 없다면 앞 단계에 따라 권한이 올바른지 확인합니다.
3단계. 보조 사이트 추가#
-
보조 사이트의 각 Rails 및 Sidekiq 노드에 SSH로 접속해 root로 로그인합니다:
sudo -i -
/etc/gitlab/gitlab.rb를 편집해 사이트의 고유 이름을 추가합니다. 다음 단계에서 이 값이 필요합니다:## ## The unique identifier for the Geo site. See ## https://docs.gitlab.com/administration/geo_sites/#common-settings ## gitlab_rails['geo_node_name'] = '<site_name_here>' -
변경 사항이 적용되도록 보조 사이트의 각 Rails 및 Sidekiq 노드를 재구성합니다:
gitlab-ctl reconfigure -
기본 노드의 GitLab 인스턴스로 이동합니다:
- 오른쪽 위에서 Admin을 선택합니다.
- 왼쪽 사이드바에서 Geo > Sites를 선택합니다.
- Add site를 선택합니다.

- Name에는
/etc/gitlab/gitlab.rb의gitlab_rails['geo_node_name']값을 입력합니다. 이 두 값은 글자 하나까지 항상 정확히 일치해야 합니다. - External URL에는
/etc/gitlab/gitlab.rb의external_url값을 입력합니다. 이 두 값은 항상 일치해야 하지만, 한쪽이/로 끝나고 다른 쪽이 그렇지 않은 것은 문제가 되지 않습니다. - 선택 사항. **Internal URL (optional)**에는 보조 사이트의 내부 URL을 입력합니다.
- 선택 사항. 보조 사이트가 복제할 그룹이나 스토리지 샤드를 선택합니다. 비워 두면 전부 복제합니다. 자세한 내용은 선택적 동기화를 참고합니다.
- Save changes를 선택해 보조 사이트를 추가합니다.
-
보조 사이트의 각 Rails 및 Sidekiq 노드에 SSH로 접속해 서비스를 재시작합니다:
gitlab-ctl restart다음을 실행해 Geo 설정에 일반적인 문제가 있는지 확인합니다:
gitlab-rake gitlab:geo:check검사 중 하나라도 실패하면 문제 해결 문서를 확인합니다.
-
기본 사이트의 Rails 또는 Sidekiq 서버에 SSH로 접속해 root로 로그인한 뒤, 보조 사이트에 연결할 수 있는지와 Geo 설정에 일반적인 문제가 있는지 확인합니다:
gitlab-rake gitlab:geo:check검사 중 하나라도 실패하면 문제 해결 문서를 확인합니다.
보조 사이트를 Geo 관리 페이지에 추가하고 재시작하면, 해당 사이트는 기본 사이트에서 누락된 데이터를 자동으로 복제하기 시작합니다. 이 과정을 백필이라고 합니다. 한편 기본 사이트는 변경이 발생할 때마다 각 보조 사이트에 알리기 시작하며, 보조 사이트는 그 알림에 즉시 대응할 수 있습니다.
보조 사이트가 실행 중이고 접근 가능한지 확인합니다. 기본 사이트에서 사용한 자격 증명과 동일한 자격 증명으로 보조 사이트에 로그인할 수 있습니다.
기본 및 보조 URL을 허용된 ActionCable 원본으로 추가#
이 단계를 수행하면 기본 사이트와 보조 사이트에서 웹소켓이 문제없이 동작합니다.
-
사이트(기본과 보조)의 외부 URL을 수집합니다. 앞 절에서 설명한 대로 Admin 영역의 Site 페이지에서 확인할 수 있습니다.
-
기본 사이트의 각 Rails 및 Sidekiq 노드에 SSH로 접속해 root로 로그인합니다:
sudo -i -
/etc/gitlab/gitlab.rb를 편집해 1단계에서 수집한 URL을action_cable_allowed_origins설정에 추가합니다:gitlab_rails['action_cable_allowed_origins'] = ['https://secondary.example.com', 'https://primary.example.com'] -
변경 사항을 적용하려면 각 Rails 및 Sidekiq 노드를 재구성하고 서비스를 재시작합니다:
gitlab-ctl reconfigure gitlab-ctl restart
4단계. (선택 사항) 사용자 지정 인증서 사용#
다음에 해당한다면 이 단계를 건너뛰어도 됩니다:
- 기본 사이트가 공용 CA가 발급한 HTTPS 인증서를 사용합니다.
- 기본 사이트가 CA 발급(자체 서명이 아닌) HTTPS 인증서를 사용하는 외부 서비스에만 연결합니다.
인바운드 연결용 사용자 지정 또는 자체 서명 인증서#
GitLab Geo 기본 사이트가 인바운드 HTTPS 연결을 보호하는 사용자 지정 또는 자체 서명 인증서를 사용한다면, 이 인증서는 단일 도메인 인증서일 수도 있고 다중 도메인 인증서일 수도 있습니다.
인증서 유형에 맞는 인증서를 설치합니다:
- 기본 사이트와 보조 사이트 도메인을 모두 포함하는 다중 도메인 인증서: 보조 사이트의 모든 Rails, Sidekiq, Gitaly 노드에서
/etc/gitlab/ssl에 인증서를 설치합니다. - Geo 사이트 도메인마다 인증서가 다른 단일 도메인 인증서: 보조 사이트 도메인에 유효한 인증서를 생성하고, 이 지침에 따라 보조 사이트의 모든 Rails, Sidekiq, Gitaly 노드에서
/etc/gitlab/ssl에 설치합니다.
사용자 지정 인증서를 사용하는 외부 서비스 연결#
외부 서비스의 자체 서명 인증서 사본을, 해당 서비스에 접근해야 하는 기본 사이트의 모든 노드 트러스트 스토어에 추가해야 합니다.
보조 사이트도 같은 외부 서비스에 접근할 수 있으려면 이 인증서를 보조 사이트의 트러스트 스토어에도 추가해야 합니다.
기본 사이트가 인바운드 HTTPS 연결용 사용자 지정 또는 자체 서명 인증서를 사용한다면, 기본 사이트의 인증서를 보조 사이트의 트러스트 스토어에 추가해야 합니다:
-
보조 사이트의 각 Rails, Sidekiq, Gitaly 노드에 SSH로 접속해 root로 로그인합니다:
sudo -i -
기본 사이트에서 신뢰할 수 있는 인증서를 복사합니다:
root 사용자로 기본 사이트에서 SSH 트래픽을 처리하는 노드 중 하나에 접근할 수 있다면:
scp root@<primary_site_node_fqdn>:/etc/gitlab/trusted-certs/* /etc/gitlab/trusted-certssudo 권한이 있는 사용자로만 접근할 수 있다면:
# Run this from the node on your primary site: sudo tar --transform 's/.*\///g' -zcvf ~/geo-trusted-certs.tar.gz /etc/gitlab/trusted-certs/* # Run this on each node on your secondary site: scp <user_with_sudo>@<primary_site_node_fqdn>:geo-trusted-certs.tar.gz . tar zxvf ~/geo-trusted-certs.tar.gz -C /etc/gitlab/trusted-certs -
보조 사이트에서 업데이트한 각 Rails, Sidekiq, Gitaly 노드를 재구성합니다:
sudo gitlab-ctl reconfigure
5단계. 보조 사이트의 정상 동작 확인#
기본 사이트에서 사용한 자격 증명과 동일한 자격 증명으로 보조 사이트에 로그인할 수 있습니다. 로그인한 뒤에는 다음을 수행합니다:
- 오른쪽 위에서 Admin을 선택합니다.
- 왼쪽 사이드바에서 Geo > Sites를 선택합니다.
- 보조 Geo 사이트로 올바르게 식별되고 Geo가 활성화되어 있는지 확인합니다.
초기 복제에는 시간이 걸릴 수 있습니다. 사이트 상태나 '백필'이 아직 진행 중일 수 있습니다. 각 Geo 사이트의 동기화 진행 상황은 브라우저에서 기본 사이트의 Geo Sites 대시보드로 모니터링할 수 있습니다.

설치가 정상적으로 동작하지 않으면 문제 해결 문서를 확인합니다.
대시보드에서 드러날 수 있는 가장 뚜렷한 문제 두 가지는 다음과 같습니다:
- 데이터베이스 복제가 원활하지 않습니다.
- 인스턴스 간 알림이 동작하지 않습니다. 이 경우 원인은 다음 중
하나일 수 있습니다:
- 사용자 지정 인증서나 사용자 지정 CA를 사용하고 있습니다(문제 해결 문서 참고).
- 인스턴스가 방화벽에 막혀 있습니다(방화벽 규칙을 확인합니다).
보조 사이트를 비활성화하면 동기화 프로세스가 중지됩니다.
기본 사이트에서 여러 리포지터리 샤드에 대해 리포지터리 스토리지를 사용자 지정했다면 각 보조 사이트에도 동일한 구성을 그대로 적용해야 합니다.
사용자에게는 Geo 사이트 사용 가이드를 안내합니다.
현재 동기화되는 항목은 다음과 같습니다:
- Git 리포지터리.
- 위키.
- LFS 객체.
- 이슈, 머지 리퀘스트, 스니펫, 댓글 첨부 파일.
- 사용자, 그룹, 프로젝트 아바타.
문제 해결#
문제 해결 문서를 참고합니다.