etcd 클러스터 배포

7291 단어 etcd
참조:https://www.cnblogs.com/51wansheng/p/10234036.html
1. 환경 설명
  • ubuntu 18.04 172.18.0.30 (master)
  • ubuntu 18.04 172.18.0.26 (node1)
  • etcd버전:v2.3.7

  • 설치 etcd
    각각 마스터와 node1 기계에 etcd를 설치하다
    # step1:     etcd release 
    $ wget https://github.com/etcd-io/etcd/releases/download/v2.3.7/etcd-v2.3.7-linux-amd64.tar.gz
    
    # step2:      /data/    (            )
    $ tar -C /data -zxvf etcd-v2.3.7-linux-amd64.tar.gz
    
    # step3:        
    $ /data/etcd-v2.3.7-linux-amd64/etcdctl -v
    etcdctl version 2.3.7
    

    셋째, etcd 설정
    etcd 중요 설정 매개 변수에 대한 설명, 버전이 통하지 않는 etcd 매개 변수 옵션 및 옵션의 기본값이 약간 차이가 있을 수 있음etcd --help을 통해 볼 수 있습니다.
    --name										# etcd    
    --data-dir									# etcd       
    --listen-client-urls						#          url
    --advertise-client-urls				#            url
    --listen-peer-urls						#          url
    --initial-advertise-peer-urls		#              url
    --initial-cluster							#         
    --initial-cluster-token				#      
    --initial-cluster-state					#       ,new     (master new,node existing)
    

    우리는 시스템d를 통해 etcd 서비스를 관리하기 때문에 /etc/systemd/system 디렉터리에 새 파일etcd.service 파일을 만들었습니다. 시스템d를 모르는 사람은 완일봉 선생님의 블로그를 볼 수 있습니다.
    1. 마스터 기기(172.18.0.30)
    # vim /etcsystemd/system/etcd.service
    
    [Unit]
    Description=Etcd Server
    After=network.target
    After=network-online.target
    Wants=network-online.target
    
    [Service]
    Type=notify
    WorkingDirectory=/data/etcd-v2.3.7-linux-amd64
    User=root
    ExecStart=/data/etcd-v2.3.7-linux-amd64/etcd --name etcd0 --data-dir /data/etcd_data/etcd1 \
        --listen-client-urls http://172.18.0.30:2379,http://localhost:2379 --advertise-client-urls http://172.18.0.30:2379,http://localhost:2379 \
        --listen-peer-urls http://172.18.0.30:2380 --initial-advertise-peer-urls http://172.18.0.30:2380 \
        --initial-cluster etcd0=http://172.18.0.30:2380,etcd1=http://172.18.0.26:2480 --initial-cluster-token etcd-cluster \
        --initial-cluster-state new
    Restart=always
    
    [Install]
    WantedBy=multi-user.target
    

    주: 기본 2379, 2380 포트가 점용되었을 경우 etcd를 설정하여 다른 점용되지 않은 포트를 감청할 수 있습니다
    2,node1 기계(172.18.0.26)
    # vim /etc/systemd/system/etcd.service
    
    [Unit]
    Description=Etcd Server
    After=network.target
    After=network-online.target
    Wants=network-online.target
    
    [Service]
    Type=notify
    WorkingDirectory=/data/etcd-v2.3.7-linux-amd64
    User=root
    ExecStart=/data/etcd-v2.3.7-linux-amd64/etcd --name etcd1 --data-dir /data/etcd_data/etcd0 \
        --listen-client-urls http://172.18.0.26:2479,http://localhost:2479 --advertise-client-urls http://172.18.0.26:2479,http://localhost:2479 \
        --listen-peer-urls http://172.18.0.26:2480 --initial-advertise-peer-urls http://172.18.0.26:2480 \
        --initial-cluster etcd0=http://172.18.0.30:2380,etcd1=http://172.18.0.26:2480 --initial-cluster-token etcd-cluster \
        --initial-cluster-state existing
    Restart=always
    
    [Install]
    WantedBy=multi-user.target
    

    3. etcd 서비스 시작
    etcd 서비스를 설정한 후, 각각 마스터와 node1 노드의 etcd 서비스를 시작합니다
    # step1:    systemd    (  systemd           )
    $ systemctl daemon-reload
    
    # step2:  etcd  
    $ systemctl restart etcd
    
    #   etcd  
    $ systmectl stop etcd
    
    #   etcd  
    $ systemctl status etcd
    
    #   etcd  
    $ journalctl -u etcd
    
    #   etcd    
    $ systemctl enable etcd
    

    4. etcd 사용
    #   etcd    (                )
    $ /data/etcd-v2.3.7-linux-amd64/etcdctl member list
    bd3b67d271b1097d: name=etcd0 peerURLs=http://172.18.0.30:2380 clientURLs=http://172.18.0.30:2379,http://localhost:2379 isLeader=true
    e5ad2a6d82697b13: name=etcd1 peerURLs=http://172.18.0.26:2480 clientURLs=http://172.18.0.26:2479,http://localhost:2479 isLeader=false
    
    #           
    $ /data/etcd-v2.3.7-linux-amd64/etcdctl cluster-health
    member bd3b67d271b1097d is healthy: got healthy result from http://172.18.0.30:2379
    member e5ad2a6d82697b13 is healthy: got healthy result from http://172.18.0.26:2479
    cluster is healthy
    
    #  master set  key-value
    $ /data/etcd-v2.3.7-linux-amd64/etcdctl set name tab609
    tab609
    
    #  node1 get  key  ( :           2380      --endpoints)
    $ /data/etcd-v2.3.7-linux-amd64/etcdctl --endpoints http://localhost:2479 get name
    tab609
    
    #   etcdctl        
    $ /data/etcd-v2.3.7-linux-amd64/etcdctl help
    

    5. etcd 그룹에 노드node2(172.18.0.17) 추가
    1. etcd 설치
    설치 단계와 동일
    2, 설정 etcd
    노드
    #  vim /etc/systemd/sytem/etcd.service
    
    [Unit]
    Description=Etcd Server
    After=network.target
    After=network-online.target
    Wants=network-online.target
    
    [Service]
    Type=notify
    WorkingDirectory=/data/etcd-v2.3.7-linux-amd64
    User=root
    ExecStart=/data/etcd-v2.3.7-linux-amd64/etcd --name etcd2 --data-dir /data/etcd_data/etcd2 \
        --listen-client-urls http://172.18.0.17:2479,http://localhost:2479 --advertise-client-urls http://172.18.0.17:2479,http://localhost:2479 \
        --listen-peer-urls http://172.18.0.17:2480 --initial-advertise-peer-urls http://172.18.0.17:2480 \
        --initial-cluster etcd0=http://172.18.0.30:2380,etcd1=http://172.18.0.26:2480,etcd2=http://172.18.0.17:2480 --initial-cluster-token yj1918-etcd-cluster \
        --initial-cluster-state existing
    Restart=always
    
    [Install]
    WantedBy=multi-user.target
    

    마스터 노드 설정 파일의 그룹 구성원에 node2 노드를 추가하려면 --initial-cluster 매개 변수 옵션만 수정하십시오
    # vim /etc/systemd/sytem/etcd.service
    
    ExecStart= ... \
    	--initial-cluster etcd0=http://172.18.0.30:2380,etcd1=http://172.18.0.26:2480,etcd2=http://172.18.0.17:2480
    

    같은 node1 노드 설정 파일의 그룹 구성원도 node2 노드를 추가합니다. --initial-cluster 매개 변수 옵션만 수정하면 됩니다.
    # vim /etc/systemd/sytem/etcd.service
    
    ExecStart= ... \
    	--initial-cluster etcd0=http://172.18.0.30:2380,etcd1=http://172.18.0.26:2480,etcd2=http://172.18.0.17:2480
    

    3, etcd 서비스 시작
    각각 마스터, node1, node2에서 같은 시작 절차를 실행하지만, node2를 시작할 때 시작에 실패하면 다음과 같은 오류를 보고합니다
    error validating peerURLs {ClusterID:b0f36b8e1c8349f4 Members:[&{ID:bd3b67d271b1097d RaftAttributes:{PeerURLs:[http://172.18.0.30:2380]} Attributes:{Name:etcd0 ClientURLs:[http://172.18.0.30:2379]
    

    즉, 포트(master)의 rul을 검증하는 중 오류가 발생했습니다. 구글에서 해결 방법을 찾았습니다. 새로운 노드를 시작하기 전에 새 노드를 그룹에 연결한 다음 새 노드를 시작해야 합니다.
    #  master         (master    )
    $  /data/etcd-v2.3.7-linux-amd64/etcdctl member add node2 http://172.18.0.17:2480
    
    #     node2 etcd        (node2    )
    $ systemctl restart etcd
    
    #        (   node2   ,           2379      --endpoints)
    $ /data/etcd-v2.3.7-linux-amd64/etcdctl --endpoints http://172.18.0.17:2479 member list
    bd3b67d271b1097d: name=etcd0 peerURLs=http://172.18.0.30:2380 clientURLs=http://172.18.0.30:2379,http://localhost:2379 isLeader=true
    e20ddba3b692fe46: name=etcd2 peerURLs=http://172.18.0.17:2480 clientURLs=http://172.18.0.17:2479,http://localhost:2479 isLeader=false
    e5ad2a6d82697b13: name=etcd1 peerURLs=http://172.18.0.26:2480 clientURLs=http://172.18.0.26:2479,http://localhost:2479 isLeader=false
    
    

    마지막으로: etcd는 집단입니다. 우리가 get에서 데이터를 찾을 때 데이터의 일치성과 신뢰성을 어떻게 보장합니까?etcd는 유사한 선거를 통해 과반이 규칙을 통해 데이터를 되돌려준다.예를 들어 집단에 세 대의 기계가 있는데 두 대의 키-value가 모두 같으면 3분의 2가 반이 넘으면 데이터를 되돌려준다.데이터의 일관성과 신뢰성을 보장하기 위해 etcd 클러스터의 시스템 수는 짝수가 아닌 홀수와 한 노드보다 커야 합니다. 자세히 보면 다음과 같습니다.https://www.jianshu.com/p/5aed73b288f7

    좋은 웹페이지 즐겨찾기