두 개의 단일 노드 사이트에 대한 Geo 설정
Offering: Self-managed
다음 가이드는 외부 서비스가 설정되지 않은 두 Linux 패키지 인스턴스를 사용하여 두 개의 단일 노드 사이트 설치에 대한 GitLab Geo 배포를 간결하게 안내합니다.
필수 사항:
- 독립적으로 작동하는 GitLab 사이트가 적어도 두 개 있어야 합니다.
사이트를 만들려면 GitLab 참조 아키텍처 설명서를 참조하세요.
- 한 GitLab 사이트는 Geo 기본 사이트로 사용됩니다. 각 Geo 사이트에 서로 다른 참조 아키텍처 크기를 사용할 수 있습니다. 이미 작동 중인 GitLab 인스턴스가 있는 경우 해당 인스턴스를 기본 사이트로 사용할 수 있습니다.
- 두 번째 GitLab 사이트는 Geo 보조 사이트로 사용됩니다. Geo는 여러 보조 사이트를 지원합니다.
- Geo 기본 사이트에는 적어도 GitLab 프리미엄 라이선스가 있어야 합니다. 모든 사이트에는 하나의 라이선스만 필요합니다.
- 모든 사이트가 Geo 실행 요구 사항을 충족하는지 확인하세요.
Linux 패키지(Omnibus)를 위한 Geo 설정
필수 사항:
- PostgreSQL 12 이상을 사용합니다.
이는
pg_basebackup
도구가 포함되어 있어야 합니다.
기본 사이트 구성
-
GitLab 기본 사이트에 SSH로 로그인한 후 root로 전환합니다.
sudo -i
-
/etc/gitlab/gitlab.rb
에 고유한 Geo 사이트 이름을 추가합니다.## ## Geo 사이트의 고유 식별자. 자세한 내용은 ## https://docs.gitlab.com/ee/administration/geo_sites.html#common-settings를 참조하세요. ## gitlab_rails['geo_node_name'] = '<여기에_사이트_이름_입력>'
-
변경 사항을 적용하려면 기본 사이트를 다시 구성합니다.
gitlab-ctl reconfigure
-
해당 사이트를 기본 Geo 사이트로 정의합니다.
gitlab-ctl set-geo-primary-node
이 명령은
/etc/gitlab/gitlab.rb
에 정의된external_url
을 사용합니다. -
gitlab
데이터베이스 사용자를 위한 암호를 생성합니다.-
원하는 암호의 MD5 해시를 생성합니다.
gitlab-ctl pg-password-md5 gitlab # 암호 입력: <여기에_암호_입력> # 암호 확인: <여기에_암호_입력> # fca0b89a972d69f00eb3ec98a5838484
-
/etc/gitlab/gitlab.rb
을 편집합니다.# `gitlab-ctl pg-password-md5 gitlab`로 생성된 해시로 채웁니다. postgresql['sql_user_password'] = '<여기에_암호의_md5_해시_입력>' # Puma 또는 Sidekiq를 실행하는 모든 노드는 아래와 같이 데이터베이스 # 암호를 지정해야 합니다. 고가용성 설정인 경우 모든 응용 프로그램 노드에 # 이 설정이 있어야 합니다. gitlab_rails['db_password'] = '<여기에_암호_입력>'
-
-
데이터베이스 복제 사용자를 위한 암호를 정의합니다.
/etc/gitlab/gitlab.rb
에서 정의된 사용자를 사용하세요. 기본값은gitlab_replicator
입니다.-
원하는 암호의 MD5 해시를 생성합니다.
gitlab-ctl pg-password-md5 gitlab_replicator # 암호 입력: <여기에_암호_입력> # 암호 확인: <여기에_암호_입력> # 950233c0dfc2f39c64cf30457c3b7f1e
-
/etc/gitlab/gitlab.rb
을 편집합니다.# `gitlab-ctl pg-password-md5 gitlab_replicator`로 생성된 해시로 채웁니다. postgresql['sql_replication_password'] = '<여기에_암호의_md5_해시_입력>'
-
선택 사항. Linux 패키지로 관리되지 않는 외부 데이터베이스를 사용하는 경우
gitlab_replicator
사용자를 만들고 해당 사용자의 암호를 수동으로 정의해야 합니다.--- 새로운 'replicator' 사용자 생성 CREATE USER gitlab_replicator; --- 암호 설정 및 복제 권한 부여 ALTER USER gitlab_replicator WITH REPLICATION ENCRYPTED PASSWORD '<복제_암호>';
-
-
/etc/gitlab/gitlab.rb
에서geo_primary_role
을 사용하도록 역할을 설정합니다.## Geo 기본 역할 roles(['geo_primary_role'])
-
PostgreSQL이 네트워크 인터페이스에서 수신하도록 구성합니다.
-
Geo 사이트의 주소를 조회하려면 Geo 사이트에 SSH로 연결한 후 다음 명령을 실행합니다.
## ## 사설 주소 ## ip route get 255.255.255.255 | awk '{print "Private address:", $NF; exit}' ## ## 공용 주소 ## echo "External address: $(curl --silent "ipinfo.io/ip")"
대부분의 경우, 다음 주소를 사용하여 GitLab Geo를 구성합니다:
구성 주소 postgresql['listen_address']
기본 사이트의 공용 또는 VPC 사설 주소. postgresql['md5_auth_cidr_addresses']
기본 사이트와 보조 사이트의 공용 또는 VPC 사설 주소. Google Cloud Platform, SoftLayer 또는 기타 가상 사설 클라우드(VPC)를 제공하는 공급업체를 사용하는 경우,
postgresql['md5_auth_cidr_addresses']
와postgresql['listen_address']
에서 기본과 보조 사이트의 사설 주소(VPC의 경우 “내부 주소”에 해당)를 사용할 수 있습니다.참고:
0.0.0.0
또는*
를listen_address
로 사용해야 하는 경우,postgresql['md5_auth_cidr_addresses']
설정에127.0.0.1/32
를 추가하여 Rails가127.0.0.1
을 통해 연결할 수 있도록 해야 합니다. 자세한 내용은 issue 5258를 참조하세요.네트워크 구성에 따라 제시된 주소가 잘못될 수 있습니다. 기본와 보조 사이트가 로컬 영역 네트워크, Amazon의 VPC 또는 Google의 VPC와 같은 가용성 영역을 연결하는 가상 네트워크를 통해 연결되는 경우, PostgreSQL[‘md5_auth_cidr_addresses’] 설정에서 보조 사이트 사설 주소를 사용해야 합니다.
-
/etc/gitlab/gitlab.rb
에 다음 줄을 추가합니다. 주소는 네트워크 구성에 맞게 적절히 대체하세요.## ## 기본 주소 ## - '<기본_노드_IP>'를 Geo 기본 노드의 공용 또는 VPC 주소로 교체하세요. ## postgresql['listen_address'] = '<기본_사이트_IP>' ## # PostgreSQL 클라이언트 인증을 기본 및 보조 IP에서 허용합니다. 이 IP는 예를 들어 CIDR 형식으로 공용 또는 VPC 주소일 수 있습니다. ['198.51.100.1/32', '198.51.100.2/32']와 같이요. ## postgresql['md5_auth_cidr_addresses'] = ['<기본_사이트_IP>/32', '<보조_사이트_IP>/32']
-
-
PostgreSQL이 개인 주소에서 수신하고 재시작한 후 듣고 있는지 확인하기 위해
netstat -plnt | grep 5432
를 실행합니다. -
PostgreSQL 트래픽을 보호하기 위해 인증서가 자동으로 생성되었습니다. eavesdroppers에서 PostgreSQL 트래픽을 보호하기 위해 인증서를 보조 사이트에 복사합니다.
-
기본 사이트에서
server.crt
의 사본을 만듭니다.cat ~gitlab-psql/data/server.crt
-
나중에 보조 사이트를 구성할 때 출력을 저장합니다. 인증서는 민감한 데이터가 아닙니다.
일반적인
PostgreSQL
공통 이름으로 인증서가 자동으로 생성되었습니다. 호스트 이름 불일치 오류를 방지하려면 데이터베이스를 복제할 때verify-ca
모드를 사용해야 합니다. -
보조 서버 구성
-
GitLab 보조 사이트에 SSH를 하고 root로 로그인합니다.
sudo -i
-
사이트가 구성되기 전에 어떤 명령도 실행되지 않도록 하려면 응용 프로그램 서버와 Sidekiq를 중지합니다.
gitlab-ctl stop puma gitlab-ctl stop sidekiq
-
주 사이트 PostgreSQL 서버로의 TCP 연결을 확인합니다: TCP 연결 확인
gitlab-rake gitlab:tcp_check[<primary_site_ip>,5432]
만약 이 단계에서 실패하면, 잘못된 IP 주소를 사용하고 있거나 방화벽이 사이트 접속을 막고 있을 수 있습니다. IP 주소를 확인하고 공용 주소와 사설 주소의 차이에 유의하십시오. 방화벽이 있다면, 보조 사이트가 5432 포트로 주 사이트에 연결할 수 있도록 허용되어 있는지 확인하십시오.
-
보조 사이트에서
server.crt
라는 파일을 만들고 주 사이트를 구성할 때 만든 인증서 사본을 추가합니다.editor server.crt
-
보조 사이트에서 PostgreSQL TLS 확인을 설정하려면
server.crt
를 설치합니다.install \ -D \ -o gitlab-psql \ -g gitlab-psql \ -m 0400 \ -T server.crt ~gitlab-psql/.postgresql/root.crt
이제 PostgreSQL은 TLS 연결을 확인할 때 정확히 이 인증서만 인식합니다. 이 인증서는 주 사이트에서만 가지고 있는 개인 키로 복제할 수 있습니다.
-
gitlab-psql
사용자가 주 사이트 데이터베이스에 연결할 수 있는지 테스트합니다. 기본 Linux 패키지 이름은gitlabhq_production
입니다.sudo \ -u gitlab-psql /opt/gitlab/embedded/bin/psql \ --list \ -U gitlab_replicator \ -d "dbname=gitlabhq_production sslmode=verify-ca" \ -W \ -h <primary_site_ip>
프롬프트가 나타나면
gitlab_replicator
사용자에 대해 설정한 평문 암호를 입력하십시오. 모든 것이 올바르게 작동했다면, 주 사이트 데이터베이스 목록이 표시됩니다. -
/etc/gitlab/gitlab.rb
를 편집하고 역할을geo_secondary_role
로 설정합니다.## ## Geo 보조 역할 ## - 종속 플래그를 자동으로 구성하여 Geo를 활성화합니다. ## roles(['geo_secondary_role'])
자세한 내용은 Geo 역할을 참조하십시오.
-
PostgreSQL을 구성하려면,
/etc/gitlab/gitlab.rb
를 편집하고 다음을 추가합니다.## ## 보조 주소 ## - '<secondary_site_ip>'를 Geo 보조 사이트의 공용 또는 VPC 주소로 바꿉니다. ## postgresql['listen_address'] = '<secondary_site_ip>' postgresql['md5_auth_cidr_addresses'] = ['<secondary_site_ip>/32'] ## ## 데이터베이스 자격 증명 암호 (주 사이트에서 이전에 정의됨) ## - 기존 값과 동일한 값으로 여기서 재현합니다. ## postgresql['sql_replication_password'] = '<md5_hash_of_your_password>' postgresql['sql_user_password'] = '<md5_hash_of_your_password>' gitlab_rails['db_password'] = '<your_password_here>'
IP 주소를 네트워크 구성과 일치하도록 교체해야 합니다.
-
변경 사항을 적용하려면 GitLab을 재구성합니다.
gitlab-ctl reconfigure
-
IP 주소 변경을 적용하려면 PostgreSQL을 다시 시작합니다.
gitlab-ctl restart postgresql
데이터베이스 복제
보조 사이트의 데이터베이스를 주 사이트의 데이터베이스에 연결합니다. 아래 스크립트를 사용하여 데이터베이스를 복제하고 스트리밍 복제에 필요한 파일을 만들 수 있습니다.
이 스크립트는 기본 Linux 패키지 디렉토리를 사용합니다. 기본값을 변경했다면 스크립트에서 디렉터리와 경로 이름을 자체 이름으로 바꿔야 합니다.
경고:
복제 스크립트는 보조 사이트에서만 실행해야 합니다.
이 스크립트는 pg_basebackup
를 실행하기 전에 모든 PostgreSQL 데이터를 제거하므로 데이터 손실이 발생할 수 있습니다.
데이터베이스를 복제하려면:
-
GitLab 보조 사이트에 SSH를 하고 root로 로그인합니다.
sudo -i
-
보조 사이트에서 데이터베이스에 대해 복제 슬롯 이름으로 사용할 데이터베이스 친화적인 이름을 선택합니다. 예를 들어, 도메인이
secondary.geo.example.com
인 경우,secondary_example
을 슬롯 이름으로 사용합니다. 복제 슬롯 이름은 소문자, 숫자 및 밑줄 문자만 포함해야 합니다. -
아래 명령을 실행하여 데이터베이스를 백업하고 복원하고 복제를 시작합니다.
경고: 각 Geo 보조 사이트는 고유한 복제 슬롯 이름을 가져야 합니다. 두 개의 보조 사이트 간에 동일한 슬롯 이름을 사용하는 것은 PostgreSQL 복제를 중단시킵니다.
gitlab-ctl replicate-geo-database \ --slot-name=<secondary_site_name> \ --host=<primary_site_ip> \ --sslmode=verify-ca
프롬프트가 나타나면
gitlab_replicator
에 대해 설정한 평문 암호를 입력하십시오.
복제 프로세스가 완료되었습니다.
새 보조 사이트 구성
복제 프로세스가 완료되면 인증된 SSH 키를 빠르게 찾을 수 있도록 구성해야 합니다.
참고: 인증은 기본 사이트에서 처리됩니다. 보조 사이트에 사용자 지정 인증을 설정하지 마십시오. 어드민 영역에 액세스가 필요한 변경 사항은 기본 사이트에서 수행해야 합니다. 보조 사이트는 읽기 전용 복사본이기 때문입니다.
비밀 GitLab 값 수동 복제
GitLab은 /etc/gitlab/gitlab-secrets.json
에 여러 비밀 값을 저장합니다.
이 JSON 파일은 각 사이트 노드에서 동일해야 합니다.
모든 보조 사이트에 비밀 파일을 수동으로 복제해야 하지만,
issue 3789에서 이 동작을 변경하는 것을 제안하고 있습니다.
-
기본 사이트의 Rails 노드에 SSH로 로그인하고 아래 명령을 실행합니다.
sudo cat /etc/gitlab/gitlab-secrets.json
이 명령은 JSON 형식으로 복제해야 하는 비밀 값을 표시합니다.
-
보조 지오 사이트의 각 노드에 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
기본 사이트 SSH 호스트 키 수동 복제
-
보조 사이트의 각 노드에 SSH로 로그인하고 root로 전환합니다.
sudo -i
-
기존 SSH 호스트 키를 백업합니다.
find /etc/ssh -iname 'ssh_host_*' -exec cp {} {}.backup.`date +%F` \;
-
기본 사이트로부터 OpenSSH 호스트 키를 복사합니다.
-
일반적으로 SSH 트래픽을 제공하는 기본 사이트 노드 중 하나로 root 또는
sudo
권한이 있는 사용자로 액세스할 수 있는 경우:# 보조 사이트에서 실행하며 서버의 IP 또는 FQDN에 대해 `<primary_site_fqdn>`을 변경함 scp root@<primary_node_fqdn>:/etc/ssh/ssh_host_*_key* /etc/ssh
-
sudo
권한을 사용하는 사용자를 통해서만 액세스할 수 있는 경우:# 기본 사이트 노드에서 실행: sudo tar --transform 's/.*\///g' -zcvf ~/geo-host-key.tar.gz /etc/ssh/ssh_host_*_key* # 각 보조 사이트 노드에서 실행: scp <user_with_sudo>@<primary_site_fqdn>:geo-host-key.tar.gz . tar zxvf ~/geo-host-key.tar.gz -C /etc/ssh
-
-
각 보조 사이트 노드에 대해 파일 권한이 올바른지 확인합니다.
chown root:root /etc/ssh/ssh_host_*_key* chmod 0600 /etc/ssh/ssh_host_*_key
-
키 지문이 일치하는지 확인하려면 각 사이트의 기본 및 보조 노드에서 다음 명령을 실행합니다.
for file in /etc/ssh/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 /etc/ssh/ssh_host_*_key; do ssh-keygen -lf $file; done # 공개 키의 지문을 출력합니다: for file in /etc/ssh/ssh_host_*_key.pub; do ssh-keygen -lf $file; done
공개 및 비공개 키 명령에 대한 출력이 동일한 지문을 생성해야 합니다.
-
각 보조 사이트 노드에서
sshd
를 재시작합니다.# Debian 또는 Ubuntu 설치 sudo service ssh reload # CentOS 설치 sudo service sshd reload
-
SSH가 여전히 작동하는지 확인하기 위해 새 터미널에서 GitLab 보조 서버로 SSH합니다. 연결할 수 없는 경우 올바른 권한을 가졌는지 확인하십시오.
보조 사이트 추가
-
보조 사이트의 각 Rails 및 Sidekiq 노드에 SSH를 통해 루트로 로그인합니다:
sudo -i
-
/etc/gitlab/gitlab.rb
를 편집하고 사이트에 고유한 이름을 추가합니다.## ## Geo 사이트에 대한 고유 식별자. 자세한 내용은 ## 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을 입력합니다.
- 선택 사항. 보조 사이트에서 복제해야 하는 그룹 또는 저장소 샤드를 선택합니다. 모두 복제하려면 필드를 비워 둡니다. 선택적 동기화를 참조하세요.
- 변경 사항 저장을 선택합니다.
-
보조 사이트의 각 Rails 및 Sidekiq 노드에 SSH를 통해 로그인하여 서비스를 재시작합니다:
gitlab-ctl restart
-
Geo 설정에 대한 일반적인 문제가 있는지 확인하려면 다음을 실행합니다:
gitlab-rake gitlab:geo:check
확인 사항 중 하나라도 실패하는 경우 문제 해결 문서를 참조하세요.
-
보조 사이트에 연결할 수 있는지 확인하려면 주요 사이트의 Rails 또는 Sidekiq 서버에 SSH로 로그인합니다:
gitlab-rake gitlab:geo:check
확인 사항 중 하나라도 실패하는 경우 문제 해결 문서를 확인하세요.
보조 사이트가 Geo 관리 페이지에 추가되고 다시 시작되면, 사이트는 자동으로 백필(backfill)이라는 프로세스로 기본 사이트에서 누락된 데이터를 복제하기 시작합니다.
한편, 기본 사이트는 각 보조 사이트에게 변경 사항을 즉시 처리할 수 있도록 알립니다.
보조 사이트가 실행되고 접근 가능한지 확인하세요. 주요 사이트에서 사용한 것과 동일한 자격 증명으로 보조 사이트에 로그인할 수 있습니다.
HTTP/HTTPS 및 SSH를 통한 Git 액세스 활성화
Geo는 HTTP/HTTPS를 통해 저장소를 동기화하므로 본 복제 방법을 활성화해야 합니다. 이는 기본적으로 활성화됩니다. 기존 사이트를 Geo로 변환하는 경우 복제 방법이 활성화되어 있는지 확인해야 합니다.
기본 사이트에서 다음을 수행하세요:
- 왼쪽 사이드바에서 하단에 있는 관리 영역을 선택합니다.
- 설정 > 일반을 선택합니다.
- 가시성 및 액세스 제어를 확장합니다.
- Git을 SSH로 사용하는 경우:
- 활성화된 Git 액세스 프로토콜이 SSH 및 HTTP(S)로 설정되었는지 확인합니다.
- 기본 및 보조 사이트에서 데이터베이스에서 SSH 키의 빠른 조회를 따릅니다.
- Git을 SSH로 사용하지 않는 경우 활성화된 Git 액세스 프로토콜을 Only HTTP(S)로 설정합니다.
보조 사이트의 올바른 작동 확인
기본 사이트에서 사용한 자격 증명으로 보조 사이트에 로그인할 수 있습니다.
로그인한 후:
- 왼쪽 사이드바에서 하단에 있는 관리 영역을 선택합니다.
- Geo > 사이트를 선택합니다.
- 사이트가 올바르게 보조 Geo 사이트로 식별되는지, 그리고 Geo가 활성화되었는지 확인합니다.
초기 복제에는 시간이 걸릴 수 있습니다. 기본 사이트 브라우저에서 기본 사이트 Geo 사이트 대시보드에서 각 Geo 사이트의 동기화 프로세스를 모니터링할 수 있습니다.