Maison > base de données > tutoriel mysql > le corps du texte

Parlons de l'implémentation par Mycat de la séparation lecture-écriture du cluster Mysql

WBOY
Libérer: 2022-01-21 18:11:06
avant
2779 Les gens l'ont consulté

Cet article vous présente les connaissances pertinentes sur la séparation en lecture et en écriture MySQL, j'espère qu'il vous sera utile.

Parlons de l'implémentation par Mycat de la séparation lecture-écriture du cluster Mysql

Aperçu de la séparation lecture-écriture MySQL

  • MySQL est actuellement la base de données gratuite la plus utilisée au monde. Je pense que tous les ingénieurs impliqués dans l'exploitation et la maintenance du système doivent être entrés en contact avec elle.

  • Dans un environnement de production réel, un seul MySQL en tant que base de données indépendante est totalement incapable de répondre aux besoins réels, peu importe en termes de sécurité, de haute disponibilité et de haute concurrence.

  • Par conséquent, de manière générale, les données sont synchronisées via Réplication maître-esclave, puis via séparation lecture-écriture (MySQL-Proxy/Amoeba) pour augmenter la charge simultanée de la base de données. Capacité à déployer et mettre en œuvre. "Le principe de fonctionnement de la séparation en lecture et en écriture"

Traitement des opérations de requête SELECT à partir de la base de données

  • La réplication de la base de données est utilisée pour synchroniser les modifications provoquées par les opérations transactionnelles avec la base de données esclave du cluster.
  • Pourquoi la séparation en lecture et en écriture

    Face à la pression d'accès croissante, les performances d'un serveur unique sont devenues un goulot d'étranglement et la charge doit être partagée
  • Maître-esclave uniquement Responsable de l'écriture et de la lecture respectives, atténuant considérablement les conflits de verrouillage X (écriture) et de verrouillage S (lecture)

Le moteur myisam peut être configuré à partir de la base de données pour améliorer les performances des requêtes et économiser la surcharge du système

Augmenter la redondance, améliorer la convivialité

  • Moyens d'obtenir une séparation lecture-écriture

  • Il existe généralement deux façons de l'implémenter

  • Implémentation de la couche d'application, implémentation du programme de site Web
  • L'implémentation de la couche d'application fait référence à l'intérieur de l'application Et la séparation en lecture et en écriture est réalisée dans le connecteur

Avantages :

La séparation en lecture et en écriture est réalisée à l'intérieur de l'application, et l'installation peut être utilisée
  • pour réduire une certaine difficulté de déploiement

    La pression d'accès est inférieure à un certain niveau, et les performances sont très bonnes
  • Inconvénients :

  • Une fois l'architecture ajustée, le code doit changer en conséquence
  • Il est difficile d'implémenter des applications avancées, telles qu'une sous-bibliothèque et une sous-table automatiques
  • Impossible de s'appliquer à des scénarios d'application volumineux
  • Implémentation de la couche middleware :

  • L'implémentation de la couche middleware fait référence au middleware commun qui implémente la séparation lecture-écriture dans les programmes middleware externes

  • Programme logiciel

Cobar :

    Un système distribué relationnel développé par Alibaba B2B , gérant près de 3 000 instances MySQL. Il a résisté au test d'Alibaba. Plus tard, en raison du départ de l'auteur, cobar n'a plus été maintenu. Alibaba a également développé tddl pour remplacer cobar.
  • MyCAT :
  • Les passionnés de la communauté ont effectué un développement secondaire basé sur Alibaba cobar, résolu certains problèmes que cobar avait à l'époque et lui ont ajouté de nombreuses nouvelles fonctionnalités. Actuellement, la communauté MyCAT est très active et certaines entreprises utilisent déjà MyCAT. D'une manière générale, le niveau de support est supérieur à

, et il continuera à être maintenu.
  • OneProxy :
  • Un grand patron de l'industrie des bases de données, l'ancien chef d'équipe de base de données Alipay, Lou Zong, a développé, sur la base de l'idée officielle du proxy MySQL en utilisant C pour développer, OneProxy est un middleware commercial payant, Lou Zong l'a donné up Certains points de fonctionnalités ont été ajoutés pour se concentrer sur les performances et la stabilité. Quelqu'un l'a testé
  • et a déclaré qu'il était très stable dans des conditions de concurrence élevée.
  • Vitess :
  • Ce middleware est utilisé dans la production Youtube, mais l'architecture est très complexe. Contrairement au middleware précédent, les modifications apportées à l'application utilisant Vitess sont relativement importantes. Pour utiliser l'interface API du langage qu'il fournit, nous pouvons nous inspirer de certaines de ses idées de conception.
  • Éclat royal :
  • Kingshard a été développé par Chen Fei de l'ancienne équipe de développement de middleware 360Atlas dans le langage Go pendant son temps libre. Il y a actuellement environ 3 personnes impliquées dans le développement. À l'heure actuelle, ce n'est pas un produit mature et utilisable et doit le faire. être continuellement amélioré.

  • Atlas :

  • L'équipe 360 ​​a réécrit Lua en C basé sur un proxy MySQL. La version originale prend en charge le partitionnement de table, et une version de base de données et de table partitionnée a été publiée. J'ai vu des amis sur Internet dire souvent qu'il se bloque souvent en cas de concurrence élevée. Si vous souhaitez l'utiliser, vous devez le tester à l'avance.

  • MaxScale et MySQL Route :

  • Ces deux middlewares sont considérés comme officiels. MaxScale est développé par mariadb (une version maintenue par l'auteur original de MySQL). La version actuelle ne prend pas en charge le partitionnement des bases de données et des tables. MySQL Route est un middleware désormais publié par la société Oracle officielle MySQL.

  • Avantages :

  • La conception de l'architecture est plus flexible

  • Vous pouvez implémenter certains contrôles avancés sur le programme, tels que : le fractionnement horizontal transparent, le basculement et la surveillance. Vous pouvez compter sur des moyens techniques pour vous améliorer. l'impact des performances de MySQL sur le code métier Petit et sûr à la fois

  • Inconvénients :

  • Nécessite le soutien d'une certaine équipe de développement et d'exploitation.


Qu'est-ce que MyCAT

  • Un grand cluster de bases de données entièrement open source pour le développement d'applications d'entreprise

  • prend en charge les transactions, ACID et une version améliorée de la base de données qui peut remplacer MySQL

  • Il peut être considéré comme une base de données de cluster MySQL au niveau de l'entreprise, utilisée pour remplacer les clusters Oracle coûteux

  • Un nouveau serveur SQL qui intègre la technologie de mise en cache mémoire, la technologie NoSQL et le big data HDFS

  • Combine les bases de données traditionnelles et de nouveaux entrepôts de données distribués Une nouvelle génération de produits de base de données au niveau de l'entreprise

  • Un nouveau produit middleware de base de données


Installation et configuration du service MyCat

  • MyCat fournit des packages d'installation compilés, prenant en charge Windows et Linux, Mac, Solaris et autres systèmes à installer et à exécuter

  • Page d'accueil officielle de téléchargement http://www.mycat.org.cn/

  • Architecture expérimentale :
  • 192.168. 2.2 Mycat CentOS 8.3.2011
  • 192.168.2.3 Serveur principal CentOS 7.6
  • 192.168.2.5 Serveur esclave CentOS 7.6
  • L'exécution de Mycat nécessite JDK 1.7 ou supérieur

  • Téléchargez 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 moncat && echo "123456" | sudo passwd --stdin moncat
  • sudo chown -R moncat/usr/local/. monchat/

  • Répertoire du programme bin, exécuté sous Linux : ./mycat console, first chmod +x *
    Remarque : Mycat prend en charge les commandes { console start | restart status | .xml est le fichier de configuration pour l'ajustement des paramètres du serveur Mycat et l'autorisation des utilisateurs. schema.xml est le fichier de configuration pour la définition de la bibliothèque logique, la table et la définition de partitionnement. . Stockez-le dans un fichier séparé, également dans ce répertoire. Si le fichier de configuration est modifié, vous devez redémarrer Mycat pour prendre effet.
    Le répertoire lib stocke principalement certains fichiers jar dont dépend mycat.
    Le journal est stocké dans logs/mycat.log, un fichier par jour. La configuration du journal est dans conf/log4j.xml Selon vos propres besoins, vous pouvez ajuster le niveau de sortie pour déboguer. sera affiché, pour faciliter le dépannage.

Démarrage du service MyCat et paramètres de démarrage

  • Lors du déploiement et du démarrage de MyCAT sous Linux, vous devez d'abord configurer MYCAT_HOME dans la variable d'environnement du système Linux. La méthode de fonctionnement est la suivante :

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

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

  • Les variables d'environnement prennent effet

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

    Démarrer le service
  • /usr/local/mycat/bin/mycat start
  • cat /usr/local/mycat/logs/wrapper.log

mycat des utilisateurs Les informations de compte et d'autorisation sont configurées dans le fichier conf/server.xml

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

  • Ce qui est défini voici pour vous connecter à mycat sur 192.168.2.2 Nom d'utilisateur et mot de passe, le nom peut être personnalisé. Le service mysqld ne fonctionne pas sur 192.168.2.2. Le nom de la base de données spécifié dans les schémas est une base de données qui doit exister côté serveur !

Modifier le schéma du fichier de configuration MyCAT xml{,.bak}

Modifier le fichier de configuration
  • vim /usr/local/mycat/conf/schema.xml
  • < !DOCTYPE mycat:schema SYSTEM "schema.dtd">
  • Faites attention à l'URL ici, une écriture incorrecte entraînera l'échec du démarrage !

                                                                                                                                           < "mesdonnées"/>
                                                        balance="1" writeType="0" dbType="mysql" dbDriver="native " switchType= "-1" slaveThreshold="100">
                                                                                                                                                        .3:3306" user="mycat " password="123456">                                                                            Serveur de lecture
                             ;/writeHost>

                                                                                                           

  • Forcer toutes les opérations de lecture à s'exécuter sur le serveur de lecture et passer au serveur d'écriture uniquement lorsque les données sont écrites

  • Notez que l'utilisateur mycat ici doit être autorisé sur la base de données maître-esclave 192.168. 2.3 et 2.5

  • ACCORDEZ TOUS LES PRIVILÈGES SUR *.* À 'mycat'@'%' IDENTIFIÉ PAR '123456';

  • ou segment de réseau spécifié

  • ACCORDEZ TOUS LES PRIVILÈGES SUR *.* À 'mycat '@' 192.168.2.%' IDENTIFIÉ PAR '123456';

  • flush privilèges;

  • Si cette erreur est signalée et que le serveur fonctionne normalement, vérifiez d'abord s'il y a une autorisation

  • ERR OR 1184 (HY000) : Source de données invalide : 0

 Schéma : Bibliothèque logique, correspondant à la base de données dans MySQL, une bibliothèque logique définit les éléments inclus Tableau .
table : Table, c'est-à-dire une table stockée dans une base de données physique. Différente des bases de données traditionnelles, la table doit ici déclarer le nœud de données logique DataNode qu'elle stocke. Ceci est réalisé grâce à la définition de règles de partitionnement pour la table. Une table peut définir la "childTable" à laquelle elle appartient. Le partitionnement de la table enfant dépend de l'adresse de partitionnement spécifique de la "table parent". En termes simples, il s'agit de toutes les tables enfants appartenant à un certain enregistrement A dans le parent. table Les enregistrements sont tous stockés sur la même partition que A.
Règle de partitionnement : il s'agit d'une définition groupée d'un champ et d'une fonction. En fonction de la valeur de ce champ, le numéro de séquence du fragment stocké (DataNode) est renvoyé. Chaque table peut définir une règle de partitionnement, et la règle de partitionnement peut. être étendu de manière flexible. Des règles de partitionnement basées sur des nombres, des règles de partitionnement de chaînes, etc. sont fournies par défaut.
dataNode : Le nœud de données logique de MyCAT est un nœud physique spécifique qui stocke les tables. Il est également appelé nœud de partition. Il est associé à une base de données back-end spécifique via DataSource. De manière générale, pour une haute disponibilité, chaque DataNode. est configuré avec deux DataSources, un maître et un esclave. Lorsque le nœud maître tombe en panne, le système passe automatiquement au nœud esclave.
dataHost : Définissez l'adresse d'accès d'une bibliothèque physique pour la liaison à dataNode.

MyCAT définit actuellement les bibliothèques logiques et les configurations associées via des fichiers de configuration :
  Les bibliothèques logiques, les tables, les nœuds de partition et autres contenus sont définis dans MYCAT_HOME/conf/schema.xml
  Le partage est défini dans les règles MYCAT_HOME/conf/rule.xml ;
Définissez les variables liées à l'utilisateur et au système, telles que les ports, etc. dans MYCAT_HOME/conf/server.xml.

Remarque :
La balise de schéma est utilisée pour définir la bibliothèque logique dans le nom de l'instance MyCat : elle est suivie du nom de la bibliothèque logique. MyCat peut avoir plusieurs bibliothèques logiques, et chaque bibliothèque logique a sa propre configuration associée. Vous pouvez utiliser des balises de schéma pour diviser ces différentes bibliothèques logiques.
L'attribut checkSQLschema est par défaut false. Le document officiel indique s'il faut supprimer le nom de la base de données devant la table, "select * from db1.testtable". S'il est défini sur true, db1 sera supprimé. Mais si le nom de db1 n'est pas le nom du schéma, il ne sera pas supprimé, il est donc officiellement recommandé de ne pas utiliser cette syntaxe. Également défini sur false par défaut.
sqlMaxLimit Lorsque la valeur est définie sur un certain nombre. Pour chaque instruction SQL exécutée, si aucune instruction de limite n'est ajoutée, MyCat ajoutera automatiquement la valeur correspondante. Par exemple, si vous définissez la valeur sur 100 et exécutez « select * from test_table », l'effet sera « select * from test_table limit 100 ». La balise dataNode définit les nœuds de données dans MyCat, ce que nous appelons habituellement le partage de données.


  • Redémarrez le service
  • /usr/local/mycat/bin/mycat restart
    Arrêt du serveur Mycat...
    Arrêt du serveur Mycat.
    Démarrage du serveur Mycat...
    tail /usr/local/ mycat/logs/wrapper.log

Configurer MySQL maître-esclave

  • Installez et configurez mariadb sur 2 serveurs respectivement Pour les étapes spécifiques, veuillez vous référer à : https://blog.csdn. net/ gaofei0428/article/details/103829676?spm=1001.2014.3001.5501
  • Premier côté base de données principale 192.168.2.3 Edit /etc/my.cnf

  • /etc/my.cn f
    [ mysqld]
    datadir =/var/lib/mysql
    socket=/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 Activer la correspondance de casse
  • Notez que la base de données qui doit être synchronisée doit exister à l'avance

  • et puis démarrez-le sans erreur Depuis le serveur 192.168.2.5 Configurer /etc/my.cnf

  • vim /etc/my.cnf                                                                                                                                                                                                   ock

    symbolic-links=0

    log-bin=/data/mysql/mysql- bin
    server-id=2
    relay-log-index=/data/mysql/slave-relay-bin.index
    relay-log=/ data/mysql/slave-relay-bin
    lower_case_table_names=1

    read_only=1 Activez le mode lecture seule pour empêcher l'écriture des données et n'affectera pas la réplication synchrone de l'esclave
  • lower_case_table_names=1 Activez la correspondance de casse

    Après avoir redémarré le service de base de données esclave, effectuez les opérations suivantes
  • Arrêtez l'esclave du serveur esclave et créez un utilisateur de base de données esclave
  • mysql -uroot -p123456 -e "stop slave"
  • mysql -uroot -p123456 -e "accorder l'esclave de réplication sur *.* à 'slave'@'%' identifié par '123456'"
  • mysql -uroot -p123456 -e "sélectionnez l'utilisateur, le mot de passe de mysql.user"


mysql -uroot -p123456 -e " changez le maître en 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 "start slave"
    mysql -uroot -p123456 -e "show slave statut"


  • Test

  • Exportez d'abord la sauvegarde de toutes les bibliothèques du serveur principal 192.168.2.3

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

  • Puis importer depuis le serveur 192.168.2.5

  • mysql -uroot -p < Ajoutez 192.168.2.3 sur le réseau principal côté base de données Pour certaines données, observez si la base de données esclave est synchronisée

Vérifiez sur le serveur esclave

S'il y a une erreur de synchronisation, vous devez arrêter l'esclave sur le serveur esclave et puis changez à nouveau le maître

Utilisez le test de connexion de l'utilisateur esclave

  • Retour à serveur mycat 192.168.2.2

    Essayez de vous connecter
  • mysql -uroot - p123456 -h192.168.2.2 -P8066
  • 8066 est le numéro de port lorsque mycat est en marche

pour tester la séparation en lecture et en écriture

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

  • 9066 est le port de gestion mycat
  • select * à partir de mydata.mylist;

Écrire des données ou modifier des données

  • insérer dans les valeurs de mydata.mylist (10, 'test');

    Simuler une panne , Arrêtez d'abord le serveur esclave 192.168.2.5
  • Systemctl Stop Mariadb.Service

🎜Thing to Write Data sur 192.168.2.2 🎜🎜insert dans MyData.Mylist Values ​​(7, 'GF'); 🎜🎜🎜🎜🎜🎜🎜Afficher sur le serveur principal 192.168.2.3 🎜🎜🎜 🎜 🎜🎜🎜Ouvrir le serveur esclave 192.168.2.5🎜🎜🎜🎜🎜🎜🎜Simuler le serveur principal 192.168.2.3 temps d'arrêt🎜🎜🎜🎜🎜🎜🎜 🎜

  • La requête est normale, j'essaie d'écrire des données

  • La requête est normale mais ne peut pas être écrite


  • Ajouter plusieurs bibliothèques
  • vim chat /usr/ local/mycat /conf/server.xml
  •                                                                                                          
    vim /usr/local/mycat/conf/schema.xml

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

  • Après avoir ajouté le service de redémarrage
/usr/local/ mycat/bin/mycat restart

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

Gestion des erreurs

Échec du démarrage : délai d'attente dépassé pour un signal de la JVM.

La JVM ne s'est pas fermée sur demande, s'est terminée
  • Solution
    Ajoutez
    wrapper.startup.timeout=300
    dans wrapper.conf // timeout 300 secondes
    wrapper.ping.timeout=120

    Recommandé apprentissage : tutoriel vidéo mysql

Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!

Étiquettes associées:
source:csdn.net
Déclaration de ce site Web
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn
Tutoriels populaires
Plus>
Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal
À propos de nous Clause de non-responsabilité Sitemap
Site Web PHP chinois:Formation PHP en ligne sur le bien-être public,Aidez les apprenants PHP à grandir rapidement!