Merhabalar, PostgreSQL Yüksek Kullanılabilirlik Mimarileri Serisine Consul Client Kurulumu konusuyla devam ediyoruz. Consul Client Kurulumundan bahsetmeden önce eğer incelemediyseniz Merkezi Consul Kümesi Kurulumu konulu içeriğin okunması konunun daha iyi anlaşılabilmesi için faydalı olacaktır.
Patroni’nin tek başına kurulumu PostgreSQL kümesine yük devretme ve yüksek kullanılabilirlik niteliği kazandırmaya yeterli değildir. Patroni ile birlikte Dağıtık Konfigürasyon Depolama araçlarından birine ihtiyaç vardır. Bu kapsamda PostgreSQL Yüksek kullanılabilirlik mimarilerinde Patroni ile birlikte yoğun olarak Consul kullanımı tercih edilmektedir.
Consul Server Patroni sunucularında kurulu olabileceği gibi Merkezi bir Consul Kümesi oluşturulabilir. Merkezi Consul Kümesi kurulduğu taktirde Patroni Sunucularında Consul Client kurulması gerekmektedir. Bir önceki yazımızda Merkezi Consul Kümesi kurulumunu tamamlamıştık. Merkezi Consul Kümesine ait bilgiler aşağıdaki gibidir.
Node Address Status Type Build Protocol DC Partition Segment
consulSrv-1 192.168.222.11:8301 alive server 1.11.4 2 sysdbaops default <all>
consulSrv-2 192.168.222.12:8301 alive server 1.11.4 2 sysdbaops default <all>
consulSrv-3 192.168.222.13:8301 alive server 1.11.4 2 sysdbaops default <all>
İlk olarak Consul Client, bir sonraki yazıda da Patroni ve PostgreSQL kurulumunu gerçekleştireceğimiz sunuculara ait bilgiler aşağıdaki gibidir.
OS IP HOSTNAME
Ubuntu 22.04.2 LTS 192.168.222.14 patroniSrv-1
Ubuntu 22.04.2 LTS 192.168.222.15 patroniSrv-2
Ubuntu 22.04.2 LTS 192.168.222.16 patroniSrv-3
Consul Client Kurulumu
Kuruluma başlamadan önce consulSrv-1, consulSrv-2, consulSrv-3, patroniSrv-1, patroniSrv-2, patroniSrv-3 sunucularında hosts dosyasını düzenliyoruz.
root@consulSrv-1:~# vi /etc/hosts
127.0.0.1 consulSrv-1
192.168.222.11 consulSrv-1
192.168.222.12 consulSrv-2
192.168.222.13 consulSrv-3
192.168.222.14 patroniSrv-1
192.168.222.15 patroniSrv-2
192.168.222.16 patrnoiSrv-3
root@consulSrv-2:~# vi /etc/hosts
127.0.0.1 consulSrv-2
192.168.222.11 consulSrv-1
192.168.222.12 consulSrv-2
192.168.222.13 consulSrv-3
192.168.222.14 patroniSrv-1
192.168.222.15 patroniSrv-2
192.168.222.16 patrnoiSrv-3
root@consulSrv-3:~# vi /etc/hosts
127.0.0.1 consulSrv-3
192.168.222.11 consulSrv-1
192.168.222.12 consulSrv-2
192.168.222.13 consulSrv-3
192.168.222.14 patroniSrv-1
192.168.222.15 patroniSrv-2
192.168.222.16 patrnoiSrv-3
root@patroniSrv-1:~# vi /etc/hosts
127.0.0.1 patroniSrv-1
192.168.222.11 consulSrv-1
192.168.222.12 consulSrv-2
192.168.222.13 consulSrv-3
192.168.222.14 patroniSrv-1
192.168.222.15 patroniSrv-2
192.168.222.16 patroniSrv-3
root@patroniSrv-2:~# vi /etc/hosts
127.0.0.1 patroniSrv-2
192.168.222.11 consulSrv-1
192.168.222.12 consulSrv-2
192.168.222.13 consulSrv-3
192.168.222.14 patroniSrv-1
192.168.222.15 patroniSrv-2
192.168.222.16 patroniSrv-3
root@patroniSrv-3:~# vi /etc/hosts
127.0.0.1 patroniSrv-3
192.168.222.11 consulSrv-1
192.168.222.12 consulSrv-2
192.168.222.13 consulSrv-3
192.168.222.14 patroniSrv-1
192.168.222.15 patroniSrv-2
192.168.222.16 patroniSrv-3
Hosts dosyasını düzenledikten sonra patroniSrv-1, patroniSrv-2, patroniSrv-3 sunucularında consul kurulumunu gerçekleştiriyoruz.
root@patroniSrv-1# echo "deb [arch=amd64] https://apt.releases.hashicorp.com $(lsb_release -cs) main" > /etc/apt/sources.list.d/consul.list
root@patroniSrv-1# wget --quiet -O - https://apt.releases.hashicorp.com/gpg | apt-key add -
root@patroniSrv-1# apt update
root@patroniSrv-1# apt install consul=1.11.4
root@patroniSrv-2# echo "deb [arch=amd64] https://apt.releases.hashicorp.com $(lsb_release -cs) main" > /etc/apt/sources.list.d/consul.list
root@patroniSrv-2# wget --quiet -O - https://apt.releases.hashicorp.com/gpg | apt-key add -
root@patroniSrv-2# apt update
root@patroniSrv-2# apt install consul=1.11.4
root@patroniSrv-3# echo "deb [arch=amd64] https://apt.releases.hashicorp.com $(lsb_release -cs) main" > /etc/apt/sources.list.d/consul.list
root@patroniSrv-3# wget --quiet -O - https://apt.releases.hashicorp.com/gpg | apt-key add -
root@patroniSrv-3# apt update
root@patroniSrv-3# apt install consul=1.11.4
Consul için gerekli dosya dizinleri bütün sunucularda oluşturarak yetkilerini düzenleyelim.
root@patroniSrv-1# mkdir /var/lib/consul root@patroniSrv-1# chown consul: /var/lib/consul root@patroniSrv-1# chmod 700 /var/lib/consul root@patroniSrv-1# mkdir /var/log/consul/ root@patroniSrv-1# chown consul:consul /var/log/consul root@patroniSrv-1# chmod 755 /var/log/consul
root@patroniSrv-2# mkdir /var/lib/consul
root@patroniSrv-2# chown consul: /var/lib/consul
root@patroniSrv-2# chmod 700 /var/lib/consul
root@patroniSrv-2# mkdir /var/log/consul/
root@patroniSrv-2# chown consul:consul /var/log/consul
root@patroniSrv-2# chmod 755 /var/log/consul
root@patroniSrv-3# mkdir /var/lib/consul
root@patroniSrv-3# chown consul: /var/lib/consul
root@patroniSrv-3# chmod 700 /var/lib/consul
root@patroniSrv-3# mkdir /var/log/consul/
root@patroniSrv-3# chown consul:consul /var/log/consul
root@patroniSrv-3# chmod 755 /var/log/consul
Bir önceki yazımızda consul.json dosyasını konfigüre etmek için gerekli olan encrypt key ve consul tokenı elde etmiştik. Bu sebeple yeniden üretmeye ihtiyaç bulunmamaktadır. Bütün sunucularda /etc/consul.d/consul.json dosyasını aşağıdaki gibi konfigüre edebiliriz.
root@patroniSrv-1:~# vi /etc/consul.d/consul.json
{
"domain": "dbaops",
"datacenter": "sysdbaops",
"node_name": "patroniSrv-1",
"bind_addr": "192.168.222.14",
"client_addr": "127.0.0.1 192.168.222.14",
"data_dir": "/var/lib/consul",
"encrypt": "DB33KuBUlvskRnD8c7RyxFhn8qUqEmgOHYf8xMs+H/E=",
"log_level": "INFO",
"log_file": "/var/log/consul/consul",
"server": false,
"ui_config": {
"enabled": true
},
"leave_on_terminate": true,
"rejoin_after_leave": true,
"enable_local_script_checks": true,
"disable_update_check" : true,
"retry_join": ["192.168.222.11","192.168.222.12","192.168.222.13"],
"start_join": ["192.168.222.11","192.168.222.12","192.168.222.13"],
"telemetry": {
"disable_compat_1.9": true
},
"cert_file": "/etc/ssl/certs/ssl-cert-snakeoil.pem",
"key_file": "/etc/ssl/private/ssl-cert-snakeoil.key",
"ports": {
"http": -1,
"https": 8501
},
"acl": {
"enabled": true,
"default_policy": "deny",
"enable_token_persistence": true,
"tokens": {
"default": "759618f7-0690-6f62-b201-67160ff4c700",
"initial_management": "759618f7-0690-6f62-b201-67160ff4c700"
}
}
}
root@patroniSrv-2:~# vi /etc/consul.d/consul.json
{
"domain": "dbaops",
"datacenter": "sysdbaops",
"node_name": "patroniSrv-2",
"bind_addr": "192.168.222.15",
"client_addr": "127.0.0.1 192.168.222.15",
"data_dir": "/var/lib/consul",
"encrypt": "DB33KuBUlvskRnD8c7RyxFhn8qUqEmgOHYf8xMs+H/E=",
"log_level": "INFO",
"log_file": "/var/log/consul/consul",
"server": false,
"ui_config": {
"enabled": true
},
"leave_on_terminate": true,
"rejoin_after_leave": true,
"enable_local_script_checks": true,
"disable_update_check" : true,
"retry_join": ["192.168.222.11","192.168.222.12","192.168.222.13"],
"start_join": ["192.168.222.11","192.168.222.12","192.168.222.13"],
"telemetry": {
"disable_compat_1.9": true
},
"cert_file": "/etc/ssl/certs/ssl-cert-snakeoil.pem",
"key_file": "/etc/ssl/private/ssl-cert-snakeoil.key",
"ports": {
"http": -1,
"https": 8501
},
"acl": {
"enabled": true,
"default_policy": "deny",
"enable_token_persistence": true,
"tokens": {
"default": "759618f7-0690-6f62-b201-67160ff4c700",
"initial_management": "759618f7-0690-6f62-b201-67160ff4c700"
}
}
}
root@patroniSrv-1:~# vi /etc/consul.d/consul.json
{
"domain": "dbaops",
"datacenter": "sysdbaops",
"node_name": "patroniSrv-3",
"bind_addr": "192.168.222.16",
"client_addr": "127.0.0.1 192.168.222.16",
"data_dir": "/var/lib/consul",
"encrypt": "DB33KuBUlvskRnD8c7RyxFhn8qUqEmgOHYf8xMs+H/E=",
"log_level": "INFO",
"log_file": "/var/log/consul/consul",
"server": false,
"ui_config": {
"enabled": true
},
"leave_on_terminate": true,
"rejoin_after_leave": true,
"enable_local_script_checks": true,
"disable_update_check" : true,
"retry_join": ["192.168.222.11","192.168.222.12","192.168.222.13"],
"start_join": ["192.168.222.11","192.168.222.12","192.168.222.13"],
"telemetry": {
"disable_compat_1.9": true
},
"cert_file": "/etc/ssl/certs/ssl-cert-snakeoil.pem",
"key_file": "/etc/ssl/private/ssl-cert-snakeoil.key",
"ports": {
"http": -1,
"https": 8501
},
"acl": {
"enabled": true,
"default_policy": "deny",
"enable_token_persistence": true,
"tokens": {
"default": "759618f7-0690-6f62-b201-67160ff4c700",
"initial_management": "759618f7-0690-6f62-b201-67160ff4c700"
}
}
}
Consul dashboardının HTTPS Protokolü üzerinden çalışabilmesi için, sunucularda ssl-cert paketini kurduktan sonra default sertifika oluşturuyoruz. Daha sonra consulun bu sertifikaya erişebilmesi için gerekli izinlerin verilmesi gerekmektedir.
root@patroniSrv-1# apt install ssl-cert
root@patroniSrv-1# sudo make-ssl-cert generate-default-snakeoil --force-overwrite
root@patroniSrv-1# chmod -R 777 /etc/ssl/private
root@patroniSrv-2# apt install ssl-cert
root@patroniSrv-2# sudo make-ssl-cert generate-default-snakeoil --force-overwrite
root@patroniSrv-2# chmod -R 777 /etc/ssl/private
root@patroniSrv-3# apt install ssl-cert
root@patroniSrv-3# sudo make-ssl-cert generate-default-snakeoil --force-overwrite
root@patroniSrv-3# chmod -R 777 /etc/ssl/private
Consul kurulumunu tamamlamak için gerekli profile dosyalarını oluşturalım.
root@patroniSrv-1# vi /etc/profile.d/consul-env-tls.sh
export CONSUL_HTTP_SSL=true
export CONSUL_HTTP_ADDR=patroniSrv-1:8501
root@patroniSrv-1# vi /etc/profile.d/consul-autocomplete.sh
complete -C /usr/bin/consul consul
root@consulSrv-1# exit
root@patroniSrv-2# vi /etc/profile.d/consul-env-tls.sh
export CONSUL_HTTP_SSL=true
export CONSUL_HTTP_ADDR=patroniSrv-2:8501
root@patroniSrv-2# vi /etc/profile.d/consul-autocomplete.sh
complete -C /usr/bin/consul consul
root@consulSrv-1# exit
root@patroniSrv-3# vi /etc/profile.d/consul-env-tls.sh
export CONSUL_HTTP_SSL=true
export CONSUL_HTTP_ADDR=patroniSrv-3:8501
root@patroniSrv-3# vi /etc/profile.d/consul-autocomplete.sh
complete -C /usr/bin/consul consul
root@consulSrv-1# exit
Kurulumu tamamladığımıza göre Client kurulumunu gerçekleştirdiğimiz bütün sunucularda consul servisini başlatabiliriz.
root@patroniSrv-1:~# systemctl start consul
root@patroniSrv-2:~# systemctl start consul
root@patroniSrv-3:~# systemctl start consul
Client’ların Merkezi Consul kümesine dahil olup olmadığını görmek için consul members komutu ile birlikte token kullanmamız gerekmektedir.
root@patroniSrv-3:~# consul members --token=759618f7-0690-6f62-b201-67160ff4c700
Node Address Status Type Build Protocol DC Partition Segment
consulSrv-1 192.168.222.11:8301 alive server 1.11.4 2 sysdbaops default <all>
consulSrv-2 192.168.222.12:8301 alive server 1.11.4 2 sysdbaops default <all>
consulSrv-3 192.168.222.13:8301 alive server 1.11.4 2 sysdbaops default <all>
patroniSrv-1 192.168.222.14:8301 alive client 1.11.4 2 sysdbaops default <default>
patroniSrv-2 192.168.222.15:8301 alive client 1.11.4 2 sysdbaops default <default>
patroniSrv-3 192.168.222.16:8301 alive client 1.11.4 2 sysdbaops default <default>
Consul Client’ların Merkezi Consul Kümesine dahil olduğunu görmüş olduk. Consul kümesinin durumunu Consul Dashboard üzerinden de görüntüleyebiliriz. Bunun için web tarayıcı üzerinden https://IP:8501 adresine gidebiliriz.
Nodes Menüsüne tıkladığımızda 3 adet Consul Server, 3 adet Consul Client sunucusunun bulunduğunu görüntülemekteyiz.
Consul Client kurulumunu tamamlamış olduk. Bir sonraki yazımızda Patroni kurulumunu ele alacağız, görüşmek ümidiyle…