В общем посидел немного и решил поднять кластер на postgreSQL + etcd + patroni + haproxy в целях вообще понять как это все работает. Шел в основном по
этому гайду но даже там много непонятного и я решил задокументировать чисто для себя но и вдруг кому полезно будет. На правильность
ваааще не претендую т.к. сам первый раз сталкиваюсь с этим, но по крайней мере это работает.
1. Создал 3 виртуальные машины на ubuntu (Linux node1 5.4.0-156-generic #173-Ubuntu )
node1
node2
node3
2. На каждую машину поставил обновления, поставил статический ip, создал записи в dns для каждой ноды, поставил postegresql и etcd.
sudo apt install etcd
sudo apt install postgresql
Если вдруг ваши пакеты как то по другому называются то можно поискать нужный пакет в репозитории командой:
apt-cache search postgre
3.Отключил автозапуск postgresql на нодах
sudo systemctl disable postgresql
Это готовый конфиг etcd с
node1, у меня он лежал в /etc/default/etcd
Когда только начинаем собирать кластер то следует использовать этот параметр вместо
existing:
ETCD_INITIAL_CLUSTER_STATE="new"
ETCD_NAME="core"
ETCD_DATA_DIR="/var/lib/etcd/default"
ETCD_HEARTBEAT_INTERVAL="1000"
ETCD_ELECTION_TIMEOUT="5000"
ETCD_LISTEN_PEER_URLS="
http://0.0.0.0:2380"
ETCD_LISTEN_CLIENT_URLS="
http://0.0.0.0:2379"
ETCD_INITIAL_ADVERTISE_PEER_URLS="
http://node1.domen.local:2380"
ETCD_INITIAL_CLUSTER="node1=http://node1.domen.local:2380,node2=http://node2.domen.local:2380,node3=http://node3.domen.local:2380"
ETCD_INITIAL_CLUSTER_STATE="existing"
ETCD_INITIAL_CLUSTER_TOKEN="etcd-cluster"
ETCD_ADVERTISE_CLIENT_URLS="
http://node1.domen.local:2379"
Конфиг /etc/default/etcd с
node2 (на узлах node2 и node3 сразу ставим параметр
existing)
ETCD_NAME="node2"
ETCD_DATA_DIR="/var/lib/etcd/default"
ETCD_HEARTBEAT_INTERVAL="1000"
ETCD_ELECTION_TIMEOUT="5000"
ETCD_LISTEN_PEER_URLS="
http://0.0.0.0:2380"
ETCD_LISTEN_CLIENT_URLS="
http://0.0.0.0:2379"
ETCD_INITIAL_ADVERTISE_PEER_URLS="
http://node2.domen.local:2380"
ETCD_INITIAL_CLUSTER="node2=http://node1.domen.local:2380,node2=http://node2.domen.local:2380,node3=http://node3.domen.local:2>
ETCD_INITIAL_CLUSTER_STATE="
existing"
ETCD_INITIAL_CLUSTER_TOKEN="etcd-cluster"
ETCD_ADVERTISE_CLIENT_URLS="
http://node2.domen.local:2379"
Конфиг /etc/default/etcd с
node3
ETCD_NAME="node3"
ETCD_DATA_DIR="/var/lib/etcd/default"
ETCD_HEARTBEAT_INTERVAL="1000"
ETCD_ELECTION_TIMEOUT="5000"
ETCD_LISTEN_PEER_URLS="
http://0.0.0.0:2380"
ETCD_LISTEN_CLIENT_URLS="
http://0.0.0.0:2379"
ETCD_INITIAL_ADVERTISE_PEER_URLS="
http://node3.domen.local:2380"
ETCD_INITIAL_CLUSTER="node1=http://node1.domen.local:2380,node2=http://node2.domen.local:2380,node3=http://node3.default.local:2380>
ETCD_INITIAL_CLUSTER_STATE="
existing"
ETCD_INITIAL_CLUSTER_TOKEN="etcd-cluster"
ETCD_ADVERTISE_CLIENT_URLS="
http://node3.domen.local:2379"
Описание параметров
Рассмотрим введённые параметры:
ETCD_DATA_DIR - указывает расположение каталога данных кластера
ETCD_LISTEN_PEER_URLS - задаёт схему и точку подключения для остальных узлов кластера, по шаблону scheme://IP : port. Схема может быть http, https. Альтернатива, unix:// или unixs:// для юникс сокетов. Если в качестве IP адреса указано 0.0.0.0, то указанный порт будет прослушиваться на всех интерфейсах.
ETCD_LISTEN_CLIENT_URLS - задаёт схему и точку подключения для клиентов кластера. В остальном совпадает с ETCD_LISTEN_PEER_URLS.
ETCD_NAME - человекочитаемое имя этого узла кластера. Должно быть уникально в кластере. Для первого узла может быть любым. Для последующих должно совпадать с именем, указанным при добавлении узла.
ETCD_HEARTBEAT_INTERVAL - время в миллисекудах, между рассылками лидером оповещений о том, что он всё ещё лидер. Рекомендуется задавать с учётом сетевой задержки между узлами кластера.
ETCD_ELECTION_TIMEOUT - время в миллисекундах, которое проходит между последним принятым оповещением от лидера кластера, до попытки захватить роль лидера на ведомом узле. Рекомендуется задавать его в несколько раз большим, чем ETCD_HEARTBEAT_INTERVAL. Более подробно о этих параметрах можно прочесть в документации.
ETCD_INITIAL_ADVERTISE_PEER_URLS - Список равноправных URL-адресов, по которым его могут найти остальные узлы кластера. Эти адреса используются для передачи данных по кластеру. По крайней мере, один из этих адресов должен быть маршрутизируемым для всех членов кластера. Могут содержать доменные имена. Используется только при первом запуске нового узла кластера.
ETCD_ADVERTISE_CLIENT_URLS - Список равноправных URL-адресов, по которым его могут найти остальные узлы кластера. Эти адреса используются для передачи данных по кластеру. По крайней мере, один из этих адресов должен быть маршрутизируемым для всех членов кластера. Могут содержать доменные имена.
ETCD_INITIAL_CLUSTER - Список узлов кластера на момент запуска. Используется только при первом запуске нового узла кластера.
ETCD_INITIAL_CLUSTER_TOKEN - Токен кластера. Должен совпадать на всех узлах кластера. Используется только при первом запуске нового узла кластера.
ETCD_INITIAL_CLUSTER_STATE - может принимать два значения "new" и "existing". Значение "new" используется при первом запуске первого узла в кластере. При значении "existing", узел при старте будет пытаться установить связь с остальными узлами кластера.