{"id":22275856,"url":"https://github.com/zigzagak/ngx_zookeeper_upstream","last_synced_at":"2025-07-28T16:32:33.286Z","repository":{"id":148036413,"uuid":"163623292","full_name":"ZigzagAK/ngx_zookeeper_upstream","owner":"ZigzagAK","description":"Nginx upstream synced from Zookeeper ","archived":false,"fork":false,"pushed_at":"2024-01-23T09:47:47.000Z","size":423,"stargazers_count":3,"open_issues_count":0,"forks_count":2,"subscribers_count":2,"default_branch":"master","last_synced_at":"2024-01-23T10:37:22.045Z","etag":null,"topics":["dynamic-upstream","nginx","service-discovery","upstream","zookeeper"],"latest_commit_sha":null,"homepage":null,"language":"C","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"bsd-2-clause","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/ZigzagAK.png","metadata":{"files":{"readme":"README.markdown","changelog":null,"contributing":null,"funding":null,"license":"LICENSE","code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null,"governance":null,"roadmap":null,"authors":null}},"created_at":"2018-12-30T23:00:00.000Z","updated_at":"2022-07-30T13:51:37.000Z","dependencies_parsed_at":"2024-01-23T10:57:53.897Z","dependency_job_id":null,"html_url":"https://github.com/ZigzagAK/ngx_zookeeper_upstream","commit_stats":null,"previous_names":[],"tags_count":15,"template":false,"template_full_name":null,"repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/ZigzagAK%2Fngx_zookeeper_upstream","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/ZigzagAK%2Fngx_zookeeper_upstream/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/ZigzagAK%2Fngx_zookeeper_upstream/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/ZigzagAK%2Fngx_zookeeper_upstream/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/ZigzagAK","download_url":"https://codeload.github.com/ZigzagAK/ngx_zookeeper_upstream/tar.gz/refs/heads/master","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":227932606,"owners_count":17843136,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2022-07-04T15:15:14.044Z","host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":["dynamic-upstream","nginx","service-discovery","upstream","zookeeper"],"created_at":"2024-12-03T14:12:38.969Z","updated_at":"2024-12-03T14:12:39.724Z","avatar_url":"https://github.com/ZigzagAK.png","language":"C","funding_links":[],"categories":[],"sub_categories":[],"readme":"Name\n====\n\nngx_zookeeper_upstream - Upstream synced with Zookeeper.\n\nBuild status\n============\n[![Build Status](https://travis-ci.org/ZigzagAK/ngx_zookeeper_upstream.svg)](https://travis-ci.org/ZigzagAK/ngx_zookeeper_upstream)\n\n# Quick Start\n\n## Nginx config\n\n```nginx\nhttp {\n  zookeeper_upstream                  127.0.0.1:2181;\n  zookeeper_upstream_log_level        debug;\n  zookeeper_upstream_recv_timeout     5000;\n\n  healthcheck_buffer_size 128k;\n\n  zookeeper_sync_global_exclude global-exclude-host1.com;\n  zookeeper_sync_global_exclude global-exclude-host2.com;\n\n  upstream app1 {\n    zone shm_app1 128k;\n\n    zookeeper_sync_path /instances/apps/app1/nodes;\n    zookeeper_sync_lock /instances/apps/.locks/app1;\n\n    zookeeper_sync_params @params max_conns=33 max_fails=1 fail_timeout=30s;\n    zookeeper_sync_file app1.peers;\n\n    dns_update 60s;\n    dns_add_down on;\n\n    check passive type=http rise=2 fall=2 timeout=5000 interval=10;\n    check_request_uri GET /health;\n    check_response_codes 200;\n    check_response_body alive;\n  }\n\n  upstream app1-@dc1 {\n    zone shm_app1-dc1 128k;\n\n    zookeeper_sync_path /instances/apps/app1/nodes;\n    zookeeper_sync_lock /instances/apps/.locks/app1-@dc1;\n\n    zookeeper_sync_filter @dc1;\n\n    zookeeper_sync_params @params max_conns=10 max_fails=1 fail_timeout=30s;\n    zookeeper_sync_file app1-@dc1.peers;\n\n    dns_update 60s;\n    dns_add_down on;\n\n    check passive type=http rise=2 fall=2 timeout=5000 interval=10;\n    check_request_uri GET /health;\n    check_response_codes 200;\n    check_response_body alive;\n  }\n\n  upstream app1-@dc2 {\n    zone shm_app1-dc2 128k;\n\n    zookeeper_sync_path /instances/apps/app1/nodes;\n    zookeeper_sync_lock /instances/apps/.locks/app1-@dc2;\n\n    zookeeper_sync_filter @dc2;\n\n    zookeeper_sync_params @params max_conns=10 max_fails=1 fail_timeout=30s;\n    zookeeper_sync_file app1-@dc2.peers;\n\n    dns_update 60s;\n    dns_add_down on;\n\n    check passive type=http rise=2 fall=2 timeout=5000 interval=10;\n    check_request_uri GET /health;\n    check_response_codes 200;\n    check_response_body alive;\n  }\n\n  upstream app2 {\n    zone shm_app2 128k;\n\n    zookeeper_sync_path /instances/apps/app2/nodes;\n\n    zookeeper_sync_params @params max_conns=20 max_fails=1 fail_timeout=30s;\n    zookeeper_sync_file app2.peers;\n\n    zookeeper_sync_exclude 127.0.0.2;\n    zookeeper_sync_exclude excluded.com;\n\n    dns_update 60s;\n    dns_add_down on;\n\n    check passive type=http rise=2 fall=2 timeout=5000 interval=10;\n    check_request_uri GET /health;\n    check_response_codes 200;\n    check_response_body alive;\n  }\n\n  server {\n    listen 6000;\n\n    location /dynamic {\n      dynamic_upstream;\n    }\n  }\n\n  server {\n    # app1\n    listen 8001;\n    listen 8002;\n\n    #app2\n    listen 9001;\n    listen 9002;\n\n    location = /health {\n      return 200 'alive';\n    }\n\n    location / {\n      access_log off;\n      return 200 'hello';\n    }\n  }\n\n  server {\n    listen 10000;\n\n    access_log off;\n\n    location /app1 {\n      proxy_pass http://app1;\n    }\n\n    location /app1/dc1 {\n      proxy_pass http://app1-@dc1;\n    }\n\n    location /app1/dc2 {\n      proxy_pass http://app1-@dc2;\n    }\n\n    location /app2 {\n      proxy_pass http://app2;\n    }\n  }\n\n  server {\n    listen 8888;\n\n    # ex1: /unlock?upstream=app1\n    # ex2: /unlock?upstream=app1\u0026local=\n    location /unlock {\n      zookeeper_sync_unlock;\n    }\n\n    location /dynamic {\n      dynamic_upstream;\n    }\n\n    location /healthcheck/get {\n      healthcheck_get;\n    }\n\n    location /healthcheck/status {\n      healthcheck_status;\n    }\n\n    location /zoo_upstream_list {\n      zookeeper_sync_list;\n    }\n  }\n}\n````\n\n## Zookeeper structure\n\n### 1\n![Zookeeper structure1](zoo1.png)\n\n### 2\n![Zookeeper structure2](zoo2.png)\n\n### 3\n![Zookeeper structure3](zoo3.png)\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fzigzagak%2Fngx_zookeeper_upstream","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fzigzagak%2Fngx_zookeeper_upstream","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fzigzagak%2Fngx_zookeeper_upstream/lists"}