Cloud Composter에서 MySQL을 관리하는 프로세스에 연결할 수 없습니다.

이벤트

  • 오류로 인해 Cloud Composier 작업이 실패했습니다.
  • 장애가 발생한 Task 는 "up"입니다.for_retrynumber가 증가하지 않습니다.
  • Task 로그를 보자마자 나왔습니다Can't connect to MySQL server on 'airflow-sqlproxy-service.default.svc.cluster.local'.
  • 주의


    여러 Cloud Composier 환경이 시작된 경우 다음 명령을 그대로 두면 이동이 불가능할 수 있으므로 각각의 환경에 따라 해당 cluster,namespace,pod 등을 확보해야 한다.

    상황 확인

  • 먼저 브라우저에서 Cloud Composier 환경의 모니터링을 관찰합니다.
  • 데이터베이스의 건강도는 언헬스로 확인돼 MySQL에 제대로 접근할 수 없음을 알 수 있다.
  • 이어서 에어플로우-scheduller에서 MySQL에 들어갔는지 확인한다.
  • 에어플로우-schedule에 들어갑니다.
    # clusterの名前と場所を取得
    $ cluster_info=$(gcloud container clusters list | grep ${Composerの環境名} | grep Running
    $ cluster=$(echo $cluster_info | cut -d' ' -f1)
    $ location=$(echo $cluster_info | cut -d' ' -f2)
    
    # credentialを取得
    $ gcloud container clusters get-credentials $cluster --zone=$location
    
    # podのnamespaceと名前を取得
    $ pod_info=$(kubectl get pods --all-namespaces | grep airflow-scheduler | grep Running)
    $ namespace=$(echo $pod_info | cut -d' ' -f1)
    $ pod=$(echo $pod_info | cut -d' ' -f2)
    
    # airflow-scheduler に入る
    $ kubectl exec --namespace=$namespace $pod -c airflow-scheduler -it -- bash
    
  • MySQL에 들어갑니다.
    # MySQLのログイン情報を取得
    # mysql+mysqldb://${USER}:${PASSWORD}@${HOST}/${DATABASE}?charset=utf8 の形式で取得できる
    $ echo $AIRFLOW__CORE__SQL_ALCHEMY_CONN
    
    # MySQLにログイン
    $ mysql -h ${HOST} -u ${USER} -p${PASSWORD} ${DATABASE}
    
    # 適当にクエリを発行してみる
    mysql> select * from task_instance limit 1\G
    
  • 조회 결과가 정확한 회답을 받았기 때문에 MySQL은 정상적으로 작동한다.
  • airflow-sqlproxy가 정상적으로 작동하는지 확인합니다.
  • MySQL이 정상적이기 때문에 MySQL(Cloud SQL)에 접근하는 SQL Proxy에 문제가 있을 수 있습니다.
    # エラーになっているpodを探す
    $ kubectl get pods --all-namespaces | grep airflow-sqlproxy | grep Failed
    
  • Failed가 된airflow-sqlproxy-XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX가 돌아왔다.
  • 대응


    상기 상황 확인 중 SQL Proxy가 이동하는pod에 문제가 있는 것 같아서 다시 시작해 보겠습니다.
    # 再起動するためにはpodを削除すればよい
    # POD_NAMEは上で出てきた airflow-sqlproxy-XXXXXXXXXX-XXXXX を入れる
    $ kubectl delete pod ${POD_NAME}
    pod "${POD_NAME}" deleted
    
    이후 자동으로 새로운 sqlproxy가 일어나면 됩니다.

    References

  • Cloud Composier에서 Airflow Worker로 들어가기
  • 좋은 웹페이지 즐겨찾기