Tự động chuyển đổi dự phòng trong PostgreSQL 9.1


18

Làm thế nào để thiết lập hai máy chủ giống hệt nhau để chuyển đổi dự phòng tự động trong PostgreSQL 9.1.

HĐH

Centos 5
PostgreSQL 9.1 được biên dịch từ nguồn
Tài khoản người dùng postgres tồn tại trên cả hai máy và có khóa mật khẩu ssh để kết nối với cả hai máy.

Cài đặt hiện tại của tôi:

Cấu hình máy chủ chính:

postgresql.conf:

listen_address = '*'
wal_level = hot_standby
max_wal_senders = 3
checkpoint_segments = 16    
wal_keep_segments = 8 
archive_mode = on    
archive_command = 'cp "%p" /opt/pgsql91/archive/"%f"'  

pg_hba.conf:

 host  replication   all   10.0.66.1/32      trust
 host  replication   all   10.0.66.2/32      trust

Máy chủ dự phòng

postgresql.conf và pg_hba.conf giống hệt với những gì được cấu hình trên máy chủ chính.

recovery.conf:

 standby_mode = 'on'
 primary_conninfo = 'host=10.0.66.1'
 trigger_file = '/opt/pgsql91/data/trigger.txt'

Nhờ hzRoot, giờ tôi đã hiểu cách chuyển máy chủ từ chế độ chờ sang chế độ chính.

Sử dụng các lệnh sau, tôi có thể đồng bộ hóa nô lệ mới với chủ mới và sau đó nhận bản sao lưu và chạy.

Trên bản gốc mới (10.0.66.2)

  1. su - postgres
  2. chạm vào trigger.txt trong / opt / pssql91 / data /
  3. recovery.conf trở thành recovery.done
  4. psql -c "; CHỌN pg_start_backup ('sao lưu', đúng)";
  5. rsync -a -v -e ssh / opt / pssql91 / data / 10.0.66.1:/opt/pgsql91/data/ --exclude postmaster.pid
  6. psql -c "; CHỌN pg_stop_backup ()";

Trên nô lệ mới (10.0.66.1)

  1. tạo recovery.conf: cp recovery.done để recovery.conf
  2. vi recovery.conf thay đổi địa chỉ IP: chính_conninfo = 'host = 10.0.66.2'
  3. bắt đầu postgresql

Vì vậy, câu hỏi của tôi bây giờ là:

  1. Đây có phải là cách chính xác để chuyển đổi vai trò?
  2. Có ai đã tự động quá trình này, nếu vậy bạn đã làm gì?
  3. Nếu sao chép đồng bộ được bật, tôi nhận thấy máy chủ chính mới sẽ không thực hiện bất kỳ giao dịch nào vì nó đang chờ nô lệ phản hồi. Tuy nhiên, không có nô lệ vì máy chủ khác, chủ cũ bị hỏng. Điều này có đúng không hay tôi cần tạm thời vô hiệu hóa sao chép đồng bộ trong khi nô lệ mới ngừng hoạt động?

1. có đúng 2. có thể tốt hơn là không tự động hóa quá trình đó. 3. vì vậy bạn cần ít nhất 2 nô lệ và 1 chủ. bởi vì như bạn đã nói đồng bộ. nhân rộng cần ít nhất 2 nút để đẩy đồng bộ hóa. nếu nó chỉ có một nút chính, bạn sẽ không thể cam kết ..
sraftz

các bước 4, 5 và 6 không cần thiết đối với chủ mới bởi vì, tốt, bạn đang sao chép để bắt đầu. Thứ hai, điều gì sẽ xảy ra nếu chủ chết và ngoại tuyến - bạn sẽ không thể kết nối với nó. Các bước 4,5, & 6 thường được thực hiện trên một nút nô lệ mới tham gia nhóm nhân rộng.
Eric

@Eric như tôi đã chơi với điều này, các bước 4,5,6 được yêu cầu để đưa chủ cũ trở lại trạng thái làm việc. Làm cho chế độ chờ chính mới ngay lập tức tạo ra mục nhập WAL mới, vì vậy bây giờ nó là 1 mục trước chủ cũ. Bắt đầu chủ cũ trong chế độ chờ đã gây ra lỗi cho tôi, vì vậy tôi đã phải thực hiện các bước 4,5,6 trên chủ cũ để đồng bộ hóa với chủ mới (bằng cách sử dụng pg_basBackup, có thể truyền toàn bộ xlog từ chủ mới - thay thế các bước 4,5,6 trong postgres> = 9.1 tôi nghĩ). Tôi đã đúng hay tôi đã làm điều gì sai và điều này không cần thiết?
Dalibor Filus

Câu trả lời:


8

Kiểm tra repmrg :

repmgr là một bộ công cụ nguồn mở giúp các DBA và quản trị viên hệ thống quản lý một cụm cơ sở dữ liệu PostgreQuery ..

Bằng cách tận dụng khả năng của Chế độ chờ nóng được giới thiệu trong PostgreSQL 9, repmgr đơn giản hóa đáng kể quá trình thiết lập và quản lý cơ sở dữ liệu với các yêu cầu về tính sẵn sàng và khả năng mở rộng cao.

repmgr đơn giản hóa việc quản trị và quản lý hàng ngày, nâng cao năng suất và giảm chi phí chung của cụm PostgreQuery bằng cách:

  • giám sát quá trình nhân rộng; cho phép các DBA phát hành cao
  • hoạt động sẵn có như chuyển đổi và không thành công.

Nó làm hai việc:

  1. repmgr: chương trình lệnh thực hiện các tác vụ trên cụm của bạn và sau đó thoát
  2. repmgrd: quản lý và giám sát daemon theo dõi cụm và có thể tự động hóa các hành động từ xa.

Đối với chuyển đổi dự phòng tự động, repmgrd thực hiện thủ thuật và không phải là SPOF trong mạng của bạn, như pgPool. Tuy nhiên, điều quan trọng là vẫn phải giám sát tất cả các deamon và đưa chúng trở lại sau thất bại.

Phiên bản 2.0 sắp được phát hành, bao gồm cả RPM.


Xin chào Frank, cảm ơn bạn đã trả lời. Tôi chưa nghe nói về repmrg và tôi chắc chắn sẽ thử.
Craig Efrein

Xin chào lần nữa Frank, Cảm ơn vì repmgr, đó chính xác là những gì tôi đang tìm kiếm. Cuối cùng tôi đã được dùng thử ngày hôm nay.
Craig Efrein

4

trong tệp recovery.conf của bạn, bạn nên thêm một dòng thông báo cho postgres chuyển đổi dự phòng từ chủ sang nô lệ. bạn nên thêm

trigger_file = '/any/file/to/trigger'

khi bạn tạo tập tin này trên đường dẫn cụ thể. các nút sẽ thay đổi. (tập tin không bao gồm bất cứ điều gì nó chỉ là một kích hoạt)

bạn có thể tìm thêm thông tin về sao chép phát trực tuyến

mặt khác, có thể làm cho nó tự động được tạo bằng một số thủ thuật nhưng sử dụng các công cụ giám sát và thực hiện thất bại trên thủ công sẽ tốt hơn ..


Cảm ơn bạn đã phản hồi. Nó có thể là một vài ngày trước khi tôi có thể kiểm tra nó nhưng tôi chắc chắn sẽ lấy lại cho bạn.
Craig Efrein

Tôi sẽ cung cấp cho bạn +1 cho câu trả lời trigger_file đã giúp tôi hợp lý hóa quá trình này. Đây không phải là toàn bộ câu trả lời, đó là cách tự động hóa hoàn toàn quy trình. Một điều khác mà tôi nhận thấy là trong khi chủ bị ngừng hoạt động, các giao dịch sẽ không hoàn thành vì nó đang chờ chủ xác nhận. Điều này đã được giải quyết bằng cách sử dụng bản sao không đồng bộ
Craig Efrein

Điều đó thật tuyệt vời. Tôi có rất nhiều lời chỉ trích về sự thiếu linh hoạt trong triển khai sao chép của PostgreSQL, nhưng đây là một cách tuyệt vời, đơn giản để xử lý chuyển đổi dự phòng.
Aaron Brown

1
Tuy nhiên, nó đảm nhận vai trò chủ ngay cả khi bản thân chủ vẫn đang chạy (vì vậy bạn có hai chủ). Điều này không được tự động bởi chính postgres.
Dalibor Filus

0

Có ai đã cân nhắc sử dụng pgpool-II cho việc này chưa?

http://pgpool.projects.postgresql.org/contrib_docs/simple_sr_setting/index.html

Tôi thiết lập sao chép cho PostgreSQL. Có vẻ như phần khó khăn xảy ra khi chủ cũ quay trở lại.

Từ những gì tôi đã đọc, pgpool dường như có thể tự động hóa hầu hết điều đó. Tuy nhiên tôi không chắc có tận dụng các tính năng sao chép đã có trong PostgreQuery 9.1 hay không.


1
pgPool là một điểm duy nhất của sự thất bại, bạn mất tất cả mọi thứ khi đi xuống.
Frank Heikens

1
Cảm ơn bạn vì câu trả lời. Tôi đã thử PGPool II với kết quả hỗn hợp trên cả CentOS và Debian và cuối cùng đã bỏ cuộc.
Craig Efrein

1
Tại sao không sử dụng pgpool II với HAproxy? Với một nhịp tim và nghe ip nổi?
mikiemorales

Chỉ để tham khảo lịch sử, pgpool-ii hiện không chạy trên Windows.
tham gia
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.