GCP에 Twemproxy 배포

현재 클라우드 자원이 설정되었습니다. Twen Proxy 서버의 docker 이미지가 생성되었습니다. GCP에 에이전트를 배치하고 에이전트와 통신할 클라이언트 서비스를 변경할 때가 되었습니다.

TwenProxy Docker 이미지를 Google 컨테이너 레지스트리로 밀어넣기


먼저, GCR (Google 컨테이너 등록 센터) 에 docker 이미지를 전송해야 합니다.프로젝트에서 다른 응용 프로그램에 컨테이너 등록 서비스를 사용하지 않은 경우 Twemproxy 서버를 포함하는 프로젝트에 GCR API를 활성화해야 할 수 있습니다.Cloud SDK를 사용하여 GCR에 대해 API를 활성화할 수 있습니다.
gcloud services enable containerregistry.googleapis.com
GCP의 컨테이너 레지스트리로 이미지를 밀어넣으려면 Docker가 컴퓨터에서 인증을 거쳐야 합니다.인증 설정에 대한 자세한 내용은 here를 참조하십시오. gcloud credential helper를 사용하는 것이 좋습니다.
자격 증명 지원을 사용하려면 스토리지 관리자 역할과 JSON 형식의 서비스 계정 자격 증명이 있는 키 파일을 만들어야 합니다.Docker는 두 가지 작업을 통해 다음 명령을 사용하여 인증할 수 있습니다.
# make sure you are logged in before running the Docker authentication commands
gcloud auth login 

gcloud auth activate-service-account your-service-account-name@your-project-name.iam.gserviceaccount.com --key-file=path/to/key-file.json

gcloud auth configure-docker
Docker 인증을 통해 이미지를 GCR로 밀어 넣고 새 컨테이너 레지스트리를 만들 수 있습니다.
이미지를 성공적으로 푸시하려면 이미지를 만들 때나 GCR로 이미지를 푸시하기 전에 레지스트리 이름gcr.io/your-project-name/을 사용하여 이미지 이름과 버전에 레이블을 지정해야 합니다.버전이 지정되지 않은 경우 최신 버전이 사용됩니다.
# if you are creating the image for the first time, you can tag it with the flag '-t'
docker build . -t gcr.io/your-project-name/twemproxy:v1

# or if the image already exists, use the 'docker tag' command
docker tag twemproxy gcr.io/your-project-name/twemproxy:v1

docker push gcr.io/your-project-name/twemproxy:v1

Docker 이미지에서 이미지 템플릿 만들기


다음에 이미지 템플릿을 만들어야 합니다.TwenProxy 서버의 새 인스턴스를 만들 때 사용될 MIG(Meditory Instance Group) 가상 머신 이미지입니다.
이미지 템플릿을 만들려면 GCR로 밀어 넣은 Docker 이미지 요약이 있어야 합니다.요약은 같은 Docker 이미지의 다른 버전을 구분하기 위해 GCP에서 생성한 고유 id입니다.브라우저 기반 콘솔을 사용하여 수동으로 요약을 찾거나 검색 요약의 프로세스 스크립트를 작성할 수 있으므로 배포 프로세스를 자동화하는 데 유용합니다.
(모든 스크립트 예는 Powershell에서 작성되지만 Linux shell 스크립트로 개편할 수 있음)
$Digest = (gcloud container images list-tags "gcr.io/your-project-name/twemproxy" `
    --limit=1 `
    --format="get(digest)")[0]

$Image = "gcr.io/your-project-name/twemproxy@{0}" -f $Digest
이 스크립트 검색twemproxy Docker 이미지 태그 목록은 "1"로 제한되므로 첫 번째 태그만 검색합니다.이것은 등록표로 전송된 최신 그림일 것이다.--format 로고는 출력을 digest 속성으로만 감소합니다.사용 가능한 모든 속성을 보려면 형식을 --format=json로 변경하여 명령을 실행할 수 있습니다.요약을 검색하면 등록표에 있는 이미지의 완전한 한정된 이름에 추가됩니다.
이제 Docker 이미지 이름을 사용하여 Docker 컨테이너가 있는 이미지 템플릿을 만들 수 있습니다.
gcloud compute instance-templates create-with-container twemproxy-v1 `
    --container-image=$Image `
    --machine-type=f1-micro `
    --tags=fw-allow-lb-and-hc,fw-allow-twemproxy-6380 `
    --no-address `
    --scopes=cloud-platform `
    --network=your-network-name `
    --subnet=your-subnet-name `
    --region=us-east1
--tags 표지 뒤에 있는 표지 이름은 에서 만든 방화벽 규칙에 정의된 목표 표지와 일치해야 합니다.

트랜잭션 인스턴스 그룹에 대한 스크롤 업데이트 실행


마지막으로 TwenProxy 서버에서 새로 만든 템플릿 대신 Terraform 코드에 사용되는 자리 표시자 템플릿을 사용하기 위해 MIG 스크롤 리셋을 실행해야 합니다.
gcloud compute instance-groups managed rolling-action start-update twemproxy-mig `
    --version="template=twemproxy-v1" `
    --zone=us-east1-b
스크롤 업데이트가 완료되면 TwenProxy 서버가 활성 상태가 되고 테스트할 준비가 됩니다.마이크로서비스가 Memorystore 실례와 직접 통신하지 않고 Twemproxy 서버와 통신하기 위해서, 코드에 사용된 Redis 클라이언트 라이브러리의 설정을 변경해야 할 수도 있습니다.
예를 들어, C#에서 Nuget 패키지StackExchange.Redis에는 Twemproxy 서버를 등록해야 제대로 작동할 수 있는 구성 객체가 있습니다.Memorystore에 직접 이 가방을 사용하는 것과 TwenProxy를 통해 이 가방을 간접적으로 사용하는 것 사이의 유일한 차이점은 Proxy 대상의 ConfigurationOptions 속성이다.설정 및 캐시에서 데이터를 검색하는 API는 그대로 유지됩니다.
private IConnectionMultiplexer CreateConnectionMultiplexer(string ip, int port)
{
    var config = new ConfigurationOptions
    {
        AsyncTimeout = 1000,
        EndPoints = {{ip, port}},
        Proxy = Proxy.Twemproxy
    };

    return ConnectionMultiplexer.Connect(config);
}
IP 및 포트 번호를 Twemproxy MIG 로드 밸런서의 IP 및 포트 번호와 일치하도록 설정해야 합니다.

요구 사항에 맞는 테스트 및 구성


이제 코드의 변경 사항을 통해 클라이언트 서비스를 재배치하고 새로 만든 Memorystore 그룹을 테스트할 수 있습니다.모든 용례가 다르기 때문에 제가 겪지 못한 문제가 있을 수도 있고, 사용자의 요구를 충족시키기 위해 Twemproxy 서버를 되돌려 설정해야 할 수도 있습니다.
GCP에서 Twen Proxy와 Memorystore를 사용하는 것에 대한 이 시리즈를 끝내기 전에 마지막 스크립트가 자동화 배치 과정에서 유용하다는 것을 발견할 수 있습니다.Memorystore의 인스턴스를 추가, 삭제 또는 다시 만들 때마다 Twemproxy 서버를 구성하는 YAML 파일의 IP 주소 목록을 업데이트해야 합니다.이 동작을 수동으로 실행하는 것이 아니라 스크립트를 사용할 수 있습니다.
첫 번째 단계는 YAML 파일에서 기존 IP 주소 목록을 제거하는 것입니다.
Get-Content -Path .\nutcracker.yml | Where-Object {$_ -notmatch ":6379:1"} | Set-Content .\tmp.yml
Get-Content -Path .\tmp.yml | Set-Content .\nutcracker.yml
Remove-Item .\tmp.yml
그리고 gcloud SDK를 사용하여 배치된 Memorystore 실례의 IP 주소 목록을 검색하여 YAML 파일의 끝에 추가합니다.이를 위해서는 YAML 구성servers 속성이 마지막으로 나열된 속성이어야 합니다.
gcloud redis instances list --region us-east1 --format "value(host)" `
| ForEach-Object {"        - {0}:6379:1" -f $_} `
| Out-File -FilePath .\nutcracker.yml -Append -Encoding utf8
이 블로그 글의 스크립트가 있습니다. 설정을 변경하거나 Memorystore 실례의 수량을 늘려야 할 때, TwenProxy 서버를 완전히 자동화하는 데 필요한 대부분의 도구를 가지고 있어야 합니다.

좋은 웹페이지 즐겨찾기