>  기사  >  데이터 베이스  >  pt-heartbeat에 대한 예제 코드(percona 툴킷)

pt-heartbeat에 대한 예제 코드(percona 툴킷)

零下一度
零下一度원래의
2017-06-25 10:00:54993검색
pt-heartbeat는 마스터-슬레이브 대기 시간을 모니터링하는 데 사용되는 percona 도구입니다. 대부분의 MySQL 아키텍처는 여전히 MHA, MMM, keepalived 및 기타 솔루션과 같은 마스터-슬레이브 복제를 기반으로 합니다. 마스터-슬레이브 환경에서는 마스터-슬레이브 지연 문제가 매우 우려됩니다. 일반적으로 슬레이브 라이브러리에서 다음 명령문을 실행합니다.
mysql> show slave status\G*************************** 1. row ***************************Slave_IO_State: Waiting for master to send event
Master_Host: 172.16.16.35Master_User: root
Master_Port: 3306Connect_Retry: 60Master_Log_File: mysql-bin.000016Read_Master_Log_Pos: 299786938Relay_Log_File: mxqmongodb2-relay-bin.000032Relay_Log_Pos: 299787151Relay_Master_Log_File: mysql-bin.000016Slave_IO_Running: Yes
Slave_SQL_Running: Yes
Replicate_Do_DB:
Replicate_Ignore_DB:
Replicate_Do_Table:
Replicate_Ignore_Table:
Replicate_Wild_Do_Table:
Replicate_Wild_Ignore_Table:
Last_Errno: 0Last_Error:
Skip_Counter: 0Exec_Master_Log_Pos: 299786938Relay_Log_Space: 299787451Until_Condition: None
Until_Log_File:
Until_Log_Pos: 0Master_SSL_Allowed: No
Master_SSL_CA_File:
Master_SSL_CA_Path:
Master_SSL_Cert:
Master_SSL_Cipher:
Master_SSL_Key:
Seconds_Behind_Master: 0Master_SSL_Verify_Server_Cert: No
Last_IO_Errno: 0Last_IO_Error:
Last_SQL_Errno: 0Last_SQL_Error:
Replicate_Ignore_Server_Ids:
Master_Server_Id: 353306Master_UUID: 806ede0c-357e-11e7-9719-00505693235d
Master_Info_File: mysql.slave_master_info
SQL_Delay: 0SQL_Remaining_Delay: NULL
Slave_SQL_Running_State: Slave has read all relay log; waiting for more updates
Master_Retry_Count: 86400Master_Bind:
Last_IO_Error_Timestamp:
Last_SQL_Error_Timestamp:
Master_SSL_Crl:
Master_SSL_Crlpath:
Retrieved_Gtid_Set: 806ede0c-357e-11e7-9719-00505693235d:666-330347Executed_Gtid_Set: 6a4ab82c-4029-11e7-86b0-00505693235d:1-3,
806ede0c-357e-11e7-9719-00505693235d:1-330347Auto_Position: 1Replicate_Rewrite_DB:
Channel_Name:
Master_TLS_Version:1 row in set (0.00 sec)

그러면 마스터의 상태를 명확하게 볼 수 있습니다. -slave. 일반적으로 마스터-슬레이브 지연에 오류가 있는지 확인하기 위해 다음 두 프로세스의 상태를 모니터링합니다.
Slave_IO_Running: Yes
Slave_SQL_Running: Yes
슬레이브 지연, 우리가 가장 많이 모니터링할 수 있는 것은 SMB(Seconds_Behind_Master)를 통해 모니터링하는 것이지만 이는 그다지 신뢰할 수 없습니다. 또는 Read_Master_Log_Pos-Exec_Master_Log_Pos 간의 차이를 모니터링하여 슬레이브 라이브러리에 지연이 있는지, 마스터 라이브러리에 특정 지연이 있는지 확인할 수 있습니다. 하지만 이것도 완벽하지는 않습니다. 먼저 SMB를 살펴보겠습니다. 이 매개변수는 어떻게 비교됩니까? SMB는 서버의 현재 타임스탬프와 바이너리 로그의 이벤트 타임스탬프를 비교하여 얻어지며 오탐이 발생할 수 있습니다. 예를 들어, 메인 라이브러리가 대규모 트랜잭션을 실행하는 경우 실행하는 데 시간이 오래 걸립니다. 슬레이브 라이브러리에서 이를 수신한 후 타임스탬프를 비교하여 지연되었음을 발견하면 SMB 값이 즉시 증가합니다. Read_Master_Log_Pos-Exec_Master_Log_Pos 값은 완전히 신뢰할 수 없습니다. 이제 pt-heartbeat가 이 문제를 해결하는 데 도움이 될 수 있습니다.
pt-heartbeat의 원리를 살펴보겠습니다.
pt-heartbeat는 마스터에 테이블을 생성하고, 특정 시간 빈도로 테이블의 필드를 업데이트하고, 현재 타임스탬프를 테이블에 기록한 다음 비교합니다. 마스터-슬레이브 지연은 슬레이브 라이브러리의 타임스탬프와 pt-heartbeat가 있는 시스템의 타임스탬프에 따라 결정됩니다.
실제로 여기에 문제가 있습니다. pt-heartbeat가 슬레이브 데이터베이스에 배포되면 마스터와 슬레이브 머신의 시간이 동기화되는지 확인해야 합니다. 이는 일반적으로 시스템이 매일 자동으로 시간을 조정함으로써 이루어집니다. . pt-heartbeat를 메인 라이브러리에 배포한다면 이런 문제는 없을 것입니다. 사실, 개인적으로 더 좋은 방법은 마스터-슬레이브 데이터베이스에서 이 테이블의 타임스탬프를 비교하여 지연이 더 안정적인지 확인하는 것이라고 생각합니다. 물론 이는 마스터-슬레이브 쿼리 문제도 고려해야 합니다.
기본 사용법을 살펴보겠습니다.
먼저 테이블 만들기:
[root@mxqmongodb2 bin]# ./pt-heartbeat --host=172.16.16.35 --port=3306 --user=root --password=123456 --database=test --update --create-table --daemonize

테이블 구조 살펴보기:
mysql> desc heartbeat;+-----------------------+---------------------+------+-----+---------+-------+
| Field | Type | Null | Key | Default | Extra |
+-----------------------+---------------------+------+-----+---------+-------+
| ts | varchar(26) | NO | | NULL | |
| server_id | int(10) unsigned | NO | PRI | NULL | |
| file | varchar(255) | YES | | NULL | |
| position | bigint(20) unsigned | YES | | NULL | |
| relay_master_log_file | varchar(255) | YES | | NULL | |
| exec_master_log_pos | bigint(20) unsigned | YES | | NULL | |
+-----------------------+---------------------+------+-----+---------+-------+6 rows in set (0.01 sec)
mysql> select * from heartbeat\G*************************** 1. row ***************************ts: 2017-06-23T09:27:49.001580server_id: 353306file: mysql-bin.000016position: 299837221relay_master_log_file: NULL
exec_master_log_pos: NULL1 row in set (0.00 sec)

세부 사항 . 업데이트 작업이 있습니다:
UPDATE `test`.`heartbeat` SET ts='2017-06-23T09:32:47.001330', file='mysql-bin.000016', position='29

실제로 다음 작업은 최신 데이터를 얻기 위해 하트비트 테이블을 지속적으로 업데이트하는 프로세스를 시작합니다.
[root@mxqmongodb2 bin]# ./pt-heartbeat --host=172.16.16.35 --port=3306 --user=root --password=123456 --database=test --update --daemonize

다음으로 지속적으로 새로 고쳐지는 모니터링 프로세스를 시작합니다.
[root@mxqmongodb2 bin]# ./pt-heartbeat -D test --monitor -h 172.16.16.34 -uroot -P3306 -p1234560.00s [ 0.00s, 0.00s, 0.00s ]0.00s [ 0.00s, 0.00s, 0.00s ]0.00s [ 0.00s, 0.00s, 0.00s ]0.00s [ 0.00s, 0.00s, 0.00s ]0.00s [ 0.00s, 0.00s, 0.00s ]

이제 스트레스 테스트를 시작하고 다시 관찰합니다. 보기:
[root@mxqmongodb2 tpcc-mysql]# ./tpcc_start -h127.0.0.1 -P3306 -d tpcc -u root -p123456 -w 10 -c 20 -r 10 -l 600

지연 관찰:
0.71s [ 0.68s, 0.16s, 0.05s ]1.71s [ 0.71s, 0.17s, 0.06s ]0.85s [ 0.72s, 0.17s, 0.06s ]0.93s [ 0.74s, 0.18s, 0.06s ]0.00s [ 0.74s, 0.18s, 0.06s ]0.82s [ 0.73s, 0.18s, 0.06s ]0.66s [ 0.75s, 0.18s, 0.06s ]0.00s [ 0.75s, 0.18s, 0.06s ]0.88s [ 0.74s, 0.18s, 0.06s ]1.00s [ 0.74s, 0.19s, 0.06s ]

지연 상황을 볼 수 있으며, 이러한 출력 결과를 파일로 리디렉션하여 마스터-슬레이브 지연을 모니터링할 수 있습니다. 또한 매우 효과적입니다.
이제 데이터베이스에서 sql_thread를 수동으로 중지합니다.
mysql> stop slave sql_thread;
Query OK, 0 rows affected (0.03 sec)

그런 다음 출력 결과를 확인합니다.
53.00s [ 23.85s, 6.77s, 4.20s ]54.00s [ 24.75s, 6.94s, 4.26s ]55.00s [ 25.67s, 7.12s, 4.32s ]56.00s [ 26.60s, 7.30s, 4.39s ]57.00s [ 27.55s, 7.48s, 4.45s ]58.00s [ 28.52s, 7.67s, 4.51s ]59.00s [ 29.50s, 7.86s, 4.58s ]60.00s [ 30.50s, 8.05s, 4.65s ]61.00s [ 31.50s, 8.23s, 4.71s ]62.00s [ 32.50s, 8.42s, 4.78s ]63.00s [ 33.50s, 8.61s, 4.85s ]64.00s [ 34.50s, 8.80s, 4.92s ]65.00s [ 35.50s, 8.98s, 5.00s ]

계속 증가하는 것으로 나타났으며 간격은 1초입니다. .벨. 이 sql_thread를 다시 시작하면 슬레이브 라이브러리가 메인 라이브러리를 빠르게 따라잡습니다.
또는 다음을 통해 모니터링할 수 있습니다.
[root@mxqmongodb2 bin]# ./pt-heartbeat -D test --check -h 172.16.16.34 -uroot -P3306 -p1234561.00[root@mxqmongodb2 bin]# ./pt-heartbeat -D test --check -h 172.16.16.34 -uroot -P3306 -p1234560.00

초 단위의 지연을 직접 반환하므로 더욱 안정적입니다. 이 값을 모니터링에 직접 사용할 수 있습니다.

위 내용은 pt-heartbeat에 대한 예제 코드(percona 툴킷)의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

성명:
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.