ъеъ
This commit is contained in:
parent
6da2f01366
commit
f9ffc53a86
2
ansible/host_vars/87.228.113.211.yml
Normal file
2
ansible/host_vars/87.228.113.211.yml
Normal file
@ -0,0 +1,2 @@
|
||||
etcd_node: etcd1
|
||||
node_local_ip: 192.168.1.66
|
||||
1
ansible/host_vars/87.228.113.250.yml
Normal file
1
ansible/host_vars/87.228.113.250.yml
Normal file
@ -0,0 +1 @@
|
||||
etcd_node: etcd3
|
||||
2
ansible/host_vars/87.228.113.45.yml
Normal file
2
ansible/host_vars/87.228.113.45.yml
Normal file
@ -0,0 +1,2 @@
|
||||
etcd_node: etcd2
|
||||
node_local_ip: 192.168.1.4
|
||||
13
ansible/inventory.ini
Normal file
13
ansible/inventory.ini
Normal file
@ -0,0 +1,13 @@
|
||||
[all]
|
||||
87.228.113.211
|
||||
87.228.113.45
|
||||
87.228.113.250
|
||||
|
||||
[etcd]
|
||||
87.228.113.211
|
||||
87.228.113.45
|
||||
87.228.113.250
|
||||
|
||||
[psql]
|
||||
87.228.113.211
|
||||
87.228.113.45
|
||||
13
ansible/playbooks/patroni.yml
Normal file
13
ansible/playbooks/patroni.yml
Normal file
@ -0,0 +1,13 @@
|
||||
- name: Install etcd on all nodes
|
||||
hosts: etcd
|
||||
roles:
|
||||
- role: etcd
|
||||
tags: [ etcd ]
|
||||
|
||||
- name: Install psql + patroni on nodes 1 and 2
|
||||
hosts: psql
|
||||
roles:
|
||||
- role: psql
|
||||
tags: [ psql ]
|
||||
- role: patroni
|
||||
tags: [ patroni ]
|
||||
16
ansible/roles/etcd/files/etcd.service
Normal file
16
ansible/roles/etcd/files/etcd.service
Normal file
@ -0,0 +1,16 @@
|
||||
[Unit]
|
||||
Description=etcd key-value store
|
||||
Documentation=https://etcd.io/docs/
|
||||
Wants=network-online.target
|
||||
After=network-online.target
|
||||
|
||||
[Service]
|
||||
User=etcd
|
||||
Type=notify
|
||||
ExecStart=/usr/bin/etcd --config-file=/etc/etcd/etcd.conf.yml
|
||||
Restart=always
|
||||
RestartSec=5
|
||||
LimitNOFILE=40000
|
||||
|
||||
[Install]
|
||||
WantedBy=multi-user.target
|
||||
5
ansible/roles/etcd/files/hosts
Normal file
5
ansible/roles/etcd/files/hosts
Normal file
@ -0,0 +1,5 @@
|
||||
127.0.0.1 localhost
|
||||
|
||||
192.168.1.66 etcd1
|
||||
192.168.1.4 etcd2
|
||||
192.168.1.5 etcd3
|
||||
93
ansible/roles/etcd/tasks/main.yml
Normal file
93
ansible/roles/etcd/tasks/main.yml
Normal file
@ -0,0 +1,93 @@
|
||||
- name: Ensure all dependecies are presented
|
||||
apt:
|
||||
name: "{{ item }}"
|
||||
state: present
|
||||
loop:
|
||||
- tar
|
||||
# - xz-utils
|
||||
|
||||
- name: Create etcd group
|
||||
group:
|
||||
name: etcd
|
||||
state: present
|
||||
system: true
|
||||
|
||||
- name: Cretae etcd user
|
||||
user:
|
||||
name: etcd
|
||||
group: etcd
|
||||
system: yes
|
||||
shell: /sbin/nologin
|
||||
home: /var/lib/etcd
|
||||
create_home: yes
|
||||
state: present
|
||||
|
||||
- name: Make your own dns (aka hosts)
|
||||
copy:
|
||||
src: hosts
|
||||
dest: /etc/hosts
|
||||
owner: root
|
||||
group: root
|
||||
mode: 0644
|
||||
|
||||
- name: Download etcd
|
||||
get_url:
|
||||
url: https://github.com/etcd-io/etcd/releases/download/v3.6.4/etcd-v3.6.4-linux-amd64.tar.gz
|
||||
dest: /tmp/etcd.tar.gz
|
||||
mode: 0644
|
||||
|
||||
- name: Cretae tmp dir
|
||||
file:
|
||||
path: /tmp/etcd
|
||||
state: directory
|
||||
mode: 0755
|
||||
|
||||
- name: create etc dir
|
||||
file:
|
||||
path: /etc/etcd
|
||||
state: directory
|
||||
owner: etcd
|
||||
group: etcd
|
||||
mode: 0755
|
||||
|
||||
- name: Unpack etcd
|
||||
unarchive:
|
||||
src: /tmp/etcd.tar.gz
|
||||
remote_src: true
|
||||
dest: /tmp/etcd
|
||||
extra_opts: [--strip-components=1]
|
||||
owner: etcd
|
||||
group: etcd
|
||||
|
||||
- name: Move bins to path
|
||||
copy:
|
||||
src: "/tmp/etcd/{{ item }}"
|
||||
dest: "/usr/bin/{{ item }}"
|
||||
mode: 0755
|
||||
remote_src: true
|
||||
loop:
|
||||
- etcd
|
||||
- etcdctl
|
||||
- etcdutl
|
||||
|
||||
- name: put etcd config
|
||||
template:
|
||||
src: etcd.conf.yml.j2
|
||||
dest: /etc/etcd/etcd.conf.yml
|
||||
owner: etcd
|
||||
group: etcd
|
||||
mode: 0644
|
||||
|
||||
- name: put systemd unit file for etcd
|
||||
copy:
|
||||
src: etcd.service
|
||||
dest: /etc/systemd/system/etcd.service
|
||||
owner: root
|
||||
group: root
|
||||
mode: 0644
|
||||
|
||||
- name: start and enable etcd
|
||||
service:
|
||||
name: etcd
|
||||
enabled: true
|
||||
state: started
|
||||
12
ansible/roles/etcd/templates/etcd.conf.yml.j2
Normal file
12
ansible/roles/etcd/templates/etcd.conf.yml.j2
Normal file
@ -0,0 +1,12 @@
|
||||
# /etc/etcd/etcd.conf.yml
|
||||
name: {{ etcd_node }}
|
||||
data-dir: /var/lib/etcd/default
|
||||
listen-peer-urls: http://0.0.0.0:2380
|
||||
listen-client-urls: http://0.0.0.0:2379
|
||||
advertise-client-urls: http://{{ etcd_node }}:2379
|
||||
initial-advertise-peer-urls: http://{{ etcd_node }}:2380
|
||||
initial-cluster-token: etcd_scope
|
||||
initial-cluster: etcd1=http://etcd1:2380,etcd2=http://etcd2:2380,etcd3=http://etcd3:2380
|
||||
initial-cluster-state: new
|
||||
election-timeout: 5000
|
||||
heartbeat-interval: 500
|
||||
14
ansible/roles/patroni/files/patroni.service
Normal file
14
ansible/roles/patroni/files/patroni.service
Normal file
@ -0,0 +1,14 @@
|
||||
[Unit]
|
||||
Description=Patroni high-availability PostgreSQL
|
||||
After=network.target
|
||||
|
||||
[Service]
|
||||
User=postgres
|
||||
Type=simple
|
||||
ExecStart=/opt/patroni/bin/patroni /etc/patroni/config.yml
|
||||
Restart=always
|
||||
RestartSec=5
|
||||
LimitNOFILE=1024
|
||||
|
||||
[Install]
|
||||
WantedBy=multi-user.target
|
||||
26
ansible/roles/patroni/tasks/main.yml
Normal file
26
ansible/roles/patroni/tasks/main.yml
Normal file
@ -0,0 +1,26 @@
|
||||
- name: Install patroni
|
||||
apt:
|
||||
name: patroni
|
||||
state: latest
|
||||
|
||||
- name: put patroni config
|
||||
template:
|
||||
src: config.yml.j2
|
||||
dest: /etc/patroni/config.yml
|
||||
owner: root
|
||||
group: root
|
||||
mode: 0644
|
||||
|
||||
- name: put systemd unit file
|
||||
copy:
|
||||
src: patroni.service
|
||||
dest: /etc/systemd/system/patroni.service
|
||||
owner: root
|
||||
group: root
|
||||
mode: 0644
|
||||
|
||||
- name: start and enable patroni
|
||||
service:
|
||||
name: patroni
|
||||
enabled: true
|
||||
state: started
|
||||
94
ansible/roles/patroni/templates/config.yml.j2
Normal file
94
ansible/roles/patroni/templates/config.yml.j2
Normal file
@ -0,0 +1,94 @@
|
||||
patroni:
|
||||
scope: patroni_cluster
|
||||
namespace: /patroni
|
||||
name: {{ etcd_node }}
|
||||
log:
|
||||
level: INFO
|
||||
dir: /data/log/patroni
|
||||
file_size: 50000000
|
||||
file_num: 10
|
||||
restapi:
|
||||
listen: 0.0.0.0:8008
|
||||
connect_address: {{ etcd_node }}:8008 # Изменить на 2 ноде
|
||||
verify_client: none
|
||||
etcd3:
|
||||
hosts: ["etcd1:2379", "etcd2:2379", "etcd3:2379"]
|
||||
protocol: http
|
||||
watchdog:
|
||||
mode: off # Если настроен, можно включить
|
||||
bootstrap:
|
||||
dcs:
|
||||
failsafe_mode: true
|
||||
ttl: 30
|
||||
loop_wait: 10
|
||||
retry_timeout: 10
|
||||
maximum_lag_on_failover: 1048576
|
||||
synchronous_mode: true
|
||||
synchronous_mode_strict: true
|
||||
synchronous_mode_count: 1
|
||||
master_start_timeout: 30
|
||||
slots:
|
||||
prod_replica1:
|
||||
type: physical
|
||||
postgresql:
|
||||
use_pg_rewind: true
|
||||
use_slots: true
|
||||
parameters:
|
||||
shared_buffers: '512MB'
|
||||
wal_level: 'replica'
|
||||
wal_keep_size: '512MB'
|
||||
max_connections: 100
|
||||
effective_cache_size: '1GB'
|
||||
maintenance_work_mem: '256MB'
|
||||
max_wal_senders: 5
|
||||
max_replication_slots: 5
|
||||
checkpoint_completion_target: 0.7
|
||||
log_connections: 'on'
|
||||
log_disconnections: 'on'
|
||||
log_statement: 'ddl'
|
||||
log_line_prefix: '%m [%p] %q%u@%d '
|
||||
logging_collector: 'on'
|
||||
log_destination: 'stderr'
|
||||
log_directory: '/data/log'
|
||||
log_filename: 'postgresql-%Y-%m-%d.log'
|
||||
log_rotation_size: '100MB'
|
||||
log_rotation_age: '1d'
|
||||
log_min_duration_statement: -1
|
||||
log_min_error_statement: 'error'
|
||||
log_min_messages: 'warning'
|
||||
log_error_verbosity: 'verbose'
|
||||
log_hostname: 'off'
|
||||
log_duration: 'off'
|
||||
log_timezone: 'Europe/Moscow'
|
||||
timezone: 'Europe/Moscow'
|
||||
lc_messages: 'C.UTF-8'
|
||||
password_encryption: 'scram-sha-256'
|
||||
debug_print_parse: 'off'
|
||||
debug_print_rewritten: 'off'
|
||||
debug_print_plan: 'off'
|
||||
superuser_reserved_connections: 3
|
||||
synchronous_commit: 'on'
|
||||
synchronous_standby_names: '*'
|
||||
hot_standby: 'on'
|
||||
compute_query_id: 'on'
|
||||
pg_hba:
|
||||
- local all all peer
|
||||
- host all all 127.0.0.1/32 scram-sha-256
|
||||
- host all all 0.0.0.0/0 md5
|
||||
- host replication replicator 127.0.0.1/32 scram-sha-256
|
||||
- host replication replicator 192.168.60.0/24 scram-sha-256
|
||||
pg_hba:
|
||||
- local all all peer
|
||||
- host all all 127.0.0.1/32 scram-sha-256
|
||||
- host all all 0.0.0.0/0 md5
|
||||
- host replication replicator 127.0.0.1/32 scram-sha-256
|
||||
- host replication replicator 192.168.60.0/24 scram-sha-256
|
||||
initdb: ["encoding=UTF8", "data-checksums", "username=postgres", "auth=scram-sha-256"]
|
||||
users:
|
||||
admin:
|
||||
password: 'new_secure_password1'
|
||||
options: ["createdb"]
|
||||
postgresql:
|
||||
listen: 0.0.0.0
|
||||
connect_address: {{ node_local_ip }}:5432
|
||||
use
|
||||
11
ansible/roles/psql/tasks/main.yml
Normal file
11
ansible/roles/psql/tasks/main.yml
Normal file
@ -0,0 +1,11 @@
|
||||
- name: install psql
|
||||
apt:
|
||||
name: postgresql
|
||||
state: latest
|
||||
update_cache: true
|
||||
|
||||
- name: stop psql just in case
|
||||
service:
|
||||
name: postgresql
|
||||
enabled: false
|
||||
state: stopped
|
||||
Loading…
x
Reference in New Issue
Block a user