CFSDN nhấn mạnh vào giá trị tạo ra nguồn mở và chúng tôi cam kết xây dựng nền tảng chia sẻ tài nguyên để mọi nhân viên CNTT có thể tìm thấy thế giới tuyệt vời của bạn tại đây.
Bài viết trên blog CFSDN này cung cấp những giải thích chi tiết về việc sử dụng pg_stat_replication trong pssql, được tác giả sưu tầm và biên soạn. Nếu bạn quan tâm đến bài viết này thì nhớ like nhé.
pg_stat_replication là chế độ xem chủ yếu được sử dụng để giám sát thiết lập dựa trên luồng. Bạn nên chú ý đến chế độ xem có tên pg_stat_replication trên hệ thống của mình. (Lưu ý: Phiên bản hiện tại là pg 10.0, các phiên bản dưới 10.0, tên trường sẽ khác) Chế độ xem này chứa thông tin sau:
\d pg_stat_replication 。

Ý nghĩa của từng mã trường:
• pid Điều này thể hiện ID tiến trình của tiến trình wal_sender chịu trách nhiệm về các kết nối truyền trực tuyến. Nếu bạn kiểm tra bảng quy trình trên hệ điều hành của mình, bạn sẽ tìm thấy quy trình PostgreSQL có số đó.
• usesysid Mỗi người dùng nội bộ có một số duy nhất. Hệ thống hoạt động giống như UNIX. usesysid là mã định danh duy nhất (PostgreSQL) cho người dùng kết nối với hệ thống.
• usename (không phải tên người dùng, lưu ý r còn thiếu) lưu trữ tên của usesysid được liên kết với người dùng. Đây là những gì khách hàng đưa vào chuỗi kết nối.
• application_name Đây là cài đặt thông thường cho việc sao chép đồng bộ. Nó có thể được chuyển đến chủ thông qua chuỗi kết nối.
• client_addr Điều này cho bạn biết kết nối phát trực tuyến đến từ đâu. Nó chứa địa chỉ IP của khách hàng.
• client_hostname Ngoài IP của khách hàng, bạn cũng có thể thực hiện việc này để xác định khách hàng bằng tên máy chủ của nó. Bạn có thể kích hoạt tra cứu ngược DNS thông qua log_hostname trong postgresql.conf trên bản gốc.
• client_port Đây là số cổng TPC được máy khách sử dụng để liên lạc với WALsender. -1 sẽ được hiển thị nếu không sử dụng ổ cắm UNIX cục bộ.
• backend_start Nó cho chúng ta biết khi nào Slave tạo kết nối trực tuyến.
• trạng thái Cột này cho chúng ta biết trạng thái kết nối của dữ liệu. Nếu mọi thứ diễn ra theo đúng kế hoạch, nó sẽ chứa thông tin về luồng.
• đã gửi_lsn Điều này thể hiện vị trí của nhật ký giao dịch cuối cùng được gửi tới kết nối.
• write_lsn Đây là vị trí nhật ký giao dịch cuối cùng được ghi vào đĩa hệ thống dự phòng.
• tuôn ra_lsn Đây là vị trí cuối cùng được chuyển sang hệ thống dự phòng. (Ở đây lưu ý sự khác biệt giữa ghi và làm mới. Viết không có nghĩa là làm mới.) .
• replay_lsn Đây là vị trí nhật ký giao dịch cuối cùng được phát lại trên Slave.
• Trường sync_priority có liên quan duy nhất đến việc sao chép đồng bộ. Mỗi bản sao đồng bộ sẽ chọn mức độ ưu tiên—sync_priority—và sẽ cho bạn biết mức độ ưu tiên nào đã được chọn.
• sync_state Cuối cùng bạn sẽ thấy trạng thái của Slave. Trạng thái này có thể được.
không đồng bộ, đồng bộ hóa hoặc tiềm năng. Khi có một nô lệ đồng bộ hóa có mức độ ưu tiên cao hơn, PostgreSQL sẽ đánh dấu nô lệ đó là tiềm năng.
Mỗi bản ghi trong chế độ xem hệ thống này chỉ đại diện cho một nô lệ. Do đó, bạn có thể xem ai được kết nối và thực hiện nhiệm vụ gì. pg_stat_replication cũng là một cách tốt để kiểm tra xem nô lệ có được kết nối hay không.
Như đã đề cập ở trên, pid đại diện cho ID tiến trình của tiến trình wal_sender chịu trách nhiệm truyền phát các kết nối. Chúng ta có thể kiểm tra trạng thái của tiến trình này thông qua lệnh ps trên máy.
ps -aux|grep 8225 。

Trên Linux, chúng ta có thể thấy rằng tiến trình này không chỉ có vai trò riêng (trong trường hợp này là wal_sender) mà còn mang tên của người dùng cuối và thông tin kết nối mạng liên quan. Trong hình trên, chúng ta có thể thấy ai đó đã kết nối với master từ 192.168.47.127 (tương ứng với trường client_addr của pg_stat_replication) thông qua cổng 51519 (tương ứng với trường client_port của pg_stat_replication).
thưởng:
Ở trên chúng tôi đã đề cập rằng replay_lsn là vị trí nhật ký giao dịch cuối cùng được phát lại trên nô lệ.
Chức năng của hàm pg_current_wal_lsn() là lấy vị trí ghi của nhật ký wal hiện tại.
Chức năng của hàm pg_wal_lsn_diff() là tính toán sự khác biệt giữa hai bản ghi wal.
Vì vậy, chúng ta có thể đạt được độ trễ sao chép của thư viện nô lệ theo kiến trúc có tính sẵn sàng cao thông qua phương pháp sau:
?
1
2
3
4
5
6
7
8
9
|
LỰA CHỌN
pg_wal_lsn_diff(A .c1, replay_lsn) /(1024 * 1024)
BẰNG
độ trễ_MB_slave
TỪ
pg_stat_replication,
pg_current_wal_lsn()
BẰNG
A(c1)
Ở ĐÂU
địa chỉ khách hàng=
'%S'
Và
tên_ứng_dụng =
'%S'
ĐẶT HÀNG
QUA
độ trễ_MB_slave
GIỚI HẠN 1;
|
Lưu ý: PostgreSQL pg_stat_replication sync_state giới thiệu .
Sau khi giới thiệu tính năng sao chép đồng bộ trong PostgreSQL 9.2, cột sync_state của pg_stat_replication có 3 trạng thái.
đồng bộ 。
không đồng bộ 。
tiềm năng .
Tương ứng là chế độ chờ đồng bộ, chế độ chờ không đồng bộ và có thể nâng cấp lên chế độ chờ đồng bộ.
Trạng thái đến từ hàm sau: pg_stat_get_wal_senders.
[Bài kiểm tra] .
môi trường
1 chính, 3 dự phòng.
Cấu hình đầu tiên:
。
cấu hình chính.
?
1
2
|
postgresql.conf
tên_chờ_đồng_bộ =
'kiểm tra1,kiểm tra2,kiểm tra3'
|
cấu hình chờ1.
?
1
|
thông tin_conn_chính =
'application_name=test1 host=127.0.0.1 port=1999 user=postgres keepalives_idle=60'
|
cấu hình chờ2.
?
1
|
thông tin_conn_chính =
'application_name=test2 host=127.0.0.1 port=1999 user=postgres keepalives_idle=60'
|
cấu hình chờ3.
?
1
|
thông tin_conn_chính =
'application_name=test3 host=127.0.0.1 port=1999 user=postgres keepalives_idle=60'
|
truy vấn chính.
?
1
2
3
4
5
6
7
|
digoal=#
lựa chọn
pid,tên_ứng_dụng,địa_chỉ_khách_hàng,trạng_thái_đồng_bộ
từ
pg_stat_replication;
pid | tên_ứng_dụng | địa_chỉ_khách_hàng | trạng_thái_đồng_bộ
6311 | kiểm tra1 | 127.0.0.1 | đồng bộ
6321 | test2 | 127.0.0.1 | tiềm năng
6391 | test3 | 127.0.0.1 | tiềm năng
(3
hàng
)
|
Nếu nút đồng bộ bị treo, theo thứ tự synchronous_standby_names, nút tiềm năng đầu tiên sẽ trở thành trạng thái đồng bộ hóa.
?
1
2
3
4
5
6
7
|
pg_ctl dừng -m nhanh -D /pgdata11999
digoal=#
lựa chọn
pid,tên_ứng_dụng,địa_chỉ_khách_hàng,trạng_thái_đồng_bộ
từ
pg_stat_replication;
pid | tên_ứng_dụng | địa_chỉ_khách_hàng | trạng_thái_đồng_bộ
6564 | test2 | 127.0.0.1 | đồng bộ
6568 | test3 | 127.0.0.1 | tiềm năng
(2
hàng
)
|
Khi test1 khởi động lại, nó sẽ chuyển sang trạng thái đồng bộ hóa.
?
1
2
3
4
5
6
7
8
9
|
pg93@db-172-16-3-33-> pg_ctl bắt đầu -D /pgdata11999
máy chủ đang khởi động
digoal=#
lựa chọn
pid,tên_ứng_dụng,địa_chỉ_khách_hàng,trạng_thái_đồng_bộ
từ
pg_stat_replication;
pid | tên_ứng_dụng | địa_chỉ_khách_hàng | trạng_thái_đồng_bộ
6564 | test2 | 127.0.0.1 | tiềm năng
6605 | kiểm tra1 | 127.0.0.1 | đồng bộ
6568 | test3 | 127.0.0.1 | tiềm năng
(3
hàng
)
|
Cấu hình thứ hai:
。
cấu hình chính.
?
1
|
tên_chờ_đồng_bộ =
'kiểm tra1, kiểm tra2'
|
Cấu hình của chế độ chờ1 không thay đổi.
Cấu hình Standby2 không thay đổi.
Cấu hình chờ3 vẫn không thay đổi.
truy vấn chính.
?
1
2
3
4
5
6
7
|
digoal=#
lựa chọn
pid,tên_ứng_dụng,địa_chỉ_khách_hàng,trạng_thái_đồng_bộ
từ
pg_stat_replication;
pid | tên_ứng_dụng | địa_chỉ_khách_hàng | trạng_thái_đồng_bộ
6470 | kiểm tra1 | 127.0.0.1 | đồng bộ
6472 | kiểm tra3 | 127.0.0.1 | không đồng bộ
6474 | test2 | 127.0.0.1 | tiềm năng
(3
hàng
)
|
test3 trở nên không đồng bộ vì test3 không được định cấu hình trong synchronous_standby_names của chính.
Cấu hình thứ ba:
。
cấu hình chính.
synchronize_standby_names = 'test1' 。
Cấu hình của chế độ chờ1 không thay đổi.
Cấu hình Standby2 không thay đổi.
Cấu hình chờ3 vẫn không thay đổi.
truy vấn chính.
?
1
2
3
4
5
6
7
|
digoal=#
lựa chọn
pid,tên_ứng_dụng,địa_chỉ_khách_hàng,trạng_thái_đồng_bộ
từ
pg_stat_replication;
pid | tên_ứng_dụng | địa_chỉ_khách_hàng | trạng_thái_đồng_bộ
6519 | kiểm tra2 | 127.0.0.1 | không đồng bộ
6521 | kiểm tra3 | 127.0.0.1 | không đồng bộ
6523 | kiểm tra1 | 127.0.0.1 | đồng bộ
(3
hàng
)
|
test2 và test3 đã trở nên không đồng bộ. Bởi vì test2 và test3 không được định cấu hình trong synchronous_standby_names của chính.
1. src/backend/replication/walsender.c。
?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
|
/*
*
Trả lại
hoạt động
của
đấu thầu con lăn, bao gồm cả pids
Và
vị trí xlog đã được gửi
ĐẾN
* máy chủ dự phòng.
*/
Dữ liệu
pg_stat_get_wal_senders(PG_FUNCTION_ARGS)
{
...nhẹ nhàng
/*
* Phiên bản dễ hiểu hơn
của
trạng thái chờ. Điều này
là
hoàn toàn
* thông tin,
không
khác biệt
từ
sự ưu tiên.
*/
nếu (sync_priority[i] == 0)
giá trị
[7] = CStringGetTextData(
"không đồng bộ"
);
khác
nếu (i == sync_standby)
giá trị
[7] = CStringGetTextData(
"đồng bộ"
);
khác
giá trị
[7] = CStringGetTextData(
"tiềm năng"
);
...nhẹ nhàng
|
Trên đây là kinh nghiệm cá nhân của mình, hi vọng có thể cho các bạn tham khảo và mong các bạn có thể ủng hộ mình. Nếu có sai sót hoặc thiếu sót gì xin vui lòng chỉ giáo cho tôi.
Liên kết gốc: https://blog.csdn.net/qq_35462323/article/details/101351387.
Cuối cùng, bài viết này về cách sử dụng chi tiết pg_stat_replication trong pssql kết thúc tại đây. Nếu bạn muốn biết thêm về cách sử dụng chi tiết pg_stat_replication trong pssql, vui lòng tìm kiếm bài viết CFSDN hoặc tiếp tục duyệt qua các bài viết liên quan. blog tương lai! .
Tôi là một lập trình viên xuất sắc, rất giỏi!