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.

Consul Client Dashboard

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 Dashboard-2

Consul Client kurulumunu tamamlamış olduk. Bir sonraki yazımızda Patroni kurulumunu ele alacağız, görüşmek ümidiyle

Paylaş
Bağlantıyı kopyala