рдпрд╣ рд╕рд┐рд░реНрдл рдЗрддрдирд╛ рд╣реБрдЖ рдХрд┐ рд╕рдорд╕реНрдпрд╛ рдХреЛ рд╕реЗрдЯ рдХрд░рдиреЗ рдХреЗ рд╕рдордп рдореЗрд░реЗ рдкрд╛рд╕ рдЕрдХреЗрд▓реЗ рдЗрд╕ рд╕рдорд╛рдзрд╛рди рдХреЛ рд╡рд┐рдХрд╕рд┐рдд рдХрд░рдиреЗ рдФрд░ рдЪрд▓рд╛рдиреЗ рдХреЗ рд▓рд┐рдП рдкрд░реНрдпрд╛рдкреНрдд рдбрд┐рдЧреНрд░реА рдХрд╛ рдЕрдиреБрднрд╡ рдирд╣реАрдВ рдерд╛ред рдФрд░ рдлрд┐рд░ рдореИрдВ рдЧреБрдЧрд▓реА рдХрд░рдиреЗ рд▓рдЧрд╛ред
рдореБрдЭреЗ рдирд╣реАрдВ рдкрддрд╛ рдХрд┐ рдкрдХрдбрд╝ рдХреНрдпрд╛ рд╣реИ, рд▓реЗрдХрд┐рди umpteenth рд╕рдордп рдХреЗ рд▓рд┐рдП рдореБрдЭреЗ рдЗрд╕ рддрдереНрдп рдХрд╛ рд╕рд╛рдордирд╛ рдХрд░рдирд╛ рдкрдбрд╝рд╛ рд╣реИ рдХрд┐ рднрд▓реЗ рд╣реА рдЖрдк рдЯреНрдпреВрдЯреЛрд░рд┐рдпрд▓ рдХреЗ рд░реВрдк рдореЗрдВ рдХрджрдо рд╕реЗ рдХрджрдо рд╕рдм рдХреБрдЫ рдХрд░рддреЗ рд╣реИрдВ, рд▓реЗрдЦрдХ рдХреЗ рд░реВрдк рдореЗрдВ рдПрдХ рд╣реА рдПрдирд╡рд╛рдпрд░рдореЗрдВрдЯ рддреИрдпрд╛рд░ рдХрд░реЗрдВ, рдлрд┐рд░ рдХреБрдЫ рднреА рдХрд╛рдо рдирд╣реАрдВ рдХрд░рддрд╛ рд╣реИред рдореБрдЭреЗ рдирд╣реАрдВ рдкрддрд╛ рдХрд┐ рдпрд╣ рдХрд┐рд╕ рдмрд╛рд░реЗ рдореЗрдВ рд╣реИ, рд▓реЗрдХрд┐рди рдЬрдм рдореИрдВ рдЗрд╕ рдмрд╛рд░реЗ рдореЗрдВ рдлрд┐рд░ рд╕реЗ рдЖрдпрд╛, рддреЛ рдореИрдВрдиреЗ рдлреИрд╕рд▓рд╛ рдХрд┐рдпрд╛ - рдФрд░ рдореИрдВ рдЕрдкрдирд╛ рдЯреНрдпреВрдЯреЛрд░рд┐рдпрд▓ рд▓рд┐рдЦреВрдВрдЧрд╛ рдЬрдм рд╕рдм рдХреБрдЫ рдХрд╛рдо рдХрд░реЗрдЧрд╛ред рдПрдХ рдЬреЛ рдирд┐рд╢реНрдЪрд┐рдд рд░реВрдк рд╕реЗ рдХрд╛рдо рдХрд░реЗрдЧрд╛ред
рдСрдирд▓рд╛рдЗрди рдорд╛рд░реНрдЧрджрд░реНрд╢рд┐рдХрд╛рдПрдБ
рдпрд╣ рд╕рд┐рд░реНрдл рдЗрддрдирд╛ рд╣реБрдЖ рдХрд┐ рдЗрдВрдЯрд░рдиреЗрдЯ рд╡рд┐рднрд┐рдиреНрди рдЧрд╛рдЗрдб, рдЯреНрдпреВрдЯреЛрд░рд┐рдпрд▓, рдЪрд░рдг-рджрд░-рдЪрд░рдг, рдФрд░ рдЗрд╕ рддрд░рд╣ рдХреА рдХрдореА рд╕реЗ рдЧреНрд░рд╕реНрдд рдирд╣реАрдВ рд╣реИред рдпрд╣ рд╕рд┐рд░реНрдл рдЗрддрдирд╛ рд╣реБрдЖ рдХрд┐ рдореБрдЭреЗ рд╕реБрд╡рд┐рдзрд╛рдЬрдирдХ рд╕рдВрдЧрдарди рдХреЗ рд▓рд┐рдП рдПрдХ рд╕рдорд╛рдзрд╛рди рд╡рд┐рдХрд╕рд┐рдд рдХрд░рдиреЗ рдФрд░ рдПрдХ рдЕрд╕рдлрд▓-рд╕реБрд░рдХреНрд╖рд┐рдд рдкреЛрд╕реНрдЯрдЧреНрд░реЗрд╕реАрдХреНрдпреВрдПрд▓ рдХреНрд▓рд╕реНрдЯрд░ рдХреЗ рдирд┐рд░реНрдорд╛рдг рдХрд╛ рдХрд╛рдо рд╕реМрдВрдкрд╛ рдЧрдпрд╛ рдерд╛, рдЬрд┐рд╕рдХреА рдореБрдЦреНрдп рдЖрд╡рд╢реНрдпрдХрддрд╛рдПрдВ рдорд╛рд╕реНрдЯрд░ рд╕рд░реНрд╡рд░ рд╕реЗ рд╕рднреА рдкреНрд░рддрд┐рдХреГрддрд┐ рдФрд░ рд░рд┐рдЬрд╝рд░реНрд╡ рдХреЗ рд╕реНрд╡рдЪрд╛рд▓рд┐рдд рдЗрдирдкреБрдЯ рдХреЗ рд▓рд┐рдП рдорд╛рд╕реНрдЯрд░ рд╕рд░реНрд╡рд░ рдХреЗ рд╡рд┐рдлрд▓ рд╣реЛрдиреЗ рдкрд░ рдкреНрд░рддрд┐рдХреГрддрд┐ рдХреА рд╕реНрдЯреНрд░реАрдорд┐рдВрдЧ рдХрд░ рд░рд╣реА рдереАрдВред
рдЗрд╕ рд╕реНрддрд░ рдкрд░, рдЙрдкрдпреЛрдЧ рдХреА рдЬрд╛рдиреЗ рд╡рд╛рд▓реА рдкреНрд░реМрджреНрдпреЛрдЧрд┐рдХрд┐рдпреЛрдВ рдХреЗ рдвреЗрд░ рдХреЛ рдкрд░рд┐рднрд╛рд╖рд┐рдд рдХрд┐рдпрд╛ рдЧрдпрд╛ рдерд╛:
- рдПрдХ DBMS рдХреЗ рд░реВрдк рдореЗрдВ PostgreSQL
- рдПрдХ рдХреНрд▓рд╕реНрдЯрд░рд┐рдВрдЧ рд╕рдорд╛рдзрд╛рди рдХреЗ рд░реВрдк рдореЗрдВ рдкреЗрдЯреНрд░реЛрдиреА
- Patroni рдХреЗ рд▓рд┐рдП рд╡рд┐рддрд░рд┐рдд рднрдВрдбрд╛рд░рдг рдХреЗ рд░реВрдк рдореЗрдВ etcd
- рдбреЗрдЯрд╛рдмреЗрд╕ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рд╡рд╛рд▓реЗ рдЕрдиреБрдкреНрд░рдпреЛрдЧреЛрдВ рдХреЗ рд▓рд┐рдП рдПрдХрд▓ рдкреНрд░рд╡рд┐рд╖реНрдЯрд┐ рдмрд┐рдВрджреБ рдХреЗ рдЖрдпреЛрдЬрди рдХреЗ рд▓рд┐рдП HAproxy
рд╕реНрдерд╛рдкрдирд╛
рдЖрдкрдХрд╛ рдзреНрдпрд╛рди - Patroni, etcd, HAProxy рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддреЗ рд╣реБрдП рдПрдХ рдЙрдЪреНрдЪ рдЙрдкрд▓рдмреНрдзрддрд╛ PostgreSQL рдХреНрд▓рд╕реНрдЯрд░ рдХрд╛ рдирд┐рд░реНрдорд╛рдгред
рд╕рднреА рдХрд╛рд░реНрдпреЛрдВ рдХреЛ рдбреЗрдмрд┐рдпрди 10 рд╕реНрдерд╛рдкрд┐рдд рдХреЗ рд╕рд╛рде рдЖрднрд╛рд╕реА рдорд╢реАрдиреЛрдВ рдкрд░ рдХрд┐рдпрд╛ рдЧрдпрд╛ рдерд╛ред
etcd
рдореИрдВ рдЙрд╕реА рдорд╢реАрдиреЛрдВ рдкрд░ etcd рд╕реНрдерд╛рдкрд┐рдд рдХрд░рдиреЗ рдХреА рд╕рд▓рд╛рд╣ рдирд╣реАрдВ рджреЗрддрд╛ рдЬрд╣рд╛рдБ patroni рдФрд░ postgresql рд╕реНрдерд┐рдд рд╣реЛрдВрдЧреЗ, рдХреНрдпреЛрдВрдХрд┐ рдбрд┐рд╕реНрдХ рд▓реЛрдб etcd рдХреЗ рд▓рд┐рдП рдмрд╣реБрдд рдорд╣рддреНрд╡рдкреВрд░реНрдг рд╣реИред рд▓реЗрдХрд┐рди рдкреНрд░рд╢рд┐рдХреНрд╖рдг рдХреЗ рдЙрджреНрджреЗрд╢реНрдпреЛрдВ рдХреЗ рд▓рд┐рдП, рд╣рдо рдмрд╕ рдпрд╣реА рдХрд░реЗрдВрдЧреЗред
рдЖрджрд┐ рд╕реНрдерд╛рдкрд┐рдд рдХрд░реЗрдВред
рдлрд╝рд╛рдЗрд▓ / etc / default / etcd рдореЗрдВ рд╕рд╛рдордЧреНрд░реА рдЬреЛрдбрд╝реЗрдВ[рд╕рджрд╕реНрдп]
рдЖрдкрдХреА рдорд╢реАрди рдХрд╛ ETCD_NAME = datanode1 # hostname
ETCD_DATA_DIR = "/ var / lib / etcd / default.etcd"
рд╕рднреА рдЖрдИрдкреА рд╡рд┐рдЬреНрдЮрд╛рдкрдиреЛрдВ рдХреЛ рдорд╛рдиреНрдп рдХрд┐рдпрд╛ рдЬрд╛рдПрдЧрд╛ред рд▓рд┐рд╕реНрдЯрд░ PEER, рдЧреНрд░рд╛рд╣рдХ рдЖрджрд┐ рдиреЗ HOST рдХреЗ IP ADDRESS рдХреЛ рднреЗрдЬ рджрд┐рдпрд╛
ETCD_LISTEN_PEER_URLS = " http://192.168.0.143:2380 " # рдЖрдкрдХрд╛ рдорд╢реАрди рдкрддрд╛
ETCD_LISTEN_CLIENT_URLS = " http://192.168.0.143:2379,http://127.0.0.1:2379 " # рдЖрдкрдХреА рдорд╢реАрди рдХрд╛ рдкрддрд╛
[рдХреНрд▓рд╕реНрдЯрд░]
ETCD_INITIAL_ADVERTISE_PEER_URLS = " http://192.168.0.143:2380 " # рдЖрдкрдХреА рдорд╢реАрди рдХрд╛ рдкрддрд╛
ETCD_INITIAL_CLUSTER = "datanode1 = http://192.168.0.143:2380,datanode2=http://192.168.0.144:2380,datanode3=ttttp://192.168.0.145:2380 " # рдЗрддреНрдпрд╛рджрд┐ рдХреНрд▓рд╕реНрдЯрд░ рдХреА рд╕рднреА рдорд╢реАрдиреЛрдВ рдХреЗ рдкрддреЗред
ETCD_INITIAL_CLUSTER_STATE = "рдирдпрд╛"
ETCD_INITIAL_CLUSTER_TOKEN = "рд╡рдЧреИрд░-рдХреНрд▓рд╕реНрдЯрд░ -1"
ETCD_ADVERTISE_CLIENT_URLS = " http://192.168.0.143:2379 " # рдЖрдкрдХрд╛ рдорд╢реАрди рдкрддрд╛
рдХрдорд╛рдВрдб рдЪрд▓рд╛рдПрдВ
systemctl restart etcd
PostgreSQL 9.6 + рд╕рдВрд░рдХреНрд╖рдХ
рдкрд╣рд▓реА рдмрд╛рдд рдпрд╣ рд╣реИ рдХрд┐ рдЙрди рдкрд░ рдЖрд╡рд╢реНрдпрдХ рд╕реЙрдлрд╝реНрдЯрд╡реЗрдпрд░ рд╕реНрдерд╛рдкрд┐рдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рддреАрди рд╡рд░реНрдЪреБрдЕрд▓ рдорд╢реАрди рд╕реНрдерд╛рдкрд┐рдд рдХрд░реЗрдВред рдорд╢реАрдиреЛрдВ рдХреЛ рд╕реНрдерд╛рдкрд┐рдд рдХрд░рдиреЗ рдХреЗ рдмрд╛рдж, рдпрджрд┐ рдЖрдк рдореЗрд░реЗ рдЯреНрдпреВрдЯреЛрд░рд┐рдпрд▓ рдХрд╛ рдЕрдиреБрд╕рд░рдг рдХрд░рддреЗ рд╣реИрдВ, рддреЛ рдЖрдк рдЗрд╕ рд╕рд░рд▓ рд╕реНрдХреНрд░рд┐рдкреНрдЯ рдХреЛ рдЪрд▓рд╛ рд╕рдХрддреЗ рд╣реИрдВ рдЬреЛ (рд▓рдЧрднрдЧ) рдЖрдкрдХреЗ рд▓рд┐рдП рд╕рдм рдХреБрдЫ рдХрд░рддрд╛ рд╣реИред рд░реВрдЯ рдХреЗ рд░реВрдк рдореЗрдВ рдЪрд▓рд╛рдПрдВред
рдХреГрдкрдпрд╛ рдзреНрдпрд╛рди рджреЗрдВ рдХрд┐ рд╕реНрдХреНрд░рд┐рдкреНрдЯ PostgreSQL рд╕рдВрд╕реНрдХрд░рдг 9.6 рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддреА рд╣реИ, рдпрд╣ рд╣рдорд╛рд░реА рдХрдВрдкрдиреА рдХреА рдЖрдВрддрд░рд┐рдХ рдЖрд╡рд╢реНрдпрдХрддрд╛рдУрдВ рдХреЗ рдХрд╛рд░рдг рд╣реИред рд╕рдорд╛рдзрд╛рди PostgreSQL рдХреЗ рдЕрдиреНрдп рд╕рдВрд╕реНрдХрд░рдгреЛрдВ рдкрд░ рдкрд░реАрдХреНрд╖рдг рдирд╣реАрдВ рдХрд┐рдпрд╛ рдЧрдпрд╛ рдерд╛ред
рдЕрдЧрд▓рд╛, рдмрд╕ рдмрдирд╛рдИ рдЧрдИ /etc/patroni.yml рдлрд╝рд╛рдЗрд▓ рдореЗрдВ, рдЖрдкрдХреЛ рдирд┐рдореНрдирд▓рд┐рдЦрд┐рдд рд╕рд╛рдордЧреНрд░реА рдбрд╛рд▓рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИ, рдирд┐рд╢реНрдЪрд┐рдд рд░реВрдк рд╕реЗ рдЖрдкрдХреЗ рджреНрд╡рд╛рд░рд╛ рдЙрдкрдпреЛрдЧ рдХрд┐рдП рдЬрд╛рдиреЗ рд╡рд╛рд▓реЗ рдкрддреЗ рдХреЗ рд▓рд┐рдП рд╕рднреА рд╕реНрдерд╛рдиреЛрдВ рдореЗрдВ рдЖрдИрдкреА рдкрддреЗ рдХреЛ рдмрджрд▓рдирд╛ред
рдЗрд╕ рдпрд╛рдо рдореЗрдВ рдЯрд┐рдкреНрдкрдгрд┐рдпреЛрдВ рдкрд░ рдзреНрдпрд╛рди рджреЗрдВред рдХреНрд▓рд╕реНрдЯрд░ рдореЗрдВ рдкреНрд░рддреНрдпреЗрдХ рдорд╢реАрди рдкрд░ рдЕрдкрдиреЗ рдЦреБрдж рдХреЗ рдкрддреЗ рдмрджрд▓реЗрдВред
/etc/patroni.yml scope: pgsql # namespace: /cluster/ # name: postgres1 # restapi: listen: 192.168.0.143:8008 # , connect_address: 192.168.0.143:8008 # , etcd: hosts: 192.168.0.143:2379,192.168.0.144:2379,192.168.0.145:2379 # , etcd # this section (bootstrap) will be written into Etcd:/<namespace>/<scope>/config after initializing new cluster # and all other cluster members will use it as a `global configuration` bootstrap: dcs: ttl: 100 loop_wait: 10 retry_timeout: 10 maximum_lag_on_failover: 1048576 postgresql: use_pg_rewind: true use_slots: true parameters: wal_level: replica hot_standby: "on" wal_keep_segments: 5120 max_wal_senders: 5 max_replication_slots: 5 checkpoint_timeout: 30 initdb: - encoding: UTF8 - data-checksums - locale: en_US.UTF8 # init pg_hba.conf , pg_hba: - host replication postgres ::1/128 md5 - host replication postgres 127.0.0.1/8 md5 - host replication postgres 192.168.0.143/24 md5 - host replication postgres 192.168.0.144/24 md5 - host replication postgres 192.168.0.145/24 md5 - host all all 0.0.0.0/0 md5 users: admin: password: admin options: - createrole - createdb postgresql: listen: 192.168.0.143:5432 # , connect_address: 192.168.0.143:5432 # , data_dir: /data/patroni # , bin_dir: /usr/lib/postgresql/9.6/bin # postgresql pgpass: /tmp/pgpass authentication: replication: username: postgres password: postgres superuser: username: postgres password: postgres create_replica_methods: basebackup: checkpoint: 'fast' parameters: unix_socket_directories: '.' tags: nofailover: false noloadbalance: false clonefrom: false nosync: false
рд╕реНрдХреНрд░рд┐рдкреНрдЯ рдХреЛ рдХреНрд▓рд╕реНрдЯрд░ рдХреЗ рд╕рднреА рддреАрди рдорд╢реАрдиреЛрдВ рдкрд░ рдЪрд▓рд╛рдпрд╛ рдЬрд╛рдирд╛ рдЪрд╛рд╣рд┐рдП, рдЬреИрд╕реЗ рдЖрдкрдХреЛ рд╕рднреА рдорд╢реАрдиреЛрдВ рдкрд░ рдлрд╝рд╛рдЗрд▓ /etc/patroni.yml рдореЗрдВ рдХреЙрдиреНрдлрд╝рд┐рдЧрд░реЗрд╢рди рдбрд╛рд▓рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИред
рдЬрдм рдЖрдк рдХреНрд▓рд╕реНрдЯрд░ рдореЗрдВ рд╕рднреА рдорд╢реАрдиреЛрдВ рдкрд░ рдпреЗ рдХрд╛рд░реНрдп рдХрд░рддреЗ рд╣реИрдВ, рддреЛ рдЙрдирдореЗрдВ рд╕реЗ рдХрд┐рд╕реА рдкрд░ рдирд┐рдореНрди рдЖрджреЗрд╢ рдЪрд▓рд╛рдПрдБ
systemctl start patroni systemctl start postgresql
рд▓рдЧрднрдЧ 30 рд╕реЗрдХрдВрдб рдкреНрд░рддреАрдХреНрд╖рд╛ рдХрд░реЗрдВ, рдлрд┐рд░ рдмрд╛рдХреА рдХреНрд▓рд╕реНрдЯрд░ рдорд╢реАрдиреЛрдВ рдкрд░ рдЗрд╕ рдХрдорд╛рдВрдб рдХреЛ рдЪрд▓рд╛рдПрдВред
HAProxy
рд╣рдо рдПрдХрд▓ рдкреНрд░рд╡рд┐рд╖реНрдЯрд┐ рдмрд┐рдВрджреБ рдкреНрд░рджрд╛рди рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдЕрджреНрднреБрдд HAproxy рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддреЗ рд╣реИрдВред рдорд╛рд╕реНрдЯрд░ рд╕рд░реНрд╡рд░ рд╣рдореЗрд╢рд╛ рдЙрд╕ рдорд╢реАрди рдХреЗ рдкрддреЗ рдкрд░ рдЙрдкрд▓рдмреНрдз рд╣реЛрдЧрд╛ рдЬрд┐рд╕ рдкрд░ HAproxy рддреИрдирд╛рдд рд╣реИред
HAproxy рдорд╢реАрди рдХреЛ рд╡рд┐рдлрд▓рддрд╛ рдХрд╛ рдПрдХ рдмрд┐рдВрджреБ рдирд╣реАрдВ рдмрдирд╛рдиреЗ рдХреЗ рд▓рд┐рдП, рдЗрд╕реЗ рдбреЙрдХрдЯрд░ рдХрдВрдЯреЗрдирд░ рдореЗрдВ рдЪрд▓рд╛рдПрдВ, рдмрд╛рдж рдореЗрдВ рдЗрд╕реЗ K8 рдХреЗ рдХреНрд▓рд╕реНрдЯрд░ рдореЗрдВ рдЪрд▓рд╛рдирд╛ рд╕рдВрднрд╡ рд╣реЛрдЧрд╛ рдФрд░ рд╣рдорд╛рд░реЗ рдлреЗрд▓рдУрд╡рд░ рдХреНрд▓рд╕реНрдЯрд░ рдХреЛ рдФрд░ рднреА рд╡рд┐рд╢реНрд╡рд╕рдиреАрдп рдмрдирд╛ рджреЗрдЧрд╛ред
рдПрдХ рдирд┐рд░реНрджреЗрд╢рд┐рдХрд╛ рдмрдирд╛рдПрдБ рдЬрд╣рд╛рдБ рдЖрдк рджреЛ рдлрд╝рд╛рдЗрд▓реЛрдВ рдХреЛ рд╕реНрдЯреЛрд░ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ - Dockerfile рдФрд░ haproxy.cfgред рдЗрд╕рдХреЗ рдкрд╛рд╕ рдЬрд╛рдУред
Dockerfile FROM ubuntu:latest RUN apt-get update \ && apt-get install -y haproxy rsyslog \ && rm -rf /var/lib/apt/lists/* RUN mkdir /run/haproxy COPY haproxy.cfg /etc/haproxy/haproxy.cfg CMD haproxy -f /etc/haproxy/haproxy.cfg && tail -F /var/log/haproxy.log
рд╕рд╛рд╡рдзрд╛рди рд░рд╣реЗрдВ, haproxy.cfg рдлрд╝рд╛рдЗрд▓ рдХреА рдЕрдВрддрд┐рдо рддреАрди рдкрдВрдХреНрддрд┐рдпреЛрдВ рдХреЛ рдЖрдкрдХреЗ рдорд╢реАрдиреЛрдВ рдХреЗ рдкрддреЗ рд╕реВрдЪреАрдмрджреНрдз рдХрд░рдиреЗ рдЪрд╛рд╣рд┐рдПред HAproxy рдкреЗрдЯреНрд░реЛрдиреА рд╕реЗ рд╕рдВрдкрд░реНрдХ рдХрд░реЗрдЧрд╛, HTTP рд╣реЗрдбрд░ рдореЗрдВ рдорд╛рд╕реНрдЯрд░ рд╕рд░реНрд╡рд░ рд╣рдореЗрд╢рд╛ 200 рд╡рд╛рдкрд╕ рдЖ рдЬрд╛рдПрдЧрд╛, рдФрд░ рдкреНрд░рддрд┐рдХреГрддрд┐ 503 рд╡рд╛рдкрд╕ рдЖ рдЬрд╛рдПрдЧреАред
haproxy.cfg global maxconn 100 defaults log global mode tcp retries 2 timeout client 30m timeout connect 4s timeout server 30m timeout check 5s listen stats mode http bind *:7000 stats enable stats uri / listen postgres bind *:5000 option httpchk http-check expect status 200 default-server inter 3s fall 3 rise 2 on-marked-down shutdown-sessions server postgresql1 192.168.0.143:5432 maxconn 100 check port 8008 server postgresql2 192.168.0.144:5432 maxconn 100 check port 8008 server postgresql3 192.168.0.145:5432 maxconn 100 check port 8008
рдЙрд╕ рдирд┐рд░реНрджреЗрд╢рд┐рдХрд╛ рдореЗрдВ рд╣реЛрдиреЗ рдХреЗ рдирд╛рддреЗ, рдЬрд┐рд╕рдореЗрдВ рд╣рдорд╛рд░реА рджреЛрдиреЛрдВ рдлрд╛рдЗрд▓реЗрдВ "рдЭреВрда" рд╣реИрдВ, рд╣рдо рдХреНрд░рдорд┐рдХ рд░реВрдк рд╕реЗ рдХрдВрдЯреЗрдирд░ рдкреИрдХрд┐рдВрдЧ рдХрдорд╛рдВрдб рдХреЛ рдирд┐рд╖реНрдкрд╛рджрд┐рдд рдХрд░реЗрдВрдЧреЗ, рд╕рд╛рде рд╣реА рдЖрд╡рд╢реНрдпрдХ рдмрдВрджрд░рдЧрд╛рд╣реЛрдВ рдХреЛ рдЕрдЧреНрд░реЗрд╖рд┐рдд рдХрд░рдиреЗ рдХреЗ рд╕рд╛рде рдЗрд╕рдХреА рд▓реЙрдиреНрдЪрд┐рдВрдЧ рдХрд░реЗрдВрдЧреЗ:
docker build -t my-haproxy . docker run -d -p5000:5000 -p7000:7000 my-haproxy
рдЕрдм, Haproxy рдХреЗ рд╕рд╛рде рдЕрдкрдиреА рдорд╢реАрди рдХрд╛ рдмреНрд░рд╛рдЙрдЬрд╝рд░ рдкрддрд╛ рдЦреЛрд▓рдирд╛ рдФрд░ рдкреЛрд░реНрдЯ 7000 рдирд┐рд░реНрджрд┐рд╖реНрдЯ рдХрд░рдирд╛, рдЖрдкрдХреЛ рдЕрдкрдиреЗ рдХреНрд▓рд╕реНрдЯрд░ рдкрд░ рдЖрдВрдХрдбрд╝реЗ рджрд┐рдЦрд╛рдИ рджреЗрдВрдЧреЗред
рдпреВрдкреА рд░рд╛рдЬреНрдп рдореЗрдВ, рд╕рд░реНрд╡рд░ рдЬреЛ рдорд╛рд╕реНрдЯрд░ рд╣реИ рд╡рд╣ рд╕реНрдерд┐рдд рд╣реЛрдЧрд╛, рдФрд░ DOWN рд░рд╛рдЬреНрдп рдореЗрдВ рдкреНрд░рддрд┐рдХреГрддрд┐рдпрд╛рдВред рдпрд╣ рд╕рд╛рдорд╛рдиреНрдп рд╣реИ, рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ рд╡реЗ рдХрд╛рдо рдХрд░рддреЗ рд╣реИрдВ, рд▓реЗрдХрд┐рди рдЗрд╕ рд░реВрдк рдореЗрдВ рдЗрд╕ рддрдереНрдп рдХреЗ рдХрд╛рд░рдг рдкреНрд░рджрд░реНрд╢рд┐рдд рд╣реЛрддреЗ рд╣реИрдВ рдХрд┐ рд╡реЗ HAproxy рд╕реЗ рдЕрдиреБрд░реЛрдз рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП 503 рд▓реМрдЯрд╛рддреЗ рд╣реИрдВред рдпрд╣ рд╣рдореЗрдВ рд╣рдореЗрд╢рд╛ рдпрд╣ рдЬрд╛рдирдиреЗ рдХреА рдЕрдиреБрдорддрд┐ рджреЗрддрд╛ рд╣реИ рдХрд┐ рд╡рд░реНрддрдорд╛рди рдореЗрдВ рдХреМрди рд╕реЗ рддреАрди рд╕рд░реНрд╡рд░ рдорд╛рд╕реНрдЯрд░ рд╣реИрдВред
рдирд┐рд╖реНрдХрд░реНрд╖
рдЖрдк рдЕрджреНрднреБрдд рд╣реИрдВ! рдХреЗрд╡рд▓ 30 рдорд┐рдирдЯ рдореЗрдВ, рдЖрдкрдиреЗ рд╕реНрдЯреНрд░реАрдорд┐рдВрдЧ рдкреНрд░рддрд┐рдХреГрддрд┐ рдФрд░ рд╕реНрд╡рдЪрд╛рд▓рд┐рдд рдкреНрд░рд╛рд╡рдзрд╛рди рдХреЗ рд╕рд╛рде рдПрдХ рдЙрддреНрдХреГрд╖реНрдЯ рд╡рд┐рдлрд▓-рд╕реБрд░рдХреНрд╖рд┐рдд рдФрд░ рдЙрддреНрдкрд╛рджрдХ рдбреЗрдЯрд╛рдмреЗрд╕ рдХреНрд▓рд╕реНрдЯрд░ рдХреЛ рддреИрдирд╛рдд рдХрд┐рдпрд╛ рд╣реИред рдпрджрд┐ рдЖрдк рдЗрд╕ рд╕рдорд╛рдзрд╛рди рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рдХреА рдпреЛрдЬрдирд╛ рдмрдирд╛рддреЗ рд╣реИрдВ, рддреЛ рдЖрдзрд┐рдХрд╛рд░рд┐рдХ рдкреЗрдЯреНрд░реЛрдиреА рдкреНрд░рд▓реЗрдЦрди рдФрд░ рд╡рд┐рд╢реЗрд╖ рд░реВрдк рд╕реЗ рд╕рдВрд░рдХреНрд╖рдХ рдЙрдкрдпреЛрдЧрд┐рддрд╛ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдЗрд╕рдХрд╛ рд╣рд┐рд╕реНрд╕рд╛ рджреЗрдЦреЗрдВ, рдЬреЛ рдЖрдкрдХреЗ рдХреНрд▓рд╕реНрдЯрд░ рдХрд╛ рдкреНрд░рдмрдВрдзрди рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рд╕реБрд╡рд┐рдзрд╛рдЬрдирдХ рдкрд╣реБрдВрдЪ рдкреНрд░рджрд╛рди рдХрд░рддрд╛ рд╣реИред
рдмрдзрд╛рдИ!