23 KiB
Predixy 구성 문서 설명
predixy 서비스를 정상적으로 실행하려면 구성 파일이 필수적이며 일반적인 predixy 서비스를 시작하려면 다음 명령을 실행하십시오.
$ predixy <config-file> [--ArgName = ArgValue] ...
predixy는 먼저 config-file 파일에서 구성 정보를 읽습니다. 지정된 명령 행 매개 변수가 있으면 구성 파일에 정의 된 해당 값을 명령 행 매개 변수의 값으로 겹쳐 씁니다.
구성 파일 형식 설명
구성 파일은 줄 단위가있는 텍스트 파일이며 각 줄은 다음 유형 중 하나입니다.
- 빈 줄 또는 주석
- 키 값
- 키 값 {}
규칙
- #으로 시작하는 내용은 주석 내용입니다.
- Include는 Value로 지정된 파일을 나타내는 특수 키이며, 절대 경로가 아닌 경우 상대 경로는 현재 파일이있는 경로입니다.
- 값은 비어있을 수 있습니다. 값 자체에 #, 큰 따옴표가 포함 된 경우 큰 따옴표로 묶어야하며 큰 따옴표는 백 슬래시로 이스케이프 처리됩니다 (예 : "A "# special # \ "value"
- 여러 줄이 동일한 키를 정의하면 마지막 줄이 이전 정의를 덮어 씁니다.
기본 구성 부분
Name
INFO 명령을 사용할 때 출력 될 predixy 서비스의 이름을 정의하십시오.
예:
Name PredixyUserInfo
Bind
predixy 서비스로 모니터링되는 주소를 정의하고 ip : port 및 unix 소켓을 바인딩 하십시오.
예:
Bind 0.0.0.0:7617
Bind /tmp/predixy
지정하지 않은 경우 : 0.0.0.0:7617
WorkerThreads
작업자 스레드 수를 지정하십시오.
예:
WorkerThreads 4
지정하지 않은 경우 : 1
MaxMemory
단위 (G / M / K)로 지정할 수있는 predixy에 할당 할 수있는 최대 메모리를 지정하십시오. 0은 제한이 없음을 의미합니다
예:
MaxMemory 1024000
MaxMemory 1G
지정하지 않은 경우 : 0
ClientTimeout
클라이언트 시간 초과 시간을 초 단위로 지정합니다. 즉, 유휴 시간이이 시간을 초과하면 클라이언트가 클라이언트와의 연결을 끊습니다.이 값이 0이면 기능이 비활성화되고 클라이언트와의 연결이 끊어지지 않습니다
예:
ClientTimeout 300
지정하지 않은 경우 : 0
BufSize
IO 버퍼 크기, predixy는 내부적으로 클라이언트 명령 및 서버 응답을 수신하기 위해 BufSize 크기의 버퍼를 할당하고 사본이없는 서버 나 클라이언트로 전달합니다. 값이 너무 작 으면 성능에 영향을 미치며 너무 크면 공간을 낭비 할 수 있고, 성능에 이점이 없습니다. 그러나 실제 응용 프로그램 시나리오에 따라 얼마나 적절한 지 파악해야 합니다. predixy는 기본적으로 값을 4096으로 설정합니다.
예:
BufSize 8192
지정하지 않은 경우 : 4096
로그
로그 파일 이름을 지정하십시오.
예:
로그 /var/log/predixy.log
지정하지 않으면 predixy의 동작은 표준 출력에 로그를 작성하는 것입니다.
LogRotate
자동 로그 세그먼트 화 옵션은 시간, 파일 크기 또는 둘 다로 지정할 수 있습니다. 시간별 지정은 다음 형식을 지원합니다.
- 1d 1일
- nh 1 <= n <= 24 n시간
- nm 1 <= n <= 1440 n분
파일 크기로 지정된 G 및 M 단위 지원
예:
LogRotate 1d # 하루에 한 번 분할
LogRotate 1h # 시간마다 한 번씩 분할
LogRotate 10m # 10 분마다 한 번씩 분할
LogRotate 2G # 로그 파일은 2G마다 나눔
LogRotate 200M # 로그 파일은 200M마다 분할
LogRotate 1d 2G #Split 하루에 한 번, 로그 파일이 2G에 도달하면 분할
정의되지 않은 경우 기능 비활성화
LogXXXSample
로그 출력 샘플링 속도는이 레벨의 로그가 로그에 출력되는 횟수를 나타내며, 0이면이 레벨의 로그가 출력되지 않음을 의미합니다. 지원되는 수준은 다음과 같습니다.
- LogVerbSample
- LogDebugSample
- LogInfoSample
- LogNoticeSample
- LogWarnSample
- LogErrorSample
예:
LogVerbSample 0
LogDebugSample 0
LogInfoSample 10000
LogNoticeSample 1
LogWarnSample 1
LogErrorSample 1
이 매개 변수는 config set 명령을 통해 redis와 같이 온라인으로 수정할 수 있습니다.
구성 설정 LogDebugSample 1
predixy에서 config 명령을 실행하려면 관리 권한이 필요합니다
액세스 제어 구성 섹션
predixy는 redis에서 AUTH 명령의 기능을 확장하고 여러 인증 비밀번호의 정의를 지원하며 각 비밀번호에 대한 권한을 지정할 수 있습니다 (권한은 읽기 권한, 쓰기 권한 및 관리 권한을 포함합니다) 쓰기 권한은 읽기 권한을 포함하며 관리 권한은 쓰기 권한을 포함합니다. 각 암호가 읽고 쓸 수있는 키 공간을 지정할 수도 있습니다. 키 공간의 정의는 키에 특정 접두사가 있음을 의미합니다.
권한 제어의 정의 형식은 다음과 같습니다.
Authority {
Auth [password] {
Mode read|write|admin
[KeyPredix Predix...]
[ReadKeyPredix Predix...]
[WriteKeyPredix Predix...]
}...
}
Authority에서 여러 Auth를 정의 할 수 있으며 각 Auth는 비밀번호를 지정하며 각 Auth에 대한 권한 및 키 공간을 정의 할 수 있습니다.
매개 변수 설명 :
- 모드 : 지정해야하며 읽기, 쓰기, 관리 중 하나 일 수 있으며 각각 읽기, 쓰기 및 관리 권한을 나타냅니다.
- KeyPrefix : [옵션], 키 공간을 정의 할 수 있으며 여러 키 공간은 공백으로 구분됩니다.
- ReadKeyPrefix : [옵션], 읽을 수있는 키 공간을 정의 할 수 있으며 여러 키 공간은 공백으로 구분됩니다.
- WriteKeyPrefix : [옵션], 쓰기 가능한 키 공간을 정의 할 수 있으며 여러 키 공간은 공백으로 구분됩니다.
읽을 수있는 키 공간의 경우 ReadKeyPrefix가 정의되면 ReadKeyPrefix에 의해 결정되고 그렇지 않으면 KeyPrefix에 의해 결정됩니다. 두 가지가 없으면 제한이 없습니다. 쓰기 가능한 지안 공간 해석에서도 마찬가지입니다. 쓰기 권한이 있다는 것은 읽기 권한이 있음을 의미하지만 읽기 및 쓰기 키 공간은 완전히 독립적입니다. 즉, WriteKeyPrefix는 기본적으로 ReadKeyPrefix의 내용을 포함하지 않습니다.
예:
Authority {
Auth {
Mode read
KeyPrefix Info
}
Auth readonly {
Mode read
}
Auth modify {
Mode write
ReadPrefix User Stats
WritePrefix User
}
}
위의 예는 3 개의 인증 비밀번호를 정의합니다.
- 빈 암호. 암호가 비어 있으므로이 인증은 기본 인증이며 읽기 권한이 있습니다 .KeyPrefix가 지정되었으므로 최종 권한은 접두사가 Info 인 키만 읽을 수 있습니다.
- 읽기 전용 비밀번호,이 인증에는 읽기 권한이 있으며 키 공간 제한이 없으며 모든 키를 읽을 수 있습니다
- 비밀번호 수정,이 인증에는 쓰기 권한이 있으며 각각 읽을 수있는 키 공간 사용자와 통계를 정의하므로이 두 접두어로 키를 읽을 수 있으며 쓰기 가능한 키 공간은 사용자로 정의되므로 접두사 User로 쓸 수 있습니다. 키이지만 통계 접두사가있는 키는 쓸 수 없습니다
기본 사전 프록시 권한 제어는 다음과 같이 정의됩니다.
Authority {
Auth {
Mode write
}
Auth "#a complex password#" {
Mode admin
}
}
암호없이 모든 키를 읽고 쓸 수 있지만 관리 모드에는 암호 # 복잡한 암호 #가 필요합니다.
Redis 인스턴스 구성 섹션
predixy는 Redis를 사용하기 위해 Redis Sentinel 및 Redis Cluster를 지원하며이 두 가지 형식 중 하나만 구성에 나타날 수 있습니다.
Redis Sentinel 양식
정의 형식은 다음과 같습니다.
SentinelServerPool {
[Password xxx]
[Databases number]
Hash atol|crc16
[HashTag "xx"]
Distribution modula|random
[MasterReadPriority [0-100]]
[StaticSlaveReadPriority [0-100]]
[DynamicSlaveReadPriority [0-100]]
[RefreshInterval number[s|ms|us]]
[ServerTimeout number[s|ms|us]]
[ServerFailureLimit number]
[ServerRetryTimeout number[s|ms|us]]
[KeepAlive seconds]
Sentinels {
+ addr
...
}
Group xxx {
[+ addr]
...
}
}
매개 변수 설명 :
- 비밀번호 : redis 인스턴스에 연결하기위한 기본 비밀번호를 지정합니다. 지정하지 않으면 redis에 비밀번호가 필요하지 않습니다.
- 데이터베이스 : redis db 수를 지정하십시오 (지정하지 않은 경우 1 임).
- 해시 : 키 해시 방법을 지정합니다. 현재 atol 및 crc16 만 지원됩니다.
- HashTag : 지정되지 않은 경우 해시 태그 지정 {}
- 분포 : 키 분포 방법을 지정합니다. 현재 모듈과 랜덤 만 지원됩니다.
- MasterReadPriority : Redis 마스터 노드에서 읽기 요청을 실행하는 우선 순위 인 읽기 및 쓰기 분리 기능, 0 인 경우 redis 마스터를 읽을 수 없습니다 (지정하지 않은 경우 50).
- StaticSlaveReadPriority : 정적 redis 슬레이브 노드의 읽기 요청 우선 순위 인 읽기 및 쓰기 분리 기능 소위 정적 노드는 이 구성 파일에 나열된 redis 노드를 나타내며, 지정하지 않으면 0입니다.
- DynamicSlaveReadPolicy : 위 함수 참조. 소위 동적 노드는이 구성 파일에 나열되지 않지만 redis sentinel을 통해 동적으로 감지되는 노드를 나타냅니다.
- RefreshInterval : predixy는 최신 클러스터 정보를 얻기 위해 정기적으로 redis sentinel을 요청합니다. 이 매개 변수는 새로 고침 간격을 초 단위로 지정하거나 지정하지 않으면 1 초를 지정합니다.
- ServerTimeout : predixy에서 가장 긴 요청 처리 / 대기 시간이 시간 후에 redis가 응답하지 않으면 predixy는 redis와의 연결을 닫고 클라이언트에게 오류 응답을 제공합니다. 이 옵션은 작동하지 않습니다. 0이면이 기능이 비활성화됩니다. 즉, redis가 반환되지 않으면 영원히 기다립니다. 지정하지 않으면 0이됩니다.
- ServerFailureLimit : 오류가 유효하지 않은 것으로 표시되기 전에 redis 인스턴스가 몇 번 나타나거나 지정되지 않은 경우 10
- ServerRetryTimeout : Redis 인스턴스가 정상으로 돌아 왔는지 확인하지 못한 후 (지정하지 않은 경우 1 초)
- KeepAlive : predixy와 redis 사이의 연결에 대한 tcp keepalive 시간, 0은 지정되지 않은 경우이 기능을 비활성화합니다. 0
- 센티넬 : 레디 스 센티넬 인스턴스의 주소 정의
- 그룹 : redis 그룹 정의 그룹 이름은 redis sentinel의 이름과 같아야하며 redis 주소는 그룹에 표시 될 수 있으며 목록은 위에서 언급 한 정적 노드입니다.
한 가지 예 :
SentinelServerPool {
Databases 16
Hash crc16
HashTag "{}"
Distribution modula
MasterReadPriority 60
StaticSlaveReadPriority 50
DynamicSlaveReadPriority 50
RefreshInterval 1
ServerTimeout 1
ServerFailureLimit 10
ServerRetryTimeout 1
KeepAlive 120
Sentinels {
+ 10.2.2.2:7500
+ 10.2.2.3:7500
+ 10.2.2.4:7500
}
Group shard001 {
}
Group shard002 {
}
}
이 Redis Sentinel 클러스터 정의는 3 개의 redis 센티넬 인스턴스, 즉 10.2.2.2:7500, 10.2.2.3:7500, 10.2.2.4:7500을 지정하고 shard001 및 shard002라는 두 그룹의 redis를 정의합니다.
정적 redis 노드가 지정되지 않았습니다. 모든 redis 인스턴스는 비밀번호 인증을 사용하지 않으며 모두 16 db입니다.
Predixy는 crc16을 사용하여 키의 해시 값을 계산 한 다음 모듈러스 방법 인 모듈러스를 통해 키를 shard001 또는 shard002에 배포합니다.
MasterReadPriority가 60 (DynamicSlaveReadPriority의 50보다 큼)이므로 읽기 요청은 redis 마스터 노드에 분배되고 RefreshInterval은 1이며, 1 초마다 클러스터 정보를 새로 고치기 위해 redis sentinel에 요청을 보냅니다.
redis 인스턴스가 10 회 실패한 후 redis 인스턴스는 유효하지 않은 것으로 표시되며 1 초마다 복원되는지 확인합니다.
Redis 클러스터 양식
정의 형식은 다음과 같습니다.
ClusterServerPool {
[Password xxx]
[MasterReadPriority [0-100]]
[StaticSlaveReadPriority [0-100]]
[DynamicSlaveReadPriority [0-100]]
[RefreshInterval seconds]
[ServerTimeout number[s|ms|us]]
[ServerFailureLimit number]
[ServerRetryTimeout number[s|ms|us]]
[KeepAlive seconds]
Servers {
+ addr
...
}
}
매개 변수 설명 :
- 선택적 파라미터는 Redis Sentinel 모드에서 동일한 이름과 동일한 의미를 갖습니다.
- 서버 : 여기에 redis 클러스터에 redis 인스턴스를 나열합니다. 여기에 나열된 노드는 정적 노드이고, 나열되지 않았지만 클러스터 정보를 통해 찾은 인스턴스는 동적 노드입니다.
한 가지 예 :
ClusterServerPool {
MasterReadPriority 0
StaticSlaveReadPriority 50
DynamicSlaveReadPriority 50
RefreshInterval 1
ServerTimeout 1
ServerFailureLimit 10
ServerRetryTimeout 1
KeepAlive 120
Servers {
+ 192.168.2.107:2211
+ 192.168.2.107:2212
}
}
정의는 클러스터 정보가 redis 인스턴스 192.168.2.107:2211 및 192.168.2.107:2212를 통해 발견되고 MasterReadPriority가 0으로 지정되도록 지정합니다. 즉, 읽기 요청을 redis 마스터 노드에 분배하지 않습니다.
다중 데이터 센터 구성 섹션
Predixy는 여러 데이터 센터를 지원하며, 데이터 센터에 redis를 배포하면 데이터 센터의 redis 인스턴스에 읽기 요청을 분산시켜 크로스 데이터 센터 액세스를 피할 수 있습니다. 실제로 데이터 센터 개념을 적용하면 실제로 여러 데이터 센터가없는 경우에도이 구성을 사용하여 노드의 읽기 요청을 공유해야 할 때 요청 분배를 제어 할 수 있습니다. 예를 들어 현재 랙은 데이터 센터로 간주 될 수 있습니다.
다중 데이터 센터 구성 형식 :
LocalDC name
DataCenter {
DC name {
AddrPrefix {
+ IpPrefix
...
}
ReadPolicy {
name priority [weight]
other priority [weight]
}
}
...
}
매개 변수 설명 :
- LocalDC : predixy가 현재 위치한 데이터 센터를 지정합니다
- DC : 데이터 센터 정의
- AddrPrefix : 데이터 센터에 포함 된 IP 접두사 정의
- ReadPolicy :이 데이터 센터에서 다른 (자신의 데이터 센터 포함) 데이터 센터를 읽는 우선 순위 및 가중치 정의
데이터 센터 기능을 사용하지 않으면 LocalDC 및 DataCenter 정의를 제공하지 않습니다.
여러 데이터 센터 구성의 예 :
DataCenter {
DC bj {
AddrPrefix {
+ 10.1
}
ReadPolicy {
bj 50
sh 20
sz 10
}
}
DC sh {
AddrPrefix {
+ 10.2
}
ReadPolicy {
sh 50
bj 20 5
sz 20 2
}
}
DC sz {
AddrPrefix {
+ 10.3
}
ReadPolicy {
sz 50
sh 20
bj 10
}
}
}
이 예는 3 개의 데이터 센터, 즉 bj, sh 및 sz를 정의합니다. bj 데이터 센터에는 ip 접두사가 10.1 인 redis 인스턴스가 포함되므로 predixy가 redis sentinel 또는 redis 클러스터를 통해 노드를 발견하면 redis 인스턴스의 주소 접 두부가 10.1 인 경우 인스턴스가 bj 데이터 센터에있는 것으로 간주됩니다. predixy는 자체 데이터 센터에 따라 해당 읽기 요청 전략을 선택합니다.
predixy가 bj 데이터 센터에 있다고 가정 할 때 bj를 읽는 bj의 우선 순위는 50이고, 다른 두 개보다 높습니다. 따라서 predixy는 읽기 조작을 위해 bj 데이터 센터에 우선 순위를 부여합니다 .bj 데이터 센터에 사용 가능한 redis 노드가없는 경우 sh 데이터 센터가됩니다. sh에 노드가 없으면 sz가 선택됩니다.
predixy가 sh 데이터 센터에 있다고 가정하고 predixy는 sh 데이터 센터를 선호합니다. sh 데이터 센터에 사용 가능한 redis 인스턴스가 없으면 bj 및 sh의 우선 순위가 모두 20이므로 트래픽은 가중치 설정에 따라 할당됩니다 (여기서는 5 부). 요청은 bj 데이터 센터로 이동하고 2 개의 요청은 sz로 이동합니다.
클러스터를 정의 할 때 마스터 및 슬레이브 노드의 읽기 우선 순위를 정의 할 수 있다고 말했지만 데이터 센터에는 읽기 우선 순위의 개념이 있으므로 어떻게 작동합니까? 원칙은 데이터 센터 기능을 활성화 한 후 데이터 센터 읽기 전략에 따라 데이터 센터를 선택한 다음 클러스터의 마스터-슬레이브 읽기 우선 순위를 사용하여 데이터 센터에서 최종 redis 인스턴스를 선택하는 것입니다.
지연 모니터링 구성 섹션
Predixy는 predixy가 요청을 처리하는 시간을 기록 할 수있는 강력한 지연 모니터링 기능을 제공하며 predixy의 경우 실제로 redis를 요청하는 시간입니다.
지연 모니터링의 정의 형식은 다음과 같습니다.
LatencyMonitor name {
Commands {
+ cmd
[- cmd]
...
}
TimeSpan {
+ TimeElapsedUS
...
}
}
매개 변수 설명 :
- LatencyMonitor : 대기 시간 모니터 정의
- 명령 : 지연 모니터링에 의해 기록되는 redis 명령을 지정하고, + cmd는 명령을 모니터링하는 것을 의미하고, -cmd는 명령을 모니터링하지 않는 것을 의미하며, cmd가 모두 인 경우 모든 명령을 의미합니다.
- TimeSpan : 지연 버킷을 정의합니다 (마이크로 초). 이는 엄격하게 증가하는 시퀀스 여야합니다.
여러 LatencyMonitor를 정의하여 다른 명령을 모니터링 할 수 있습니다.
지연 모니터링 구성 예 :
LatencyMonitor all {
Commands {
+ all
- blpop
- brpop
- brpoplpush
}
TimeSpan {
+ 1000
+ 1200
+ 1400
+ 1600
+ 1700
+ 1800
+ 2000
+ 2500
+ 3000
+ 3500
+ 4000
+ 4500
+ 5000
+ 6000
+ 7000
+ 8000
+ 9000
+ 10000
}
}
LatencyMonitor get {
Commands {
+ get
}
TimeSpan {
+ 100
+ 200
+ 300
+ 400
+ 500
+ 600
+ 700
+ 800
+ 900
+ 1000
}
}
LatencyMonitor set {
Commands {
+ set
+ setnx
+ setex
}
TimeSpan {
+ 100
+ 200
+ 300
+ 400
+ 500
+ 600
+ 700
+ 800
+ 900
+ 1000
}
}
위의 예제는 세 가지 지연 모니터를 정의합니다.이 모니터는 blpop / brpop / brpoplpush를 제외한 모든 명령을 모니터하고, get 모니터는 명령을 가져오고, set 모니터는 set / setnx / setex 명령을 모니터합니다. 여기에서 시간이 많이 소요되는 버킷의 정의가 모든 상황에 적용되는 것은 아니며 실제 사용시 실제 시간이 소요되는 조건을보다 정확하게 반영하도록 조정해야합니다.
INFO 명령을 통해 시간이 많이 걸리는 모니터링을 보려면 세 가지 방법이 있습니다.
모든 지연 정의의 전체 정보를 봅니다.
명령:
redis> INFO
이 시점에 표시되는 결과는 전체 지연 정보입니다.
단일 지연 정의 정보보기
명령:
redis> INFO Latency <name>
<name>이 지연 정의의 이름 인 경우, 결과는 정의의 전체 지연 정보와 서브 백엔드 Redis 인스턴스의 지연 정보를 표시합니다.
백엔드 Redis 인스턴스의 지연 정보보기 명령:
redis> INFO ServerLatency <serv> [name]
<serv>는 redis 인스턴스의 주소이고, [name]은 선택적 지연 정의 이름입니다. 이름을 생략하면 redis 인스턴스에 요청 된 모든 지연 정의 정보가 제공됩니다. 그렇지 않으면 이름 만 제공됩니다.
지연 정보 형식 설명, 다음은 지연 정의 all의 전체 정보 예입니다.
LatencyMonitorName : all
<= 100 3769836 91339 91.34 %
<= 200 777185 5900 97.24 %
<= 300 287565 1181 98.42 %
<= 400 1858913798.96 %
<= 500 132773 299 99.26 %
<= 600 85050156 99.41 %
<= 700 85455133 99.54 %
<= 800 40088 54 99.60 %
<= 1000 67788 77 99.68 %
> 1000 601012325 100.00 %
T 60 6032643 100001
- 첫 번째 열이 <= 인 경우 두 번째 열은 소요 시간보다 작거나 같음을 의미하고, 세 번째 열은이 범위에서 소비하는 시간의 합을 의미하고, 네 번째 열은 요청 수를 의미하고, 다섯 번째 열은 총 요청에서 누적 된 요청의 백분율을 의미합니다.
- 첫 번째 열은>이고 두 번째 열은 시간이 오래 걸리는 요청을 나타내며 마지막 두 열은 위와 동일한 의미를 갖습니다. 이 행은 최대 한 번만 나타납니다.이 행에 요청이 너무 많으면 지연 정의로 지정된 시간이 많이 소요되는 버킷이 적합하지 않은 것입니다.
- 첫 번째 열은 T이며,이 행은 한 번만 나타나며 항상 끝에 나타납니다. 두 번째 열은 모든 요청의 평균 시간을 나타내고, 세 번째 열은 총 요청 시간의 합계를 나타내고, 네 번째 열은 총 요청 수를 나타냅니다.