PostgreSQL
 sql >> Cơ Sở Dữ Liệu >  >> RDS >> PostgreSQL

Triển khai và bảo trì PostgreSQL với Ansible

Ansible là một trong những công cụ tự động hóa CNTT nổi tiếng và được sử dụng rộng rãi, nó giúp chúng ta tự động hóa các tác vụ vận hành CNTT như ...

  • Khởi động máy chủ lưu trữ (máy ảo hoặc máy kim loại trần) từ đầu
  • Định cấu hình máy chủ và dịch vụ
  • Quản lý việc triển khai và nâng cấp phần mềm
  • Ansible cũng hỗ trợ điều phối cơ sở hạ tầng đám mây như tạo một loạt phiên bản EC2 và RDS cho các ứng dụng của bạn trên các đám mây công cộng (AWS, GCP, Azure). Bạn có thể tìm thấy thêm thông tin về cấp phép đám mây tại đây

Vì blog này chủ yếu là về quản lý PostgreSQL bằng Ansible, chúng tôi sẽ không đi vào chi tiết về cách sử dụng của Ansible, tuy nhiên, chúng tôi sẽ đi qua một số khái niệm cơ bản về Ansible. Tôi khuyên bạn nên xem qua liên kết tài liệu Ansible nếu bạn muốn tìm hiểu thêm về nó.

Khái niệm cơ bản Ansible

Ansible là một dự án mã nguồn mở được viết bằng python, mã nguồn có sẵn trên GitHub. Vì nó là một gói python nên chúng tôi có thể dễ dàng cài đặt Ansible bằng cách sử dụng pip.

Ansible chỉ cần được cài đặt trên một máy chủ lưu trữ mà từ đó chúng tôi sẽ sắp xếp các nhiệm vụ hoạt động của mình bằng cách sử dụng các lệnh Ansible (Ansible, Ansible-playbook). Chúng tôi gọi máy chủ điều phối này là Nút điều khiển.

Các lệnh Ansible sử dụng thư viện OpenSSH để đăng nhập vào các máy đích để thực hiện các tác vụ hoạt động, chúng tôi gọi các máy chủ đích này là Managed Node. Tên máy chủ hoặc IP của Managed Node được đề cập trong một tệp được gọi là Khoảng không quảng cáo, tên tệp khoảng không quảng cáo này sau đó được chỉ định làm đầu vào cho các lệnh Ansible.

Trong tệp kho, chúng tôi có thể liệt kê nhiều máy chủ trong một nhóm duy nhất, điều này sẽ tránh lặp lại các tác vụ giống nhau nhiều lần cho các máy chủ khác nhau. Bạn có thể tìm thêm thông tin chi tiết về việc sử dụng tệp khoảng không quảng cáo tại đây.

Vì lệnh Ansible sử dụng SSH để đăng nhập nên không cần cài đặt Ansible trên tất cả các máy chủ mà chỉ cần cài đặt trên Control Node. Tuy nhiên, tất cả các Control Node và Managed Node phải được cài đặt python và bất kỳ thư viện python cần thiết nào. Bạn có thể tìm thêm thông tin về cài đặt Ansible tại đây.

Đối với bản demo, tôi sẽ sử dụng máy tính xách tay làm nút điều khiển và máy ảo CentOS-7 khách làm nút được quản lý. Máy ảo CentOS-7 đã được cấp phép bằng Vagrant trên nhà cung cấp VirtualBox.

Cài đặt Ansible trên Control Node

Chúng tôi sẽ cài đặt Ansible bằng cách sử dụng pip như được tham khảo trong trang tài liệu Ansible. Các lệnh sau được thực thi với tư cách người dùng "Ansible".

$ curl https://bootstrap.pypa.io/get-pip.py -o get-pip.py
$ python get-pip.py --user

Sử dụng tùy chọn --user, làm cho các lệnh pip và Ansible được cài đặt trong thư mục HOME và chúng ta cần thêm đường dẫn bin vào biến môi trường PATH của chúng ta.

$ echo 'export PATH=$HOME/Library/Python/2.7/bin:$PATH' >> ~/.bash_profile
$ source ~/.bash_profile

Lệnh pip sau đã cài đặt Ansible phiên bản 2.8.0 (là phiên bản ổn định mới nhất tại thời điểm viết blog này.)

$ pip install --user ansible 
$ which ansible
/Users/Ansible/Library/Python/2.7/bin/Ansible
$ ansible --version
Ansible 2.8.0
...
... 

Kiểm tra trước nút điều khiển và nút được quản lý

Đảm bảo rằng bạn có kết nối mạng thích hợp giữa nút điều khiển và nút được quản lý.

Kiểm tra Tường lửa của bạn để biết bất kỳ quy tắc nào có thể chặn các kết nối đến và đi trên cổng SSH, nếu có, hãy mở cổng SSH để cung cấp quyền truy cập trên cả nút điều khiển và nút được quản lý.

Đầu tiên, hãy thử kết nối qua SSH với nút được quản lý. Bạn sẽ có thể đăng nhập vào nút được quản lý từ nút điều khiển.

Bạn có thể thiết lập quyền truy cập SSH không cần mật khẩu vào các nút được quản lý theo chính sách bảo mật của tổ chức bạn. Đối với bản trình diễn này, tôi đã định cấu hình SSH không cần mật khẩu cho nút được quản lý của mình “pg01” (CentOS-7) cho người dùng “vagrant”. Điều này làm cho nút được quản lý có sức mạnh sudo, hầu hết các tác vụ cài đặt và cấu hình máy chủ lưu trữ sẽ được thực thi với tư cách người dùng “lang thang” với “sudo”.

Trên nút điều khiển, chúng ta có tệp cấu hình ansible.cfg sẽ được sử dụng bởi các lệnh Ansible. Dưới đây là một số tùy chọn cấu hình được xác định trong tệp cấu hình. Để tìm hiểu thêm về các tùy chọn cấu hình khác có sẵn, hãy xem tệp cấu hình mẫu.

  • remote_port - Nếu máy chủ SSH trên nút được quản lý chạy trên một cổng khác với cổng mặc định 22, chúng tôi có thể thay đổi nó
  • remote_user - Tên người dùng đăng nhập sẽ được Ansible sử dụng để kết nối nút được quản lý, để chạy các tác vụ
  • private_key_file - khóa riêng tư SSH sẽ được sử dụng để Ansible đăng nhập

Vì cấu hình đã nói ở trên áp dụng chung cho tất cả các nút được quản lý, nên nếu chúng ta muốn có một cấu hình khác cho một máy chủ hoặc nhóm máy chủ cụ thể, chúng ta có thể chỉ định chúng trong tệp kiểm kê. Bạn có thể xem ví dụ về điều này bên dưới trong tệp khoảng không quảng cáo “development.yaml”.

Thực hiện Chạy khô An toàn

Tạo tệp khoảng không quảng cáo “development.yaml” như được hiển thị bên dưới.

$ pwd
/Users/Ansible/postgres-setup

$ cat development.yaml 
all:
  hosts:
  children:
    postgres_clusters:
      hosts:
        pg01:
      vars: 
        ansible_port: 22
        ansible_user: "vagrant"
        ansible_private_key_file: "/Users/Ansible/postgres-setup/private_key"

Trong tệp kiểm kê ở trên, máy chủ pg01 là một trong những thành viên của nhóm máy chủ postgres_clusters. Các biến ansible_port, ansible_user và ansible_private_key_file chỉ áp dụng cho các máy chủ trong nhóm postgres_clusters.

Bây giờ chúng ta sẽ kiểm tra xem liệu Ansible có thể chạy các tác vụ trên nút được quản lý hay không. Trong ví dụ bên dưới, lệnh ansible thực thi ping mô-đun trên nút được quản lý pg01, nếu Ansible có thể chạy ping mô-đun thì bạn sẽ thấy SUCCESS là phản hồi.

$ ansible -i development.yaml -m ping pg01
pg01 | SUCCESS => {
    "ansible_facts": {
        "discovered_interpreter_python": "/usr/bin/python"
    }, 
    "changed": false, 
    "ping": "pong"
}

Khi chạy Ansible trên nút được quản lý như tác vụ đầu tiên, nó sẽ thu thập thông tin như tên máy chủ, địa chỉ IP, bộ nhớ của nút được quản lý. Để kiểm tra những điều này, chúng ta có thể gọi thiết lập mô-đun sẽ trả về một JSON lớn. Chúng tôi có thể sử dụng bất kỳ điều nào trong số này trong sách phát Ansible của chúng tôi.

$ ansible -i development.yaml -m setup pg01 
pg01 | SUCCESS => {
    "ansible_facts": {
        "ansible_all_ipv4_addresses": [
            "192.168.100.4", 
            "10.0.2.15"
        ], 
        "ansible_all_ipv6_addresses": [
            "fe80::a00:27ff:fe29:ac89", 
            "fe80::5054:ff:fe26:1060"
        ],

Vai trò khả thi

Ansible Role là một cách gói một tập hợp các tác vụ và cài đặt cấu hình liên quan nhất định thành một đơn vị duy nhất chỉ bằng cách gán một vai trò cho một máy chủ hoặc nhóm máy chủ cụ thể. Ansible sẽ áp dụng tất cả các cấu hình và tác vụ liên quan. Điều này tránh lặp lại các tác vụ nhiều lần cho từng máy chủ lưu trữ hoặc nhóm máy chủ lưu trữ khác nhau.

Mỗi vai trò được biểu diễn dưới dạng một thư mục và trong thư mục vai trò sẽ có các thư mục con như tệp mặc định, trình xử lý, meta, nhiệm vụ, mẫu, thử nghiệm, vars. Mục đích của các thư mục này có thể được tìm thấy tại đây.

Các lệnh Ansible, theo mặc định, tìm kiếm thư mục vai trò theo các đường dẫn được đề cập trong DEFAULT_ROLES_PATH.

$ ansible-config list | grep -A2 '^DEFAULT_ROLES_PATH'
DEFAULT_ROLES_PATH:
  default: ~/.Ansible/roles:/usr/share/Ansible/roles:/etc/Ansible/roles
  description: Colon separated paths in which Ansible will search for Roles.

Thiên hà Ansible

Ansible Galaxy là một cổng thông tin nơi cộng đồng chia sẻ kho GitHub về các Vai trò Ansible của họ. Chúng ta có thể duyệt qua cổng thiên hà để tìm các vai trò Ansible cần thiết. Sử dụng lệnh ansible-galaxy, chúng tôi có thể tải xuống và sử dụng lại vai trò. Trước khi sử dụng một vai trò, hãy xem qua chi tiết tất cả các tệp Ansible YAML trong thư mục mặc định, vars, tác vụ, mẫu, trình xử lý và lưu ý cách hoạt động của vai trò.

Để triển khai PostgreSQL, chúng tôi sẽ sử dụng vai trò “postgresql” được phát triển bởi tác giả ANXS và repo GitHub.

Cài đặt vai trò Ansible “anxs.postgresql”

$ ansible-galaxy  install anxs.postgresql
- downloading role 'postgresql', owned by anxs
- downloading role from https://github.com/ANXS/postgresql/archive/v1.10.1.tar.gz
- extracting anxs.postgresql to /Users/ansible/.Ansible/roles/anxs.postgresql
- anxs.postgresql (v1.10.1) was installed successfully

Lệnh trên cài đặt thư mục vai trò "anxs.postgresql" trong thư mục "/Users/ansible/.Ansible/roles", đây là một trong những thư mục trong DEFAULT_ROLES_PATH và lệnh ansible sẽ tìm kiếm bất kỳ vai trò nào trong thư mục này.

Ansible Playbook

Ansible Playbook là một tệp YAML trong đó chúng tôi sẽ liệt kê các nhiệm vụ hoặc vai trò phải được thực thi trên một máy chủ cụ thể hoặc nhóm máy chủ lưu trữ. Bạn có thể đọc thêm về cách phát triển sách phát cũng như tìm hiểu định nghĩa của các thẻ như máy chủ, nhiệm vụ, vai trò, vars tại đây.

Theo mặc định, tất cả các tác vụ được thực thi với tư cách là người dùng không thể truy cập đã đăng nhập. Để thực hiện các tác vụ cụ thể với một người dùng khác (hoặc với đặc quyền 'root'), chúng tôi có thể sử dụng trở thành. Bạn có thể tìm thấy cách sử dụng lệnh này tại đây.

Trong playbook bên dưới (postgres-play.yaml), tôi đã liệt kê vai trò “anxs.postgresql” trong nhóm máy chủ “postgres_clusters”, vì vậy tất cả các tác vụ trong vai trò anxs.postgresql sẽ được thực thi cho tất cả các máy chủ trong nhóm “Postgres_clusters”.

$ cat postgres-play.yaml 
---
- hosts: postgres_clusters
  become: yes
  roles: 
    - role: anxs.postgresql

trở thành:yes trong YAML xác định rằng vai trò này sẽ được thực thi với đặc quyền cao hơn bằng cách sử dụng DEFAULT_BECOME_METHOD “sudo”

$ ansible-config list | grep -A2 '^DEFAULT_BECOME_METHOD'
DEFAULT_BECOME_METHOD:
  default: sudo
  description: Privilege escalation method to use when `become` is enabled.

Chúng tôi sẽ chạy playbook này với tư cách là người dùng "lang thang" và người dùng đã được cấp quyền sudo.

[[email protected] ~]$ sudo cat /etc/sudoers.d/vagrant
%vagrant ALL=(ALL) NOPASSWD: ALL
Somenines DevOps Guide to Management DatabaseTìm hiểu về những điều bạn cần biết để tự động hóa và quản lý cơ sở dữ liệu nguồn mở của mìnhTải xuống miễn phí

Triển khai PostgreSQL bằng Ansible

Bây giờ chúng tôi sẽ chạy playbook ‘postgres-play.yaml’, sẽ cài đặt tất cả các gói liên quan đến PostgreSQL và định cấu hình nó bằng cách sử dụng cài đặt mặc định.

Đối với ví dụ này, Ansible sẽ cài đặt PostgreSQL 9.6 trên cổng 5432, với postgres max_connections được đặt thành 100. Bạn có thể tìm thấy tất cả cài đặt mặc định trong tệp /Users/ansible/.Ansible/roles/anxs.postgresql/defaults/main.yml .

$ grep -E '^postgresql_(version|port|max_connections):' ~/.Ansible/roles/anxs.postgresql/defaults/main.yml 
postgresql_version: 9.6
postgresql_port: 5432
postgresql_max_connections: 100

Chạy playbook

$ ansible-playbook -i development.yaml postgres-play.yaml
PLAY [postgres_clusters] ***************************************************************************************************************************************************************************************

TASK [Gathering Facts] *****************************************************************************************************************************************************************************************
ok: [pg01]
...
...


PLAY RECAP *****************************************************************************************************************************************************************************************************
pg01                       : ok=21   changed=14   unreachable=0    failed=0    skipped=32   rescued=0    ignored=0 

Khi Ansible đã thực hiện tất cả các tác vụ, một bản tóm tắt về các lần thực thi tác vụ sẽ được hiển thị trong PLAY RECAP.

  • ok =21, 21 tác vụ được thực thi mà không có thay đổi.
  • change =14, 14 công việc đã thực hiện thay đổi đối với máy chủ lưu trữ, chẳng hạn như cài đặt postgres, tạo thư mục, tệp, khởi động postgres.
  • skipped =32, 32 tác vụ đã bị bỏ qua, có thể do một số tính năng chưa được kích hoạt. Vì chúng tôi đang cài đặt trên entOS nên các tác vụ liên quan đến Ubuntu đã bị bỏ qua.

Kiểm tra trạng thái và cấu hình dịch vụ PostgreSQL.

[[email protected] ~]$ systemctl status postgresql-9.6
● postgresql-9.6.service - PostgreSQL 9.6 database server
   Loaded: loaded (/usr/lib/systemd/system/postgresql-9.6.service; enabled; vendor preset: disabled)
  Drop-In: /etc/systemd/system/postgresql-9.6.service.d
           └─custom.conf
   Active: active (running) since Wed 2019-05-29 07:15:25 UTC; 24min ago
     Docs: https://www.postgresql.org/docs/9.6/static/
  Process: 7559 ExecStartPre=/usr/pgsql-9.6/bin/postgresql96-check-db-dir /var/lib/pgsql/9.6/data (code=exited, status=0/SUCCESS)
 Main PID: 7564 (postmaster)
   CGroup: /system.slice/postgresql-9.6.service
           ├─7564 /usr/pgsql-9.6/bin/postmaster -D /etc/postgresql/9.6/data
           ├─7567 postgres: checkpointer process   
           ├─7568 postgres: writer process   
           ├─7569 postgres: wal writer process   
           ├─7570 postgres: autovacuum launcher process   
           └─7571 postgres: stats collector process   

[[email protected] ~]$ psql -U postgres
psql (9.6.13)
Type "help" for help.

postgres=# show max_connections ;
 max_connections 
-----------------
 100
(1 row)

postgres=# show statement_timeout ;
 statement_timeout 
-------------------
 
(1 row)

postgres=# show log_min_duration_statement ;
 log_min_duration_statement 
----------------------------
 -1
(1 row)

Hiện chúng tôi đã cài đặt PostgreSQL trên máy chủ được quản lý “pg01” bằng cách sử dụng cấu hình mặc định.

Thay đổi cấu hình PostgreSQL

Bây giờ, chúng tôi sẽ định cấu hình lại phiên bản PostgreSQL bằng cách sử dụng cài đặt tùy chỉnh của chúng tôi.

Tôi đã tạo tệp custom.yaml (như hình bên dưới) có danh sách các biến được xác định để sửa đổi cài đặt PostgreSQL như nghe_addresses, max_connections, wal_level, hot_standby, statement_timeout, log_checkpoint, log_lock_waits, log_destination, log_min_duration_statement.

$ pwd
/Users/ansible/postgres-setup
$ cat custom.yaml 
postgresql_listen_addresses: "*"
postgresql_max_connections: 300
postgresql_wal_level: "hot_standby"
postgresql_hot_standby: "on"
postgresql_statement_timeout: 60000
postgresql_log_lock_waits: "on"
postgresql_log_destination: "csvlog"
postgresql_log_min_duration_statement: 0

Bây giờ chúng tôi sẽ thay đổi postgres-play.yaml trong playbook của mình để sử dụng custom.yaml này.

$ cat postgres-play.yaml  
---
- hosts: postgres_clusters
  become: yes
  vars_files:
    - ./custom.yaml
  roles: 
    - role: anxs.postgresql

Sử dụng thẻ vars_files, tôi đã chỉ định tệp cấu hình tùy chỉnh custom.yaml, tệp này sẽ ghi đè cấu hình mặc định được chỉ định trong vai trò anxs.postgresql. Bạn có thể tìm thêm thông tin chi tiết về mức độ ưu tiên thay đổi tại đây.

Bây giờ chúng tôi có thể chạy lại cùng một lệnh ansible-playbook mà chúng tôi đã thực hiện trước đó, nhưng điều này sẽ thực thi tất cả các tác vụ như cài đặt PostgreSQL, cấu hình, tạo người dùng và cơ sở dữ liệu. Đối với điều này, chúng ta nên hạn chế Ansible chỉ thực thi các tác vụ liên quan đến cấu hình PostgreSQL bằng cách sử dụng tùy chọn --tags .

Để biết danh sách các thẻ được hỗ trợ, chúng ta có thể chạy lệnh với --list-tags.

$ ansible-playbook -i development.yaml postgres-play.yaml --list-tags
playbook: postgres-play.yaml
  play #1 (postgres_clusters): postgres_clusters        TAGS: []
      TASK TAGS: [always, postgresql, postgresql-configure, postgresql-databases, postgresql-extensions, postgresql-install, postgresql-monit, postgresql-users]

Từ các thẻ trên, chúng tôi sẽ chỉ định thẻ postgresql-configure để sửa đổi cài đặt postgresql.

$ ansible-playbook  -i development.yaml postgres-play.yaml --tags postgresql-configure

PLAY [postgres_clusters] ***************************************************************************************************************************************************************************************

TASK [Gathering Facts] *****************************************************************************************************************************************************************************************
ok: [pg01]
...
...

TASK [anxs.postgresql : PostgreSQL | Update configuration - pt. 2 (postgresql.conf)] ***************************************************************************************************************************
changed: [pg01]
...
...
TASK [anxs.postgresql : PostgreSQL | Reload all conf files] ****************************************************************************************************************************************************
changed: [pg01]

PLAY RECAP *****************************************************************************************************************************************************************************************************
pg01                       : ok=13   changed=2    unreachable=0    failed=0    skipped=6    rescued=0    ignored=0

Như bạn thấy trong PLAY RECAP, chỉ có 2 thay đổi được truyền đến nút được quản lý pg01. Đầu tiên là cập nhật cấu hình và thứ hai là tải lại cấu hình.

Xác minh rằng các thay đổi cấu hình đã có hiệu lực trên nút được quản lý.

postgres=# show listen_addresses ;
 listen_addresses
------------------
 localhost
(1 row)

postgres=# show max_connections ;
 max_connections 
-----------------
 100
(1 row)

postgres=# show wal_level ;
 wal_level 
-----------
 minimal
(1 row)

postgres=# show hot_standby ;
 hot_standby 
-------------
 off
(1 row)

postgres=# show statement_timeout;
 statement_timeout 
-------------------
 1min
(1 row)

postgres=# show log_lock_waits ;
 log_lock_waits 
----------------
 on
(1 row)

postgres=# show log_destination ;
 log_destination 
-----------------
 csvlog
(1 row)

postgres=# show log_min_duration_statement;
 log_min_duration_statement 
----------------------------
 
(1 row)

Như bạn có thể thấy, một số cấu hình thay đổi như nghe_addresses, max_connections, wal_level, hot_standby vẫn chưa có hiệu lực. Những thay đổi cấu hình này cần khởi động lại PostgreSQL và vai trò anxs.postgresql chỉ tải lại chính dịch vụ.

Để tránh khởi động lại PostgreSQL đột ngột trong giờ sản xuất, tác giả ban đầu có thể đã không thêm tác vụ khởi động lại vào vai trò. Chúng tôi có thể khởi động lại dịch vụ postgresql theo cách thủ công, trong thời gian ngừng hoạt động theo lịch trình.

[[email protected] ~]$ sudo systemctl restart postgresql-9.6

[[email protected] ~]$ psql -U postgres
psql (9.6.13)

postgres=# show listen_addresses ;
 listen_addresses 
------------------
 
(1 row)

postgres=# show max_connections ;
 max_connections 
-----------------
 300
(1 row)

postgres=# show wal_level;
 wal_level 
-----------
 replica
(1 row)

postgres=# show hot_standby;
 hot_standby 
-------------
 on
(1 row)

Tạo Cơ sở dữ liệu &Người dùng PostgreSQL

Bây giờ, chúng tôi sẽ tạo người dùng “app1” và “app2” và cơ sở dữ liệu “app1_db” và “app2_db” do người dùng “app1” và “app2” tương ứng sở hữu.

Tôi đã thêm hai biến mới, postgresql_users và postgresql_database vào custom.yaml, có danh sách người dùng và cơ sở dữ liệu cần được tạo. Vai trò anxs.postgresql sử dụng mô-đun Ansible postgresql_users và postgresql_db để tạo người dùng và cơ sở dữ liệu. Bạn có thể tham khảo các tài liệu này để thêm các biến.

$ cat custom.yaml 
...
...
postgresql_users:
  - name: app1
    pass: md5bb0592c05941d14c231da96950c71b60
    encrypted: yes
  - name: app2
    pass: md5bbb1e4d09b64ca54a237727af46cba7c
    encrypted: yes

postgresql_databases:
  - name: app1_db
    owner: app1 
  - name: app2_db
    owner: app2 

Bây giờ chúng tôi sẽ chỉ chạy các tác vụ được liên kết với các thẻ postgresql-users và postgresql-databases.

$ ansible-playbook -i development.yaml postgres-play.yaml --tags postgresql-users,postgresql-databases

PLAY [postgres_clusters] ***************************************************************************************************************************************************************************************
...
...
TASK [anxs.postgresql : PostgreSQL | Make sure the PostgreSQL users are present] *******************************************************************************************************************************
changed: [pg01] => (item=None)
changed: [pg01] => (item=None)
changed: [pg01]
...
...
TASK [anxs.postgresql : PostgreSQL | Make sure the PostgreSQL databases are present] ***************************************************************************************************************************
changed: [pg01] => (item={u'owner': u'app1', u'name': u'app1_db'})
changed: [pg01] => (item={u'owner': u'app2', u'name': u'app2_db'})
...
...
PLAY RECAP *****************************************************************************************************************************************************************************************************
pg01                       : ok=6    changed=2    unreachable=0    failed=0    skipped=9    rescued=0    ignored=0

Xác minh người dùng và cơ sở dữ liệu được tạo trên máy chủ được quản lý.

postgres=# \du
                                   List of roles
 Role name |                         Attributes                         | Member of 
-----------+------------------------------------------------------------+-----------
 app1      |                                                            | {}
 app2      |                                                            | {}
 postgres  | Superuser, Create role, Create DB, Replication, Bypass RLS | {}

postgres=# \l
                                  List of databases
   Name    |  Owner   | Encoding |   Collate   |    Ctype    |   Access privileges   
-----------+----------+----------+-------------+-------------+-----------------------
 app1_db   | app1     | UTF8     | en_US.UTF-8 | en_US.UTF-8 | 
 app2_db   | app2     | UTF8     | en_US.UTF-8 | en_US.UTF-8 | 
 postgres  | postgres | UTF8     | en_US.UTF-8 | en_US.UTF-8 | 
 template0 | postgres | UTF8     | en_US.UTF-8 | en_US.UTF-8 | =c/postgres          +
           |          |          |             |             | postgres=CTc/postgres
 template1 | postgres | UTF8     | en_US.UTF-8 | en_US.UTF-8 | =c/postgres          +
           |          |          |             |             | postgres=CTc/postgres
(5 rows)

Cho phép Máy chủ Bên ngoài kết nối với Máy chủ PostgreSQL

Bây giờ chúng tôi sẽ cho phép các máy chủ bên ngoài kết nối dịch vụ PostgreSQL bằng cách thêm biến postgresql_pg_hba_custom vào custom.yaml

$ cat custom.yaml
...
...
postgresql_pg_hba_custom:
  - {type: "host", database: "all", user: "all", address: "0.0.0.0/0", method: "md5" }

Chạy các tác vụ được gắn thẻ postgresql-configure, để áp dụng cấu hình.

$ ansible-playbook -i development.yaml postgres-play.yaml --tags postgresql-configure

Xác minh xem tôi có thể kết nối với máy chủ PostgreSQL từ nút điều khiển của mình hay không.

$ PGPASSWORD=password psql -h pg01 -U app1 -d app1_db -c 'Select true'
 bool
------
 
(1 row)

Kết luận

Blog này sẽ cung cấp cho bạn những điều cơ bản bạn cần biết để sử dụng Ansible cho việc triển khai và quản lý PostgreSQL. Tuy nhiên, chúng tôi chỉ đề cập đến một số tác vụ quản trị PostgreSQL. Tùy thuộc vào cơ sở hạ tầng tổ chức của bạn, bạn có thể cần ghi đè một số cấu hình mặc định và thêm nhiều tác vụ hơn nữa vào vai trò Ansible.


  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Chọn bản ghi đầu tiên nếu không có bản ghi nào phù hợp

  2. Xóa bản sao khỏi bảng

  3. java.lang.ClassNotFoundException:org.postgresql.Driver, Android

  4. Làm thế nào để tạo tìm kiếm mờ đơn giản chỉ với PostgreSQL?

  5. gem cài đặt pg không thể liên kết với libpq