MGR의 구축 배포

9574 단어
1. MGR 소개
MySQL Group Replication(이하 MGR)은 MySQL이 공식적으로 내놓은 Paxos 프로토콜을 기반으로 한 상태기 복제이다.MGR이 등장하기 전에 사용자들이 흔히 볼 수 있는 MySQL 고가용 방식은 아무리 구조를 변화시켜도 본질은Master-Slave 구조이다.MySQL 5.7 버전은 무손실 반동기 복제(lossless semi-sync replication)를 지원하기 시작하여 데이터 복제의 강력한 일치성을 제시합니다.
1.1 MySQL 비동기식 복제
마스터 업무의 제출은 slave의 확인을 거치지 않아도 됩니다. slave가 마스터의binlog를 받았는지 여부는 마스터가 언급하지 않습니다.slave는 Master binlog를 받은 후, 먼저 Relay log를 쓰고, 마지막으로 relay log의 sql를 다른 단계로 실행하여 자신에게 적용합니다.마스터의 제출이 slave relay log가 정확하게 받아들여졌는지 확인할 필요가 없기 때문에, slave가 마스터 binlog를 받아들이는 데 실패하거나 relay log 응용에 실패하면 마스터가 감지할 수 없습니다
1.2 MySQL 반동기식 복제
전통적인 비동기적인 결함을 바탕으로 mysql는 5.5 버전에서 반동기 복제를 내놓았다.반동기 복제는 전통적인 비동기 복제의 개선이라고 할 수 있다. 마스터 사무의commit에 앞서 슬레이브가relay log를 받고 마스터에게 응답한 후에야 사무의commit를 진행할 수 있다.그러나 슬레이브가 relay log에 대한 응용은 여전히 비동기적으로 진행되고 원리는 다음과 같다.
1.3 MySQL 그룹 복제(MGR)
전통적인 비동기식 복제와 반동기식 복제의 결함인 데이터의 일치성을 보장할 수 없기 때문에 MySQL은 공식적으로 5.7.17 버전에서 그룹 복제(MySQL Group Replication, 약칭 MGR)를 내놓았다.여러 개의 노드가 하나의 복제 그룹을 구성하고 하나의 사무의 제출은 반드시 그룹 내의 대다수 노드(N/2+1)의 결의를 거쳐 통과해야만 제출할 수 있다.위의 그림에서 보듯이 3개의 노드로 하나의 복제팀을 구성하고Consensus층은 일치성 프로토콜층이다. 사무 제출 과정에서 그룹 간 통신이 발생하고 2개의 노드 결의(certify)가 이 사무를 통과해야만 사무가 최종적으로 제출되고 응답할 수 있다.그룹 복제를 도입하는 것은 주로 전통적인 비동기식 복제와 반동기식 복제로 인해 데이터가 일치하지 않을 수 있는 문제를 해결하기 위한 것이다.그룹 복제는 분산 정합성 프로토콜(Paxos 프로토콜의 변형)에 의거하여 분산에서 데이터의 최종 정합성을 실현하고 진정한 데이터 고가용 방안을 제공했다(진짜 고가용 여부는 아직 협의가 필요하다).그것이 제공한 멀티플렉스 방안은 우리에게 멀티플렉스 방안을 실현하는 데 희망을 가져다 주었다.  
1.4 MySQL 그룹 복제의 특징 및 제한 사항
기능 이점:
1. 높은 일치성, 원생 복제 및paxos 프로토콜을 바탕으로 하는 그룹 복제 기술, 그리고 플러그인으로 제공하여 일치된 데이터 안전 보장을 제공한다.2. 높은 용착성은 대다수 노드가 고장나지 않으면 계속 작업을 할 수 있다. 자동 검출 메커니즘이 있고 서로 다른 노드가 자원 분쟁이 발생할 때 오류가 발생하지 않으며 선착자 우선 원칙에 따라 처리하고 자동화 뇌분열 보호 메커니즘을 내장한다.3. 확장성이 높고 노드의 추가와 제거는 모두 자동이다. 새로운 노드가 가입하면 자동으로 다른 노드에서 동기화 상태를 유지하고 새로운 노드와 다른 노드가 일치할 때까지 유지한다. 만약에 어떤 노드가 제거되면 다른 노드는 자동으로 그룹 정보를 업데이트하고 새로운 그룹 정보를 자동으로 유지한다.4. 유연성이 높고 단주 모드와 다주 모드가 있으며 단주 모드에서 자동으로 주를 선택하고 모든 업데이트 작업은 주상에서 진행한다.다중 주 모드에서는 모든 서버가 업데이트 작업을 동시에 처리할 수 있습니다.
제한: (구체적으로 공식 설명서 참조:https://dev.mysql.com/doc/refman/5.7/en/group-replication-requirements-and-limitations.html)
1. InnoDB 테이블만 지원하고 모든 테이블에는 반드시 메인 키가 있어야 하며 write set의 충돌 검측에 사용된다.2. GTID 특성을 열어야 한다. 2진 로그 형식은 ROW로 설정해야 한다. 호스트와 write set3, COMMIT는 실패할 수 있다. 스냅샷 사무 격리 단계의 실패 장면과 유사하다. 4. 현재 하나의 MGR 그룹은 최대 9개의 노드를 지원한다. 5. 외부 키가 save point 특성에 지원되지 않고 전역적인 제약 검사와 일부 사무 스크롤 6.바이너리 로그는 binlog event checksum을 지원하지 않습니다.
  
2. MGR 구축
참조된 공식 문서 작성: 공식 문서:https://dev.mysql.com/doc/refman/5.7/en/group-replication.html단일 마스터 구성 주소:https://dev.mysql.com/doc/refman/5.7/en/group-replication-deploying-in-single-primary-mode.html다중 주 노드 구축은 기본적으로 단일 주 절차와 같이 파일 my만 설정하면 됩니다.cnf 추가 추가, 본고 아래 예는 단일 주 노드 구축, 다중 주 노드 구축도 별 차이가 없다.
loose-group_replication_single_primary_mode=FALSE
loose-group_replication_enforce_update_everywhere_checks= TRUE

  
2.1 기계분포
호스트 ip
설치 서비스
중요성
192.168.142.48
mysql server 5.7.18
50
192.168.142.49
mysql server 5.7.18
40
192.168.142.50
mysql server 5.7.18
30
가중치: 새 주 선거의 우선순위 참조, 크면 클수록 우선순위가 높다.
2.2hostname과 ip의 맵 만들기
세 개의 데이터베이스 서버에서 다음을 설정합니다.
192.168.142.48      dbtest1
192.168.142.49      dbtest2
192.168.142.50      dbtest3

  
2.3 추가 설명이 필요한 것은 프로필 my입니다.cnf 추가 구성
프로파일 소개 참조 공식 문서:https://dev.mysql.com/doc/refman/5.7/en/group-replication-configuring-instances.html
# Replication Framework
server_id=1
gtid_mode=ON
enforce_gtid_consistency=ON
master_info_repository=TABLE
relay_log_info_repository=TABLE
log_bin=binlog
binlog_format=ROW
log_slave_updates=ON
binlog_checksum=NONE
transaction_write_set_extraction=XXHASH64
loose-group_replication_group_name="aaaaaaaa-aaaa-aaaa-aaaa-aaaaaaaaaaaa"
loose-group_replication_start_on_boot=off
loose-group_replication_local_address= "192.168.142.48:33061"
loose-group_replication_group_seeds= "192.168.142.48:33061,192.168.142.49:33061,192.168.142.50:33061"
loose-group_replication_bootstrap_group=off
loose-group_replication_member_weight=50

  
2.4 데이터베이스 인스턴스 만들기
수동 구축 또는 자동화 스크립트는 각각 세 대의 호스트에 mysql 실례를 설정합니다. 여기서 MysQL 단일 실례 구축 방법을 참고할 수 있습니다. 군더더기 없이
2.5 첫 번째 노드 구성
1. 계정 복사 권한 설정
SET SQL_LOG_BIN=0;
CREATE USER rpl_user@'%' IDENTIFIED BY 'password';
GRANT REPLICATION SLAVE ON *.* TO rpl_user@'%';
FLUSH PRIVILEGES;
SET SQL_LOG_BIN=1;

2. 복구 채널 채널 채널 지정
CHANGE MASTER TO MASTER_USER='rpl_user', MASTER_PASSWORD='password' FOR CHANNEL 'group_replication_recovery';

3. 플러그인 플러그인 설치 및 보기
INSTALL PLUGIN group_replication SONAME 'group_replication.so';
show plugins;

4、그룹 복제 오픈
#   group_replication_bootstrap_group ON                        ,           
SET GLOBAL group_replication_bootstrap_group=ON;
START GROUP_REPLICATION;
SET GLOBAL group_replication_bootstrap_group=OFF;

5、mgr의 상태 보기
#    performance_schema.replication_group_members
select * from performance_schema.replication_group_members;

 
2.6 보조 및 보조 노드 구성
1. 계정 복사 권한 설정
SET SQL_LOG_BIN=0;
CREATE USER rpl_user@'%' IDENTIFIED BY 'password';
GRANT REPLICATION SLAVE ON *.* TO rpl_user@'%';
FLUSH PRIVILEGES;
SET SQL_LOG_BIN=1;

2. 복구 채널 채널 채널 지정
CHANGE MASTER TO MASTER_USER='rpl_user', MASTER_PASSWORD='password' FOR CHANNEL 'group_replication_recovery';

3. 플러그인 플러그인 설치 및 보기
INSTALL PLUGIN group_replication SONAME 'group_replication.so';
show plugins;

4、그룹 복제 오픈
#         group_replication_bootstrap_group,           ,               
START GROUP_REPLICATION;

5、mgr의 상태 보기
#    performance_schema.replication_group_members
select * from performance_schema.replication_group_members;

  
3. 관련 상태 관찰 및 전환
1. 전환
STOP GROUP_REPLICATION;            master
START GROUP_REPLICATION;          slave

2. 관련 상태 보기
1、       
select * from performance_schema.replication_group_members;
2、            
select * from performance_schema.replication_group_member_stats;
3、          
select * from performance_schema.replication_connection_status;
4、          
select * from performance_schema.replication_applier_status;
5、   master
select a.variable_value,b.member_host,b.member_port,member_state from performance_schema.global_status a ,performance_schema.replication_group_members b where a.variable_value=b.member_id and variable_name= 'group_replication_primary_member';

   
4. MGR 동적 노드 신규 및 삭제
4.1 동적 신규 노드 구성
예를 들어 기존 192.168.142.48192.168.49192.168.142.50이 MGR을 구성한 토대에서 동적 신규 노드 192.168.142.51을 만들었고hostname과 IP를 만드는 매핑은 네 개의 데이터베이스 서버에 설정되었다.
192.168.142.48      dbtest1
192.168.142.49      dbtest2
192.168.142.50      dbtest3
192.168.142.51      dbtest4

2,192.168.142.51의 my.cnf 프로필과 위 my.cnf는 일치합니다. 추가 수정은 다음과 같습니다.
loose-group_replication_local_address= "192.168.142.51:33061"
loose-group_replication_group_seeds= "192.168.142.48:33061,192.168.142.49:33061,192.168.142.50:33061,192.168.142.51:33061"

3. 데이터베이스 생성 실례 수동 구축 또는 자동화 스크립트는 각각 세 개의 호스트에 mysql 실례를 설정한다. 여기서 MysQL 단일 실례 구축 방법을 참고할 수 있다.
4. 계정 복제 권한 설정
SET SQL_LOG_BIN=0;
CREATE USER rpl_user@'%' IDENTIFIED BY 'password';
GRANT REPLICATION SLAVE ON *.* TO rpl_user@'%';
FLUSH PRIVILEGES;
SET SQL_LOG_BIN=1;

5. 복구 채널 채널 채널 지정
CHANGE MASTER TO MASTER_USER='rpl_user', MASTER_PASSWORD='password' FOR CHANNEL 'group_replication_recovery';

6, 플러그인 플러그인 설치 및 보기
INSTALL PLUGIN group_replication SONAME 'group_replication.so';
show plugins;

7. 그룹에 존재하는 노드 설정 수정 그룹replication_group_seeds의 값
1、   192.168.142.48,192.168.142.49,192.168.142.50           
set global  group_replication_group_seeds="192.168.142.48:33061,192.168.142.49:33061,192.168.142.50:33061,192.168.142.51:33061";

2、            my.cnf   

8、그룹 복제 오픈
#         group_replication_bootstrap_group,           ,              
START GROUP_REPLICATION;

9、mgr의 상태 보기
#    performance_schema.replication_group_members
select * from performance_schema.replication_group_members;

  
4.2 동적 삭제 노드 구성
예를 들어 기존 192.168.142.48192.168.49192.168.142.50192.168.142.51이 MGR을 구성한 토대에서 동적 삭제 노드 192.168.142.51
1. 192.168.142.51 그룹 복제 중지
STOP GROUP_REPLICATION;
slave           

2、그룹에 남은 노드 설정 수정 그룹replication_group_seeds의 값
1、   192.168.142.48,192.168.142.49,192.168.142.50           
set global  group_replication_group_seeds="192.168.142.48:33061,192.168.142.49:33061,192.168.142.50:33061";

2、            my.cnf   

3. 192.168.142.51 노드 관련 그룹 정보를 철저히 정리하고 구성 수정 그룹replication_group_seeds 및 groupreplication_local_address 값
1、 192.168.142.51           
set global  group_replication_group_seeds="";
set global group_replication_local_address="";

2、            my.cnf   (    )

4, 플러그인 플러그인 삭제, 계정 복사 권한
전재 대상:https://blog.51cto.com/11257187/2121613

좋은 웹페이지 즐겨찾기