>  기사  >  데이터 베이스  >  Mycat의 Mysql 클러스터 읽기 및 쓰기 분리 구현에 대해 이야기해 보겠습니다.

Mycat의 Mysql 클러스터 읽기 및 쓰기 분리 구현에 대해 이야기해 보겠습니다.

WBOY
WBOY앞으로
2022-01-21 18:11:062793검색

이 기사에서는 MySQL 읽기 및 쓰기 분리에 대한 관련 지식을 소개합니다. 도움이 되길 바랍니다.

Mycat의 Mysql 클러스터 읽기 및 쓰기 분리 구현에 대해 이야기해 보겠습니다.

MySQL 읽기-쓰기 분리 개요

  • MySQL은 현재 전 세계에서 가장 널리 사용되는 무료 데이터베이스로, 시스템 운영 및 유지 관리에 종사하는 모든 엔지니어가 이에 대해 접해 봤을 것입니다.

  • 실제 프로덕션 환경에서 독립 데이터베이스로서의 단일 MySQL은 보안, 고가용성 및 높은 동시성 측면에서 실제 요구 사항을 전혀 충족할 수 없습니다.

  • 따라서 일반적으로 데이터를 Master-Slave 복제를 통해 동기화한 다음 읽기-쓰기 분리(MySQL-Proxy/Amoeba)를 통해 데이터베이스의 동시 부하를 증가시키는 능력을 제공합니다. 배포하고 구현합니다.

읽기-쓰기 분리의 작동 원리

  • 기본 원칙은 다음과 같습니다.

  • 기본 데이터베이스는 트랜잭션 추가, 수정 및 삭제 작업(INSERT, UPDATE, DELETE)을 처리합니다.

  • 데이터베이스에서 SELECT 쿼리 작업 처리

  • 데이터베이스 복제는 트랜잭션 작업으로 인해 발생한 변경 사항을 클러스터의 슬레이브 데이터베이스에 동기화하는 데 사용됩니다.

읽기와 쓰기를 분리해야 하는 이유

  • 접근 압력이 높아지면서 단일 서버의 성능이 병목 현상을 일으키고 부하를 공유해야 합니다

  • 마스터-슬레이브만 해당 쓰기 및 읽기를 담당하며 X(쓰기) 잠금 및 S(읽기) 잠금 경합을 크게 완화합니다

  • myisam 엔진은 데이터베이스에서 구성하여 쿼리 성능을 향상하고 시스템 오버헤드를 절약할 수 있습니다

  • 중복성 증가, 유용성 향상

읽기-쓰기 분리 방법

  • 일반적으로 구현하는 방법에는 두 가지가 있습니다
  • 응용 프로그램 계층 구현, 웹 사이트 프로그램 구현
  • 응용 프로그램 계층 구현은 응용 프로그램 내부를 의미합니다. 그리고 읽기 및 쓰기 분리는 커넥터에서 구현됩니다

  • 장점:

  • 읽기 및 쓰기 분리는 응용 프로그램 내부에서 구현되며 설치는

  • 에서 사용할 수 있습니다. 특정 배포 어려움을 줄입니다

  • 액세스 압력이 특정 수준 이하이고 성능이 매우 좋습니다

  • 단점:

  • 일단 아키텍처가 조정되면 그에 따라 코드도 변경되어야 합니다

  • 자동 서브 라이브러리, 서브 테이블 등 고급 애플리케이션 구현이 어렵다

  • 대규모 애플리케이션 시나리오에는 적용 불가

미들웨어 레이어 구현 :

  • 미들웨어 레이어 구현은 외부 미들웨어 프로그램에서 읽기-쓰기 분리를 구현하는 일반적인 미들웨어를 말합니다.

  • 소프트웨어 프로그램

  • Cobar:

  • Alibaba B2B에서 개발한 관계형 분산 시스템 , 거의 3,000개의 MySQL 인스턴스를 관리합니다. 나중에 저자의 이탈로 인해 cobar는 더 이상 유지 관리되지 않았습니다. Alibaba도 cobar를 대체하기 위해 tddl을 개발했습니다.

  • MyCAT:

  • 커뮤니티 매니아들이 Alibaba cobar를 기반으로 2차 개발을 진행하고 당시 cobar가 안고 있던 몇 가지 문제를 해결하고 많은 새로운 기능을 추가했습니다. 현재 MyCAT 커뮤니티는 매우 활발하며 일부 회사에서는 이미 MyCAT을 사용하고 있습니다. 일반적으로 지원 수준은

  • 보다 높으며 계속 유지됩니다.

  • OneProxy:

  • 데이터베이스 업계의 빅 보스인 전 Alipay 데이터베이스 팀 리더 Lou Zong이 C를 사용하여 공식 mysql 프록시 아이디어를 기반으로 개발했으며 OneProxy는 상업용 유료 미들웨어이며 Lou Zong이 제공했습니다. up 성능과 안정성에 중점을 두고 일부 기능이 추가되었습니다. 어떤 사람들은 그것을 테스트했고 높은 동시성에서 매우 안정적이라고 말했습니다.

  • Vitess:

  • 이 미들웨어는 유튜브 제작에 사용되는데 아키텍처가 매우 복잡합니다. 이전 미들웨어와 달리 Vitess를 사용하는 애플리케이션의 변경 사항은 상대적으로 큽니다. 그가 제공하는 언어의 API 인터페이스를 사용하려면 그의 디자인 아이디어 중 일부를 배울 수 있습니다.

  • 킹샤드:

  • Kingshard는 전 360Atlas 미들웨어 개발팀의 Chen Fei가 여가 시간에 Go 언어로 개발했습니다. 현재 개발에 참여하는 사람은 3명 정도이며, 아직 성숙하고 사용 가능한 제품이 아니므로 추가 작업이 필요합니다. 지속적으로 개선됩니다.

  • Atlas:

  • 360 팀은 mysql 프록시를 기반으로 C에서 lua를 다시 작성했습니다. 원본 버전은 테이블 샤딩을 지원하며, 샤딩된 데이터베이스 및 테이블 버전이 출시되었습니다. 인터넷에서 몇몇 친구들이 높은 동시성에서 종종 멈춘다고 말하는 것을 봤습니다. 사용하려면 미리 테스트해야 합니다.

  • MaxScale 및 MySQL 경로:

  • 이 두 미들웨어는 공식적으로 간주됩니다. MaxScale은 mariadb(MySQL의 원본 작성자가 관리하는 버전)에서 개발되었습니다. 현재 버전은 샤딩 데이터베이스 및 테이블을 지원하지 않습니다. MySQL Route는 현재 MySQL 공식 Oracle 회사에서 출시한 미들웨어입니다.

  • 장점:

  • 아키텍처 설계가 더 유연합니다.

  • 투명한 수평 분할, 장애 조치 및 모니터링과 같은 일부 고급 제어를 프로그램에 구현할 수 있습니다. 기술적 수단을 사용하여 개선할 수 있습니다. mysql 성능이 비즈니스 코드에 미치는 영향 작고 동시에 안전함

  • 단점:

  • 특정 개발 및 운영팀의 지원이 필요합니다.


MyCAT이란 무엇입니까

  • 엔터프라이즈 애플리케이션 개발을 위한 완전 오픈 소스, 대규모 데이터베이스 클러스터

  • 트랜잭션, ACID 및 MySQL을 대체할 수 있는 향상된 데이터베이스 버전을 지원합니다

  • 고가의 Oracle 클러스터를 대체하는 MySQL 클러스터의 엔터프라이즈급 데이터베이스라고 할 수 있습니다

  • 메모리 캐싱 기술, NoSQL 기술, HDFS 빅데이터를 통합한 새로운 SQL Server

  • 기존 데이터베이스를 결합합니다. 및 새로운 분산 데이터 웨어하우스 차세대 엔터프라이즈급 데이터베이스 제품

  • 새로운 데이터베이스 미들웨어 제품


MyCat 서비스 설치 및 구성

  • MyCat은 Windows를 지원하는 컴파일된 설치 패키지를 제공합니다. Linux, Mac, Solaris 및 기타 시스템을 설치하고 실행하려면

  • 공식 다운로드 홈페이지 http://www.mycat.org.cn/

  • 실험적 아키텍처:
  • 192.168. 2.2 Mycat CentOS 8.3.2011
  • 192.168.2.3 메인 서버 CentOS 7.6
  • 192.168.2.5 슬레이브 서버 CentOS 7.6
  • Mycat을 실행하려면 JDK 1.7 이상이 필요합니다

  • Mycat 다운로드
  • wget http:/ /dl .mycat.org.cn/1.6.7.6/20210303094759/Mycat-server-1.6.7.6-release-20210303094759-linux.tar.gz
  • tar xf Mycat-server-1.6.7.6-release-20210303094759-linux. tar.gz -C /usr/local/
  • sudo useradd -M -N -s /sbin/nologin mycat && echo "123456" | sudo passwd --stdin mycat
  • sudo chown -R mycat. mycat/

  • bin 프로그램 디렉터리, Linux에서 실행: ./mycat console, first chmod +x *
    참고: Mycat은 { console | start | stop | restart status | .xml은 Mycat 서버 매개변수 조정 및 사용자 인증을 위한 구성 파일입니다.schema.xml은 논리적 라이브러리 정의, 테이블 및 샤딩 정의를 위한 구성 파일입니다. rule.xml은 샤딩 규칙에 대한 구성 파일 및 샤딩의 일부 특정 매개변수 정보입니다. 규칙을 이 디렉터리에도 별도의 파일로 저장하세요. 구성 파일이 수정된 경우 적용하려면 Mycat을 다시 시작해야 합니다.
    lib 디렉토리에는 주로 mycat이 의존하는 일부 jar 파일이 저장됩니다.
    로그는 하루에 한 파일씩 log/mycat.log에 저장됩니다. 로그 구성은 필요에 따라 디버그 수준에서 더 많은 정보를 조정할 수 있습니다. 문제 해결을 용이하게 하기 위해 출력됩니다.

MyCat 서비스 시작 및 시작 설정

  • MyCAT을 Linux에 배포하고 시작하려면 먼저 Linux 시스템의 환경 변수에 MYCAT_HOME을 구성해야 합니다.

  • sudo vim /etc/ profile.d/mycat.sh

    MYCAT_HOME=/usr/local/mycat PATH=$MYCAT_HOME/bin:$PATH

  • 환경 변수가 적용됩니다

  • . d/mycat.sh

    서비스 시작
  • /usr/local/mycat/bin/mycat start
  • cat /usr/local/mycat/logs/wrapper.log

mycat 사용자 계정 및 권한 정보는 conf/server.xml 파일

  • vim /usr/local/mycat/conf/server.xml

  • 이란 무엇입니까? 여기에 정의된 것은 192.168.2.2에서 mycat에 로그인하는 것입니다. 사용자 이름과 비밀번호, 이름은 사용자 정의할 수 있습니다. 192.168.2.2에서 mysqld 서비스가 실행되고 있지 않습니다. 스키마에 지정된 데이터베이스 이름은 서버 측에 있어야 하는 데이터베이스입니다!

MyCAT 구성 파일 스키마 편집 xml{,.bak}

구성 파일 편집
  • vim /usr/local/mycat/conf/schema.xml
  • < !DOCTYPE mycat:schema SYSTEM "schema.dtd">
  • 여기 URL에 주의하세요. 잘못 입력하면 시작이 실패할 수 있습니다! +                     < "mydata"/>
                                                                  균형="1"
    writeType="0" dbType="mysql" dbDriver="네이티브 " switchType= "-1"slaveThreshold="100">                                                                           >                                                                         읽기 서버                      ;/writeHost>

    >

  • 모든 읽기 작업을 읽기 서버에서 강제 실행하고 데이터가 기록될 때만 쓰기 서버로 전환합니다.

  • 여기서 mycat 사용자는 마스터-슬레이브 데이터베이스 192.168에서 승인을 받아야 합니다. 2.3 및 2.5

  • '123456';

  • 또는 지정된 네트워크 세그먼트

  • 에 의해 식별된 'mycat'@'%'에 *.*에 대한 모든 권한을 부여합니다. *.*에 대한 모든 권한을 'mycat에 부여합니다. '@' 192.168.2.%' IDENTIFIED BY '123456';

  • flush 특권;

  • 이 오류가 보고되고 서버가 정상적으로 실행되면 먼저 인증이 있는지 확인하세요

  • ERR OR 1184(HY000): 잘못된 데이터 소스: 0

 schema: 의 데이터베이스에 해당하는 논리 라이브러리 논리적 라이브러리인 MySQL은 포함된 라이브러리를 정의합니다. 테이블 .
table: 테이블, 즉 물리적 데이터베이스에 저장된 테이블입니다. 기존 데이터베이스와 달리 여기의 테이블은 테이블에 대한 샤딩 규칙 정의를 통해 저장하는 논리적 데이터 노드 DataNode를 선언해야 합니다. 테이블은 자신이 속한 "childTable"을 정의할 수 있습니다. 하위 테이블의 샤딩은 "상위 테이블"의 특정 샤딩 주소에 따라 달라집니다. 간단히 말해 상위 테이블의 특정 레코드 A에 속하는 모든 하위 테이블입니다. 레코드는 모두 A와 동일한 샤드에 저장됩니다.
샤딩 규칙: 필드와 함수를 묶은 정의로, 이 필드의 값을 기준으로 저장된 샤드(DataNode)의 시퀀스 번호를 반환합니다. 각 테이블은 샤딩 규칙을 정의할 수 있습니다. 유연하게 확장할 수 있습니다. 숫자 기반 샤딩 규칙, 문자열 샤딩 규칙 등이 기본으로 제공됩니다.
dataNode: MyCAT의 논리적 데이터 노드는 테이블을 저장하는 특정 물리적 노드입니다. 샤드 노드라고도 합니다. 일반적으로 DataSource를 통해 특정 백엔드 데이터베이스와 연결됩니다. 마스터 노드 하나와 슬레이브 하나, 두 개의 DataSource로 설정됩니다. 마스터 노드가 다운되면 시스템이 자동으로 슬레이브 노드로 전환됩니다.
dataHost: dataNode에 바인딩하기 위한 물리적 라이브러리의 액세스 주소를 정의합니다.

MyCAT은 현재 구성 파일을 통해 논리 라이브러리 및 관련 구성을 정의합니다.
  논리 라이브러리, 테이블, 샤드 노드 및 기타 콘텐츠는 MYCAT_HOME/conf/schema.xml에 정의됩니다.
  샤딩은 MYCAT_HOME/conf/rule.xml에 정의됩니다.
MYCAT_HOME/conf/server.xml에 포트 등 사용자 및 시스템 관련 변수를 정의합니다.

참고:
스키마 태그는 MyCat 인스턴스에서 논리 라이브러리를 정의하는 데 사용됩니다. 이름 뒤에는 논리 라이브러리 이름이 옵니다. MyCat은 여러 논리 라이브러리를 가질 수 있으며 각 논리 라이브러리에는 자체 관련 구성이 있습니다. 스키마 태그를 사용하여 이러한 다양한 논리 라이브러리를 나눌 수 있습니다.
checkSQLschema 속성의 기본값은 false입니다. 공식 문서에서는 "select * from db1.testtable"이라는 테이블 앞의 데이터베이스 이름을 제거할지 여부를 의미합니다. true로 설정하면 db1이 제거됩니다. 그러나 db1의 이름이 스키마의 이름이 아닌 경우에는 제거되지 않으므로 공식적으로는 이 구문을 사용하지 않는 것이 좋습니다. 또한 기본적으로 false로 설정됩니다.
sqlMaxLimit 값이 특정 숫자로 설정된 경우. 실행된 각 SQL 문에 대해 제한 문이 추가되지 않으면 MyCat은 자동으로 해당 값을 추가합니다. 예를 들어 값을 100으로 설정하고 "select * from test_table"을 실행하면
"select * from test_tablelimit 100"이 됩니다.
dataNode 태그는 우리가 일반적으로 부르는 MyCat의 데이터 노드를 정의합니다. 데이터 샤딩

  • 서비스 다시 시작
  • /usr/local/mycat/bin/mycat restart
    Mycat 서버 중지 중...
    Mycat 서버 중지 중.
    Mycat 서버 시작 중...
    tail /usr/local/ mycat/logs/wrapper.log

Configure MySQL master-slave

  • 2개의 서버에 각각 mariadb를 설치하고 구성하려면 https://blog.csdn을 참조하세요. net/gaofei0428/article/details/103829676?spm=1001.2014.3001.5501
  • 메인 데이터베이스 쪽 첫 번째 192.168.2.3 Edit /etc/my.cnf

  • /etc/my. 씨엔에프
    [ mysqld]
    datadir =/var/lib/mysql
    소켓=/var/lib/mysql/mysql.sock

    Symbolic-links=0

    log-bin=/data/mysql/mysql-bin
    server-id =1
    binlog-ignore-db=mysql
    binlog-ignore-db=information_schema
    binlog-ignore-db=performance_schema
    binlog-ignore-db=test
    innodb_flush_log_at_trx_commit=1
    binlog-do-db=mydata
    Replicate-do- db=mydata
  • lower_case_table_names=1 대소문자 일치 켜기
  • 동기화해야 할 데이터베이스가 미리 존재해야 한다는 점에 유의하세요

  • 그럼 오류 없이 시작하십시오. 서버 192.168.2.5 /etc/my.cnf 구성

  • vim /etc/my.cnf                                          ~           ​ock

    Symbolic-links=0

    log-bin=/data/mysql/mysql- bin
    서버 ID=2
    릴레이 로그 인덱스=/data/mysql/slave-relay-bin.index
    릴레이 로그=/ 데이터/mysql/slave-relay-bin
    lower_case_table_names=1

    read_only=1 데이터 쓰기 저장을 방지하고 슬레이브 동기 복제에 영향을 미치지 않도록 읽기 전용 모드를 켜십시오
  • lower_case_table_names=1 대소문자 일치 켜기

    슬레이브 데이터베이스 서비스를 다시 시작한 후 다음 작업을 수행하세요
  • 슬레이브 서버의 슬레이브를 중지하고 슬레이브 데이터베이스 사용자를 생성합니다
  • mysql -uroot -p123456 -e "stopslave"
  • mysql -uroot -p123456 -e "*.*에 복제 슬레이브를 'slave'@'%'로 부여 '123456'으로 식별됨"
  • mysql -uroot -p123456 -e "mysql.user에서 사용자, 비밀번호 선택"


mysql -uroot -p123456 -e " 마스터를 master_host='192.168.2.3'으로 변경, master_user='slave',master_password='123456',master_log_file='mysql-bin.000002',master_log_pos=245;"

mysql -uroot -p123456 -e "슬레이브 시작"
    mysql -uroot -p123456 -e "슬레이브 표시 상태"


  • Test

  • 먼저 메인 서버 192.168.2.3

  • mysqldump -uroot -p --all-databases > all_dbs .sql

  • 그런 다음 서버 192.168.2.5

  • mysql -uroot -p < /tmp/all_dbs.sql

  • 메인에 192.168.2.3을 추가하세요. 데이터베이스 측 일부 데이터의 경우 슬레이브 데이터베이스가 동기화되었는지 관찰

  • 슬레이브 서버에서 확인

  • 동기화 오류가 있는 경우 슬레이브 서버에서 슬레이브를 중지하고 그런 다음 마스터를 다시 변경하십시오.

슬레이브 사용자 로그인 테스트 사용

  • 다음으로 돌아가기 mycat 서버 192.168.2.2

    로그인을 시도해보세요
  • mysql -uroot - p123456 -h192.168.2.2 -P8066
  • 8066은 mycat이 실행될 때의 포트 번호입니다

읽기 및 쓰기 분리 테스트

mysql -uroot -p123456 -h192 .168.2.2 -P9066 -e "show @@datasource"

  • 9066은 mycat 관리 포트입니다

  • select * from mydata.mylist;
  • 데이터 쓰기 또는 데이터 변경

mydata.mylist 값(10,'test')에 삽입;

결함 시뮬레이션, 먼저 슬레이브 서버 192.168.2.5

  • systemctl stop mariadb.service

  • 192.168.2.2에 데이터 쓰기를 시도 중
mydata.mylist 값(7,'gf')에 삽입;

  • 메인 서버에서 보기 192.168.2.3

  • 슬레이브 서버 열기 192.168.2.5

  • 메인 서버 시뮬레이션 192.168.2.3 다운타임

    • 쿼리는 정상이지만 데이터를 쓰려고 합니다

    • 쿼리는 정상이지만 쓸 수 없습니다


    • 여러 라이브러리 추가
    • vim 고양이 /usr/ local/mycat /conf/server.xml
    •                                                                                              
      vim /usr/local/mycat/conf/schema.xml

    < ;dataNode name="dn2" dataHost="dthost1" Database="wordpress"/>

    • 재시작 서비스 추가 후
    /usr/local/ mycat/bin/mycat restart

    tail /usr/ local/mycat/logs/wrpper.log

    오류 처리

    시작 실패: JVM의 신호를 기다리는 동안 시간이 초과되었습니다.

    JVM이 요청 시 종료되지 않아 종료되었습니다
    • 솔루션
      Wrapper.conf에
      wrapper.startup.timeout=300
      추가 // 시간 초과 300초
      wrapper.ping.timeout=120

      권장 학습: mysql 비디오 튜토리얼

위 내용은 Mycat의 Mysql 클러스터 읽기 및 쓰기 분리 구현에 대해 이야기해 보겠습니다.의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

성명:
이 기사는 csdn.net에서 복제됩니다. 침해가 있는 경우 admin@php.cn으로 문의하시기 바랍니다. 삭제