Closed erzhick10 closed 12 months ago
Здравствуйте.
Чтобы развернуть кластер, необходимо только указать переменную dcs_type: "consul"
Также нужно настроить consul клиента на серверах приложений чтобы они могли резолвить dns записи сервисов consul.
Для этого, укажите сервера приложений в файле inventory
пример 10.128.64.144/145 это сервера приложений на которые устанавливается consul в режиме клиента (consul_node_role=client)
# Please specify the ip addresses and connection settings for your environment
# The specified ip addresses will be used to listen by the cluster components.
# "postgresql_exists='true'" if PostgreSQL is already exists and running
# "hostname=" variable is optional (used to change the server name)
# "new_node=true" to add a new server to an existing cluster using the add_pgnode.yml playbook
# In this example, all components will be installed on PostgreSQL nodes.
# You can deploy the haproxy balancers and the etcd or consul cluster on other dedicated servers (recomended).
# if dcs_exists: false and dcs_type: "etcd"
[etcd_cluster] # recommendation: 3, or 5-7 nodes
# if dcs_exists: false and dcs_type: "consul"
[consul_instances] # recommendation: 3 or 5-7 nodes
10.128.64.140 consul_node_role=server consul_bootstrap_expect=true
10.128.64.142 consul_node_role=server consul_bootstrap_expect=true
10.128.64.143 consul_node_role=server consul_bootstrap_expect=true
10.128.64.144 consul_node_role=client
10.128.64.145 consul_node_role=client
# if with_haproxy_load_balancing: true
[balancers]
10.128.64.140
10.128.64.142
10.128.64.143
# PostgreSQL nodes
[master]
10.128.64.140 hostname=pgnode01 postgresql_exists='false'
[replica]
10.128.64.142 hostname=pgnode02 postgresql_exists='false'
10.128.64.143 hostname=pgnode03 postgresql_exists='false'
[postgres_cluster:children]
master
replica
# if pgbackrest_install: true and "repo_host" is set
[pgbackrest] # optional (Dedicated Repository Host)
# Connection settings
[all:vars]
ansible_connection='ssh'
ansible_ssh_port='22'
ansible_user='root'
ansible_ssh_pass='secretpassword' # "sshpass" package is required for use "ansible_ssh_pass"
#ansible_ssh_private_key_file=
#ansible_python_interpreter='/usr/bin/python3' # is required for use python3
[pgbackrest:vars]
ansible_user='postgres'
ansible_ssh_pass='secretpassword'
а днс тоже ролями устанавливается или это дело не автоматизирована просто я сейчас попробовал у меня днс перестал резолвится на серверах
автоматизировано.
см переменные
consul_recursors: [] # List of upstream DNS servers
consul_dnsmasq_enable: true # Enable DNS forwarding with Dnsmasq
consul_dnsmasq_cache: 0 # dnsmasq cache-size (0 - disable caching)
consul_dnsmasq_servers: # Upstream DNS servers used by dnsmasq
- "8.8.8.8"
- "9.9.9.9"
а этот метод пойдет если у меня в разных географический и в разных подсетях сервера имею виду дата центры будет работать просто я другому варианту меня Keeeplived не работает так как разные подсети тут же vip manager и сonsul Должно работать ? Спасибо
Схема с consul не использует ничего кроме consul service discovery для обеспечения единой точки входа в базу данных. Да, эта схема прекрасно подходит для разных ДЦ, о чем уже было упомянуто в README.
Здравствуйте ! не совсем понял я сonsul на Вы пока что изучаю !
[consul_instances] # recommendation: 3 or 5-7 nodes
10.128.64.140 consul_node_role=server consul_bootstrap_expect=true consul_datacenter=dc1
10.128.64.142 consul_node_role=server consul_bootstrap_expect=true consul_datacenter=dc1
10.128.64.143 consul_node_role=server consul_bootstrap_expect=true consul_datacenter=dc1
#10.128.64.144 consul_node_role=client consul_datacenter=dc1
#10.128.64.145 consul_node_role=client consul_datacenter=dc2
здесь где dc1 указать имя dc1 или это просто название
здесь где dc1 указать имя dc1 или это просто название
это опционально. Можете представить себе это обычной меткой, задаете любое имя для Датацентра и далее используете это в строке соединения, чтобы коннектиться только к той реплике, которая находится в том же ДЦ что и приложение.
Пример
replica.postgres-cluster.service.dc1.consul
replica.postgres-cluster.service.dc2.consul
replica.postgres-cluster.service.consul
Надеюсь теперь стало понятнее )
вопрос в как отслеживать в consul кто мастер и кто реплика ? вроде у консул есть веб интерфейс для просмотра тут откл ? и еще вопрос обращение можно делать по доменному имени если сервера в домене к базе ? просто с вариантом А и Б понятно все ! тут не совсем понимаю!
"disable_update_check": true, "domain": "consul", а тут нужно указать домен ? replica.postgres-cluster.service.dc1.consul это я так понял конкретное доменное имя для каждого сервера а как теперь проходить конект если он был доступен по одному серверу мастер переключился консул знает и перезапишет конфиг ? спасибо
вопрос в как отслеживать в consul кто мастер и кто реплика ?
это автоматизировано c помощью проверки Patroni REST API вот описание сервисов и их проверки https://github.com/vitabaks/postgresql_cluster/blob/master/vars/main.yml#L107
для коннекта к мастеру используйте master.postgres-cluster.service.consul
(он автоматически переключит на сервер с ролью leader)
вроде у консул есть веб интерфейс для просмотра тут откл
Вы можете включить UI если Вам это необходимо consul_ui: true
и еще вопрос обращение можно делать по доменному имени если сервера в домене к базе ?
да в DNS имени сервиса есть доменное имя. Вы можете переопределись его.
просто с вариантом А и Б понятно все ! тут не совсем понимаю!
рекомендую изучить consul перед тем как внедрять эту схему в production. Либо рассмотрите варианты спонсорства которые включают персональную поддержку.
"domain": "consul", а тут нужно указать домен ?
да Вы можете указать здесь другое имя домена для cunsul службы.
replica.postgres-cluster.service.dc1.consul это я так понял конкретное доменное имя для каждого сервера а как теперь проходить конект если он был доступен по одному серверу мастер переключился консул знает и перезапишет конфиг ?
я не понял вопроса. В любом случае, обновление записей dns автоматизировано, исходя из роли сервера Postgres.
master.postgres-cluster.service.consul где можно изменить на свое имя !?и вопрос спонсорства там будет какой то чат для поддержки ?
master.postgres-cluster.service.consul где можно изменить на свое имя !?
Вы можете сделать это в переменной consul_services
https://github.com/vitabaks/postgresql_cluster/blob/master/vars/main.yml#L104
вопрос спонсорства там будет какой то чат для поддержки ?
Да, все верно.
Здравствуйте не подскажите Ubuntu20 после установки кластере как бы все работает но после ребута сетевая карта не поднимается и не резолвится днс может ли проблема быть конфликтах там автоматизировано под какой днс ?
может быть иза того что уже есть у меня свои днс и вместе этого прописать свои днс при установки ansible по этому и конфликт ?
у меня systemd-resolved может иза этого а consul использует dnsmaq
netplan нужно удалять? просто сетевая карта ложится послу удаление кластере после ребута все так происходить может дадите какие то рекомендации по этому поводу
nameserver 127.0.0.1
для того чтобы запрос отправлялся в dnsmaqпример
consul_dnsmasq_servers: # Upstream DNS servers used by dnsmasq
- "8.8.8.8"
- "9.9.9.9"
Подробнее про Forward DNS for Consul Service Discovery
пожалуйста, ознакомьтесь с документацией Consul.
Здравствуйте спасибо Вам теперь разобрался ! но есть вопрос например по стандарту "A" есть haproxy и keepalived мы виртуальный ip address указываем в приложении. а с consul получается нужно указать конкретно сервер приложение и от туда уже будет идти коннект я так понимаю ! с других серверов как раньше уже не получится потому что я пробовал при коннектится и только со серверов те что указал с инвентори а именно с дс1 дс2 как вы и говорили получается мне нужно будет например заранее установить если у меня уже есть кластер туда consul clients через что и буду подключаться по master.postgres-cluster.service.consul ссылкам?
точка доступа для приложения - dns имя consul сервиса. Нет необходимости указывать конкретный сервер, dns записи обновляются автоматически (исходя из роли сервера)
пример
Этот пример описан в README, старнно что Вы задаете такие вопросы.
с других серверов как раньше уже не получится потому что я пробовал при коннектится и только со серверов те что указал с инвентори а именно с дс1 дс2 как вы и говорили получается мне нужно будет например заранее установить если у меня уже есть кластер туда consul clients
да, необходимо установить consul клиент на все сервера приложений. Чтобы получить доступ к dns записям в consul. Либо, попробуйте перенаправлять на удаленный consul сервер с помощью dnsmaq вместо установки локального клиента. Чтобы разобраться во всем этом, Вам необходимо хорошо изучить документацию по consul.
Извините за такой вопрос!)я все понял я не там смотрел !!! теперь понял суть работы ! Вы правы нужно делально изучить сonsul ! я теперь понял суть всего как это работает спасибо!!!
Здравствуйте как изменить master.postgres-cluster.service.consul чтоб было просто доменное имя или если изменить "domain": "consul", а тут то изменится лишь master.postgres-cluster.service.consul service.consul можно или где просто сделать подключение через доменное имя или только через master.postgres-cluster.service.consul происходить подключение перелопатил плейбук че то не могу найти
Имена сервисов настраиваются в переменной consul_services
(name)
можете cократить имя конечной точки, например, переопределив name и убрав tags
у меня вопрос по поводу спонсорства Вы на юр лицо заключается договор ?
Вы на юр лицо заключается договор ?
Спонсорство предполагает формат донатов через Patreon или GitHub sponsor и не требует заключения договора. Некоторые уровни членства включают в себя контакт со мной в slack (или telegram) и индивидуальную поддержку от меня лично.
Если Вам необходим контракт, обращайтесь по адресу team@postgres.ai
Если Вам необходим контракт, обращайтесь по адресу team@postgres.ai
это ваша почта?
Это не лично моя почта, это адрес компании Postgres.ai частью команды которой я также являюсь. https://postgres.ai/consulting
Я лично оказываю индивидуальную поддержку только спонсорам проекта.
Здравствуйте такой вот вопрос установили кластер с сonsul на сервер приложение поставили haproxy для обращение к бд по master.postgres-cluster.service.consul суть в том что если предоставлять доступ к клентам пользователям нужно устанавливать сonsul clienta и на виндовые сервера чтоб это обойти через хапроки плюс для аутентификации gss
все работает но если переключем лидера чтоб подключение было к мастеру наужно рестартить haproxy все время ! или как вы говорили перенаправление портов как бы делал все работает для линуксовых серверов а для виндовых если только не прописывать файл system32/etc/hosts файл днс сonsul ?
parameters:
krb_server_keyfile: /etc/postgresql-common/keytab.file
сгенерировал с ад файл закинул по пути и patroni указал работает аутентификация по kerberos про тестировали работает просто через haproxy не работает наверное нужно коммерческая версия ! на прямую работает подключение
Не понимаю зачем такая гибридная схема. Если Вы не можете себе позволить схему с Consul (хотя странно) то используйте схему Type А в которой и вовсе нет Consul, там etcd.
Возможно я не совсем понимаю что Вы хотите от кластера базы данных.
ну вообщем попробую. объяснить обращение к бд через консул master.postgres-cluster.service.consul с точки зрение приложение да ! а если к примеру пользователи рядовые хаять доступ к базе то мне так же на те же винловые сервера нужно либо перенаправление делать либо клиенту так же консул агента ставить верно?а чтоб не ставить например 100 пользователей все в домене имею виду все подряд консул или пренаправление в днс указывать имею виду или как вы реализуете тут для виндовых серверов ?просто через haproxy все один ip или домен вот так имею виду
resolvers consul nameserver dns1 192.168.1.59:8600 nameserver dns2 192.168.1.43:8600 frontend frontend_postgres bind 192.168.1.80:5432 default_backend backend_postgres
backend backend_postgres balance roundrobin option tcp-check server postgres_server1 master.postgres-cluster.service.consul:6432 check resolvers consul server postgres_server2 replica.postgres-cluster.service.consul:6432 check resolvers consul
Верно, для резолвинга dns имени consul service нужен consul клиент, или перенаправление dns на consul сервер.
Windows не используется в моем случае. Но поддержка windows для установки consul client имеется.
При необходимости, думаю и там можно решить вопрос с dns resolving.
Здравствуйте чтоб использовать установка с помощью consul нужно заранее настроить их на каждом сервере днс для работы consul и после уже можно установить кластер postgresql patroni?