368 lines
18 KiB
Markdown
368 lines
18 KiB
Markdown
Notatka sporządzona na podstawie informacji ze SLack instrukcję przygotował [@MichalBulawa]
|
|
|
|
GSNI -> Postgres 13 + ETCD + Patroni + HAproxy + confd + keepalived
|
|
|
|
|
|
# Informacje ogólne
|
|
|
|
Postgres - wiadomo
|
|
etcd -> klaster do przechowywania kluczy dla rozwiązania
|
|
patroni -> coś co utrzymuje całość przy życiu ( manual później )
|
|
haproxy -> wiadomo / używane do komunikacji z “Leaderem klastra”, oraz do umożliwienia load-balancingu na replikach
|
|
confd -> odpowiedzialny za pilnowanie konfiguracji plików ( nie pozwala wprowadzić samemu zmian
|
|
keepalived -> usługa do utrzymywania VIP-a
|
|
|
|
( GSNI TO: plpa2ps01srrm, plpa2ps02srrm, plwa2ps03srrm )
|
|
|
|
1. Prereq
|
|
|
|
/etc/hosts ( na każdym serwerze wyglądają podobnie )
|
|
-sh-4.4$ cat /etc/hosts
|
|
127.0.0.1 localhost localhost.localdomain localhost4 localhost4.localdomain4::1 localhost localhost.localdomain localhost6 localhost6.localdomain6
|
|
158.98.154.129 plpa2ps01srrm.plf.esni.ibm.com plpa2ps01srrm pgsql-01
|
|
158.98.154.130 plpa2ps02srrm.plf.esni.ibm.com plpa2ps02srrm pgsql-02
|
|
158.98.154.131 plwa2ps03srrm.plf.esni.ibm.com plwa2ps03srrm pgsql-03
|
|
158.98.154.122 plpa2ps00srrm.plf.esni.ibm.com plpa2ps00srrm pgsql-vip
|
|
-sh-4.4$
|
|
2. Postgres ( pre-install )
|
|
|
|
-sh-4.4$ ls -l /etc/yum.repos.d/pgdg-redhat-all.repo
|
|
-rw-r--r--. 1 root root 11072 Sep 30 16:28 /etc/yum.repos.d/pgdg-redhat-all.repo
|
|
-sh-4.4$ head /etc/yum.repos.d/pgdg-redhat-all.repo -n 15
|
|
#######################################################
|
|
# PGDG Red Hat Enterprise Linux / CentOS repositories #
|
|
#######################################################
|
|
|
|
# PGDG Red Hat Enterprise Linux / CentOS stable common repository for all PostgreSQL versions
|
|
|
|
[pgdg-common]
|
|
name=PostgreSQL common RPMs for RHEL/CentOS $releasever - $basearch
|
|
baseurl=https://download.postgresql.org/pub/repos/yum/common/redhat/rhel-$releasever-$basearch
|
|
enabled=1
|
|
gpgcheck=1
|
|
gpgkey=file:///etc/pki/rpm-gpg/RPM-GPG-KEY-PGDG
|
|
repo_gpgcheck = 1
|
|
proxy=http://172.25.1.10:8080 <--------------- taka sztuczka jak dodać repozytorium postgresowe na gsni by działało
|
|
|
|
-sh-4.4$
|
|
3. squid ( opcja za firewallem więc proxy potrzebne )
|
|
|
|
[root@plpa4gp01psrm acls]# cat pgsql.services
|
|
postgresql.org
|
|
github.com
|
|
pypi.org
|
|
python.org
|
|
pythonhosted.org
|
|
[root@plpa4gp01psrm acls]#
|
|
4. sysctl
|
|
|
|
sysctl svm.swappiness=1
|
|
sysctl vm.dirty_vm.min_free_kbytes=102400
|
|
sysctl vm.dirty_expire_centisecs=1000
|
|
sysctl vm.dirty_background_bytes=67108864
|
|
sysctl vm.dirty_bytes=536870912
|
|
sysctl vm.nr_hugepages=9510
|
|
sysctl vm.zone_reclaim_mode=0
|
|
sysctl kernel.numa_balancing=0
|
|
sysctl kernel.sched_migration_cost_ns=5000000
|
|
sysctl kernel.sched_autogroup_enabled=0
|
|
sysctl net.ipv4.ip_nonlocal_bind=1
|
|
sysctl net.ipv4.ip_forward=1
|
|
sysctl net.core.netdev_max_backlog=10000
|
|
sysctl net.ipv4.tcp_max_syn_backlog=8192
|
|
sysctl net.core.somaxconn=65535
|
|
sysctl net.ipv4.tcp_tw_reuse=1
|
|
5. yum install && pip3 update
|
|
|
|
yum install -y git
|
|
yum install -y keepalived
|
|
yum install -y libyaml
|
|
yum install -y python3-psycopg2
|
|
yum install -y python2-psycopg2
|
|
yum install -y python3
|
|
yum install -y python2
|
|
yum install -y haproxy
|
|
HTTPS_PROXY=http://172.25.1.10:8080 pip3 install --upgrade pip
|
|
6. SSL
|
|
Sprawdzenie czy są zaimportowane w CA
|
|
7. System HDD + Postgres
|
|
|
|
[root@plpa2ps01srrm ~]# lsblk
|
|
NAME MAJ:MIN RM SIZE RO TYPE MOUNTPOINT
|
|
sda 8:0 0 50G 0 disk
|
|
├─sda1 8:1 0 512M 0 part /boot
|
|
└─sda2 8:2 0 49.5G 0 part
|
|
└─rootvg-backup_lv 253:12 0 10G 0 lvm /backup
|
|
sdb 8:16 0 100G 0 disk
|
|
└─databasevg-data_lv 253:13 0 100G 0 lvm /database
|
|
sr0 11:0 1 1024M 0 rom
|
|
[root@plpa2ps01srrm ~]#
|
|
8. Postgres install
|
|
<https://www.postgresql.org/download/linux/redhat/> <– tutaj też mamy dodanie repozytorium / a je ( o ile trzeba ) edytujemy dodając proxy no i jak podaje manual na stronie
|
|
|
|
dnf -qy module disable postgresql
|
|
dnf install -y postgresql13-server
|
|
dnf install -y pgaudit15_13.x86_64
|
|
dnf install -y postgresql13-contrib
|
|
|
|
taka instalacja powoduje dodanie użytkownika w systemie o nazwie postgres oraz binarki które lądują w:
|
|
|
|
-bash-4.4$ ls -l /usr/pgsql-13/bin/
|
|
total 11104
|
|
-rwxr-xr-x. 1 root root 73192 Aug 12 12:04 clusterdb
|
|
|
|
9. Pre-Konfiguracja Porsgres-a
|
|
Pre-Konfiguracja Porsgres-a
|
|
<https://www.pgconfig.org/> —> generuje kawałek pliku postgres.conf w zależności od tego co mamy za sprzęt na GSNI to: RHEL8 x86-64, NS-SAN, 8cpu, 16mem, max<sub>con</sub> 100, ver.13, ERP or long… ( zapotrzebowanie dla Zabbix )
|
|
10. Uruchomienie bazy
|
|
|
|
[root@plpa2ps01srrm ~]# cd /database/
|
|
[root@plpa2ps01srrm database]# mkdir data
|
|
[root@plpa2ps01srrm database]# chown postgres:postgres data/
|
|
[root@plpa2ps01srrm database]# su - postgres
|
|
Last login: Thu Oct 7 10:59:49 CEST 2021 on pts/1
|
|
-bash-4.4$ /usr/pgsql-13/bin/initdb --pgdata=/database/data
|
|
The files belonging to this database system will be owned by user "postgres".
|
|
This user must also own the server process.
|
|
|
|
The database cluster will be initialized with locale "en_US.UTF-8".
|
|
The default database encoding has accordingly been set to "UTF8".
|
|
The default text search configuration will be set to "english".
|
|
|
|
Data page checksums are disabled.
|
|
|
|
fixing permissions on existing directory /database/data ... ok
|
|
creating subdirectories ... ok
|
|
selecting dynamic shared memory implementation ... posix
|
|
selecting default max_connections ... 100
|
|
selecting default shared_buffers ... 128MB
|
|
selecting default time zone ... Europe/Warsaw
|
|
creating configuration files ... ok
|
|
running bootstrap script ... ok
|
|
performing post-bootstrap initialization ... ok
|
|
syncing data to disk ... ok
|
|
|
|
initdb: warning: enabling "trust" authentication for local connections
|
|
You can change this by editing pg_hba.conf or using the option -A, or
|
|
--auth-local and --auth-host, the next time you run initdb.
|
|
|
|
Success. You can now start the database server using:
|
|
|
|
/usr/pgsql-13/bin/pg_ctl -D /database/data -l logfile start
|
|
|
|
-bash-4.4$ cd /database/data/
|
|
-bash-4.4$ ls
|
|
base pg_hba.conf pg_notify pg_stat pg_twophase postgresql.auto.conf
|
|
global pg_ident.conf pg_replslot pg_stat_tmp PG_VERSION postgresql.conf
|
|
pg_commit_ts pg_logical pg_serial pg_subtrans pg_wal
|
|
pg_dynshmem pg_multixact pg_snapshots pg_tblspc pg_xact
|
|
-bash-4.4$ /usr/pgsql-13/bin/pg_ctl -D /database/data -l logfile start
|
|
waiting for server to start.... done
|
|
server started
|
|
-bash-4.4$ psql
|
|
psql (13.4)
|
|
Type "help" for help.
|
|
|
|
postgres=#
|
|
11. Hasło dla użytkownika postgres oraz na potrzeby replikacji, użytkownik do replikacji z hasłem
|
|
|
|
postgres=# ALTER USER postgres PASSWORD 'bo zupa była za słona'; // :D
|
|
ALTER ROLE
|
|
postgres=# \q
|
|
-bash-4.4$ createuser -U postgres replicator -P -c 5 --replication
|
|
Enter password for new role: 'bo zupa była za słona' // :D
|
|
Enter it again: 'bo zupa była za słona' // :D
|
|
-bash-4.4$
|
|
12. wyłączamy bazę -> bo już nam narazie nie będzie potrzebna
|
|
|
|
-bash-4.4$ /usr/pgsql-13/bin/pg_ctl stop -D /database/data
|
|
waiting for server to shut down.... done
|
|
server stopped
|
|
-bash-4.4$
|
|
13. ETCD
|
|
|
|
wget https://github.com/etcd-io/etcd/releases/download/v3.5.0/etcd-v3.5.0-linux-amd64.tar.gz
|
|
tar -xzf etcd-v3.5.0-linux-amd64.tar.gz
|
|
cp etcd-v3.5.0-linux-amd64/etcd etcd-v3.5.0-linux-amd64/etcdctl etcd-v3.5.0-linux-amd64/etcdutl /usr/bin/
|
|
|
|
[root@plwa2ps03srrm ~]# /usr/bin/etcd --version
|
|
etcd Version: 3.5.0
|
|
Git SHA: 946a5a6f2
|
|
Go Version: go1.16.3
|
|
Go OS/Arch: linux/amd64
|
|
[root@plwa2ps03srrm ~]# /usr/bin/etcdctl version
|
|
etcdctl version: 3.5.0
|
|
API version: 3.5
|
|
[root@plwa2ps03srrm ~]# /usr/bin/etcdutl version
|
|
etcdutl version: 3.5.0
|
|
API version: 3.5
|
|
[root@plwa2ps03srrm ~]#
|
|
14. konfiguracja ( serwis uruchamiany jako root / więc uprawnienia aż tak nie są ważne )
|
|
|
|
vim /usr/lib/systemd/system/etcd.service
|
|
vim /etc/etcd/etcd.conf
|
|
mkdir /etc/etcd
|
|
mkdir /var/lib/etcd
|
|
vim /etc/etcd/etcd.conf
|
|
systemctl enable etcd.service
|
|
systemctl start etcd.service
|
|
15. Patroni
|
|
|
|
vim requirements.txt
|
|
pip3 install -r requirements.txt
|
|
pip3 install patroni[etcd]
|
|
mkdir -p /etc/patroni/
|
|
chmod go-rwx /etc/patroni/
|
|
chown postgres:postgres /etc/patroni/
|
|
vim /etc/patroni/patroni.yml
|
|
vim /usr/lib/systemd/system/patroni.service
|
|
systemctl daemon-reload
|
|
echo "export PATRONICTL_CONFIG_FILE=/etc/patroni/patroni.yml" >> /etc/profile
|
|
|
|
cat requirements
|
|
|
|
urllib3>=1.19.1,!=1.21
|
|
ipaddress; python<sub>version</sub>==“2.7”
|
|
boto
|
|
PyYAML
|
|
six >= 1.7
|
|
kazoo>=1.3.1
|
|
python-etcd>=0.4.3,<0.5
|
|
python-consul>=0.7.1
|
|
click>=4.1
|
|
prettytable>=0.7
|
|
python-dateutil
|
|
pysyncobj>=0.3.8
|
|
cryptography>=1.4
|
|
psutil>=2.0.0
|
|
ydiff>=1.2.0
|
|
|
|
[root@plpa2ps01srrm ~]# patronictl version
|
|
patronictl version 2.1.1
|
|
[root@plpa2ps01srrm ~]#
|
|
16. Keepalived
|
|
zainstalowany był wcześniej, konfiguracja w plikach na serverze:
|
|
|
|
vim /etc/keepalived/keepalived.conf
|
|
vim /usr/libexec/keepalived/leader<sub>check.sh</sub>
|
|
chmod u+x /usr/libexec/keepalived/leader<sub>check.sh</sub>
|
|
|
|
standardowe rozwiązanie pgSQL+etcd+Patroni+HAProxy wykorzystuje do VIP-y keepalived i opiera go o działający proces haproxy natomiast moim zdaniem lepszym rozwiązaniem jest oprzeć go o inny mechanizm sprawdzający / o sam klaster patroni, co też zastosowane jest w GSNI ( skrypt leader<sub>check.sh</sub> )
|
|
|
|
17. HAProxy
|
|
rozwiązanie zakłada że:
|
|
|
|
- połączenie do vip:5000 - łączy nas do lidera i daje prawo zapisu i odczytu
|
|
- połączenie do vip:5001 - łączy nas do jednej z replik z prawem tylko do odczytu
|
|
|
|
moja modyfikacja daje możliwość podłączenia do vip:5432 - łączy do lidera i daje prawo do odczytu i zapisu (różnice pomiędzy podłączeniem via 5000 a 5432 są w działaniu pg<sub>hba.conf</sub>)
|
|
|
|
vim /etc/haproxy/haproxy.conf
|
|
|
|
[root@plpa2ps01srrm ~]# systemctl start patroni.service
|
|
[root@plpa2ps01srrm ~]# patronictl list
|
|
+---------------+----------------+--------+---------+----+-----------+
|
|
| Member | Host | Role | State | TL | Lag in MB |
|
|
+ Cluster: PLPA2PS00SRRM (7016247082177975663) -----+----+-----------+
|
|
| plpa2ps01srrm | 158.98.154.129 | Leader | running | 2 | |
|
|
+---------------+----------------+--------+---------+----+-----------+
|
|
[root@plpa2ps01srrm ~]#
|
|
|
|
18. Stworzenie / edycja / wyświetlanie konfiguracji w klastrze:
|
|
defakto stworzony to on już jest, bo część z niego jest brana z pliku patroni.yml
|
|
|
|
patronictl edit-config / patronictl show-config
|
|
|
|
19. Uruchomienie pozostałych nodów klastra:
|
|
jak już odpowiednio wyedytujemy hosty dla replikacji danych to po odpaleniu na 2 nodzie patroni mamy efekt:
|
|
|
|
[root@plpa2ps02srrm patroni]# patronictl list
|
|
+---------------+----------------+---------+---------+----+-----------+
|
|
| Member | Host | Role | State | TL | Lag in MB |
|
|
+ Cluster: PLPA2PS00SRRM (7016247082177975663) ------+----+-----------+
|
|
| plpa2ps01srrm | 158.98.154.129 | Leader | running | 3 | |
|
|
| plpa2ps02srrm | 158.98.154.130 | Replica | running | 3 | 0 |
|
|
+---------------+----------------+---------+---------+----+-----------+
|
|
[root@plpa2ps02srrm patroni]#
|
|
|
|
i ostatni
|
|
|
|
[root@plwa2ps03srrm patroni]# patronictl list
|
|
+---------------+----------------+---------+---------+----+-----------+
|
|
| Member | Host | Role | State | TL | Lag in MB |
|
|
+ Cluster: PLPA2PS00SRRM (7016247082177975663) ------+----+-----------+
|
|
| plpa2ps01srrm | 158.98.154.129 | Leader | running | 3 | |
|
|
| plpa2ps02srrm | 158.98.154.130 | Replica | running | 3 | 16 |
|
|
| plwa2ps03srrm | 158.98.154.131 | Replica | running | 3 | 0 |
|
|
+---------------+----------------+---------+---------+----+-----------+
|
|
[root@plwa2ps03srrm patroni]#
|
|
|
|
20. Start usługi keepalived
|
|
|
|
[root@plpa2ps01srrm ~]# systemctl start keepalived.service
|
|
[root@plpa2ps01srrm ~]# systemctl status keepalived.service
|
|
● keepalived.service - LVS and VRRP High Availability Monitor
|
|
Loaded: loaded (/usr/lib/systemd/system/keepalived.service; disabled; vendor preset: disabled)
|
|
Active: active (running) since Mon 2021-10-11 13:02:39 CEST; 5s ago
|
|
Process: 3677958 ExecStart=/usr/sbin/keepalived $KEEPALIVED_OPTIONS (code=exited, status=0/SUCCESS)
|
|
Main PID: 3677959 (keepalived)
|
|
Tasks: 2 (limit: 102175)
|
|
Memory: 4.4M
|
|
CGroup: /system.slice/keepalived.service
|
|
├─3677959 /usr/sbin/keepalived -D
|
|
└─3677960 /usr/sbin/keepalived -D
|
|
|
|
Oct 11 13:02:39 plpa2ps01srrm Keepalived_vrrp[3677960]: Registering Kernel netlink command channel
|
|
Oct 11 13:02:39 plpa2ps01srrm systemd[1]: Started LVS and VRRP High Availability Monitor.
|
|
Oct 11 13:02:39 plpa2ps01srrm Keepalived_vrrp[3677960]: Opening file '/etc/keepalived/keepalived.conf>
|
|
Oct 11 13:02:39 plpa2ps01srrm Keepalived_vrrp[3677960]: Assigned address 158.98.154.129 for interface>
|
|
Oct 11 13:02:39 plpa2ps01srrm Keepalived_vrrp[3677960]: Registering gratuitous ARP shared channel
|
|
Oct 11 13:02:39 plpa2ps01srrm Keepalived_vrrp[3677960]: (VI_1) removing VIPs.
|
|
Oct 11 13:02:39 plpa2ps01srrm Keepalived_vrrp[3677960]: (VI_1) Entering BACKUP STATE (init)
|
|
Oct 11 13:02:39 plpa2ps01srrm Keepalived_vrrp[3677960]: VRRP sockpool: [ifindex( 2), family(IPv4), p>
|
|
Oct 11 13:02:39 plpa2ps01srrm Keepalived_vrrp[3677960]: VRRP_Script(haproxy_check) succeeded
|
|
Oct 11 13:02:39 plpa2ps01srrm Keepalived_vrrp[3677960]: (VI_1) Changing effective priority from 100 t>
|
|
[root@plpa2ps01srrm ~]# ip a
|
|
1: lo: <LOOPBACK,UP,LOWER_UP> mtu 65536 qdisc noqueue state UNKNOWN group default qlen 1000
|
|
link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00
|
|
inet 127.0.0.1/8 scope host lo
|
|
valid_lft forever preferred_lft forever
|
|
2: ens192: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc mq state UP group default qlen 1000
|
|
link/ether 00:50:56:8e:3a:3f brd ff:ff:ff:ff:ff:ff
|
|
inet 158.98.154.129/24 brd 158.98.154.255 scope global noprefixroute ens192
|
|
valid_lft forever preferred_lft forever
|
|
inet 158.98.154.122/32 scope global ens192
|
|
valid_lft forever preferred_lft forever
|
|
[root@plpa2ps01srrm ~]#
|
|
|
|
21. start haproxy
|
|
|
|
[root@plwa2ps03srrm ~]# systemctl enable haproxy.service && systemctl status haproxy
|
|
Created symlink /etc/systemd/system/multi-user.target.wants/haproxy.service → /usr/lib/systemd/system/haproxy.service.
|
|
● haproxy.service - HAProxy Load Balancer
|
|
Loaded: loaded (/usr/lib/systemd/system/haproxy.service; enabled; vendor preset: disabled)
|
|
Active: inactive (dead)
|
|
[root@plwa2ps03srrm ~]# systemctl start haproxy
|
|
[root@plwa2ps03srrm ~]# systemctl status haproxy.service
|
|
● haproxy.service - HAProxy Load Balancer
|
|
Loaded: loaded (/usr/lib/systemd/system/haproxy.service; enabled; vendor preset: disabled)
|
|
Active: active (running) since Mon 2021-10-11 13:15:52 CEST; 54s ago
|
|
Process: 3365621 ExecStartPre=/usr/sbin/haproxy -f $CONFIG -c -q $OPTIONS (code=exited, status=0/SU>
|
|
Main PID: 3365624 (haproxy)
|
|
Tasks: 2 (limit: 102175)
|
|
Memory: 14.4M
|
|
CGroup: /system.slice/haproxy.service
|
|
├─3365624 /usr/sbin/haproxy -Ws -f /etc/haproxy/haproxy.cfg -p /run/haproxy.pid
|
|
└─3365627 /usr/sbin/haproxy -Ws -f /etc/haproxy/haproxy.cfg -p /run/haproxy.pid
|
|
|
|
Oct 11 13:15:52 plwa2ps03srrm systemd[1]: Starting HAProxy Load Balancer...
|
|
Oct 11 13:15:52 plwa2ps03srrm haproxy[3365624]: Proxy stats started.
|
|
Oct 11 13:15:52 plwa2ps03srrm haproxy[3365624]: Proxy stats started.
|
|
Oct 11 13:15:52 plwa2ps03srrm haproxy[3365624]: Proxy master started.
|
|
Oct 11 13:15:52 plwa2ps03srrm haproxy[3365624]: Proxy master started.
|
|
Oct 11 13:15:52 plwa2ps03srrm haproxy[3365624]: Proxy replicas started.
|
|
Oct 11 13:15:52 plwa2ps03srrm haproxy[3365624]: Proxy replicas started.
|
|
Oct 11 13:15:52 plwa2ps03srrm systemd[1]: Started HAProxy Load Balancer.
|
|
[root@plwa2ps03srrm ~]#
|
|
|