рдСрд░реНрдХреЗрд╕реНрдЯреНрд░реЗрд╢рди рд╕рд┐рд╕реНрдЯрдо (рдХреБрдмреЗрд░рдиреЗрдЯреНрд╕, рдиреЛрдореИрдб рдФрд░ рдЕрдиреНрдп) рдореЗрдВ рд▓реЛрдб рдмреИрд▓реЗрдВрд╕рд░реНрд╕ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рдХреЗрд╡рд▓ рд▓реЛрдб рд╕рдВрддреБрд▓рди рдХреА рддреБрд▓рдирд╛ рдореЗрдВ рдЕрдзрд┐рдХ рд╣реИред рд╕рдмрд╕реЗ рдкрд╣рд▓реЗ, рд▓реЛрдб рдмреИрд▓реЗрдВрд╕рд░ рдХреЛ рд╕реЗрд╡рд╛рдУрдВ рдХреА рдПрдХ рд╕реВрдЪреА рдХреЗ рд╕рд╛рде рдПрдХ рдирд┐рд░реНрджреЗрд╢рд┐рдХрд╛ рдкрдврд╝рдиреЗ рдореЗрдВ рд╕рдХреНрд╖рдо рд╣реЛрдирд╛ рдЪрд╛рд╣рд┐рдП, рдЬрд┐рд╕рдореЗрдВ рдЯреНрд░реИрдлрд╝рд┐рдХ рдХреЛ рдкреБрдирд░реНрдирд┐рд░реНрджреЗрд╢рд┐рдд рдХрд┐рдпрд╛ рдЬрд╛рдирд╛ рдЪрд╛рд╣рд┐рдП (рдпрд╛, рдПрдХ рд╡рд┐рдХрд▓реНрдк рдХреЗ рд░реВрдк рдореЗрдВ, рдЙрдиреНрд╣реЗрдВ рдЯреНрд░реИрдлрд╝рд┐рдХ рдореЗрдВ рд╢рд╛рдорд┐рд▓ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рд╕реЗрд╡рд╛рдУрдВ рдХреЛ рдкрдВрдЬреАрдХреГрдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рд╕рдХреНрд╖рдо рдХрд░реЗрдВ)ред рджреВрд╕рд░реЗ, рдЗрд╕реЗ рдЧрддрд┐рд╢реАрд▓ рд░реВрдк рд╕реЗ рдХрд░реЗрдВ, рдХреНрдпреЛрдВрдХрд┐ рдСрд░реНрдХреЗрд╕реНрдЯреНрд░реЗрд╢рди рд╕рд┐рд╕реНрдЯрдо рдХрд┐рд╕реА рднреА рд╕рдордп рд╕реЗрд╡рд╛ рдкреНрд░рддрд┐рдХреГрддрд┐рдпреЛрдВ рдХреА рд╕рдВрдЦреНрдпрд╛ рдХреЛ рдмрдврд╝рд╛ рдпрд╛ рдШрдЯрд╛ рд╕рдХрддреЗ рд╣реИрдВ, рдпрд╛ рдЙрдиреНрд╣реЗрдВ рдиреЗрдЯрд╡рд░реНрдХ рдкрд░ рдЕрдиреНрдп рдкрддреЗ рдкрд░ рд▓реЗ рдЬрд╛ рд╕рдХрддреЗ рд╣реИрдВред рдФрд░ рддреАрд╕рд░рд╛, рдЗрд╕реЗ рдЯреНрд░реИрдлрд┐рдХ рдХреЛ рд░реЛрдХреЗ рдмрд┐рдирд╛ рдХрд░реЗрдВред
рдЖрдЬ рдХреА рдкреЛрд╕реНрдЯ рдореЗрдВ, рдореИрдВ рджреЛ рд▓реЛрдб Balancers - Traefik рдФрд░ HAProxy рдХреЗ рд╕рд╛рде рдХрд╛рдо рдХрд░рдиреЗ рдХрд╛ рд╡рд░реНрдгрди рдХрд░реВрдВрдЧрд╛ред рдпреЗ рд▓реЛрдб Balancers рдСрд░реНрдХреЗрд╕реНрдЯреНрд░реЗрд╢рди рдЯреВрд▓ рдХреА рдПрдХ рдкреНрд░рднрд╛рд╡рд╢рд╛рд▓реА рд╕реВрдЪреА рдХреЗ рд╕рд╛рде рдХрд╛рдо рдХрд░рдиреЗ рдХреА рдХреНрд╖рдорддрд╛ рд░рдЦрддреЗ рд╣реИрдВред рдЙрджрд╛рд╣рд░рдгреЛрдВ рдХрд╛ рд╡рд░реНрдгрди рд╣реЛрдЧрд╛ рдХрд┐ рдШреБрдордВрддреВ рдЖрд░реНрдХреЗрд╕реНрдЯреНрд░рд╛ рд╕рд┐рд╕реНрдЯрдо рдХреЗ рд╕рд╛рде рдХреИрд╕реЗ рдХрд╛рдо рдХрд┐рдпрд╛ рдЬрд╛рдПред
рдкрд┐рдЫрд▓реА рдкреЛрд╕реНрдЯ рдореЗрдВ рдореИрдВрдиреЗ рдкрд╣рд▓реЗ рд╕реЗ рд╣реА рд▓реЛрдб рдмреИрд▓реЗрдВрд╕рд░реНрд╕ - рдлреИрдмрд┐рдпреЛ рдХрд╛ рдПрдХ рдЙрджрд╛рд╣рд░рдг рджрд┐рдпрд╛ рдерд╛ред рдЗрд╕рдХреА рд╕реАрдорд╛рдПрдБ: рдХреЗрд╡рд▓ http / https рдкреНрд░реЛрдЯреЛрдХреЙрд▓ рдХреЗ рд╕рд╛рде рдХрд╛рдо рдХрд░рддреА рд╣реИрдВ, рдФрд░ рдХреЗрд╡рд▓ рдХрдВрд╕реБрд▓ рдХреЗ рд╕рд╛рде рдХрд╛рдо рдХрд░рддреА рд╣реИрдВред рдлреИрдмрд┐рдпреЛ рдХреЗ рд╡рд┐рдкрд░реАрдд, рд▓реЛрдб Balancers Traefik рд╡рд┐рднрд┐рдиреНрди рдкреНрд░рдгрд╛рд▓рд┐рдпреЛрдВ рдХреА рдкреНрд░рднрд╛рд╡рд╢рд╛рд▓реА рд╕рдВрдЦреНрдпрд╛ рдХреЗ рд╕рд╛рде рдХрд╛рдо рдХрд░рддрд╛ рд╣реИред рдпрд╣рд╛рдБ рдбреЗрд╡рд▓рдкрд░ рдХреА рд╕рд╛рдЗрдЯ рд╕реЗ рд▓реА рдЧрдИ рдПрдХ рдЖрдВрд╢рд┐рдХ рд╕реВрдЪреА рд╣реИ: Docker, Swarm рдореЛрдб, Kubernetes, Marathon, Consul, Etcd, Rancher, Amazon ECS, ...
рдореИрдВ
рдкрд┐рдЫрд▓реЗ рдкреЛрд╕реНрдЯ рд╕реЗ рдЙрджрд╛рд╣рд░рдг рдЬрд╛рд░реА
рд░рдЦреВрдВрдЧрд╛ , рдЬрд┐рд╕рдореЗрдВ django рд╕реЗрд╡рд╛ рдХреЗ рдХрдИ рдкреНрд░рддрд┐рдХреГрддрд┐рдпрд╛рдВ рдмрдирд╛рдИ рдЧрдИ рдереАрдВред
рдЯреНрд░рд┐рдлрд╝рд┐рдХ рдХреЛ рдбреЗрд╡рд▓рдкрд░ рдХреА рд╕рд╛рдЗрдЯ рд╕реЗ рд╕рдмрд╕реЗ рдЖрдо рдСрдкрд░реЗрдЯрд┐рдВрдЧ рд╕рд┐рд╕реНрдЯрдо рдХреЗ рд▓рд┐рдП рдирд┐рд╖реНрдкрд╛рджрди рдпреЛрдЧреНрдп рдлрд╝рд╛рдЗрд▓ рдХреЗ рд░реВрдк рдореЗрдВ рдбрд╛рдЙрдирд▓реЛрдб рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИред рдЦрд╛рдирд╛рдмрджреЛрд╢ рдХреЗ рд╕рд╛рде рдПрдХреАрдХреГрдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП (рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ рдХрдВрд╕реБрд▓ рдХреЗ рд╕рд╛рде) рдЖрдкрдХреЛ рдПрдХ рдХреЙрдиреНрдлрд╝рд┐рдЧрд░реЗрд╢рди рдлрд╝рд╛рдЗрд▓ рдмрдирд╛рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИ:
[entryPoints] [entryPoints.http] address = ":5001" [web] address = ":8080" [consulCatalog] endpoint = "127.0.0.1:8500" domain = "consul.localhost" exposedByDefault = false prefix = "traefik"
рдФрд░ рдлрд┐рд░ рджрд┐рдП рдЧрдП рдХреЙрдиреНрдлрд╝рд┐рдЧрд░реЗрд╢рди рдлрд╝рд╛рдЗрд▓ рдХреЗ рд╕рд╛рде рдХрдорд╛рдВрдб рдЪрд▓рд╛рдПрдВ:
traefik -c nomad/traefik.toml
рдЙрд╕рдХреЗ рдмрд╛рдж, рдпреВрдЖрдИ рдЯреНрд░реИрдлрд┐рдХ рдкреЛрд░реНрдЯ 8080 рдкрд░ рдЙрдкрд▓рдмреНрдз рд╣реЛрдЧрд╛, рдЬрд┐рд╕рдиреЗ рдЕрднреА рддрдХ рдХреЛрдИ рднреА рд╕реЗрд╡рд╛ рдкреНрд░рдХрд╛рд╢рд┐рдд рдирд╣реАрдВ рдХреА рд╣реИред рд╕реЗрд╡рд╛рдУрдВ рдХреЛ рдкреНрд░рдХрд╛рд╢рд┐рдд рдХрд░рдиреЗ рдХреЗ рдХрдИ рддрд░реАрдХреЗ рд╣реИрдВ, рдЬреЛ рдЕрдВрддрддрдГ рдПрдХ рд╣реА рдХрд╛рдо рдХрд░рддреЗ рд╣реИрдВ - рд╡реЗ рдХреБрдВрдЬреА / рдореВрд▓реНрдп рдбреЗрдЯрд╛ рдХреЛ рдЯреНрд░рд╛рдлрд┐рдХ рд╕рд┐рд╕реНрдЯрдо рдореЗрдВ рд▓реЛрдб рдХрд░рддреЗ рд╣реИрдВред рд╣рдо рд╕реЗрд╡рд╛ рдЯреИрдЧ рдХреЗ рдорд╛рдзреНрдпрдо рд╕реЗ рдХреБрдВрдЬреА / рдореВрд▓реНрдп рдЬреЛрдбрд╝реЗ рд╕реЗрдЯ рдХрд░рдиреЗ рдХрд╛ рдЕрд╡рд╕рд░ рд▓реЗрдВрдЧреЗред рдЪрд▓реЛ рдЯреИрдЧ рдкреИрд░рд╛рдореАрдЯрд░ рдХреЗ рд╕рд╛рде django рд╕реЗрд╡рд╛ рдХреЙрдиреНрдлрд╝рд┐рдЧрд░реЗрд╢рди рдлрд╝рд╛рдЗрд▓ рдХрд╛ рд╡рд┐рд╕реНрддрд╛рд░ рдХрд░реЗрдВ:
job "django-job" { datacenters = ["dc1"] type = "service" group "django-group" { count = 3 restart { attempts = 2 interval = "30m" delay = "15s" mode = "fail" } ephemeral_disk { size = 300 } task "django-job" { driver = "docker" config { image = "apapacy/tut-django:1.0.1" port_map { lb = 8000 } } resources { network { mbits = 10 port "lb" {} } } service { name = "django" tags = [ "traefik.enable=true", "traefik.frontend.entryPoints=http", "traefik.frontend.rule=Host:localhost;PathStrip:/test", "traefik.tags=exposed" ] port = "lb" check { name = "alive" type = "http" path = "/" interval = "10s" timeout = "2s" } } } } }
рдЗрд╕ рдЙрджрд╛рд╣рд░рдг рдореЗрдВ, рд╕реЗрд╡рд╛ рдХреЛ рд╕реНрдерд╛рдиреАрдп рд╣реЛрд╕реНрдЯ рдкрд░ рдкреНрд░рдХрд╛рд╢рд┐рдд рдХрд┐рдпрд╛ рдЬрд╛рдПрдЧрд╛ рдФрд░ / рдкрд░реАрдХреНрд╖рдг рдорд╛рд░реНрдЧ рдкрд░ рд░рдЦрд╛ рдЬрд╛рдПрдЧрд╛ред рдЯреНрд░реИрдлрд┐рдХ рдиреЗ рдирд┐рдпрдорд┐рдд рдЕрднрд┐рд╡реНрдпрдХреНрддрд┐ рдХреЗ рд╕рд╛рде рдХрд╛рдо рдХрд░рдиреЗ рд╕рд╣рд┐рдд рдорд╛рд░реНрдЧреЛрдВ рдХреЛ рдХреЙрдиреНрдлрд╝рд┐рдЧрд░ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдирд┐рдпрдореЛрдВ рдХрд╛ рдПрдХ рд▓рдЪреАрд▓рд╛ рдФрд░ рдкреВрд░реНрдг рдкреНрд░рдгрд╛рд▓реА рд╡рд┐рдХрд╕рд┐рдд рдХреА рд╣реИред рдбреЗрд╡рд▓рдкрд░ рдкреНрд░рд▓реЗрдЦрди рдореЗрдВ
рдирд┐рдпрдореЛрдВ рдХреЗ рд▓рд┐рдП рдорд╛рдкрджрдВрдбреЛрдВ рдХреА рд╕реВрдЪреАред
nomad job run nomad/django.conf
рдмрд╛рдж
nomad job run nomad/django.conf
рдирд┐рдпрдо рд▓рд╛рдЧреВ рд╣реЛрддреЗ рд╣реИрдВ рдФрд░ рд▓реЛрдб рдмреИрд▓реЗрдВрд╕рд░ рд╕реЗ рдЯреНрд░реИрдлрд╝рд┐рдХ рд╕реЗрд╡рд╛ рдХреЛ рдирд┐рд░реНрджреЗрд╢рд┐рдд рдХрд┐рдпрд╛ рдЬрд╛рдПрдЧрд╛ред рддрджрдиреБрд╕рд╛рд░, рдЖрдк рдЗрди рдорд╛рдкрджрдВрдбреЛрдВ рдХреЛ рдмрджрд▓ рд╕рдХрддреЗ рд╣реИрдВ,
nomad job run nomad/django.conf
рд╕рд╛рде рдПрдХ рдирдпрд╛ рд╕реЗрд╡рд╛ рд╡рд┐рдХрд▓реНрдк рддреИрдирд╛рдд рдХрд░рддреЗ рд╣реИрдВ, рдФрд░ рд╕рднреА рдкрд░рд┐рд╡рд░реНрддрди рдмрд┐рдирд╛ рдЯреНрд░реИрдлрд╝рд┐рдХ рд░реЛрдХреЗрдВ рд▓рд╛рдЧреВ рдХрд┐рдП рдЬрд╛рдПрдВрдЧреЗред
рдЯреНрд░рд╛рдлрд┐рдХ рдХрд╛ рдиреБрдХрд╕рд╛рди рдпрд╣ рд╣реИ рдХрд┐ рдпрд╣ http / https рдкрд░рд┐рд╡рд╛рд░ рдХреЗ рдкреНрд░реЛрдЯреЛрдХреЙрд▓ рдХреЗ рд╕рд╛рде рдХрд╛рдо рдХрд░рддрд╛ рд╣реИ (рдмрд╕ рдорд╛рдорд▓реЗ рдореЗрдВ, рдореИрдВ рдзреНрдпрд╛рди рджреЗрддрд╛ рд╣реВрдВ рдХрд┐ рдЗрд╕ рдкрд░рд┐рд╡рд╛рд░ рдореЗрдВ рд╡реЗрдм рд╕реЙрдХреЗрдЯ рднреА рд╢рд╛рдорд┐рд▓ рд╣реИрдВ)ред рд▓реЗрдХрд┐рди рдлрд┐рд░ рднреА рдРрд╕реА рд╕рдВрднрд╛рд╡рдирд╛ рд╣реИ рдХрд┐ рдЕрдиреНрдп рдкреНрд░реЛрдЯреЛрдХреЙрд▓ рдХреЗ рд╕рд╛рде рдХрд╛рдо рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реЛрдЧреАред рддреЛ рдЪрд▓рд┐рдП рдЖрдЧреЗ рдмрдврд╝рддреЗ рд╣реИрдВ HAProxy рдкрд░ рдЖрдзрд╛рд░рд┐рдд рдЕрдЧрд▓реЗ рд╡реНрдпрд╛рдкрдХ рд╕рдорд╛рдзрд╛рди рдкрд░ред рдХреБрдЫ рд╕рдордп рдкрд╣рд▓реЗ, HAProxy рдХреЛ рд╕реЙрдлреНрдЯ рд▓реЛрдбрд┐рдВрдЧ рдХреА рд╕рдорд╕реНрдпрд╛ рдереА, рдЬрд┐рд╕рд╕реЗ рдСрд░реНрдХреЗрд╕реНрдЯреНрд░реЗрд╢рди рд╕рд┐рд╕реНрдЯрдо рдХреЗ рд╕рд╛рде рдЗрд╕рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдирд╛ рдореБрд╢реНрдХрд┐рд▓ рд╣реЛ рдЧрдпрд╛ рдерд╛ (рдкреБрдирд░рд╛рд░рдВрдн рдХреЗ рджреМрд░рд╛рди, рдиреЗрдЯрд╡рд░реНрдХ рд╕реНрддрд░ рдкрд░ рдкреИрдХреЗрдЯреЛрдВ рдХреА рдЖрд╡рд╛рдЬрд╛рд╣реА рдХреЛ рд░реЛрдХрдирд╛ рдЖрд╡рд╢реНрдпрдХ рдерд╛)ред рдЕрдм рдпрд╣ рдХреЛрдИ рд╕рдорд╕реНрдпрд╛ рдирд╣реАрдВ рд╣реИред
рд╕рдмрд╕реЗ рдкрд╣рд▓реЗ рдЖрдкрдХреЛ рдЕрдкрдиреЗ рдХрдВрдкреНрдпреВрдЯрд░ рдкрд░ haproxy рд╕реНрдерд╛рдкрд┐рдд рдХрд░рдирд╛ рд╣реЛрдЧрд╛ред рдпрд╣рд╛рдВ, рдХрдВрдЯреЗрдирд░ рдХреЗ рдЕрдВрджрд░ рд╕реНрдерд╛рдкрд┐рдд рдХрд░рдиреЗ рдХрд╛ рд╡рд┐рдХрд▓реНрдк рдХрд╛рдо рдирд╣реАрдВ рдХрд░реЗрдЧрд╛ред рд╣реИрдкреНрд░реЛрдХреНрд╕реА рдореЗрдВ, рд╣рд╛рд▓ рд╣реА рдореЗрдВ рдкреНрд░рдХреНрд░рд┐рдпрд╛ рдХреЛ "рд╕реЙрдлреНрдЯ" рдореЛрдб рдореЗрдВ рдлрд┐рд░ рд╕реЗ рд╢реБрд░реВ рдХрд░рдирд╛ рд╕рдВрднрд╡ рд╣реЛ рдЧрдпрд╛, рд▓реЗрдХрд┐рди рдЙрд╕реА рд╕рдордп рдбреЙрдХрдЯрд░ рдХрдВрдЯреЗрдирд░ рд╡реИрд╕реЗ рднреА рдмрдВрдж рд╣реЛ рдЬрд╛рддрд╛ рд╣реИ, рдХреНрдпреЛрдВрдХрд┐ рд╣рдкреНрд░реЛрдХреНрд╕реА рдХреЗ рд╕рд╛рде рджреВрд╕рд░реА рдкреНрд░рдХреНрд░рд┐рдпрд╛ рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ рд╢реБрд░реВ рд╣реЛрддреА рд╣реИ, рдмрд╕ рдЙрдиреНрд╣реЗрдВ рдмрджрд▓рдиреЗ рд╕реЗ рд╕реНрдЯреИрдВрдбрдмрд╛рдп рдореЛрдб рдореЗрдВ рдЬрдЧрд╣ рдорд┐рд▓рддреА рд╣реИ - рдЬреЛ рдбреЙрдХрдЯрд░ рдФрд░ рдЙрд╕рдХреЗ рд╕рд┐рджреНрдзрд╛рдВрдд рдХреЗ рд╕рд╛рде рдХрд╛рдо рдирд╣реАрдВ рдХрд░рддрд╛ рд╣реИ "рдПрдХ -рдХрдВрдЯреЗрдирд░ рдПрдХ рдкреНрд░рдХреНрд░рд┐рдпрд╛ рд╣реИред тАЭ
рдХрд╛рдо рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП haproxy рдХреЗ рд▓рд┐рдП, рдЖрдкрдХреЗ рдкрд╛рд╕ рдПрдХ рдХреЙрдиреНрдлрд╝рд┐рдЧрд░реЗрд╢рди рдлрд╝рд╛рдЗрд▓ рд╣реЛрдиреА рдЪрд╛рд╣рд┐рдП рдЬрд┐рд╕рдореЗрдВ рдЖрд╡рд╢реНрдпрдХ рдирд┐рдпрдо рд╣реЛрдВред рдЦрд╛рдирд╛рдмрджреЛрд╢ (рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ рдХрдВрд╕реБрд▓ рдореЗрдВ) рдПрдХ рдЯреЗрдореНрдкрд▓реЗрдЯ рдкреНрд░рдгрд╛рд▓реА рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддрд╛ рд╣реИ рдЬреЛ рдХреЙрдиреНрдлрд╝рд┐рдЧрд░реЗрд╢рди рдЙрддреНрдкрдиреНрди рдХрд░ рд╕рдХрддрд╛ рд╣реИ:
global debug defaults log global mode http option httplog option dontlognull timeout connect 5000 timeout client 50000 timeout server 50000 frontend http_front bind *:5001 stats uri /haproxy?stats default_backend http_back backend http_back balance roundrobin{{range service "django"}} server {{.Node}} {{.Address}}:{{.Port}} check{{end}}
рдЗрд╕ рдорд╛рдорд▓реЗ рдореЗрдВ
range
рдХреАрд╡рд░реНрдб рдПрдХ рдкреБрдирд░рд╛рд╡реГрддреНрдд рдХреЗ рд░реВрдк рдореЗрдВ рдХрд╛рд░реНрдп рдХрд░рддрд╛ рд╣реИред рддреАрди "django" рд╕реЗрд╡рд╛рдУрдВ рдХреЗ рд▓рд┐рдП, рдирд┐рдореНрди рдХреЙрдиреНрдлрд╝рд┐рдЧрд░реЗрд╢рди рдлрд╝рд╛рдЗрд▓ рдЙрддреНрдкрдиреНрди рдХреА рдЬрд╛рдПрдЧреА:
global debug defaults log global mode http option httplog option dontlognull timeout connect 5000 timeout client 50000 timeout server 50000 frontend http_front bind *:5001 stats uri /haproxy?stats default_backend http_back backend http_back balance roundrobin server 228.195.86.224 127.0.0.1:21469 check server 228.195.86.224 127.0.0.1:25872 check server 228.195.86.224 127.0.0.1:25865 check
рд▓рд╛рдЗрдмреНрд░реЗрд░реА
https://github.com/hashicorp/consul-template рдХрд╛ рдЙрдкрдпреЛрдЧ рдордХреНрдЦреА рдкрд░ рдЯреЗрдореНрдкрд▓реЗрдЯ рдХреЗ рдЕрдиреБрд╕рд╛рд░ рдкреАрдврд╝реА рдХреА рдкреНрд░рдХреНрд░рд┐рдпрд╛ рд╢реБрд░реВ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИред рдбреЗрд╡рд▓рдкрд░ рдХреЗ рд╕рдВрд╕рд╛рдзрди рд╕реЗ, рдЖрдк рд╕рднреА рд╕рд╛рдорд╛рдиреНрдп рдСрдкрд░реЗрдЯрд┐рдВрдЧ рд╕рд┐рд╕реНрдЯрдо рдХреЗ рд▓рд┐рдП рдирд┐рд╖реНрдкрд╛рджрди рдпреЛрдЧреНрдп рдлрд╝рд╛рдЗрд▓ рдбрд╛рдЙрдирд▓реЛрдб рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ, рдФрд░ рдХрдорд╛рдВрдб рдХреЗ рд╕рд╛рде рдЕрдирдзрд┐рдХреГрдд рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рдХреА рдУрд░ рд╕реЗ рдкреНрд░рдХреНрд░рд┐рдпрд╛ рд╢реБрд░реВ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ:
consul-template -template="haproxy/haproxy.cfg.tmpl:haproxy/haproxy.cfg:./haproxy/haproxy.reload.sh"
-template
рдкреИрд░рд╛рдореАрдЯрд░ рдореЗрдВ рдмреГрд╣рджрд╛рдиреНрддреНрд░-рдЕрд▓рдЧ рдХрд┐рдП рдЧрдП рдкреИрд░рд╛рдореАрдЯрд░ 1) рдЯреЗрдореНрдкрд▓реЗрдЯ рдХрд╛ рдирд╛рдо, 2) рдкрд░рд┐рдгрд╛рдореА рдХреЙрдиреНрдлрд╝рд┐рдЧрд░реЗрд╢рди рдлрд╝рд╛рдЗрд▓ рдХрд╛ рдирд╛рдо 3) рдлрд╝рд╛рдЗрд▓ рдЙрддреНрдкрдиреНрди рд╣реЛрдиреЗ рдХреЗ рдмрд╛рдж рдирд┐рд╖реНрдкрд╛рджрд┐рдд рд╣реЛрдиреЗ рд╡рд╛рд▓реА рдХрдорд╛рдВрдбред рдпрджрд┐ рдЯреЗрдореНрдкреНрд▓реЗрдЯ рдореЗрдВ рд╢рд╛рдорд┐рд▓ рдЪрд░реЛрдВ рдХреЛ рдмрджрд▓ рджрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ (рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, django рд╕реЗрд╡рд╛ рдХреА рдкреНрд░рддрд┐рдХреГрддрд┐рдпреЛрдВ рдХреА рд╕рдВрдЦреНрдпрд╛ рдмрджрд▓ рдЬрд╛рддреА рд╣реИ) рддреЛ рдлрд╝рд╛рдЗрд▓ рдЕрдкрдиреЗ рдЖрдк рдЬреЗрдирд░реЗрдЯ рд╣реЛ рдЬрд╛рдПрдЧреАред
рдкрд╣рд▓рд╛ рдХреЙрдиреНрдлрд╝рд┐рдЧрд░реЗрд╢рди рдЙрддреНрдкрдиреНрди рдХрд░рдиреЗ рд╡рд╛рд▓рд╛ рдЯреЗрдореНрдкрд▓реЗрдЯ рдЗрдВрдЬрди рд╢реБрд░реВ рдХрд░рдиреЗ рдХреЗ рдмрд╛рдж, рдЖрдк haproxy рдЪрд▓рд╛ рд╕рдХрддреЗ рд╣реИрдВ:
haproxy -D -f haproxy/haproxy.cfg -p `pwd`/haproxy.pid
рд╣рдо рд╕реНрдкрд╖реНрдЯ рд░реВрдк рд╕реЗ pid рдлрд╝рд╛рдЗрд▓ рдХреЛ рдирд┐рд░реНрджрд┐рд╖реНрдЯ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП "рдирд░рдо" haproxy рдЕрдзрд┐рднрд╛рд░ рдХреЛ рдПрдХ рд╕рдВрдХреЗрдд рднреЗрдЬрдиреЗ рдореЗрдВ рд╕рдХреНрд╖рдо рд╣реЛрдиреЗ рдХреЗ рд▓рд┐рдП:
haproxy -D -f ./haproxy/haproxy.cfg -p `pwd`/haproxy.pid -sf $(cat `pwd`/haproxy.pid)
рдЗрд╕ рдЙрджрд╛рд╣рд░рдг рдореЗрдВ, рд╕реЗрд╡рд╛ 5001 рдкреЛрд░реНрдЯ рдкрд░ рдкреНрд░рдХрд╛рд╢рд┐рдд рдХреА рдЧрдИ рд╣реИред рдЙрд╕реА рдкреЛрд░реНрдЯ рдкрд░, рдЖрдк рдкрддреЗ
/haproxy?stats
рдкрд░ рд╣реА haproxy рдХреЗ рдЖрдБрдХрдбрд╝реЗ рджреЗрдЦ рд╕рдХрддреЗ рд╣реИрдВ
/haproxy?stats
ред
рдЕрджреНрдпрддрди 02/24/2019 10:43 рдЕрдкрд░рд╛рд╣реНрди
@ рдпреВрдЧреЛ рдХреА рдЯрд┐рдкреНрдкрдгреА рдХреЗ рдЕрдиреБрд╕рд╛рд░, рдбреЙрдХрдЯрд░ рдХрдВрдЯреЗрдирд░ рдореЗрдВ рд╣реИрдкреНрд░реЛрдХреНрд╕реА рдХреЗ рд╕рдВрдЪрд╛рд▓рди рдХреЗ рд▓рд┐рдП рдПрдХ рдЕрддрд┐рд░рд┐рдХреНрдд рд╢реЛрдзрди рдХрд┐рдпрд╛ рдЧрдпрд╛ рдерд╛, рд╡рд┐рд╢реЗрд╖ рд░реВрдк рд╕реЗ рдкреНрд░рд▓реЗрдЦрди
github.com/neo4j/docker-library-docs/tree/master/haproxy#reloading-config рдХреЗ рдЯреБрдХрдбрд╝реЗ рд╕реЗ
рдкреБрдирдГ рд▓реЛрдб рд╣реЛ рд░рд╣рд╛ рд╣реИ рд╡рд┐рдиреНрдпрд╛рд╕
рдпрджрд┐ рдЖрдкрдиреЗ рдХреЙрдиреНрдлрд╝рд┐рдЧрд░реЗрд╢рди рдХреЗ рд▓рд┐рдП рдмрд╛рдЗрдВрдб рдорд╛рдЙрдВрдЯ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд┐рдпрд╛ рд╣реИ рдФрд░ рдЕрдкрдиреА haproxy.cfg рдлрд╛рдЗрд▓ рдХреЛ рдПрдбрд┐рдЯ рдХрд┐рдпрд╛ рд╣реИ, рддреЛ рдЖрдк рдХрдВрдЯреЗрдирд░ рдореЗрдВ SITEUP рднреЗрдЬрдХрд░ HAProxy рдХреЗ рдЧреНрд░реЗрд╕рдлреБрд▓ рд░реАрд▓реЛрдб рдлреАрдЪрд░ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ:
$ docker рдорд╛рд░ -s HUP рдореЗрд░рд╛-рдЪрд▓ рд░рд╣рд╛ рд╣реИ- hproxy
рдЗрдореЗрдЬ рдореЗрдВ рдПрдВрдЯреНрд░реАрдкреЙрдЗрдВрдЯ рд╕реНрдХреНрд░рд┐рдкреНрдЯ рдХрдорд╛рдВрдб рд╣реИрдкреНрд░реЛрдХреНрд╕ рдЪрд▓рд╛рдиреЗ рдХреЗ рд▓рд┐рдП рдЬрд╛рдБрдЪ рдХрд░рддрд╛ рд╣реИ рдФрд░ рдЗрд╕реЗ рд╣рд╛рдкреНрд░реЛрдХреНрд╕реА-рд╕рд┐рд╕реНрдЯрдордб-рд░реИрдкрд░ рд╕реЗ рд╣рд╛рдкреНрд░реЛрд╕реА рдЕрдкрд╕реНрдЯреНрд░реАрдо рд╕реЗ рдмрджрд▓ рджреЗрддрд╛ рд╣реИ рдЬреЛ рдХрд┐ рд╕реБрд╢реЛрднрд┐рдд рдкреБрдирдГ рд▓реЛрдб рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рд╕рд┐рдЧреНрдирд▓ рд╣реИрдВрдбрд▓рд┐рдВрдЧ рдХрд╛ рдзреНрдпрд╛рди рд░рдЦрддрд╛ рд╣реИред рд╣реБрдб рдХреЗ рддрд╣рдд рдпрд╣ рд╣рд╛рдЗрдкреНрд░реЛрдХреНрд╕ рдХреЗ -sf рд╡рд┐рдХрд▓реНрдк рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддрд╛ рд╣реИ рдЗрд╕рд▓рд┐рдП "рдкреНрд░рддреНрдпреЗрдХ рдореЗрдВ рдХреБрдЫ рдорд┐рд▓реАрд╕реЗрдХрдВрдб рдХреА рджреЛ рдЫреЛрдЯреА рдЦрд┐рдбрд╝рдХрд┐рдпрд╛рдВ рд╣реЛрддреА рд╣реИрдВ, рдЬрд╣рд╛рдВ рдпрд╣ рд╕рдВрднрд╡ рд╣реИ рдХрд┐ рдЙрдЪреНрдЪ рднрд╛рд░ рдХреЗ рджреМрд░рд╛рди рдХреБрдЫ рдХрдиреЗрдХреНрд╢рди рд╡рд┐рдлрд▓рддрд╛рдУрдВ рдкрд░ рдзреНрдпрд╛рди рджрд┐рдпрд╛ рдЬрд╛рдПрдЧрд╛" (рджреЗрдЦреЗрдВ рд╕реНрдЯреЙрдкрд┐рдВрдЧ рдФрд░ рдкреБрдирд░рд╛рд░рдВрдн HAProxy)ред
рдЗрд╕ рджреГрд╖реНрдЯрд┐рдХреЛрдг рдХреЗ рд╕рд╛рде, рдХреЙрдиреНрдлрд╝рд┐рдЧрд░реЗрд╢рди рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ рдкреБрдирдГ рд▓реЛрдб рдХрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИ, рд▓реЗрдХрд┐рди рд╡рд░реНрддрдорд╛рди рдкреНрд░рдХреНрд░рд┐рдпрд╛ рдХреЗ рд░реБрдХрд╛рд╡рдЯ рдХреЗ рдкрд░рд┐рдгрд╛рдорд╕реНрд╡рд░реВрдкред рдФрд░ рдЗрд╕рдХрд╛ рдорддрд▓рдм рд╣реИ рдХрд┐ рд╕реЗрд╡рд╛рдУрдВ рдХреЗ рдкрд╛рд╕ рдмрд╣реБрдд рд╣реА рдорд╣рддреНрд╡рд╣реАрди рд╣реЛрдЧрд╛, рд▓реЗрдХрд┐рди рдлрд┐рд░ рднреА рджреБрд░реНрдЧрдорддрд╛ рдХреА рдЕрд╡рдзрд┐ рдФрд░ рдХреБрдЫ рдЧреНрд░рд╛рд╣рдХ рдПрдХ рддреНрд░реБрдЯрд┐ рд╕рдВрджреЗрд╢ рджреЗрдЦ рд╕рдХрддреЗ рд╣реИрдВред рд▓реЗрдХрд┐рди рдХрднреА-рдХрднреА рдпрд╣ рдореБрдЦреНрдп рдЪрдпрди рдорд╛рдирджрдВрдб рдирд╣реАрдВ рд╣реЛрддрд╛ рд╣реИред рдЗрд╕рд▓рд┐рдП, рдореИрдВ docker-compose.yml рд╡рд┐рдиреНрдпрд╛рд╕ рдХреЛ docker рдореЗрдВ haproxy рд▓реЙрдиреНрдЪ рдХрд░рдиреЗ рдХреЗ рдЕрд▓рд╛рд╡рд╛ рджреВрдВрдЧрд╛:
version: '3' services: haproxy_lb: image: haproxy volumes: - ./haproxy:/usr/local/etc/haproxy network_mode: host
рд╣реИрдкреНрд░реЛрдХреНрд╕реА рдХреЙрдиреНрдлрд╝рд┐рдЧрд░реЗрд╢рди рдХреЛ рдЕрдзрд┐рднрд╛рд░рд┐рдд рдХрд░рдиреЗ рд╡рд╛рд▓реА рдХрдорд╛рдВрдб рднреА рдмрджрд▓ рдЬрд╛рдПрдЧреА:
consul-template -template="haproxy/haproxy.cfg.tmpl:haproxy/haproxy.cfg:docker kill -s HUP $(docker-compose ps -q haproxy_lb)"
рдЗрд╕ рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди рдХреЗ рдлрд╛рдпрджреЛрдВ рдореЗрдВ рд╣рд╛рдЗрдкреНрд░реЛрдХреНрд╕реА рд╕реНрдерд╛рдкрд┐рдд рдХрд┐рдП рдмрд┐рдирд╛ рдХрд╛рдо рдХрд░рдиреЗ рдХреА рдХреНрд╖рдорддрд╛ рд╢рд╛рдорд┐рд▓ рд╣реИред
рдирдореВрдирд╛ рдХреЛрдб рд░рд┐рдкреЙрдЬрд┐рдЯрд░реА рдореЗрдВ рдЙрдкрд▓рдмреНрдз рд╣реИредрдЙрдкрдпреЛрдЧреА рд▓рд┐рдВрдХ:
1.
www.haproxy.com/blog/haproxy-and-consul-with-dns-for-service-discovery2.
m.mattmclaugh.com/traefik-and-consul-catalog-example-2c33fc1480c03.
www.hashicorp.com/blog/load-balancing-strategies-for-consulapapacy@gmail.com
24 рдлрд░рд╡рд░реА, 2019