이 기사에서는 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 성능이 비즈니스 코드에 미치는 영향 작고 동시에 안전함
단점:
특정 개발 및 운영팀의 지원이 필요합니다.
엔터프라이즈 애플리케이션 개발을 위한 완전 오픈 소스, 대규모 데이터베이스 클러스터
트랜잭션, ACID 및 MySQL을 대체할 수 있는 향상된 데이터베이스 버전을 지원합니다
고가의 Oracle 클러스터를 대체하는 MySQL 클러스터의 엔터프라이즈급 데이터베이스라고 할 수 있습니다
메모리 캐싱 기술, NoSQL 기술, HDFS 빅데이터를 통합한 새로운 SQL Server
기존 데이터베이스를 결합합니다. 및 새로운 분산 데이터 웨어하우스 차세대 엔터프라이즈급 데이터베이스 제품
새로운 데이터베이스 미들웨어 제품
MyCat은 Windows를 지원하는 컴파일된 설치 패키지를 제공합니다. Linux, Mac, Solaris 및 기타 시스템을 설치하고 실행하려면
공식 다운로드 홈페이지 http://www.mycat.org.cn/
MYCAT_HOME=/usr/local/mycat PATH=$MYCAT_HOME/bin:$PATH
여기 URL에 주의하세요. 잘못 입력하면 시작이 실패할 수 있습니다! + < "mydata"/>
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의 데이터 노드를 정의합니다. 데이터 샤딩
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 -h192 .168.2.2 -P9066 -e "show @@datasource"
mydata.mylist 값(10,'test')에 삽입;
결함 시뮬레이션, 먼저 슬레이브 서버 192.168.2.5
tail /usr/ local/mycat/logs/wrpper.log
오류 처리
시작 실패: JVM의 신호를 기다리는 동안 시간이 초과되었습니다.
JVM이 요청 시 종료되지 않아 종료되었습니다위 내용은 Mycat의 Mysql 클러스터 읽기 및 쓰기 분리 구현에 대해 이야기해 보겠습니다.의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!