Geo 구성
새 보조 사이트 구성
그렇지 않으면 진행하기 전에 이전 모든 단계를 완료해야 합니다.
주 사이트 및 보조 사이트의 데이터베이스 복제 및 권한 부여된 SSH 키의 빠른 조회를 구성했는지 확인하세요.
보조 사이트 설정의 기본 단계는 다음과 같습니다:
- 주 사이트와 보조 사이트 간에 필요한 구성 복제
- 각 보조 사이트에 추적 데이터베이스 구성
- 각 보조 사이트에서 GitLab 시작
실험 또는 프로덕션 환경에서 실행하기 전에 모든 단계를 먼저 읽고 진행하는 것이 좋습니다.
주 사이트는 읽기 전용 복제본이므로 관리 영역에 액세스하는 데 필요한 변경 사항은 주 사이트에서 수행해야 합니다.
단계 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 # 주 사이트에서 실행한 `cat` 명령의 출력을 붙여넣기하세요 # 저장하고 나가기
-
파일 권한이 올바른지 확인하세요:
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 트래픽을 제공하는 주 사이트 노드(일반적으로 주 GitLab Rails 애플리케이션 노드) 중 하나에 액세스할 수 있는 경우:
# 이를 실행하는 방법은 보조 사이트에서 수행하세요. <primary_node_fqdn>을 서버의 IP 또는 FQDN으로 변경하세요 scp root@<primary_node_fqdn>:<ssh_host_key_path>/ssh_host_*_key* <ssh_host_key_path>
사용자가
sudo
권한으로만 액세스할 수 있는 경우:# 주 사이트 노드에서 실행하세요: sudo tar --transform 's/.*\///g' -zcvf ~/geo-host-key.tar.gz <ssh_host_key_path>/ssh_host_*_key* # 보조 사이트의 각 노드에서 실행하세요: 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)
-
기존 개인 키에 대한 올바른 공개 키를 가져왔는지 확인하세요:
# 이 명령은 개인 키의 지문을 출력합니다: for file in <ssh_host_key_path>/ssh_host_*_key; do ssh-keygen -lf $file; done # 이 명령은 공개 키의 지문을 출력합니다: for file in <ssh_host_key_path>/ssh_host_*_key.pub; do ssh-keygen -lf $file; done
개인 키 및 공개 키 명령에 대한 출력이 동일한 지문을 생성해야 합니다. -
보조의 각 Rails 노드에서 OpenSSH의 경우
sshd
를 또는gitlab-sshd
서비스를 다시 시작하세요:-
OpenSSH의 경우:
# Debian 또는 Ubuntu 설치의 경우 sudo service ssh reload # CentOS 설치의 경우 sudo service sshd reload
-
gitlab-sshd
의 경우:sudo gitlab-ctl restart gitlab-sshd
-
-
SSH가 여전히 정상 작동하는지 확인하세요.
새로운 터미널에서 본사의 GitLab 보조 서버로 SSH합니다. 연결할 수 없는 경우, 이전 단계에 따라 권한을 확인하세요.
단계 3. 보조 사이트 추가하기
-
보조 사이트의 각 Rails 및 Sidekiq 노드에 SSH로 로그인한 후 루트로 로그인합니다:
sudo -i
-
/etc/gitlab/gitlab.rb
파일을 편집하고 고유한 사이트 이름을 추가합니다. 다음 단계에서 이것이 필요합니다:## ## The unique identifier for the Geo site. See ## https://docs.gitlab.com/ee/administration/geo_sites.html#common-settings ## gitlab_rails['geo_node_name'] = '<site_name_here>'
-
변경 사항이 적용되려면 보조 사이트의 각 Rails 및 Sidekiq 노드를 다시 구성합니다:
gitlab-ctl reconfigure
- 기본 노드 GitLab 인스턴스로 이동합니다:
- 왼쪽 사이드바에서 가장 아래에서 관리자 영역을 선택합니다.
- 왼쪽 사이드바에서 Geo > 사이트를 선택합니다.
-
사이트 추가를 선택합니다.
-
이름에는
/etc/gitlab/gitlab.rb
에 있는gitlab_rails['geo_node_name']
의 값을 입력합니다. 이 값들은 완전히 동일해야 합니다. -
외부 URL에는
/etc/gitlab/gitlab.rb
에 있는external_url
의 값을 입력합니다. 이 값들은 항상 일치해야 하지만 하나의 URL이/
로 끝나고 다른 하나는 그렇지 않아도 괜찮습니다. - 선택 사항. 내부 URL (선택 사항)에는 기본 사이트의 내부 URL을 입력합니다.
- 선택 사항. 보조 사이트에서 복제해야 할 그룹 또는 스토리지 샤드를 선택합니다. 모두 복제하려면 비워두십시오. 자세한 내용은 선택적 동기화를 참조하십시오.
- 변경 사항 저장을 선택하여 보조 사이트를 추가합니다.
-
보조 사이트의 각 Rails 및 Sidekiq 노드에 SSH로 로그인하여 서비스를 다시 시작합니다:
gitlab-ctl restart
다음 명령을 실행하여 Geo 설정에 일반적인 문제가 있는지 확인합니다:
gitlab-rake gitlab:geo:check
어떤 체크가 실패하는 경우, 문제 해결 문서를 확인하십시오.
-
기본 사이트의 Rails 또는 Sidekiq 서버에 SSH로 로그인하여 보조 사이트에 연결되었는지 또는 Geo 설정에 일반적인 문제가 있는지 확인합니다:
gitlab-rake gitlab:geo:check
어떤 체크가 실패하는 경우, 문제 해결 문서를 확인하십시오.
보조 사이트가 Geo 관리 페이지에 추가되고 재시작되면, 사이트는 백필 프로세스로 기본 사이트에서 누락 된 데이터를 자동으로 복제하기 시작합니다. 한편, 기본 사이트는 각 보조 사이트에 변경 사항을 알리기 시작하여 보조 사이트가 해당 통지에 즉시 대응할 수 있도록 합니다.
보조 사이트가 실행되고 액세스 가능한지 확인하십시오. 기본 사이트에서 사용한 것과 동일한 자격 증명으로 보조 사이트에 로그인할 수 있습니다.
단계 4. (선택 사항) 사용자 정의 인증서 사용
다음의 경우 이 단계를 건너 뛸 수 있습니다:
- 기본 사이트가 공개 CA 발급 HTTPS 인증서를 사용하는 경우.
- 기본 사이트가 CA 발급(셀프 서명이 아닌) HTTPS 인증서로만 외부 서비스에 연결하는 경우.
수신 연결을 위한 사용자 정의 또는 셀프 서명 인증서
만약 GitLab Geo 기본 사이트가 수신 HTTPS 연결을 보호하기 위해 사용자 정의 또는 셀프 서명 인증서를 사용하는 경우, 이는 단일 도메인 또는 다중 도메인 인증서가 될 수 있습니다.
인증서 유형에 따라 올바른 인증서를 설치하십시오:
-
기본 및 보조 사이트 도메인을 모두 포함하는 다중 도메인 인증서: 보조 사이트의 모든 Rails, Sidekiq, Gitaly 노드에
/etc/gitlab/ssl
에 인증서를 설치합니다. - 각 Geo 사이트 도메인에 특정한 단일 도메인 인증서: 보조 사이트 도메인에 대한 유효한 인증서를 생성하고, 이를 보조 사이트의 모든 Rails, Sidekiq, Gitaly 노드에 다음 지침을 따라 설치합니다.
사용자 정의 인증서를 사용하는 외부 서비스에 연결
외부 서비스가 사용자 정의 인증서를 사용하는 경우, 해당 서비스의 셀프 서명 인증서 사본을 기본 사이트의 모든 노드의 신뢰 리포지터리에 추가해야 합니다.
보조 사이트가 동일한 외부 서비스에 액세스하려면 이러한 인증서를 보조 사이트의 신뢰 리포지터리에 반드시 추가해야 합니다.
기본 사이트가 수신 HTTPS 연결을 위해 사용자 정의 또는 셀프 서명 인증서를 사용하는 경우, 기본 사이트의 인증서를 보조 사이트의 신뢰 리포지터리에 추가해야 합니다:
-
보조 사이트의 각 Rails, Sidekiq, Gitaly 노드에 SSH로 로그인한 후 루트로 로그인합니다:
sudo -i
-
기본 사이트에서 신뢰할 수 있는 인증서를 복사합니다:
기본 사이트의 루트 사용자를 통해 SSH 트래픽을 제공하는 노드에 액세스할 수 있는 경우:
scp root@<primary_site_node_fqdn>:/etc/gitlab/trusted-certs/* /etc/gitlab/trusted-certs
sudo 권한이 있는 사용자를 통해 액세스할 수 있는 경우:
# 기본 사이트의 노드에서 실행: sudo tar --transform 's/.*\///g' -zcvf ~/geo-trusted-certs.tar.gz /etc/gitlab/trusted-certs/* # 보조 사이트의 각 노드에서 실행: 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. HTTP/HTTPS 및 SSH를 통한 Git 액세스 활성화
Geo는 리포지터리를 HTTP/HTTPS를 통해 동기화하므로, 복제 방법을 활성화해야 합니다. 이는 기본적으로 활성화되어 있지만, 기존 사이트를 Geo로 변환하는 경우 확인해야 합니다.
주 사이트에서:
- 왼쪽 사이드바에서 아래로 스크롤하여 관리 영역을 선택합니다.
- 설정 > 일반을 선택합니다.
- 가시성 및 액세스 제어를 확장합니다.
- Git을 SSH로 사용하는 경우:
- “Git 액세스 프로토콜 활성화”가 “SSH 및 HTTP(S)”로 설정되어 있는지 확인합니다.
- 주 사이트 및 모든 주/보조 사이트에서 데이터베이스 내 권한 부여된 SSH 키의 빠른 조회를 따릅니다.
- Git을 SSH를 통해 사용하지 않는 경우, “Git 액세스 프로토콜 활성화”를 “HTTP(S)만”으로 설정합니다.
단계 6. 보조 사이트의 적절한 작동 확인
주 사이트와 동일한 자격 증명으로 보조 사이트에 로그인할 수 있습니다. 로그인한 후:
- 왼쪽 사이드바에서 아래로 스크롤하여 관리 영역을 선택합니다.
- Geo > 사이트를 선택합니다.
- 올바르게 보조 Geo 사이트로 식별되고 Geo가 활성화되어 있는지 확인합니다.
최초 복제에는 시간이 필요할 수 있습니다. 사이트의 상태 또는 ‘백필’이 아직 진행 중일 수 있습니다. 브라우저에서 주 사이트의 Geo 사이트 대시보드에서 각 Geo 사이트의 동기화 프로세스를 모니터링할 수 있습니다.
설치가 제대로 작동하지 않는 경우 문제 해결 문서를 확인하세요.
대시보드에서 명백하게 나타날 수 있는 두 가지 문제는 다음과 같습니다:
- 데이터베이스 복제가 제대로 작동하지 않음
- 인스턴스 간 알림이 작동하지 않음. 이 경우 다음 중 하나일 수 있습니다:
- 사용자 지정 인증서 또는 사용자 지정 CA를 사용 중인 경우 (문제 해결 문서를 참조하세요).
- 인스턴스의 방화벽이 작동 중인지 확인합니다.
보조 사이트를 비활성화하면 동기화 프로세스가 중지됩니다.
주 사이트에서 git_data_dirs
가 여러 리포지터리 샤드에 대해 사용자 정의된 경우, 각 보조 사이트에 동일한 구성을 복제해야 합니다.
사용자를 Geo 사이트 사용 가이드로 안내하세요.
현재 다음이 동기화됩니다:
- Git 리포지터리.
- 위키.
- LFS 객체.
- 이슈, Merge Request, 스니펫 및 코멘트 첨부 파일.
- 사용자, 그룹 및 프로젝트 아바타.
선택적 동기화
Geo는 선택적 동기화를 지원하며, 이를 통해 관리자가 보조 사이트에서 동기화할 프로젝트를 선택할 수 있습니다. 일부 프로젝트는 그룹별이나 리포지터리 샤드별로 선택할 수 있습니다. 전자는 사용자 일부에게 속한 데이터를 복제하는 데 이상적이며, 후자는 대규모 GitLab 인스턴스에 Geo를 점진적으로 배포하는 데 보다 적합합니다.
선택적 동기화:
- 보조 사이트에서 권한을 제한하지 않습니다.
-
보조 사이트에서 프로젝트 메타데이터를 숨기지 않습니다.
- 현재 Geo는 PostgreSQL 복제를 의존하고 있으므로 모든 프로젝트 메타데이터가 보조 사이트로 복제되지만, 선택되지 않은 리포지터리는 비어 있습니다.
- Geo 이벤트 로그를 생성하는 이벤트 수를 줄이지 않습니다.
- 주 사이트는 보조 사이트가 있는 한 이벤트를 생성합니다. 선택적 동기화 제한은 보조 사이트에서 구현되며, 주 사이트에서 구현되지 않습니다.
복제되지 않은 리포지터리에서의 Git 작업
- HTTP(S)에서 12.10 버전에서 도입
- SSH에서 13.0 버전에서 도입
HTTP(S) 및 SSH에서 리포지터리의 Git clone, pull 및 push 작업은 주 사이트에만 존재하는 리포지터리에서도 지원됩니다. 이러한 상황은 다음과 같을 수 있습니다:
- 선택적 동기화에 프로젝트가 포함되지 않는 경우
- 리포지터리가 활발하게 복제되고 있지만 아직 완료되지 않은 경우
Geo 업그레이드
Geo 사이트 업그레이드 문서를 참조하세요.
문제 해결
문제 해결 문서를 참조하세요.