Redis 클러스터는 Sentinel이 필요합니까??
Gitlab Enterprise Edition을 사용하면 Omnibus 패키지를 사용하여 Sentinel 데몬으로 여러 기계를 설정할 수 있습니다.
Redis Sentinel 및 Fix-Slave-Config 문제 : Redis Node가 두 마스터의 슬레이브로 설정되고 있어야합니다.
나는 12 개의 센티넬과 500 개가 넘는 파편으로 구성된 대형 Redis 함대에서 장애 조치를 위해 Redis Sentinel을 사용하여 각각 1 개의 마스터와 1 개의 노예가 있습니다. 그러나 Sentinels에 의해 특정 Redis 노드가 반복적으로 발행되는 이상한 문제가 발생했습니다. 이로 인해 일부 노예는 올바른 마스터와 다른 잘못된 마스터를 전환했습니다. 나는이 문제가 더 작은 규모로 눈치 채지 못했습니다. 이 문제를 해결하거나 추가로 디버깅하는 방법에 대한 조언을 찾고 있습니다.
두 가지 구체적인 문제를 관찰했습니다
a) 앞에서 언급 한 +Fix-Slave-Config 메시지.
b) 센티넬.conf 파일은 특정 노예에게는 두 명의 주인이 있지만 하나만 있어야하지만.
처음에 함대에는 특정 슬레이브 노드 xxx가 있습니다.트리플 엑스.트리플 엑스.177 마스터 xxx.트리플 엑스.트리플 엑스.244 (샤드 형성 188). 그러나 노드 중단이 없으면이 슬레이브의 마스터가 XXX로 전환됩니다.트리플 엑스.트리플 엑스.96 (Shard 188의 마스터) 후 올바른 마스터로 돌아가서이주기는 반복됩니다. 나는 슬레이브와 마스터 노드에 액세스하고 Redis-Cli Info 명령을 사용하여 이것을 확인했습니다. 모든 Redis 노드는 올바른 구성으로 시작되며 모든 Sentinel 노드에는 Sentinel에 올바른 구성이 있습니다.conf 파일. 각 Sentinel을 쿼리 할 때, 각 슬레이브 마스터 변경 후에는 모두 동일한 마스터 목록을 가지고 있습니다.
12 개의 센티넬의 로그 파일을 확인하면 매 순간 +수정 슬레이브-콘피드 메시지가 전송되는 것을 알 수 있습니다. 여기 몇 가지 예가 있어요
Sentinel #8 : 20096 : x 22 10 월 01:41:49.793 * +Fix-Slave-Config 슬레이브 xxx.트리플 엑스.트리플 엑스.177 : 6379 xxx.트리플 엑스.트리플 엑스.177 6379 @ Shard-188 xxx.트리플 엑스.트리플 엑스.96 6379
Sentinel #1 : 9832 : x 10 월 22 일 01:42:50.795 * +Fix-Slave-Config 슬레이브 xxx.트리플 엑스.트리플 엑스.177 : 6379 xxx.트리플 엑스.트리플 엑스.177 6379 @ Shard-172 xxx.트리플 엑스.트리플 엑스.244 6379
Sentinel #6 : 20528 : x 10 월 22 일 01:43:52.458 * +Fix-Slave-Config 슬레이브 xxx.트리플 엑스.트리플 엑스.177 : 6379 xxx.트리플 엑스.트리플 엑스.177 6379 @ Shard-188 xxx.트리플 엑스.트리플 엑스.96 6379
Sentinel #10 : 20650 : x 10 월 22 일 01:43:52.464 * +Fix-Slave-Config 슬레이브 xxx.트리플 엑스.트리플 엑스.177 : 6379 xxx.트리플 엑스.트리플 엑스.177 6379 @ Shard-188 xxx.트리플 엑스.트리플 엑스.96 6379
Sentinel #2 : 20838 : x 10 월 22 일 01:44:53.489 * +Fix-Slave-Config 슬레이브 xxx.트리플 엑스.트리플 엑스.177 : 6379 xxx.트리플 엑스.트리플 엑스.177 6379 @ Shard-172 xxx.트리플 엑스.트리플 엑스.244 6379
Sentinel Masters Command를 실행할 때 이상한 것을 발견했습니다. 사례 1에서 Shard-188에는 하나가 아닌 두 개의 노예가 있습니다. xxx 일 때 동일한 패턴이 관찰됩니다.트리플 엑스.트리플 엑스.177은 Shard-172 또는 Shard-182 아래로 떨어집니다
사례 1) 마스터는 xxx입니다.트리플 엑스.트리플 엑스.244 및 XXX.트리플 엑스.트리플 엑스.177은 노예 중 하나입니다
183) 1) “이름”
2) “Shard-172”
3) “IP”
4) “xxx.트리플 엑스.트리플 엑스.244 “
5) “포트”
6) “6379”
7) “runid”
8) “CA02DA1F0002A25A880E6765AED306B1857AE2F7”
9) “깃발”
10) “마스터”
11) “보류 및 명령”
12) “0”
13) “마지막 핑 센트”
14) “0”
15) “최후의 핑-핑-핑”
16) “14”
17) “마지막 핑-레프리”
18) “14”
19) “밀리 스코틀랜드 하향”
20) “30000”
21) “Info-Refresh”
22) “5636”
23) “역할보고”
24) “마스터”
25) “역할보고 시간”
26) “17154406”
27) “config-epoch”
28) “0”
29) “Num-Slaves”
30) “1”
31) “Num-Other-Sentinels”
32) “12”
33) “정족수”
34) “7”
35) “실패 시간”
36) “60000”
37) “병렬-동기화”
38) “1”
72) 1) “이름”
2) “Shard-188”
3) “IP”
4) “xxx.트리플 엑스.트리플 엑스.96 “
5) “포트”
6) “6379”
7) “runid”
8) “95CD3A457EF71FC91FF1A1C5A6D5D4496B266167” “
9) “깃발”
10) “마스터”
11) “보류 및 명령”
12) “0”
13) “마지막 핑 센트”
14) “0”
15) “최후의 핑-핑-핑”
16) “927”
17) “마지막 핑-레프리”
18) “927”
19) “밀리 스코틀랜드 하향”
20) “30000”
21) “Info-Refresh”
22) “5333”
23) “역할보고”
24) “마스터”
25) “역할보고 시간”
26) “17154312”
27) “config-epoch”
28) “0”
29) “Num-Slaves”
30) “2”
31) “Num-Other-Sentinels”
32) “12”
33) “정족수”
34) “7”
35) “실패 시간”
36) “60000”
37) “병렬-동기화”
38) “1”
사례 2) 마스터는 xxx입니다.트리플 엑스.트리플 엑스.96 및 XXX.트리플 엑스.트리플 엑스.177은 노예 중 하나입니다
79) 1) “이름”
2) “Shard-172”
3) “IP”
4) “xxx.트리플 엑스.트리플 엑스.244 “
5) “포트”
6) “6379”
7) “runid”
8) “CA02DA1F0002A25A880E6765AED306B1857AE2F7”
9) “깃발”
10) “마스터”
11) “보류 및 명령”
12) “0”
13) “마지막 핑 센트”
14) “0”
15) “최후의 핑-핑-핑”
16) “1012”
17) “마지막 핑-레프리”
18) “1012”
19) “밀리 스코틀랜드 하향”
20) “30000”
21) “Info-Refresh”
22) “1261”
23) “역할보고”
24) “마스터”
25) “역할보고 시간”
26) “17059720”
27) “config-epoch”
28) “0”
29) “Num-Slaves”
30) “1”
31) “Num-Other-Sentinels”
32) “12”
33) “정족수”
34) “7”
35) “실패 시간”
36) “60000”
37) “병렬-동기화”
38) “1”
273) 1) “이름”
2) “Shard-188”
3) “IP”
4) “xxx.트리플 엑스.트리플 엑스.96 “
5) “포트”
6) “6379”
7) “runid”
8) “95CD3A457EF71FC91FF1A1C5A6D5D4496B266167” “
9) “깃발”
10) “마스터”
11) “보류 및 명령”
12) “0”
13) “마지막 핑 센트”
14) “0”
15) “최후의 핑-핑-핑”
16) “886”
17) “마지막 핑-레프리”
18) “886”
19) “밀리 스코틀랜드 하향”
20) “30000”
21) “Info-Refresh”
22) “5333”
23) “역할보고”
24) “마스터”
25) “역할보고 시간”
26) “17154312”
27) “config-epoch”
28) “0”
29) “Num-Slaves”
30) “2”
31) “Num-Other-Sentinels”
32) “12”
33) “정족수”
34) “7”
35) “실패 시간”
36) “60000”
37) “병렬-동기화”
38) “1”
이것은 Redis Sentinel과 Fix-Slave-Config 문제에 대한 나의 문제에 대한 세부 사항입니다. 특정 노예는 두 명의 마스터의 노예로 설정되어있는 것 같습니다. 이 문제에 대한 해결책을 찾고 있으며 조언이나 제안에 감사드립니다.
Redis 클러스터는 Sentinel이 필요합니까?
Gitlab Enterprise Edition을 사용하면 Omnibus 패키지를 사용하여 Sentinel 데몬으로 여러 기계를 설정할 수 있습니다.
Redis Sentinel 및 Fix-Slave-Config 문제 : Redis Node가 두 마스터의 슬레이브로 설정되고 있어야합니다.
그림  адреса адреса · 뇨 뇌 аноним 익뿐자 для этой Â групп다는 ам람 킬리 eloter уреререр dее ни Dе ® ектронно й почты ее у у стников, чтоб 담요 увидеть ис сходное сооб щение.
나는 큰 Redis 함대에서 Failover에 Sentinel을 사용하려고 노력하고 있습니다 (12 개의 센티넬, 500 명 이상의 마스터 1 개, 노예 1 명). Sentinels가 특정 Redis 노드에 명령 +Fix-Slave-Config를 반복적으로 발행하는 매우 이상한 문제를 겪고 있으며 결과는 올바른 마스터와 다른 잘못된 마스터 사이를 전환하는 특정 노예입니다. 나는 이것이 더 작은 규모로 일어나는 것을 알지 못했습니다. 무엇을 수정하거나 추가 디버그 해야하는지에 대한 조언?
두 가지 구체적인 문제를 발견했습니다
a) 위에서 언급 한 바와 같이 +수정 슬레이브-콘피드 메시지.
b) 센티넬.conf는 두 명의 주인이있는 특정 노예를 보여줍니다 (하나만 있어야 함)
시작 상태의 함대에는 특정 슬레이브 노드 xxx가 있습니다.트리플 엑스.트리플 엑스.177 마스터 xxx.트리플 엑스.트리플 엑스.244. 노드 중단이 없으면 슬레이브 마스터가 XXX로 전환됩니다.트리플 엑스.트리플 엑스.96 (Shard 188의 마스터) 다음 뒤로 돌아온 다음. 이것은 슬레이브와 마스터 노드로의 sshing으로 확인하고 Redis-Cli 정보를 확인합니다. 모든 Redis 노드는 올바른 구성으로 시작되었습니다. 모든 Sentinel 노드는 Sentinel에 올바른 구성을 가졌습니다.콘크리트. 각 Sentinel에는이 각 노예가 변경 한 후 쿼리 할 때 각 Sentinel은 마스터 목록을 가지고 있습니다.
내 12 개의 센티넬에 걸쳐 다음이 기록됩니다. 1 분마다 A +Fix-Slave-Config 메시지가 전송됩니다
Sentinel #8 : 20096 : x 22 10 월 01:41:49.793 * +Fix-Slave-Config 슬레이브 xxx.트리플 엑스.트리플 엑스.177 : 6379 xxx.트리플 엑스.트리플 엑스.177 6379 @ Shard-188 xxx.트리플 엑스.트리플 엑스.96 6379
Sentinel #1 : 9832 : x 10 월 22 일 01:42:50.795 * +Fix-Slave-Config 슬레이브 xxx.트리플 엑스.트리플 엑스.177 : 6379 xxx.트리플 엑스.트리플 엑스.177 6379 @ Shard-172 xxx.트리플 엑스.트리플 엑스.244 6379
Sentinel #6 : 20528 : x 10 월 22 일 01:43:52.458 * +Fix-Slave-Config 슬레이브 xxx.트리플 엑스.트리플 엑스.177 : 6379 xxx.트리플 엑스.트리플 엑스.177 6379 @ Shard-188 xxx.트리플 엑스.트리플 엑스.96 6379
Sentinel #10 : 20650 : x 10 월 22 일 01:43:52.464 * +Fix-Slave-Config 슬레이브 xxx.트리플 엑스.트리플 엑스.177 : 6379 xxx.트리플 엑스.트리플 엑스.177 6379 @ Shard-188 xxx.트리플 엑스.트리플 엑스.96 6379
Sentinel #2 : 20838 : x 10 월 22 일 01:44:53.489 * +Fix-Slave-Config 슬레이브 xxx.트리플 엑스.트리플 엑스.177 : 6379 xxx.트리플 엑스.트리플 엑스.177 6379 @ Shard-172 xxx.트리플 엑스.트리플 엑스.244 6379
Sentinel Masters 명령의 출력은 다음과 같습니다. 이상한 점은 Shard-188에 두 명의 노예가 있다는 것입니다. 출력은 xxx 일 때 동일하게 보입니다.트리플 엑스.트리플 엑스.177은 SHARD-172 및 SHARD-182 아래에 있습니다.
사례 1) XXX.트리플 엑스.트리플 엑스.244는 XXX의 마스터입니다.트리플 엑스.트리플 엑스.177
183) 1) “이름”
2) “Shard-172”
3) “IP”
4) “xxx.트리플 엑스.트리플 엑스.244 ”
5) “포트”
6) “6379”
7) “runid”
8) “CA02DA1F0002A25A880E6765AED306B1857AE2F7”
9) “깃발”
10) “마스터”
11) “보류 및 명령”
12) “0”
13) “마지막 핑 센트”
14) “0”
15) “최후의 핑-핑-핑”
16) “14”
17) “마지막 핑-레프리”
18) “14”
19) “밀리 스코틀랜드 하향”
20) “30000”
21) “Info-Refresh”
22) “5636”
23) “역할보고”
24) “마스터”
25) “역할보고 시간”
26) “17154406”
27) “config-epoch”
28) “0”
29) “Num-Slaves”
30) “1”
31) “Num-Other-Sentinels”
32) “12”
33) “정족수”
34) “7”
35) “실패 시간”
36) “60000”
37) “병렬-동기화”
38) “1”
72) 1) “이름”
2) “Shard-188”
3) “IP”
4) “xxx.트리플 엑스.트리플 엑스.96 ”
5) “포트”
6) “6379”
7) “runid”
8) “95CD3A457EF71FC91FF1A1C5A6D5D4496B266167″ ”
9) “깃발”
10) “마스터”
11) “보류 및 명령”
12) “0”
13) “마지막 핑 센트”
14) “0”
15) “최후의 핑-핑-핑”
16) “927”
17) “마지막 핑-레프리”
18) “927”
19) “밀리 스코틀랜드 하향”
20) “30000”
21) “Info-Refresh”
22) “5333”
23) “역할보고”
24) “마스터”
25) “역할보고 시간”
26) “17154312”
27) “config-epoch”
28) “0”
29) “Num-Slaves”
30) “2”
31) “Num-Other-Sentinels”
32) “12”
33) “정족수”
34) “7”
35) “실패 시간”
36) “60000”
37) “병렬-동기화”
38) “1”
사례 2) XXX.트리플 엑스.트리플 엑스.96은 XXX의 마스터입니다.트리플 엑스.트리플 엑스.177
79) 1) “이름”
2) “Shard-172”
3) “IP”
4) “xxx.트리플 엑스.트리플 엑스.244 ”
5) “포트”
6) “6379”
7) “runid”
8) “CA02DA1F0002A25A880E6765AED306B1857AE2F7”
9) “깃발”
10) “마스터”
11) “보류 및 명령”
12) “0”
13) “마지막 핑 센트”
14) “0”
15) “최후의 핑-핑-핑”
16) “1012”
17) “마지막 핑-레프리”
18) “1012”
19) “밀리 스코틀랜드 하향”
20) “30000”
21) “Info-Refresh”
22) “1261”
23) “역할보고”
24) “마스터”
25) “역할보고 시간”
26) “17059720”
27) “config-epoch”
28) “0”
29) “Num-Slaves”
30) “1”
31) “Num-Other-Sentinels”
32) “12”
33) “정족수”
34) “7”
35) “실패 시간”
36) “60000”
37) “병렬-동기화”
38) “1”
273) 1) “이름”
2) “Shard-188”
3) “IP”
4) “xxx.트리플 엑스.트리플 엑스.96 ”
5) “포트”
6) “6379”
7) “runid”
8) “95CD3A457EF71FC91FF1A1C5A6D5D4496B266167″ ”
9) “깃발”
10) “마스터”
11) “보류 및 명령”
12) “0”
13) “마지막 핑 센트”
14) “0”
15) “최후의 핑-핑-핑”
16) “886”
17) “마지막 핑-레프리”
18) “886”
19) “밀리 스코틀랜드 하향”
20) “30000”
21) “Info-Refresh”
22) “5762”
23) “역할보고”
24) “마스터”
25) “역할보고 시간”
26) “17059758”
27) “config-epoch”
28) “0”
29) “Num-Slaves”
30) “2”
31) “Num-Other-Sentinels”
32) “12”
33) “정족수”
34) “7”
35) “실패 시간”
36) “60000”
37) “병렬-동기화”
38) “1”
나의 시작 센티넬.각 센티넬에 대한 conf
MaxClients 20000
로그 레벨 통지
로그 파일 “/home/redis/logs/sentinel.통나무”
Sentinel 모니터 Shard-172 Redis-B-172 7
Sentinel Down-Milliseconds Shard-172 30000
Sentinel Failover-Timeout Shard-172 60000
센티넬 병렬-동시대 샤드 -172 1
.
Sentinel 모니터 Shard-188 Redis-B-188 7
Sentinel Down-Milliseconds Shard-188 30000
Sentinel Failover-Timeout Shard-18860000
센티넬 병렬-동시대 샤드 -188 1
결과 센티넬이 있습니다.몇 분 후에 Conf (모든 센티넬)- 두 노예에 주목하십시오
센티넬 모니터 샤드 -172 XXX.트리플 엑스.트리플 엑스.244 6379 7
Sentinel Failover-Timeout Shard-172 60000
Sentinel Config-Epoch Shard-172 0
센티넬 리더-에피 샤드 -172 0
센티넬 알려진 슬라브 샤드 -172 XXX.트리플 엑스.트리플 엑스.177 6379 Sentinel 알려진-센티넬 샤드 -172 .
.
센티넬 모니터 샤드 -188 XXX.트리플 엑스.트리플 엑스.96 6379 7
Sentinel Failover-Timeout Shard-18860000
Sentinel Config-Epoch Shard-188 0
센티넬 리더-에피 샤드 -188 0
센티넬 알려진 슬라브 샤드 -188 XXX.트리플 엑스.트리플 엑스.194 6379 Sentinel 알려진 슬라브 샤드 -188 XXX.트리플 엑스.트리플 엑스.177 6379
센티넬 알려진 소형 샤드 -188 .
Omnibus gitlab을 사용한 Redis 복제 및 장애 조치 (프리미엄 셀프)
참고 : 이것은 Omnibus Gitlab 패키지의 문서입니다. 자신의 비 undedled redis를 사용하려면 관련 문서를 따르십시오.
참고 : Redis Lingo에서 1 차는 마스터라고합니다. 이 문서에서는 마스터가 필요한 설정을 제외하고는 마스터 대신 기본이 사용됩니다.
확장 가능한 환경에서 Redis를 사용하면 a를 사용하여 가능합니다 주요한 엑스 레플리카 Redis Sentinel 서비스가 포함 된 토폴로지가 장애 조치 절차를보고 자동으로 시작합니다.
Redis는 Sentinel과 함께 사용하는 경우 인증이 필요합니다. 자세한 내용은 Redis 보안 문서를 참조하십시오. Redis 서비스를 보장하기 위해 Redis 비밀번호와 타이트한 방화벽 규칙의 조합을 사용하는 것이 좋습니다. 토폴로지와 아키텍처를 완전히 이해하기 위해 gitlab으로 Redis를 구성하기 전에 Redis Sentinel 문서를 읽는 것이 좋습니다.
복제 된 토폴로지를 위해 Redis와 Redis Sentinel을 설정하는 세부 사항을 다이빙하기 전에 구성 요소가 어떻게 묶여 있는지 더 잘 이해하기 위해이 문서 전체를 한 번 읽으십시오.
3 개 이상의 독립 기계가 필요합니다 : 물리적 또는 VM이 별개의 물리적 기계로 실행됩니다. 모든 기본 및 복제 Redis 인스턴스가 다른 기계에서 실행해야합니다. 특정 방식으로 기계를 프로비저닝하지 않으면 공유 환경과 관련된 모든 문제가 전체 설정을 중단 할 수 있습니다.
1 차 또는 복제 Redis 인스턴스와 함께 센티넬을 실행해도 괜찮습니다. 그래도 같은 기계에 하나 이상의 센티넬이 있어야합니다.
또한 기본 네트워크 토폴로지를 고려하여 Redis / Sentinel과 Gitlab 인스턴스간에 중복 연결이 있는지 확인해야합니다. 그렇지 않으면 네트워크가 단일 실패 지점이됩니다.
스케일링 된 환경에서 Redis를 실행하려면 몇 가지가 필요합니다
- 다중 Redis 인스턴스
- REDIS에서 실행하십시오 주요한 엑스 레플리카 토폴로지
- 다중 센티넬 인스턴스
- 모든 Sentinel 및 Redis 인스턴스에 대한 응용 프로그램 지원 및 가시성
Redis Sentinel은 HA 환경에서 가장 중요한 작업을 처리 할 수 있으며 이는 최소한의 다운 타임으로 서버를 온라인으로 유지하는 데 도움이됩니다. Redis Sentinel :
- 모니터 주요한 그리고 복제본 사용 가능한지 확인하는 인스턴스
- 홍보 a 레플리카 에게 주요한 때 주요한 실패합니다
- a 주요한 에게 레플리카 실패한 경우 주요한 온라인으로 돌아옵니다 (데이터 파티셔닝을 방지하기 위해)
- 항상 현재에 연결하려면 응용 프로그램에 의해 쿼리 될 수 있습니다 주요한 섬기는 사람
언제 a 주요한 응답에 실패하면 시간 초과를 처리하고 다시 연결하는 것은 응용 프로그램의 책임 (우리의 경우 gitlab)입니다 보초 새로 주요한)).
Sentinel을 올바르게 설정하는 방법에 대한 이해를 높이려면 먼저 Redis Sentinel 문서를 먼저 읽으십시오. 올바르게 구성하지 않으면 데이터 손실로 이어지거나 전체 클러스터를 중단하여 장애 조치 노력을 무효화 할 수 있습니다.
권장 설정
최소한의 설정을 위해서는 3에 Omnibus Gitlab 패키지를 설치해야합니다 독립적인 기계 둘 다 레 디스 그리고 보초:
- Redis Primary + Sentinel
- Redis Replica + Sentinel
- Redis Replica + Sentinel
노드의 양이 왜 어디에서 왔는지 확실하지 않거나 이해하지 못하는 경우 Redis 설정 개요 및 Sentinel 설정 개요를 읽으십시오.
더 많은 실패에 저항 할 수있는 권장 설정을하려면 5에 Omnibus gitlab 패키지를 설치해야합니다 독립적인 기계 둘 다 레 디스 그리고 보초:
- Redis Primary + Sentinel
- Redis Replica + Sentinel
- Redis Replica + Sentinel
- Redis Replica + Sentinel
- Redis Replica + Sentinel
Redis 설정 개요
3 개 이상의 Redis 서버가 있어야합니다 : 1 개의 1 차, 2 개의 복제본이 있어야하며 각각 독립 머신에 있어야합니다 (위의 설명 참조).
더 많은 노드가 다운되는 상황에서 살아남는 데 도움이되는 추가 Redis 노드를 가질 수 있습니다. 온라인으로 2 개의 노드 만있을 때마다 장애 조치가 시작되지 않습니다.
예를 들어, 6 개의 Redis 노드가있는 경우 최대 3 개를 동시에 다운 할 수 있습니다.
Sentinel 노드에는 다른 요구 사항이 있습니다. 동일한 Redis 시스템에서 호스팅하는 경우 프로비저닝 할 노드의 양을 계산할 때 해당 제한 사항을 고려해야 할 수도 있습니다. 자세한 내용은 Sentinel 설정 개요 문서를 참조하십시오.
모든 Redis 노드는 동일한 방식으로 구성되어야하며 장애 조치 상황에서와 마찬가지로 유사한 서버 사양을 사용해야합니다 레플리카 새로 홍보 할 수 있습니다 주요한 Sentinel 서버에 의해.
복제에는 인증이 필요하므로 모든 Redis 노드와 센티넬을 보호하기 위해 비밀번호를 정의해야합니다. 그들 모두는 동일한 비밀번호를 공유하며 모든 인스턴스는 네트워크를 통해 서로 대화 할 수 있어야합니다.
Sentinel 설정 개요
센티넬은 다른 센티넬과 레 디스 노드를 모두 본다. Sentinel이 Redis 노드가 응답하지 않음을 감지 할 때마다 다른 센티넬에 대한 노드의 상태를 발표합니다. 센티넬은 a 정족수 (노드에 동의하는 최소 수량의 센티넬이 다운 됨) 장애 조치를 시작할 수 있도록.
때마다 정족수 만났다 다수 알려진 모든 Sentinel 노드 중에서 Sentinel을 선출 할 수 있도록 사용할 수 있고 도달 할 수 있어야합니다 지도자 서비스 가용성을 복원하기 위해 모든 결정을 내린 사람은 다음과 같습니다
- 새로운 홍보 주요한
- 다른 사람을 재구성합니다 복제본 그리고 그것들이 새로운 것을 지적하게 만듭니다 주요한
- 새로운 것을 발표합니다 주요한 다른 모든 센티넬 피어에게
- 오래된 것을 재구성하십시오 주요한 그리고 강등 레플리카 온라인으로 돌아올 때
3 개 이상의 Redis Sentinel 서버가 있어야하며 각각 독립적 인 기계에 있어야합니다 (독립적으로 실패한 것으로 여겨집니다). 이상적으로는 다른 지역에서 이상적입니다.
다른 Redis 서버를 구성한 동일한 컴퓨터에서 구성 할 수 있지만 전체 노드가 다운되면 Sentinel과 Redis 인스턴스를 모두 느슨하게한다는 것을 이해합니다.
센티넬의 수는 항상 이상적이어야합니다 이상한 숫자, 컨센서스 알고리즘이 실패의 경우 효과적이기 위해.
3 개의 노드 토폴로지에서는 1 개의 센티넬 노드가 줄어들 수 있습니다. 때마다 다수 Sentinels가 내려 가면 네트워크 파티션 보호는 파괴적인 행동과 장애 조치를 방지합니다 시작되지 않았습니다.
여기 몇 가지 예가 있어요
- 5 또는 6 센티넬의 경우 장애 조치 시작을 위해 최대 2 개가 줄어들 수 있습니다.
- 7 개의 센티넬을 사용하면 최대 3 개의 노드가 다운 될 수 있습니다.
그만큼 지도자 선거는 때때로 투표 라운드에 실패 할 수 있습니다 의견 일치 달성되지 않습니다 (위의 홀수 노드 요구 사항 참조). 이 경우 Sentinel [ ‘failover_timeout’]에 정의 된 시간 이후에 새로운 시도가 이루어집니다 (밀리 초).
참고 : Sentinel [ ‘Failover_Timeout’]이 나중에 정의되는 위치를 확인할 수 있습니다.
Failover_Timeout 변수에는 다양한 사용 사례가 많이 있습니다. 공식 문서에 따르면 :
- 주어진 Sentinel에 의해 이전 장애 조치가 이미 동일한 1 차에 대해 시도한 후 장애 조치를 다시 시작하는 데 필요한 시간은 장애 조치 타임 아웃의 두 배입니다.
- Sentinel 전류 구성에 따라 잘못된 1 차로 복제하는 데 필요한 시간은 올바른 기본과 복제해야합니다. 정확히 장애 조치 시간 초과입니다 (Sentinel이 오해를 감지 한 순간 이후 계산).
- 이미 진행 중이지만 구성 변경을 생성하지 않은 장애 조치를 취소하는 데 필요한 시간 (프로모션 된 복제본에 의해 아직 인정되지 않은 복제본).
- 진행중인 장애 조치가 모든 복제본이 새로운 1 차의 복제본으로 재구성 될 때까지 기다리는 최대 시간. 그러나이 시간 이후에도 복제본은 어쨌든 센티넬에 의해 재구성되지만 지정된 정확한 평행 동시 상태는 아닙니다.
Redis 구성
이것은 우리가 새로운 Redis 인스턴스를 설치하고 설정하는 섹션입니다.
Gitlab과 모든 구성 요소를 처음부터 설치했다고 가정합니다. 이미 Redis를 설치하고 실행 한 경우 단일 기계 설치에서 전환하는 방법을 읽으십시오.
참고 : Redis 노드 (기본 및 복제본 모두)는 Redis [ ‘Password’]에 정의 된 동일한 비밀번호가 필요합니다 . 장애 조치 중 언제든지 센티넬은 노드를 재구성하고 기본에서 복제본으로 상태를 변경할 수 있으며 그 반대도 마찬가지입니다.
요구 사항
Redis 설정 요구 사항은 다음과 같습니다
- 권장 설정 섹션에 지정된 최소 필수 인스턴스 수를 조정하십시오.
- 우리 하지 마라 동일한 컴퓨터에 Redis 또는 Redis Sentinel을 설치하는 것이 좋습니다. Gitlab 애플리케이션이 실행 중이므로 HA 구성이 약화됩니다. 그러나 같은 컴퓨터에 Redis와 Sentinel을 설치하기 위해 선택할 수 있습니다.
- 모든 Redis 노드는 서로 대화하고 Redis (6379) 및 Sentinel (26379) 포트 (기본값을 변경하지 않는 한)에 대한 들어오는 연결을 수락 할 수 있어야합니다.
- Gitlab 응용 프로그램을 호스팅하는 서버는 Redis 노드에 액세스 할 수 있어야합니다.
- 방화벽을 사용하여 외부 네트워크 (인터넷)로부터 노드가 액세스되지 않도록 보호.
기존 단일 기계 설치에서 전환
이미 단일 머신 Gitlab 설치가 실행중인 경우 먼저이 컴퓨터에서 복제해야합니다.
단일 기계 설치는 초기입니다 주요한, 그리고 다른 3 명은 다음과 같이 구성되어야합니다 레플리카 이 기계를 가리키고 있습니다.
복제가 따라 잡히면 단일 기계 설치에서 서비스를 중지하고 회전하려면 주요한 새로운 노드 중 하나에.
구성에서 필요한 변경 사항을 작성하고 새 노드를 다시 다시 시작하십시오.
단일 설치에서 redis를 비활성화하려면/etc/gitlab/gitlab을 편집하십시오.RB :
레 디스[의 뜻'할 수 있게 하다']] = 거짓
먼저 복제하지 않으면 데이터가 느슨해 질 수 있습니다 (처리되지 않은 배경 작업).
1 단계. 기본 Redis 인스턴스 구성
- SSH로 주요한 Redis Server.
- 사용하고 싶은 옴니버스 gitlab 패키지 다운로드/설치 단계 1과 2 Gitlab 다운로드 페이지에서.
- 현재 설치의 동일한 버전 및 유형 (커뮤니티, 엔터프라이즈 에디션)으로 올바른 옴니버스 패키지를 선택하십시오.
- 다운로드 페이지에서 다른 단계를 완료하지 마십시오.
- /etc/gitlab/gitlab 편집.RB 및 내용을 추가하십시오
# 서버 역할을 'redis_master_role'로 지정합니다 역할 [의 뜻'redis_master_role']] # 다른 기계가 도달 할 수있는 로컬 IP를 가리키는 IP 주소. # '0에 바인드를 설정할 수도 있습니다.0.0.모든 인터페이스에서 듣는 0 '. # 외부 접근성 IP에 실제로 바인딩 해야하는 경우 # 승인되지 않은 액세스를 방지하기 위해 추가 방화벽 규칙을 추가하십시오. 레 디스[의 뜻'묶다']] = '10.0.0.1' # Redis가 다른 것을 허용하는 TCP 요청을들을 수 있도록 포트 정의 # 연결하는 기계. 레 디스[의 뜻'포트']] = 6379 # redis에 대한 비밀번호 인증 설정 (모든 노드에서 동일한 비밀번호 사용). 레 디스[의 뜻'비밀번호']] = 'Redis-Password-Goes-Here'
gitlab_rails[의 뜻'auto_migrate']] = 거짓
참고 : Sentinel 및 Redis와 같은 여러 역할을 다음과 같이 지정할 수 있습니다 : Role [ ‘redis_sentinel_role’, ‘redis_master_role’] . 역할에 대해 자세히 알아보십시오.
2 단계. Replica redis 인스턴스 구성
- SSH로 레플리카 Redis Server.
- 사용하고 싶은 옴니버스 gitlab 패키지 다운로드/설치 단계 1과 2 Gitlab 다운로드 페이지에서.
- 현재 설치의 동일한 버전 및 유형 (커뮤니티, 엔터프라이즈 에디션)으로 올바른 옴니버스 패키지를 선택하십시오.
- 다운로드 페이지에서 다른 단계를 완료하지 마십시오.
- /etc/gitlab/gitlab 편집.RB 및 내용을 추가하십시오
# 서버 역할을 'redis_replica_role'로 지정합니다 역할 [의 뜻'redis_replica_role']] # 다른 기계가 도달 할 수있는 로컬 IP를 가리키는 IP 주소. # '0에 바인드를 설정할 수도 있습니다.0.0.모든 인터페이스에서 듣는 0 '. # 외부 접근성 IP에 실제로 바인딩 해야하는 경우 # 승인되지 않은 액세스를 방지하기 위해 추가 방화벽 규칙을 추가하십시오. 레 디스[의 뜻'묶다']] = '10.0.0.2 ' # Redis가 다른 것을 허용하는 TCP 요청을들을 수 있도록 포트 정의 # 연결하는 기계. 레 디스[의 뜻'포트']] = 6379 # 기본 노드에 대해 설정 한 Redis 인증에 대한 동일한 비밀번호. 레 디스[의 뜻'비밀번호']] = 'Redis-Password-Goes-Here' # 기본 redis 노드의 IP. 레 디스[의 뜻'master_ip']] = '10.0.0.1' # 기본 Redis Server의 포트, 비 채무 불이행에 대한 무결. 기본값 # ~`6379`. #redis [ 'master_port'] = 6379
수도 터치 /etc/gitlab/skip-auto-reconfigure
참고 : Sentinel 및 Redis와 같은 여러 역할을 다음과 같이 지정할 수 있습니다 : Role [ ‘redis_sentinel_role’, ‘redis_master_role’] . 역할에 대해 자세히 알아보십시오.
이 값은/etc/gitlab/gitlab에서 다시 변경할 필요가 없습니다.RB 노드가 센티넬에 의해 관리되고 Gitlab-CTL 재구성 후에도 동일한 센티넬에 의해 구성을 복원합니다.
3 단계. Redis Sentinel 인스턴스 구성
참고 : 외부 Redis Sentinel 인스턴스를 사용하는 경우 Sentinel 구성에서 요구 사항 매개 변수를 제외하십시오. 이 매개 변수로 인해 클라이언트는 NOAUTH 인증이 필요한보고를합니다. . Redis Sentinel 3.2.X는 비밀번호 인증을 지원하지 않습니다.
이제 Redis 서버가 모두 설정되었으므로 Sentinel 서버를 구성하겠습니다.
Redis 서버가 작동하고 올바르게 복제 중인지 확실하지 않은 경우 Sentinel 설정을 진행하기 전에 문제 해결 복제를 읽고 수정하십시오.
3 개 이상의 Redis Sentinel 서버가 있어야하며 각각 독립 머신에 있어야합니다. 다른 Redis 서버를 구성한 동일한 컴퓨터에서 구성 할 수 있습니다.
Gitlab Enterprise Edition을 사용하면 Omnibus 패키지를 사용하여 Sentinel 데몬으로 여러 기계를 설정할 수 있습니다.
- SSH는 Redis Sentinel을 호스팅하는 서버로 들어갑니다.
- Sentinels가 다른 Redis 인스턴스와 동일한 노드에서 호스팅되면이 단계를 생략 할 수 있습니다.사용 Omnibus Gitlab Enterprise Edition 패키지 다운로드/설치 단계 1과 2 Gitlab 다운로드 페이지에서.
- Gitlab 응용 프로그램이 실행중인 동일한 버전으로 올바른 옴니버스 패키지를 선택하십시오.
- 다운로드 페이지에서 다른 단계를 완료하지 마십시오.
- /etc/gitlab/gitlab 편집.RB 및 내용을 추가하십시오 (다른 Redis 인스턴스와 동일한 노드에 센티넬을 설치하는 경우 일부 값은 아래에서 복제 될 수 있습니다)
역할 [의 뜻'redis_sentinel_role']] # 모든 Sentinel 노드에서 동일해야합니다 레 디스[의 뜻'master_name']] = 'gitlab-redis' # 기본 노드에 대해 설정 한 Redis 인증에 대한 동일한 비밀번호. 레 디스[의 뜻'master_password']] = 'Redis-Password-Goes-Here' # 기본 redis 노드의 IP. 레 디스[의 뜻'master_ip']] = '10.0.0.1' # Redis가 다른 것을 허용하는 TCP 요청을들을 수 있도록 포트 정의 # 연결하는 기계. 레 디스[의 뜻'포트']] = 6379 # 기본 Redis Server의 포트, 비 채무 불이행에 대한 무결. 기본값 # ~`6379`. #redis [ 'master_port'] = 6379 ## Sentinel을 구성합니다 보초[의 뜻'묶다']] = '10.0.0.1' # Sentinel이 듣는 포트, 비 채무 불이행으로 변경되지 않음. 기본값 # ~`26379`. # sentinel [ 'port'] = 26379 ## Quorum은 장애 조치를 시작하는 데 필요한 투표 센티넬의 양을 반영해야합니다. ## 값은 센티넬의 양보다 크지 않아야합니다. ## ## 쿼럼은 Sentinel을 두 가지 방법으로 조정하는 데 사용될 수 있습니다 ## 1. 정족수가 대부분의 센티넬보다 작은 값으로 설정된 경우 ## 우리는 배포하고, 기본적으로 Sentinel을 일차 실패에 더 합리적으로 만들고 있습니다, ## 소수의 센티넬조차 더 이상 없어서 장애 조치를 유발합니다 ## 기본과 대화 할 수 있습니다. ## 1. 정족수가 대부분의 센티넬보다 큰 값으로 설정되면 우리는 ## 매우 많은 수가있을 때만 Sentinel이 장애 조치를 취할 수있게합니다 (더 큰 ## 대다.에스 보초[의 뜻'정족수']] = 2 ## x 양의 MS 후에 응답하지 않는 서버를 고려하십시오. # sentinel [ 'down_after_milliseconds'] = 10000 ## 분비 시간 초과를 밀리 초로 지정합니다. 여러 가지 방법으로 사용됩니다 ## ##- 이전 장애 조치 후 장애 조치를 다시 시작하는 데 필요한 시간은 ## 이미 주어진 센티넬에 의해 동일한 1 차에 대해 시도했는데 ## 장애 조치 타임 아웃을 시간에 맞춰야합니다. ## ##- 반복 복제에 필요한 시간 ## Sentinel Current 구성으로, 복제해야합니다 ## 올바른 기본이있는 경우 정확히 장애 조치 시간 초과입니다 (이후 계산 ## Sentinel이 오해를 감지 한 순간). ## ##- 이미 진행중인 장애 조치를 취소하는 데 필요한 시간이지만 ##은 구성 변경을 생성하지 않았습니다 (아직 아무도 복제하지 않습니다 ## 홍보 된 복제본에 의해 인정됨). ## ##- 진행중인 장애 조치가 모든 복제품이 될 때까지 기다리는 최대 시간 ## 새로운 1 차의 복제본으로 재구성되었습니다. 그러나이 시간 이후에도 ## 복제본은 어쨌든 센티넬에 의해 재구성되지만 ## 지정된 정확한 병렬 -Syncs 진행. # sentinel [ 'failover_timeout'] = 60000
수도 터치 /etc/gitlab/skip-auto-reconfigure
4 단계. gitlab 응용 프로그램 구성
마지막 부분은 Redis Sentinels 서버의 기본 Gitlab 애플리케이션 서버 및 인증 자격 증명을 알리는 것입니다.
신규 또는 기존 설치에서 언제든지 Sentinel 지원을 활성화 또는 비활성화 할 수 있습니다. Gitlab 응용 프로그램 관점에서 필요한 것은 Sentinel 노드의 올바른 자격 증명 만 있으면됩니다.
모든 Sentinel 노드 목록이 필요하지 않지만 실패의 경우 목록 중 하나 이상에 액세스해야합니다.
참고 : 다음 단계는 Gitlab 애플리케이션 서버에서 수행되어야합니다.
- gitlab 응용 프로그램이 설치된 서버로의 ssh.
- /etc/gitlab/gitlab 편집.RB 및 다음 줄을 추가/변경하십시오
##은 모든 Sentinel 노드에서 동일해야합니다 레 디스[의 뜻'master_name']] = 'gitlab-redis' ## 기본 노드에 대해 설정 한 Redis 인증에 대한 동일한 비밀번호. 레 디스[의 뜻'master_password']] = 'Redis-Password-Goes-Here' ##`host`와`port`가있는 센티넬 목록 gitlab_rails[의 뜻'redis_sentinels']] = [의 뜻 '주인' => '10.0.0.1', '포트' => 26379>, '주인' => '10.0.0.2 ', '포트' => 26379>, '주인' => '10.0.0.삼', '포트' => 26379> ]]
5 단계. 모니터링 활성화
모니터링을 활성화하면 활성화해야합니다 모두 Redis 서버.
- 다음 단계에서 Consul_Server_Nodes 또는 Consul Server 노드의 IP 주소 또는 DNS 레코드 인 Consul_Server_Nodes를 수집하십시오. 참고 y로 표시됩니다.와이.와이.y consul1.gitlab.예.com z.지.지.지
- /etc/gitlab/gitlab을 작성/편집하십시오.RB 및 다음 구성을 추가하십시오
# Prometheus의 서비스 검색 활성화 영사[의 뜻'할 수 있게 하다']] = 진실 영사[의 뜻'monitoring_service_discovery']] = 진실 # 자리 표시자를 교체하십시오 # y.와이.와이.y consul1.gitlab.예.com z.지.지.지 # 영사 서버 노드의 주소와 함께 영사[의 뜻'구성']] = retry_join : %w (y.와이.와이.y consul1.gitlab.예.com z.지.지.지), > # 수출업자가 듣는 네트워크 주소 설정 node_exporter[의 뜻'Listen_Address']] = '0.0.0.0 : 9100 ' redis_exporter[의 뜻'Listen_Address']] = '0.0.0.0 : 9121 '
1 개의 1 차, 2 개의 복제본 및 3 개의 센티넬을 사용한 최소 구성의 예
이 예에서는 모든 서버에 10에서 IPS와 내부 네트워크 인터페이스가 있다고 생각합니다.0.0.X 범위, 그리고이 IP를 사용하여 서로 연결할 수 있습니다.
실제 사용법에서는 다른 기계의 무단 액세스를 방지하고 외부에서 트래픽을 차단하기 위해 방화벽 규칙을 설정합니다 (인터넷).
우리는 동일한 3 개의 노드를 사용합니다 레 디스 + 보초 Redis 설정 개요 및 Sentinel 설정 개요 문서에서 논의 된 토폴로지.
다음은 각각의 목록과 설명입니다 기계 그리고 할당 된 IP:
- 10.0.0.1 : Redis Primary + Sentinel 1
- 10.0.0.2 : Redis Replica 1 + Sentinel 2
- 10.0.0.3 : Redis Replica 2 + Sentinel 3
- 10.0.0.4 : gitlab 응용 프로그램
초기 구성 후 Sentinel 노드에 의해 장애 조치가 시작되면 Redis 노드가 재구성되고 주요한 영구적으로 변경 (Redis 포함.Conf) 새로운 장애 조치가 다시 시작될 때까지 한 노드에서 다른 노드로.
Sentinel도 마찬가지입니다.초기 실행 후 재정의 된 conf는 새로운 Sentinel 노드가 시청을 시작한 후 주요한, 또는 장애 조치는 다른 것을 촉진합니다 주요한 마디.
Redis Primary 및 Sentinel 1의 예제 1
역할 [의 뜻'redis_sentinel_role', 'redis_master_role']] 레 디스[의 뜻'묶다']] = '10.0.0.1' 레 디스[의 뜻'포트']] = 6379 레 디스[의 뜻'비밀번호']] = 'Redis-Password-Goes-Here' 레 디스[의 뜻'master_name']] = 'gitlab-redis' # 모든 Sentinel 노드에서 동일해야합니다 레 디스[의 뜻'master_password']] = 'Redis-Password-Goes-Here' # 기본 인스턴스에서 redis [ 'password']에 정의 된 동일한 값 레 디스[의 뜻'master_ip']] = '10.0.0.1' # 초기 기본 Redis 인스턴스의 IP #redis [ 'mas 보초[의 뜻'묶다']] = '10.0.0.1' # sentinel [ 'port'] = 26379 # 기본 포트 변경에 대한 타협 보초[의 뜻'정족수']] = 2 # sentinel [ 'down_after_milliseconds'] = 10000 # sentinel [ 'failover_timeout'] = 60000
적용 할 변경 사항에 대해서는 옴니버스 gitlab을 재구성하십시오.
Redis Replica 1 및 Sentinel 2의 예제 구성
역할 [의 뜻'redis_sentinel_role', 'redis_replica_role']] 레 디스[의 뜻'묶다']] = '10.0.0.2 ' 레 디스[의 뜻'포트']] = 6379 레 디스[의 뜻'비밀번호']] = 'Redis-Password-Goes-Here' 레 디스[의 뜻'master_password']] = 'Redis-Password-Goes-Here' 레 디스[의 뜻'master_ip']] = '10.0.0.1' # 기본 Redis 서버의 IP #redis [ 'mas 레 디스[의 뜻'master_name']] = 'gitlab-redis' # 모든 Sentinel 노드에서 동일해야합니다 보초[의 뜻'묶다']] = '10.0.0.2 ' # sentinel [ 'port'] = 26379 # 기본 포트 변경에 대한 타협 보초[의 뜻'정족수']] = 2 # sentinel [ 'down_after_milliseconds'] = 10000 # sentinel [ 'failover_timeout'] = 60000
적용 할 변경 사항에 대해서는 옴니버스 gitlab을 재구성하십시오.
Redis Replica 2 및 Sentinel 3의 예제 구성
역할 [의 뜻'redis_sentinel_role', 'redis_replica_role']] 레 디스[의 뜻'묶다']] = '10.0.0.삼' 레 디스[의 뜻'포트']] = 6379 레 디스[의 뜻'비밀번호']] = 'Redis-Password-Goes-Here' 레 디스[의 뜻'master_password']] = 'Redis-Password-Goes-Here' 레 디스[의 뜻'master_ip']] = '10.0.0.1' # 기본 Redis 서버의 IP #redis [ 'mas 레 디스[의 뜻'master_name']] = 'gitlab-redis' # 모든 Sentinel 노드에서 동일해야합니다 보초[의 뜻'묶다']] = '10.0.0.삼' # sentinel [ 'port'] = 26379 # 기본 포트 변경에 대한 타협 보초[의 뜻'정족수']] = 2 # sentinel [ 'down_after_milliseconds'] = 10000 # sentinel [ 'failover_timeout'] = 60000
적용 할 변경 사항에 대해서는 옴니버스 gitlab을 재구성하십시오.
Gitlab 응용 프로그램의 예제
레 디스[의 뜻'master_name']] = 'gitlab-redis' 레 디스[의 뜻'master_password']] = 'Redis-Password-Goes-Here' gitlab_rails[의 뜻'redis_sentinels']] = [의 뜻 '주인' => '10.0.0.1', '포트' => 26379>, '주인' => '10.0.0.2 ', '포트' => 26379>, '주인' => '10.0.0.삼', '포트' => 26379> ]]
적용 할 변경 사항에 대해서는 옴니버스 gitlab을 재구성하십시오.
고급 구성
Omnibus gitlab. 아래에서 무슨 일이 일어나는지 알고 싶다면 계속 읽으십시오.
다중 Redis 클러스터를 실행합니다
Omnibus gitlab은 다양한 지속성 클래스를 위해 별도의 Redis 및 Sentinel 인스턴스를 실행하는 것을 지원합니다.
수업 | 목적 |
---|---|
은닉처 | 캐시 된 데이터를 저장하십시오. |
대기열 | Sidekiq 배경 작업을 저장하십시오. |
shared_state | 세션 관련 및 기타 영구 데이터를 저장합니다. |
액션 가능 | ActionCable의 PUB/SUB 큐 백엔드. |
Trace_Chunks | CI 추적 덩어리 데이터를 저장하십시오. |
이 작업을 Sentinel과 함께 만들기 위해 :
- 귀하의 요구에 따라 다른 Redis/Sentinels 인스턴스를 구성하십시오.
- 각 Rails 응용 프로그램 인스턴스에 대해/etc/gitlab/gitlab을 편집하십시오.RB 파일 :
gitlab_rails[의 뜻'redis_cache_instance']] = redis_cache_url gitlab_rails[의 뜻'redis_queues_instance']] = redis_queues_url gitlab_rails[의 뜻'redis_shared_state_instance']] = redis_shared_state_url gitlab_rails[의 뜻'redis_actioncable_instance']] = redis_actioncable_url gitlab_rails[의 뜻'redis_trace_chunks_instance']] = redis_trace_chunks_url # 센티넬을 구성하십시오 gitlab_rails[의 뜻'redis_cache_sentinels']] = [의 뜻 주인: redis_cache_sentinel_host, 포트: 26379 >, 주인: redis_cache_sentinel_host2, 포트: 26379 > ]] gitlab_rails[의 뜻'redis_queues_sentinels']] = [의 뜻 주인: redis_queues_sentinel_host, 포트: 26379 >, 주인: redis_queues_sentinel_host2, 포트: 26379 > ]] gitlab_rails[의 뜻'redis_shared_state_sentinels']] = [의 뜻 주인: shared_state_sentinel_host, 포트: 26379 >, 주인: shared_state_sentinel_host2, 포트: 26379 > ]] gitlab_rails[의 뜻'redis_actioncable_sentinels']] = [의 뜻 주인: ActionCable_Sentinel_host, 포트: 26379 >, 주인: ActionCable_Sentinel_host2, 포트: 26379 > ]] gitlab_rails[의 뜻'redis_trace_chunks_sentinels']] = [의 뜻 주인: trace_chunks_sentinel_host, 포트: 26379 >, 주인: trace_chunks_sentinel_host2, 포트: 26379 > ]]
- redis urls는 다음 형식이어야합니다 : redis : // : password@sentinel_primary_name, 여기서 :
- 비밀번호는 Redis 인스턴스의 일반 텍스트 비밀번호입니다.
- Sentinel_primary_name은 Redis [ ‘master_name’]가있는 Sentinel 기본 이름입니다 .
수도 gitlab-ctl 재구성
참고 : 각 Persistence 클래스에 대해 Gitlab은 이전에 설명 된 설정에 의해 재정의되지 않는 한 gitlab_rails [ ‘redis_sentinels’]에 지정된 구성을 사용하여 기본적으로 기본적으로 기본값을.
제어 실행 서비스
이전 예에서는 Redis_Sentinel_role 및 Redis_master_role을 사용하여 구성 변경량을 단순화했습니다.
더 많은 컨트롤을 원한다면 다음은 활성화 된 경우 각각 자동으로 설정하는 내용이 있습니다
## Redis Sentinel 역할 redis_sentinel_role[의 뜻'할 수 있게 하다']] = 진실 # Sentinel 역할이 활성화되면 다음 서비스도 활성화됩니다 보초[의 뜻'할 수 있게 하다']] = 진실 # 다음 서비스는 비활성화됩니다 레 디스[의 뜻'할 수 있게 하다']] = 거짓 부트 스트랩[의 뜻'할 수 있게 하다']] = 거짓 nginx[의 뜻'할 수 있게 하다']] = 거짓 Postgresql[의 뜻'할 수 있게 하다']] = 거짓 gitlab_rails[의 뜻'할 수 있게 하다']] = 거짓 메일 룸[의 뜻'할 수 있게 하다']] = 거짓 ------- ## redis 1 차/복제 역할 redis_master_role[의 뜻'할 수 있게 하다']] = 진실 # 그들 중 하나만 활성화하십시오 redis_replica_role[의 뜻'할 수 있게 하다']] = 진실 # 그들 중 하나만 활성화하십시오 # Redis 1 차 또는 복제 역할이 활성화되면 다음 서비스는 # 활성화/비활성화. Redis와 Sentinel 역할이 결합되면 둘 다 # 서비스가 활성화되어 있습니다. # 다음 서비스는 비활성화됩니다 보초[의 뜻'할 수 있게 하다']] = 거짓 부트 스트랩[의 뜻'할 수 있게 하다']] = 거짓 nginx[의 뜻'할 수 있게 하다']] = 거짓 Postgresql[의 뜻'할 수 있게 하다']] = 거짓 gitlab_rails[의 뜻'할 수 있게 하다']] = 거짓 메일 룸[의 뜻'할 수 있게 하다']] = 거짓 # Redis Replica 역할의 경우이 설정을 기본 'True'에서 'false'로 변경합니다 레 디스[의 뜻'주인']] = 거짓
gitlab_rails에 정의 된 관련 속성을 찾을 수 있습니다.RB .
문제 해결
추가 독서
- 참조 아키텍처
- 데이터베이스를 구성하십시오
- NFS 구성
- 로드 밸런서를 구성하십시오
레 디스 센티넬
주목. 감가 상각 된 Redis Sentinel 메커니즘은 Creatio 버전 7에서 은퇴합니다.18.삼. Creatio를 버전 7로 업데이트 한 후 Redis 클러스터로 전환하는 것이 좋습니다.18.0.
Redis Sentinel 메커니즘은 Creatio가 사용하는 Redis 저장소에 대한 결함 공차를 제공하는 데 사용됩니다. 다음과 같은 기능을 제공합니다
- 모니터링. Sentinel은 마스터/슬레이브 인스턴스가 Redis에서 올바르게 작동하는지 확인합니다.
- 알림. Sentinel은 인스턴스 관련 오류가 Redis에서 발생하는 경우 시스템 관리자를 경고합니다.
- 자동 장애 조치. Redis 마스터 인스턴스가 올바르게 작동하지 않으면 Sentinel. Creatio는 새로운 Redis 연결 주소에 대해서도 통보됩니다.
주목. Creatio는 버전 7에서 Redis 클러스터를 지원하지 않습니다.17.4 이상.
Redis Sentinel은 함께 협력하는 여러 인스턴스를 실행하도록 설계된 분산 시스템입니다. 이 접근법은 다음과 같은 장점이 있습니다
- 결함은 여러 센티넬 인스턴스 (정족수를 형성하는) 인 경우에만 등록됩니다. 이것은 잘못된 경고 수를 줄이기 위해 수행됩니다.
- 여러 센티넬 인스턴스가 응답하지 않거나 완전히 작동하지 않더라도 센티넬 메커니즘은 여전히 사용할 수 있습니다. 이것은 결함 공차를 증가시키기 위해 수행됩니다.
주목할만한 센티넬 세부 사항
- 강력한 배포에는 최소 3 개의 센티넬 인스턴스가 필요합니다. 이러한 인스턴스는 독립적 인 방식으로 실패한 것으로 여겨지는 컴퓨터 나 가상 머신에 배치해야합니다. 이자형., 이 Sentinel 인스턴스에 의해 등록 된 결함은 다른 소스에 의해 발생해야합니다. 예를 들어, 컴퓨터는 다른 네트워크 영역에 있습니다.
- 비동기 복제로 인해 분산 시스템 (Sentinel + Redis)이 실패가 발생하면 모든 데이터가 저장 될 것이라고 보장하지는 않습니다.
- 구성의 내결함성은 정기적으로 모니터링되고 실패를 시뮬레이션하는 테스트를 통해 추가로 확인해야합니다.
- Docker Port Remapping은 Sentinel 프로세스와 관련하여 특정 문제를 만듭니다 (Sentinel, Docker, NAT 및 가능한 문제 Sentinel 문서의 블록 참조).
Redis Sentinel의 최소 결함 허용 요구 사항
- M1, M2는 Redis 마스터 인스턴스입니다.
- R1, R2, R3은 Redis 슬레이브 인스턴스입니다.
- S1, S2, S3은 센티넬 인스턴스입니다.
- C1은 Creatio 응용 프로그램입니다.
- [M2]는 홍보 된 인스턴스입니다 (e. g., 노예에서 마스터로).
3 개 이상의 Redis 및 Sentinel 인스턴스와 함께 구성을 사용하는 것이 좋습니다 (예제 2 : Sentinel 문서의 3 개의 상자 블록이있는 기본 설정 참조). 이 구성은 3 개의 노드 (컴퓨터 또는 가상 머신)를 기반으로하며, 각각 Redis와 Sentinel의 실행중인 인스턴스를 포함합니다 (그림. 1). 두 개의 센티넬 인스턴스 (S2 및 S3)는 쿼럼을 형성합니다 (현재 마스터 인스턴스의 결함 허용을 보장하는 데 필요한 인스턴스 수).
무화과. 1 세 노드 구성 : 쿼럼 = 2
정기적 인 작업 중에 Creatio Client Application은 데이터를 마스터 인스턴스 (M1)에 씁니다. 그런 다음이 데이터는 슬레이브 인스턴스 (R2 및 R3)에 비동기 적으로 복제됩니다.
Redis Master 인스턴스 (M1)를 사용할 수 없게되면 Sentinel 인스턴스 (S1 및 S2)는이 실패를 고려하고 장애 조치 프로세스를 시작합니다. Redis 슬레이브 인스턴스 (R2 또는 R3) 중 하나가 마스터로 홍보되어 이전 마스터 인스턴스 대신 응용 프로그램을 사용할 수 있습니다.
주목. 비동기 데이터 복제를 사용하는 Sentinel 구성에서 레코드를 잃을 위험이 있습니다. 이것은 데이터가 슬레이브 인스턴스에 기록되지 않은 경우 마스터에게 홍보 된 경우에 발생합니다.
메모. 다른 결함 허용 구성은 Sentinel 문서에 설명되어 있습니다 .
네트워크 분리 문제
네트워크 연결이 손실되면 Creatio가 오래된 Redis Master 인스턴스 (M1)와 계속 작동 할 위험이 있으며 새로 승격 된 마스터 인스턴스 ([M2])가 이미 할당되었습니다 (그림. 2).
무화과. 2 네트워크 분리
마스터 인스턴스가 슬레이브 인스턴스의 수가 감소했음을 감지 할 경우 데이터 작성을 중지 할 수있는 옵션을 사용하여 쉽게 피할 수 있습니다. 이렇게하려면 Redis에서 다음 값을 설정하십시오.Redis 마스터 인스턴스의 구성 파일 :
최소 슬레이브-최신 1 분 슬레이브-삭스 래그 10
결과적으로 Redis Master 인스턴스 (M1)가 데이터를 하나 이상 슬레이브 인스턴스로 전송할 수 없으면 첫 번째 시도 후 10 초 안에 데이터 수신이 중지됩니다. 쿼럼 (S2 및 S3)을 형성하는 Sentinel 인스턴스에 의해 시스템이 복구되면 Creatio Application (C1)은 새로운 Master -Instance (M2)와 함께 작동하도록 재구성됩니다.
주목. 네트워크가 복원되면 중지 후 마스터 인스턴스가 자동으로 작동을 계속할 수 없습니다. 나머지 Redis 슬레이브 인스턴스 (R3)도 사용할 수 없게되면 시스템은 모두 작동을 중지합니다.
시스템 요구 사항
Redis는 메모리 인 데이터베이스이므로 RAM 용량 및 성능 속도는 올바른 작업의 주요 요구 사항입니다. Redis는 단일 프로세서 코어를 사용하는 단일 스레드 애플리케이션이므로 단일 Redis 인스턴스와 함께 작동하려면 듀얼 코어 프로세서가있는 단일 노드 (컴퓨터 또는 가상 시스템)가 필요합니다. Sentinel 인스턴스는 비교적 적은 리소스가 필요하며 Redis와 동일한 노드에서 실행할 수 있습니다.
Linux OS에 Redis 및 Sentinel을 배포하는 것이 좋습니다.
아래 표는 Creatio 사용자 수에 따라 단일 노드 (컴퓨터 또는 가상 머신)에 권장되는 시스템 요구 사항을 보여줍니다.
Redis 클러스터는 Sentinel이 필요합니까??
об йтоэ странице
м е р р регистрировали подо 착취 ay rzа ф징퍼, исход 넘추 타 ay сети. с пом거나 ю это인지 страницы м주는 сможем определить, что з просы отправляете именно, а не робот. почему это могло произойти?
эта страница отобр은 Âется в тех Â сл 나아가 · 추, ∈огда автомати인지 скими системи Google регтрирр곽막우 ся 테 추 법구추 추 님. котор ое нарушают условия использования. странира перестанет отобр은 жаться после того, как эти запросы прекратся. до отого момента для использования слу 갑기 Google необ 영향.
источником запросов может служить вредоносное по, подключаемые модули браузера или скрипт, насое 밑 밑 밑보관 сзлку ыапросов. если вл используете общий доступ в интернет, проблема 갑새 갑새 딘 악 с сомпером с с с с с саким 테 IP-адесом → Â 궤. обратитесь к своему системному администратору. подроб 변태.
проверка по слову может татак뿐 아니라 자기 появляться, если вы В 갑 갑격적 В Â водите слож ные запросы, об협 ораспронон혁 ™ rапротототототототото술도 있습니다. емами, или вводите запросы очень часто.