MySQL 시리즈 의 14 MySQL 의 높 은 사용 가능 한 구현

11827 단어 MySQL고가 용
MHA
메 인 노드 를 감시 하면 자동 고장 이 다른 노드 로 이전 되 는 것 을 실현 할 수 있다.특정한 노드 를 새로운 메 인 노드 로 향상 시 키 고 메 인 복 제 를 바탕 으로 실현 되 며 클 라 이언 트 의 협조 가 필요 하 다.현재 MHA 는 주로 메 인 다 중 구 조 를 지원 하고 MHA 를 구축 하려 면 복사 클 러 스 터 에 최소 세 대의 데이터 베이스 서버 가 있어 야 한다.하 나 는 메 인 2 종,즉 하 나 는 master 를 충당 하고 하 나 는 예비 master 를 충당 하 며 다른 하 나 는 라 이브 러 리 를 충당 해 야 한다.
1.MHA 작업 원리
  • 다운 된 master 에서 바 이 너 리 로그 이벤트 저장(binlog events)
  • 최신 업 데 이 트 된 slave 인식
  • 차이 가 있 는 중계 로그(relay log)를 다른 slave
  • 로 적용 합 니 다.
  • master 에서 저 장 된 바 이 너 리 로그 이벤트(binlog events)
  • 적용
  • slave 를 새로운 master 로 승급
  • 2.MHA 소프트웨어
    MHA 소프트웨어 는 두 부분 으로 구성 되 어 있 으 며 Manager 공구 꾸러미 와 Node 공구 꾸러미 이다.
    Manager 공구 꾸러미 는 주로 다음 과 같은 몇 가지 도 구 를 포함한다.
    masterha_check_ssh MHA 의 SSH 설정 상황 검사 masterhacheck_repl MySQL 복사 상태 확인 masterhamanger 시동 MHAmasterhacheck_status 현재 MHA 운행 상태 masterha 검출master_모니터 마스터 가 다운 되 었 는 지 확인 masterhamaster_switch 고장 이전(자동 또는 수 동)masterhaconf_host 설정 한 server 정 보 를 추가 하거나 삭제 합 니 다.
    Node 패키지:이 도구 들 은 보통 MHA Manager 의 스 크 립 트 에 의 해 작 동 되 며 인위적인 조작 이 필요 없습니다.
    save_binary_logs master 의 바 이 너 리 로그 저장 및 복사 applydiff_relay_logs 차이 점 을 식별 하 는 중계 로그 이벤트 및 차이 점 을 다른 slavefilter 에 적용 합 니 다.mysqlbinlog 불필요 한 ROLLBACK 이벤트 제거(MHA 는 이 도 구 를 사용 하지 않 습 니 다)purgerelay_logs 중계 로그 지우 기(SQL 스 레 드 를 막 지 않 음)
    알림:메 인 라 이브 러 리 하드웨어 손상 지연 으로 인 한 데이터 손실 을 최대한 줄 이기 위해 MHA 를 설정 하 는 동시에 MySQL 5.5 의 반 동기 복사 로 설정 하 는 것 을 권장 합 니 다.
    사용자 정의 확장:
    secondary_check_script:여러 네트워크 를 통 해 master 의 가용성 master 를 검색 합 니 다.ip_ailover_script:응용 프로그램 업데이트 에 사용 되 는 masteripshutdownscript:master 노드 report 강제 닫 기script:보고서 보 내기 initconf_load_script:초기 설정 파라미터 master 불 러 오기ip_online_change_script:master 노드 ip 주소 업데이트
    다운로드 주소:https://code.google.com/archive/p/mysql-master-ha/downloads
    3.MHA 의 실현

    환경:비밀 키 인증 기반,참고:https://www.cnblogs.com/L-dongf/p/9058265.html,시간 동기 화,실행:ntpdate cn.pool.ntp.org
    1)관리자 노드
    
    [root@manager ~]# yum install mha4mysql-manager-0.56-0.el6.noarch.rpm mha4mysql-node-0.56-0.el6.noarch.rpm -y  #  mha  
    [root@manager ~]# scp mha4mysql-node-0.56-0.el6.noarch.rpm 192.168.0.7:
    [root@manager ~]# scp mha4mysql-node-0.56-0.el6.noarch.rpm 192.168.0.8:
    [root@manager ~]# scp mha4mysql-node-0.56-0.el6.noarch.rpm 192.168.0.9:
    [root@manager ~]# mkdir /etc/mha/
    [root@manager ~]# vim /etc/mha/cluster1.cnf
    [server default]
    user=mhauser
    password=mhapass
    manager_workdir=/data/mastermha/cluster1/
    manager_log=/data/mastermha/cluster1/manager.log
    remote_workdir=/data/mastermha/cluster1/
    ssh_user=root
    repl_user=repluser
    repl_password=replpass
    ping_interval=1  #      
    [server1]
    hostname=192.168.0.7
    candidate_master=1  #       
    [server2]
    hostname=192.168.0.8
    candidate_master=1  #       
    [server3]
    hostname=192.168.0.9
    [root@manager ~]# masterha_check_ssh --conf=/etc/mha/cluster1.cnf  #  ssh    
    	All SSH connection tests passed successfully.
    [root@manager ~]# masterha_check_repl --conf=/etc/mha/cluster1.cnf  #  MySQL  
    	MySQL Replication Health is OK.
    [root@manager ~]# yum install screen -y
    [root@manager ~]# screen -S mha  #mha         ,         
    [root@manager ~]# masterha_manager --conf=/etc/mha/cluster1.cnf  #    
    2)마스터 노드
    
    [root@master ~]# yum install mha4mysql-node-0.56-0.el6.noarch.rpm -y  #  node 
    [root@master ~]# vim /etc/my.cnf
    [mysqld]
    server_id=1
    log_bin
    binlog_format=row
    skip_name_resolve
    [root@master ~]# systemctl start mariadb
    MariaDB [(none)]> GRANT REPLICATION SLAVE ON *.* TO repluser@'192.168.0.%' IDENTIFIED BY 'replpass';  #        ,                
    MariaDB [(none)]> SHOW MASTER LOGS;
    +--------------------+-----------+
    | Log_name           | File_size |
    +--------------------+-----------+
    | mariadb-bin.000001 |       401 |
    +--------------------+-----------+
    MariaDB [(none)]> GRANT ALL ON *.* TO mhauser@'192.168.0.%' IDENTIFIED BY 'mhapass';  #  mha     ,              
    3)슬 레이 브 노드
    
    [root@slave ~]# yum install mha4mysql-node-0.56-0.el6.noarch.rpm -y
    [root@slave ~]# vim /etc/my.cnf
    [mysqld]
    read_only=1
    log_bin
    binlog_format=row
    server_id=2
    relay_log_purge=0
    skip_name_resolve=1
    [root@slave ~]# systemctl start mariadb
    MariaDB [(none)]> GRANT REPLICATION SLAVE ON *.* TO repluser@'192.168.0.%' IDENTIFIED BY 'replpass';
    MariaDB [(none)]> CHANGE MASTER TO
        -> MASTER_HOST='192.168.0.7',  #      0.7
        -> MASTER_USER='repluser',
        -> MASTER_PASSWORD='replpass',
        -> MASTER_PORT=3306,
        -> MASTER_LOG_FILE='mariadb-bin.000001',
        -> MASTER_LOG_POS=401,
        -> MASTER_CONNECT_RETRY=10;
    MariaDB [(none)]> START SLAVE;
    4)슬 레이 브 2 노드
    
    [root@slave2 ~]# yum install mha4mysql-node-0.56-0.el6.noarch.rpm -y
    [root@slave2 ~]# vim /etc/my.cnf
    [mysqld]
    server_id=3
    read_only=1
    relay_log_purge=0
    skip_name_resolve=1
    [root@slave2 ~]# systemctl start mariadb
    MariaDB [(none)]> CHANGE MASTER TO
        -> MASTER_HOST='192.168.0.7',
        -> MASTER_USER='repluser',
        -> MASTER_PASSWORD='replpass',
        -> MASTER_PORT=3306,
        -> MASTER_LOG_FILE='mariadb-bin.000001',
        -> MASTER_LOG_POS=401,
        -> MASTER_CONNECT_RETRY=10;
    MariaDB [(none)]> START SLAVE;
    4)테스트
    master 의 서비스 정지:[root@master ~]# systemctl stop mariadb
    slave 2 에서 실행:MariaDB[(none)]>SHOW SLAVE STATUS\G 명령,MasterServer_Id: 2
    설명:전환 성공
    4.MHA 모니터링 재 접속
    
        master       ,             
    [root@master ~]# systemctl start mariadb
    MariaDB [(none)]> CHANGE MASTER TO
        -> MASTER_HOST='192.168.0.8',  #     0.8
        -> MASTER_USER='repluser',
        -> MASTER_PASSWORD='replpass',
        -> MASTER_PORT=3306,
        -> MASTER_LOG_FILE='mariadb-bin.000001',
        -> MASTER_LOG_POS=482,
        -> MASTER_CONNECT_RETRY=10;
    MariaDB [(none)]> START SLAVE;
    
        :
    [root@manager ~]# screen -S mha
    [root@manager ~]# masterha_manager --conf=/etc/mha/cluster1.cnf  #      
    2.갤러리 클 러 스 터
    Galera Cluster:Galera 플러그 인 을 통합 한 MySQL 클 러 스 터 는 새로운 것 으로 데이터 가 공유 되 지 않 고 고도 로 지루 한 사용 가능 한 방안 입 니 다.현재 Galera Cluster 는 두 가지 버 전이 있 는데 그것 이 바로 Percona Xtradb Cluster 와 MariaDB Cluster 입 니 다.Galera 자체 가 여러 가지 특징 을 가지 고 있 습 니 다.즉,multi-master 의 클 러 스 터 구 조 를 사용 하여 안정 적 이면 서도 데이터 일치 성,완전 성과 고성능 방면 에서 뛰어난 활약 을 보 이 는 고가 용 해결 방안

    세 개의 노드 는 하나의 군집 을 구성 했다.일반적인 주종 구조 와 달리 이들 은 모두 메 인 노드 로 할 수 있다.세 개의 노드 는 대등한 것 으로 multi-master 구조 라 고 부른다.클 라 이언 트 가 데 이 터 를 쓰 거나 읽 으 려 고 할 때 어느 인 스 턴 스 를 연결 하 든 똑 같 고 읽 은 수 거 는 같다.특정한 노드 를 기록 한 후에클 러 스 터 자체 가 새로운 데 이 터 를 다른 노드 에 동기 화 할 것 이다.이런 구 조 는 어떠한 데이터 도 공유 하지 않 고 지루 한 구조 이다.
    특성:
  • 다 중 메 인 구조:진정한 다 중 읽 기와 쓰기 의 군집 은 언제든지 데 이 터 를 읽 고 쓰 는 것 이 최신 이다.
  • 동기 복사:클 러 스 터 의 서로 다른 노드 간 의 데이터 가 동기 화 되 고 지연 되 지 않 으 며 데이터 베 이 스 를 끊 은 후에 데 이 터 를 잃 어 버 리 지 않 습 니 다.
  • 동시 복제:노드 APPLY 데이터 에서 동시 실행 을 지원 하고 더 좋 은 성능 을 가 집 니 다.
  • 고장 전환:데이터베이스 고장 이 났 을 때 다 중 기록 을 지원 하기 때문에 전환 이 쉽 습 니 다.
  • 핫 플러그:서비스 기간 에 데이터 베 이 스 를 끊 으 면 모니터링 프로그램 이 빨리 발견 하면 서비스 할 수 없 는 시간 이 매우 적다.노드 가 고장 나 는 동안 노드 자체 가 군집 에 미 치 는 영향 이 매우 적다.
  • 자동 노드 복제:노드 가 새로 추가 되 거나 정지 되 어 유지 할 때 증분 데이터 나 기초 데 이 터 는 인공 수 동 백업 으로 제공 하지 않 아 도 됩 니 다.Galera Cluster 는 온라인 노드 데 이 터 를 자동 으로 끌 어 올 리 고 최종 클 러 스 터 는 일치 합 니 다.
  • 작업 원리:

    공식 문서 참조:
    http://galeracluster.com/documentation-webpages/galera-documentation.pdf
    http://galeracluster.com/documentation-webpages/index.html
    https://mariadb.com/kb/en/mariadb/getting-started-with-mariadb-galera-cluster/
    최소 세 대의 노드 가 필요 합 니 다.mariadb-server 패 키 지 를 설치 할 수 없고 특정한 패 키 지 를 설치 해 야 합 니 다.
    Galera Cluster 의 실현
    청 화 개원 미 러 소스:https://mirrors.tuna.tsinghua.edu.cn/mariadb/mariadb-5.5.60/yum/centos7-amd64/
    
    # vim /etc/yum.repos.d/mariadb_galera_server.repo
    [mariadb]
    name=mariadb_galera_server.repo
    baseurl=https://mirrors.tuna.tsinghua.edu.cn/mariadb/mariadb-5.5.60/yum/centos7-amd64/
    gpgcheck=0
    # yum install MariaDB-Galera-server -y
    ​1)mysql-1
    
    [root@mysql-1 ~]# vim /etc/my.cnf.d/server.cnf
    [galera]
    wsrep_provider=/usr/lib64/galera/libgalera_smm.so
    wsrep_cluster_address="gcomm://192.168.0.7,192.168.0.8,192.168.0.9" #   IP     
    binlog_format=row
    default_storage_engine=InnoDB
    innodb_autoinc_lock_mode=2
    bind-address=0.0.0.0
    wsrep_cluster_name='my_wsrep_cluster'
    wsrep_node_name='node1'
    wsrep_node_address='192.168.0.7'
    ​2)mysql-2
    
    [root@mysql-2 ~]# vim /etc/my.cnf.d/server.cnf
    [galera]
    wsrep_provider=/usr/lib64/galera/libgalera_smm.so
    wsrep_cluster_address="gcomm://192.168.0.7,192.168.0.8,192.168.0.9"
    binlog_format=row
    default_storage_engine=InnoDB
    innodb_autoinc_lock_mode=2
    bind-address=0.0.0.0
    wsrep_cluster_name='my_wsrep_cluster'
    wsrep_node_name='node2'
    wsrep_node_address='192.168.0.8'
    ​3)mysql-3
    
    [root@mysql-3 ~]# vim /etc/my.cnf.d/server.cnf
    [galera]
    wsrep_provider=/usr/lib64/galera/libgalera_smm.so
    wsrep_cluster_address="gcomm://192.168.0.7,192.168.0.8,192.168.0.9"
    binlog_format=row
    default_storage_engine=InnoDB
    innodb_autoinc_lock_mode=2
    bind-address=0.0.0.0
    wsrep_cluster_name='my_wsrep_cluster'
    wsrep_node_name='node3'
    wsrep_node_address='192.168.0.9'
    4)시동
    
    [root@mysql-1 ~]# /etc/init.d/mysql start --wsrep-new-cluster #         
    [root@mysql-2 ~]# /etc/init.d/mysql start #          
    [root@mysql-3 ~]# /etc/init.d/mysql start
    5)테스트
    모든 노드 에서 데이터 베 이 스 를 조작 하고 다른 노드 는 동기 화 작업 을 합 니 다.같은 기록 을 동시에 조작 하면 한 노드 만 성공 합 니 다.
    6)작업 상태 확인
    
    MariaDB [(none)]> SHOW VARIABLES LIKE 'wsrep_%'\G
    MariaDB [(none)]> SHOW STATUS LIKE 'wsrep_%'\G
    MariaDB [(none)]> SHOW STATUS LIKE 'wsrep_cluster_size';
    +--------------------+-------+
    | Variable_name      | Value |
    +--------------------+-------+
    | wsrep_cluster_size | 3     |  #          
    +--------------------+-------+
    여기에 MySQL 시리즈 의 14 MySQL 의 높 은 사용 가능 한 실현 에 관 한 글 을 소개 합 니 다.더 많은 MySQL 의 높 은 사용 가능 한 실현 내용 은 우리 의 이전 글 을 검색 하거나 아래 의 관련 글 을 계속 조회 하 시기 바 랍 니 다.앞으로 많은 응원 바 랍 니 다!

    좋은 웹페이지 즐겨찾기