etc + confd 동적 생 성 NGINX 프로필

3404 단어
설명 하 다.
생산 환경 에 서 는 평소 NGINX 프로필 을 수정 하고 백 엔 드 호스트 를 추가 하거나 삭제 합 니 다.한두 대만 수 동 으로 수정 하 는 것 이 수월 하 다 면, 몇 십 대가 있 으 면 한 대 씩 수정 하 는 것 은 매우 번 거 로 운 일이 다.ansible 이나 salt 같은 관 리 를 할 수 있다 고 말 할 수도 있 습 니 다. 물론 이렇게 실현 할 수 있 고 이런 도구 도 이런 일 을 할 수 있 습 니 다.하지만 운영 플랫폼 에 통합 하려 면 이 정도 로 는 부족 하 다.다음은 etcd (단기) 와 confd 를 통 해 nginx 의 설정 관 리 를 실현 할 수 있 습 니 다.
설치 하 다.
  • etcd
  •  yum install etcd
    
  • confd

  • confd 는 바 이 너 리 파일 일 뿐 다운로드 하면 됩 니 다.
    wget https://github.com/kelseyhightower/confd/releases/download/v0.16.0/confd-0.16.0-linux-amd64
    mv confd-0.16.0-linux-amd64 /usr/bin/confd
    chmod +x /usr/bin/confd
    

    배치 하 다.
  • confd 설정
  • confd 설정 디 렉 터 리 만 들 기
    mkdir /etc/confd/{conf.d, templates}
    
  • conf. d: 자원 템 플 릿 파일 은 toml 을 접미사 로 해 야 합 니 다
  • templates: 파일 템 플 릿 을 설정 하려 면 tmpl 을 접미사 로 해 야 합 니 다
  • 자원 템 플 릿 파일 만 들 기
    # vi /etc/confd/conf.d/app01.conf.toml
    [template]
    src = "app01.conf.tmpl"
    dest = "/etc/nginx/conf.d/app01.conf"
    keys = [
        "/nginx/app01"
    ]
    check_cmd = "/usr/sbin/nginx -t"
    reload_cmd = "/usr/sbin/nginx -s reload"
    
  • src: nginx 프로필 템 플 릿
  • dest: 생 성 된 nginx 설정 파일 입 니 다. 운영 플랫폼 에 있 으 면 임시 경 로 를 지정 한 다음 에 운영 플랫폼 을 통 해 모든 nginx 노드
  • 에 배포 할 수 있 습 니 다.
  • check_cmd: nginx 프로필 명령 검출
  • creload_cmd: 프로필 다시 불 러 오기 명령
  • nginx 프로필 템 플 릿 만 들 기
    # vim /etc/confd/templates/app01.conf.tmpl
    upstream www_{{ getv "/nginx/app01/server_name" }} {
     {{ range getvs "/nginx/app01/upstream/*" }}
     server {{.}};
     {{end}}
     }
     
     server {
         server_name  {{getv "/nginx/app01/server_name"}};
         listen 80;
     
         location / {
             proxy_pass http://www_{{ getv "/nginx/app01/server_name" }};
         }
     }
    
  • getv: confd 는 etcd 에서 key 에 대응 하 는 value
  • 를 가 져 옵 니 다.
  • range getvs: etcd 에서 특정한 디 렉 터 리 에 있 는 모든 key 에 대응 하 는 value 를 가 져 와 옮 겨 다 니 기
  • {{.}: 자리 표시 자, range 에 있 는 값
  • etcd 설정
  • confd 에서 nginx 의 템 플 릿 파일 에 따라 etcd 에서 대응 하 는 key value
    etcdctl set /nginx/app01/server_name www.app01.com
    etcdctl set /nginx/app01/upstream/server1 192.168.100.10
    etcdctl set /nginx/app01/upstream/server2 192.168.100.11
    
  • 를 생 성 합 니 다.
  • etcd 의 구조 보기
    # etcdctl ls /nginx/app01
    /nginx/app01/upstream
    /nginx/app01/server_name
    
    # etcdctl get /nginx/app01/server_name
    www.app01.com
    
    # etcdctl ls /nginx/app01/upstream
    /nginx/app01/upstream/server2
    /nginx/app01/upstream/server1
    
  • etcd 와 confd 시작
  • service etcd start
    confd -watch -backend etcd -node http://127.0.0.1:2379
    

    서비스 시작 후 생 성 된 프로필 보기:
    upstream www_www.app01.com {
    
        server 192.168.100.10;
    
        server 192.168.100.11;
    
    }
    
    server {
        server_name  www.app01.com;
        listen 80;
    
        location / {
            proxy_pass http://www_www.app01.com;
        }
    }
    

    확장 아이디어 (운영 플랫폼 결합)
  • 여러 개의 프로필 관리 가 있 으 면 웹 인터페이스 에서 편집 한 다음 confd 템 플 릿 디 렉 터 리 에 파일 을 저장 할 수 있 습 니 다
  • etcd 키 값 을 조작 하면 etcd api 를 통 해 작업 할 수 있 으 며, 값 을 데이터베이스 에 저장 하여 스크롤 백
  • 할 수 있 습 니 다.
  • 생 성 된 프로필 은 임시 디 렉 터 리 에 저 장 됩 니 다. (생산 환경 운영 플랫폼 은 nginx 서버 와 분 리 된 것 이 확실 합 니 다) 그리고 ansible 또는 salt 호출 서버 목록 을 통 해 nginx 태그 가 있 는 서버
  • 에 배포 합 니 다.

    좋은 웹페이지 즐겨찾기