데보션앱 소개페이지 바로가기
로그인 선택

신고하기

CLOSE
신고사유 (대표 사유 1개)
상세내용 (선택)
0/200
  • 신고한 게시글은 더 이상 보이지 않습니다.
  • 이용약관과 운영정책에 따라 신고사유에 해당하는지 검토 후 조치됩니다.
  • 허위 신고인 경우, 신고자의 서비스 이용이 제한될 수 있으니 유의하시어 신중하게 신고해 주세요.
(이 회원이 작성한 모든 댓글과 커뮤니티 게시물이 보이지 않고, 알림도 오지 않습니다.)

미리보기

커뮤니티

      1,234

      badge 23.06.15

      글 등록

      카테고리를 선택해주세요.

      DEVOTEE를 활성화 시키면
      지금 작성한 커뮤니티 글에 대해 1개의 댓글을 달아줍니다.

      버튼을 누르면 글 수정 시 ChatGPT가 작성한 댓글이 수정됩니다.

      임시저장함에 저장되었습니다. 저장일시 : 2022.5.17 14:29:08

      임시저장함

      제목을 선택하시면 이어서 작성이 가능하며,
      최대 20건까지 저장합니다.
      컨텐츠 유형, 제목, 저장일시, 삭제로 이뤄진 임시저장 목록
      컨텐츠 유형 제목 저장일 삭제

      데보션 블로그 게재 요청

      CLOSE
      • *
      • *

      본인인증

      효율적인 데보션 서비스 이용 및
      고객님의 소중한 개인정보보호를 위해
      본인인증을 진행해주세요. 본인인증 미 진행 시 로그인이 제한됩니다.
      본인인증 실패

      본인인증 로그인에 실패하였습니다.
      회원이 아니시거나 본인인증 등록이
      완료되지 않은 사용자입니다.

      회원정보 연결

      etcd Recovery 방법

      seungkyua 19.06.12
      1,097 2 0

      Kubernetes 의 모든 metadata 는 etcd 에 저장됩니다. etcd 를 안정적으로 가져가기 위해 3 node 로 cluster 를 구성하는 방법을 사용합니다. 대부분의 문서는 일반적으로 etcd 를 백업 / 복구로 설명하고 있는데, 그 보다 서버 fault 가 나서 etcd 를 1 node 나 2 node 로 임시 운영해야 할 경우에 대해서 설명하고자 합니다.

      [ etcd 노드 리스트 ]

      k2-master01 : etcd1

      k2-master02 : etcd2

      k2-master03 : etcd3

       

      먼저 etcdctl 명령어를 사용하기 쉽게 alias 로 다음과 같이 등록을 해줍니다. 각 노드 마다 endpoint ip 와 인증서 파일은 이름을 적절히 변경해 주어야 합니다.

      			# vi ~/.bash_aliases
      
      alias etcdctl="export ETCDCTL_API=3; etcdctl --endpoints=[192.168.30.151:2379] --cacert=\"/etc/ssl/etcd/ssl/ca.pem\" --cert=\"/etc/ssl/etcd/ssl/admin-k2-master01.pem\" --key=\"/etc/ssl/etcd/ssl/admin-k2-master01-key.pem\" "
      
      
      # . ~/.bash_aliases

       

      멤버 조회를 하면 다음과 같이 3개 노드가 정상적으로 나타납니다.

      			# etcdctl --write-out=table member list
      +------------------+---------+-------+-----------------------------+-----------------------------+
      |        ID        | STATUS  | NAME  |         PEER ADDRS          |        CLIENT ADDRS         |
      +------------------+---------+-------+-----------------------------+-----------------------------+
      | 683a3374b573e7c7 | started | etcd1 | https://192.168.30.151:2380 | https://192.168.30.151:2379 |
      | 6f89416652d7e034 | started | etcd2 | https://192.168.30.152:2380 | https://192.168.30.152:2379 |
      | d9c4159e72350017 | started | etcd3 | https://192.168.30.153:2380 | https://192.168.30.153:2379 |
      +------------------+---------+-------+-----------------------------+-----------------------------+
      

       

      모든 노드의 etcd 를 stop 하여 3대 모두 장애상황으로 만듭니다.

      			# systemctl stop etcd

       

      3대 노드의 etcd 가 모두 장애로 다운되었고, 빠른 서비스를 위해 etcd1 만 띄운다고 하면, etcd db 에 이미 기존의 3대 cluster member 를 인식하고 있기 때문에 etcd1 만 실행시키는 것을 실패하게 됩니다. 이 때는 기존의 db  (백업 db 가 아닌 운영되고 있었던 db) 를 가지고 restore 를 하여 member 정보를 새롭게 update 할 수 있습니다. 그리고 snapshot 으로 백업된 db 정보가 아니므로 hash check 도 skip 을 해야 합니다.  

       

      k2-master01 노드에서 작업

      먼저, db 를 복사해 옵니다. (etcd 의 data dir 는 /var/lib/etcd 라고 가정합니다.) 그리고 /var/lib/etcd 디렉토리는 삭제합니다.

      			# mkdir -p ~/etcd-backup
      # cp /var/lib/etcd/member/snap/db ~/etcd-backup/current.db
      
      # rm -rf /var/lib/etcd/

       

      restore 를 하여 member 정보를 덮어씁니다.

      			# etcdctl snapshot restore ~/etcd-backup/current.db \
      --data-dir=/var/lib/etcd \
      --initial-advertise-peer-urls=https://192.168.30.151:2380 \
      --initial-cluster=etcd1=https://192.168.30.151:2380 \
      --initial-cluster-token=k8s_etcd \
      --name=etcd1 \
      --skip-hash-check

       

      새롭게 cluster 를 생성하는 방식으로 etcd1 만 실행하기 위해 옵션 값 중에 ETCD_INITIAL_CLUSTER_STATE=new 와 ETCD_INITIAL_CLUSTER=etcd1=https://192.168.30.151:2380 으로 변경합니다.

      			# vi /etc/etcd.env
      
      # Environment file for etcd v3.2.26
      ETCD_DATA_DIR=/var/lib/etcd
      ETCD_ADVERTISE_CLIENT_URLS=https://192.168.30.151:2379
      ETCD_INITIAL_ADVERTISE_PEER_URLS=https://192.168.30.151:2380
      ETCD_INITIAL_CLUSTER_STATE=new
      ETCD_METRICS=basic
      ETCD_LISTEN_CLIENT_URLS=https://192.168.30.151:2379,https://127.0.0.1:2379
      ETCD_ELECTION_TIMEOUT=5000
      ETCD_HEARTBEAT_INTERVAL=250
      ETCD_INITIAL_CLUSTER_TOKEN=k8s_etcd
      ETCD_LISTEN_PEER_URLS=https://192.168.30.151:2380
      ETCD_NAME=etcd1
      ETCD_PROXY=off
      ETCD_INITIAL_CLUSTER=etcd1=https://192.168.30.151:2380
      ETCD_AUTO_COMPACTION_RETENTION=8
      ETCD_SNAPSHOT_COUNT=10000
      
      # TLS settings
      ETCD_TRUSTED_CA_FILE=/etc/ssl/etcd/ssl/ca.pem
      ETCD_CERT_FILE=/etc/ssl/etcd/ssl/member-k2-master01.pem
      ETCD_KEY_FILE=/etc/ssl/etcd/ssl/member-k2-master01-key.pem
      ETCD_CLIENT_CERT_AUTH=true
      
      ETCD_PEER_TRUSTED_CA_FILE=/etc/ssl/etcd/ssl/ca.pem
      ETCD_PEER_CERT_FILE=/etc/ssl/etcd/ssl/member-k2-master01.pem
      ETCD_PEER_KEY_FILE=/etc/ssl/etcd/ssl/member-k2-master01-key.pem
      ETCD_PEER_CLIENT_CERT_AUTH=True

       

      이제 etcd 를 실행하면 이전 데이터를 가지고 1대의 노드로 실행시킬 수 있습니다.

      			# systemctl start etcd

       

      멤버 조회를 해보면 자신만 나오는 것을 알 수 있습니다.

      			# etcdctl --write-out=table member list
      +------------------+---------+-------+-----------------------------+-----------------------------+
      |        ID        | STATUS  | NAME  |         PEER ADDRS          |        CLIENT ADDRS         |
      +------------------+---------+-------+-----------------------------+-----------------------------+
      | 683a3374b573e7c7 | started | etcd1 | https://192.168.30.151:2380 | https://192.168.30.151:2379 |
      +------------------+---------+-------+-----------------------------+-----------------------------+

       

       

       

       

       

       

       

      댓글 0

      DEVOTEE를 활성화 시키면
      지금 작성한 댓글에 AI가 댓글을 달아줍니다.

      seungkyua 님의 최신 블로그

      더보기
      동영상 기고하기