AWS Session Manager를 사용한 장기 실행 데이터 가져오기 작업

3217 단어 aws
어제 저는 AWS Session Manager를 사용하여 연결하는 워크스테이션에서 TPC-H 데이터 세트(약 6억 개 정도의 행)를 Amazon Aurora로 가져오려고 했습니다.

AWS Session Manager은 AWS 콘솔을 통해 시스템에 연결할 수 있고 ssh 키를 관리해야 하거나 네트워크에서 외부 공개 액세스를 잠그는 것을 기억해야 하는 것에 대해 걱정할 필요가 없도록 하여 삶을 단순화하는 좋은 방법입니다. 나는 sysadmin-y 작업을 수행해야 할 때 이것을 사용하고 있으며 요새 호스트를 관리하는 것을 조금 더 간단하게 만듭니다.

지난 주에 내가 한 일 중 하나는 이것을 사용하여 Amazon Aurora를 벤치마킹하는 것입니다. 그 중 일부는 소량의 데이터(8억 개 이상의 행) 가져오기/대량 로드를 의미합니다. 세션이 20분 후에 종료된다는 문제가 발생했고 세션을 계속 '간지럽게' 열기 위해 세션을 돌보고 싶지 않았습니다.

덮개 아래에서 실행되는 Linux를 감안할 때 나는 Solaris 시스템에서 작업하는 동안 나에게 도움이 된 과거의 몇 가지 트릭을 시도하기로 결정했습니다.

내 계획은 프로세스를 시작한 다음 배경으로 옮기는 것이었습니다. &를 사용하여 백그라운드 작업으로 시작하고 nohup을 사용하여 터미널 세션이 프로세스를 종료하지 않는지 확인했지만 이러한 접근 방식 중 어느 것도 작동하지 않았습니다. 내 솔루션의 기초로 사용한 StackOverflow에서 이에 대한 깔끔한 솔루션을 찾았습니다.

I use environment variables to hold values such as the DB host, username and password just in case you wonder what the $ values below are. Substitute your own.



mysql 클라이언트를 사용하여 Amazon Aurora에 연결하고 로드를 시작했습니다.

LOAD DATA LOCAL INFILE '/data/part.tbl' INTO TABLE PART FIELDS TERMINATED BY '|';


이것이 실행되면 CTRL과 Z를 누른 다음 프로세스를 일시 중단했습니다. 다음과 같이 표시되어야 합니다.

mysql >
[1]+ Stopped   mysql -h$DBHOST -u$DBUSER -p"$DBPASS"


그런 다음 bg 명령을 사용하여 배경으로 이동했습니다.

$ > bg
[1]+ Stopped mysql -h$DBHOST -u$DBUSER -p"$DBPASS" &


후행 및 의미가 이제 깨어나서 백그라운드에서 실행 중임을 의미해야 합니다. 다음은 작업 명령을 사용하여 확인할 수 있습니다.

$ > jobs
[1]+ Stopped mysql -h$DBHOST -u$DBUSER -p"$DBPASS"


다음으로 ps -ef | grep mysql을 실행하여 실행 중인 프로세스를 확인합니다. 이것이 왜 필요한지 잘 모르겠지만, 나는 단지 내가 프로세스를 볼 수 있고 PID가 무엇인지 확인하고 내가 해를 끼치지 않았는지 확인하고 싶었습니다.

또한 mysql 클라이언트의 다른 인스턴스를 시작할 수 있으며 mysql에서 mysql 연결/프로세스를 표시해야 합니다.

mysql > show full processlist;


여기에서 이제 disown 명령을 사용하여 이 셸에서 PID를 분리할 수 있습니다. 이것은 쉘이 시간 초과되면 쉘이 소유한 모든 것을 가져갈 것이기 때문에 중요합니다.

$> disown -h %1


그게 다야. 밤새 실행한 상태에서 깨어났을 때 모든 6억 개의 행이 올바르게 가져왔고 그렇게 하는 데 5시간 미만이 걸렸습니다.

그것은 많은 간질에서 나를 구했습니다.

각주



물론 이것은 내가 할 수 있는지 확인하는 도전이었습니다. 내가 아침 식사를 하면서 나 자신과 함께 했던 부검은 다음과 같이 하는 것이 훨씬 더 현명했을 것이라는 것이었습니다.
  • ssh 키 쌍 생성, 공개 키 추출(ssh-keygen -y -f {key})
  • 인스턴스로 세션을 시작하고 이 공개 키를 ~/.ssh/authorized_keys 파일에 추가하십시오.
  • 보안 그룹을 변경하여 내 IP 주소와 이 인스턴스에만 ssh에 대한 새 인바운드 규칙을 추가합니다.
  • 작업이 완료되면 인바운드 규칙을 제거합니다.

  • 이 작업을 모두 수행하는 데 약 5분이 걸렸으므로 이 작업을 수행하려는 경우 더 빠른 경로를 제안합니다.

    이를 어떻게 개선했을까요? 더 나은 방법이 있습니까? 확실히 있습니다. 보안을 희생하지 않고 이 방법을 더 간단하게 만들 수 있는 방법을 알고 싶습니다.

    좋은 웹페이지 즐겨찾기