Table des matières
Introduction
Remarque :
Mode d'emploi<. 🎜>
备注
checkmysql
consul-template
conf.d/server.json
主从切换测试
关闭 master
MHA 切换日志
总结
Maison base de données tutoriel mysql Explication détaillée de l'exemple de commutation automatique MHA de l'architecture consul

Explication détaillée de l'exemple de commutation automatique MHA de l'architecture consul

Jun 21, 2017 pm 04:35 PM
consul 切换 basé sur 架构 自动

Introduction

Pendant longtemps, nous n'avons pas activé le script de commutation automatique masterha_manager en ligne, principalement parce qu'il n'y a aucune garantie que la base de données ne soit pas accessible lorsque le réseau tremble (le câble réseau, le commutateur de l'armoire correspondante est instable). Par exemple, redémarrer la carte réseau de la machine où se trouve le script de détection ne signifie pas qu'il y a un problème avec la base de données, donc de cet aspect nous ne pouvons pas juger que la base de données est inaccessible via un seul point de détection.

Heureusement, nous pouvons utiliser consul (car consul fournit une interface DNS, l'auteur préfère utiliser consul au lieu de etcd). Nous ajoutons un mécanisme de détection multipoint. si plus de la moitié des points de détection détectent des problèmes avec la base de données, nous considérons que la base de données est inaccessible, puis commençons à appeler le script masterha_manager pour basculer, comme le montre la figure ci-dessous :

       <checkmysql>         <checkmysql>         <checkmysql>
            |                   |                     |
       +---------+          +---------+          +---------+
       | consul1 |          | consul2 |          | consul3 |
       +---------+          +---------+          +---------+
                  \             |               /
                   \            |              /
                    \           |             /
                     \          |            /
                     +----------------------+
                     |   http api && acl    |
                     +----------------------+
                                |
                                |
                     +----------------------+
                     | consul-template      | ----> < mysqlxxx.tpl >  --->  <mysqlxxx.conf>
                     +----------------------+
                                                                                  |
                                                                      +--------------------------+  
                                                                      | masterha_manager_consul  |
                                                                      +--------------------------+
Copier après la connexion
.

checkmysql doit être déployé sur chaque consul server , de cette façon, nous avons implémenté une détection multipoint pour savoir si MySQL est normal, checkmysql. définira une clé avec une valeur de 1 : mysql/mysqlxxxx/node-consul, sinon la valeur sera 0, où la valeur par défaut de node-consul est le nom d'hôte de l'hôte actuel.

checkmysql Après détection, nous utilisons le outil consul-template pour surveiller toutes les modifications clés en fonction du fichier modèle mysqlxxx.tpl S'il y a des modifications, la configuration mysqlxxxx.conf est générée, puis le script masterha_manager_consul est appelé

. Nous avons réécrit la méthode masterha_manager_consul dans le script MHA::HealthCheck::wait_until_unreachable pour éviter la détection de boucle infinie. Si moins de la moitié des points de détection pensent que la base de données est anormale, l'appel de ce tour sera quitté, sinon activez le démarrage du processus enfant. l'opération de commutation.

Remarque :

masterha_manager_consul est modifié en fonction de MHA v0.5.6, et par défaut, il n'est disponible qu'entre 21h00 et 9h00. le lendemain. Pour effectuer une commutation automatique entre les appareils, vous pouvez contrôler cette fonction via l'option night De plus, il est recommandé de déployer plusieurs consul server dans différents interrupteurs ou armoires

Mode d'emploi<. 🎜>

Pour le code, voir la structure globale de mha_manager_consul Comme suit :

mha_manager_consul
├── bin
│   ├── checkmysql
│   └── masterha_manager_consul
├── conf
│   ├── db.cnf
│   └── template-config
├── consul
│   ├── acl
│   │   ├── policy.ano
│   │   └── policy.key
│   ├── conf
│   │   └── consul.conf
│   └── conf.d
│       └── server.json
├── README.md
└── template
    └── mysql3308.tpl
Copier après la connexion
Environnement de test

Continuer à utiliser l'environnement de test précédent :

下面所有的操作都假设已经安装好了 consul cluster.

备注

在运行 checkmysql 之前, 我们需要设置好 acl 策略, 以免 consul 的敏感信息被旁人访问. 下面命令中的 token 参数即是 consul 主配置文件中的 acl_master_token 选项, 文件 policy.ano 则是限制匿名用户访问 mysql/* 相关键的策略, policy.key 则是设置允许访问 mysql.* 相关键的权限, 这里生成的 token 则为 dcb5b583-cd36-d39d-2b31-558bebf86502, 大家可以访问 consul acl 了解更多访问控制的内容.

#curl -X PUT --data @policy.ano http://localhost:8500/v1/acl/update?token=e95597e0-4045-11e7-a9ef-b6ba84687927
{"ID":"anonymous"}

#curl -X PUT --data @policy.key http://localhost:8500/v1/acl/update?token=e95597e0-4045-11e7-a9ef-b6ba84687927
{"ID":"dcb5b583-cd36-d39d-2b31-558bebf86502"}
Copier après la connexion

checkmysql

在每个 consul server 的节点上运行该脚本, 这里的 token 参数即为上述 acl 的结果, tag 则是 db.conf 配置里的实例, 通过以下命令启动:

perl checkmysql --conf db.cnf --verbose --tag mysql3308 --token dcb5b583-cd36-d39d-2b31-558bebf86502
[2017-06-08T10:09:14] mysql/mysql3308/cz-test2 with value 1 no change
[2017-06-08T10:09:15] mysql/mysql3308/cz-test2 with value 1 no change
Copier après la connexion

cz-test2 表示当前的主机名是 cz-test2, 对应上述介绍的 node-consul.

备注

如果你的 MySQL master 是通过 vip 提供服务, db.conf 配置里的 host 选项最好设置成 vip 的地址.

consul-template

在 checkmysql 更新 consul 的相关 key 之后, 如果有任意一个 checkmysql 变更了key 值, 则 consul-template 根据模板文件重新生成 mysqlxxx.conf 文件, 随后开始调用 masterha_manager_consul 脚本, consul-template 的配置详见 template-config; 通过以下命令启动:

# consul-template -config config 
2017/05/25 10:11:13 [DEBUG] (logging) enabling syslog on LOCAL5
Copier après la connexion

mysqlxxxx.tpl 模板文件的内容如下:

# node3308

cz-test1:1
cz-test2:1
cz-test3:1
Copier après la connexion

如果少于半数的监测点发现 MySQL 异常, consul-template 打印下面的消息:

[2017-06-08T10:24:15] status ok, skip switch..
Copier après la connexion

反之则打印 error 信息, 并开始调用 masterha_manager_consul 脚本:

[2017-05-25T10:24:48] status error, need switch..
Wed May 24 10:24:48 2017 - [info] Reading default configuration from /etc/masterha/app_default.cnf..
...
...
Copier après la connexion

conf.d/server.json

详见 template-config 配置中的 address = "consul.service.consul:8500" 选项; 在网络波动的情况下, address 选项如果只配置一个 consul server 的 ip 的话, consul-template 则不能连接到 consul server 中监控相应的 key 值, 尽管 consul-template 有重试功能, 但是在单 ip 的情况下, 难以确保可以正常获取相关的 key 值信息. conf.d/server.json 配置则将各个 consul server 的 ip 作为一个 dns 条目, 如下所示:

# dig @10.0.21.5 consul.service.consul
......
......
;; QUESTION SECTION:
;consul.service.consul.     IN  A

;; ANSWER SECTION:
consul.service.consul.  0   IN  A   10.0.21.7
consul.service.consul.  0   IN  A   10.0.21.5
consul.service.consul.  0   IN  A   10.0.21.17
Copier après la connexion

单个 consul server 异常, 会自动跳到正常的 consul-server 中.

主从切换测试

我们简单关闭 master 的实例, 看看各工具间的输出状态.

关闭 master

关闭 master 后, checkmysql 脚本开始更新状态, 在超过半数的情况下调用 masterha_manager_consul 脚本进行主从切换: checkmysql 脚本输出, 开始将 key 的值更为 0

[2017-06-08T18:16:43] mysql/mysql3308/cz-test2 with value 1 no change
DBI connect(&#39;mysql_read_default_file=./db.cnf;mysql_read_default_group=mysql3308&#39;,&#39;&#39;,...) failed: Can&#39;t connect to MySQL server on &#39;10.0.21.7&#39; (111) at checkmysql line 56
[2017-06-08T18:16:44] set 0 with key mysql/mysql3308/cz-test2 ok
DBI connect(&#39;mysql_read_default_file=./db.cnf;mysql_read_default_group=mysql3308&#39;,&#39;&#39;,...) failed: Can&#39;t connect to MySQL server on &#39;10.0.21.7&#39; (111) at checkmysql line 56
[2017-06-08T18:16:45] mysql/mysql3308/cz-test2 with value 0 no change
Copier après la connexion

mysql3308.conf 配置文件变更为如下:

# node3308

cz-test1:0
cz-test2:0
cz-test3:0
Copier après la connexion

consul-template 则显示如下:

# consul-template -config config 
2017/06/08 12:11:13 [DEBUG] (logging) enabling syslog on LOCAL5

[2017-05-24T12:16:48] status error, need switch.. # 脚本判定超过半数认为数据库不可访问
Wed Jun 08 12:16:48 2017 - [info] Reading default configuration from /etc/masterha/app_default.cnf..
Wed Jun 08 12:16:48 2017 - [info] Reading application default configuration from /etc/masterha/app_56.conf..
Wed Jun 08 12:16:48 2017 - [info] Updating application default configuration from /usr/bin/init_conf_loads..
....
Copier après la connexion

  

如果没有超过半数, consul-template 则显示以下:

[2017-06-08T12:24:15] status ok, skip switch..
Copier après la connexion

MHA 切换日志

mha 切换的日志则包含以下信息, 日志文件则根据 mha 的具体配置而定:

Wed Jun 08 12:45:37 2017 - [info] Starting master failover..
Wed Jun 08 12:45:37 2017 - [info] 
From:
10.0.21.7(10.0.21.7:3308) (current master)
 +--10.0.21.17(10.0.21.17:3308)

To:
10.0.21.17(10.0.21.17:3308) (new master)
...
...
Master failover to 10.0.21.17(10.0.21.17:3308) completed successfully.
Wed Jun 08 12:45:41 2017 - [info] Sending mail..
Copier après la connexion

  

总结

整体上而言, 使用 consul 的架构相对繁琐, 没有单节点那么简易方便, 不过对于比较核心的数据库来说, 一致性应该放到首位, 多点检测则很大程度上健壮了切换机制. 而且原工具自带的 masterha_manager 脚本本身只是循环检测, 超过三次错误(每次间隔时间递增)才会开始切换, 在网络波动, 交换机故障或数据库主机较繁忙的时候, 会引起一些意料之外的操作, 所以相对来说, 多点检测避免了这类不稳定的问题, 另外 consul cluster 部署完成后也可以用于其他需要一致性判断的业务, 不用太纠结于繁琐方面的考虑.

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!

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

Outils d'IA chauds

Undresser.AI Undress

Undresser.AI Undress

Application basée sur l'IA pour créer des photos de nu réalistes

AI Clothes Remover

AI Clothes Remover

Outil d'IA en ligne pour supprimer les vêtements des photos.

Undress AI Tool

Undress AI Tool

Images de déshabillage gratuites

Clothoff.io

Clothoff.io

Dissolvant de vêtements AI

AI Hentai Generator

AI Hentai Generator

Générez AI Hentai gratuitement.

Article chaud

R.E.P.O. Crystals d'énergie expliqués et ce qu'ils font (cristal jaune)
3 Il y a quelques semaines By 尊渡假赌尊渡假赌尊渡假赌
R.E.P.O. Meilleurs paramètres graphiques
3 Il y a quelques semaines By 尊渡假赌尊渡假赌尊渡假赌
R.E.P.O. Comment réparer l'audio si vous n'entendez personne
3 Il y a quelques semaines By 尊渡假赌尊渡假赌尊渡假赌
WWE 2K25: Comment déverrouiller tout dans Myrise
4 Il y a quelques semaines By 尊渡假赌尊渡假赌尊渡假赌

Outils chauds

Bloc-notes++7.3.1

Bloc-notes++7.3.1

Éditeur de code facile à utiliser et gratuit

SublimeText3 version chinoise

SublimeText3 version chinoise

Version chinoise, très simple à utiliser

Envoyer Studio 13.0.1

Envoyer Studio 13.0.1

Puissant environnement de développement intégré PHP

Dreamweaver CS6

Dreamweaver CS6

Outils de développement Web visuel

SublimeText3 version Mac

SublimeText3 version Mac

Logiciel d'édition de code au niveau de Dieu (SublimeText3)

Comment basculer entre la 4g et la 5g sur Xiaomi Mi 14Ultra ? Comment basculer entre la 4g et la 5g sur Xiaomi Mi 14Ultra ? Feb 23, 2024 am 11:49 AM

Xiaomi 14Ultra est l'un des modèles Xiaomi les plus populaires cette année. Xiaomi 14Ultra met non seulement à niveau le processeur et diverses configurations, mais apporte également de nombreuses nouvelles applications fonctionnelles aux utilisateurs. Cela se voit dans les ventes de téléphones mobiles Xiaomi 14Ultra. populaire, mais il existe certaines fonctions couramment utilisées que vous ne connaissez peut-être pas encore. Alors, comment Xiaomi 14Ultra bascule-t-il entre la 4g et la 5g ? Laissez-moi vous présenter le contenu spécifique ci-dessous ! Comment basculer entre la 4g et la 5g sur Xiaomi 14Ultra ? 1. Ouvrez le menu des paramètres de votre téléphone. 2. Recherchez et sélectionnez les options « Réseau » et « Réseau mobile » dans le menu des paramètres. 3. Dans les paramètres du réseau mobile, vous verrez l'option « Type de réseau préféré ». 4. Cliquez ou sélectionnez cette option et vous verrez

Tutoriel d'utilisation pour passer de la version familiale Win11 à la version professionnelle_Tutoriel d'utilisation pour passer de la version familiale Win11 à la version professionnelle Tutoriel d'utilisation pour passer de la version familiale Win11 à la version professionnelle_Tutoriel d'utilisation pour passer de la version familiale Win11 à la version professionnelle Mar 20, 2024 pm 01:58 PM

Comment convertir Win11 Home Edition en Win11 Professional Edition ? Dans le système Win11, il est divisé en Home Edition, Professional Edition, Enterprise Edition, etc., et la plupart des ordinateurs portables Win11 sont préinstallés avec le système Win11 Home Edition. Aujourd'hui, l'éditeur va vous montrer les étapes pour passer de la version familiale de Win11 à la version professionnelle 1. Tout d'abord, faites un clic droit sur cet ordinateur sur le bureau et les propriétés de Win11 ! 2. Cliquez sur Modifier la clé de produit ou Mettre à niveau Windows. 3. Cliquez ensuite sur Modifier la clé de produit après avoir entré. 4. Saisissez la clé d'activation : 8G7XN-V7YWC-W8RPC-V73KB-YWRDB et sélectionnez Suivant. 5. Ensuite, cela entraînera le succès, vous pourrez donc mettre à niveau la version familiale Win11 vers la version professionnelle Win11.

Comment implémenter la commutation double système dans le système Win10 Comment implémenter la commutation double système dans le système Win10 Jan 03, 2024 pm 05:41 PM

De nombreux amis ne sont peut-être pas habitués au système Win lorsqu'ils entrent en contact avec celui-ci. À l'heure actuelle, vous pouvez basculer entre les deux systèmes. entre les deux systèmes. Comment basculer entre deux systèmes dans le système Win10 1. Changement de touche de raccourci 1. Appuyez sur les touches "win" + "R" pour ouvrir l'exécution 2. Entrez "msconfig" dans la zone d'exécution et cliquez sur "OK" 3. Dans le " ouvert " configuration du système" Dans l'interface, sélectionnez le système dont vous avez besoin et cliquez sur "Définir par défaut". Une fois terminé, "Redémarrer" peut terminer le changement. Méthode 2. Sélectionnez le commutateur lors du démarrage 1. Lorsque vous avez deux systèmes, une interface d'opération de sélection apparaîtra au démarrage. Vous pouvez utiliser les touches " Haut et Bas du clavier pour sélectionner le système.

Changer le mode de démarrage double système de l'ordinateur Apple Changer le mode de démarrage double système de l'ordinateur Apple Feb 19, 2024 pm 06:50 PM

Comment basculer entre les systèmes doubles Apple lors du démarrage Les ordinateurs Apple sont des appareils puissants En plus de leur propre système d'exploitation macOS, vous pouvez également choisir d'installer d'autres systèmes d'exploitation, tels que Windows, pour obtenir une commutation double système. Alors, comment basculer entre les deux systèmes lors du démarrage ? Cet article vous expliquera comment basculer entre deux systèmes sur les ordinateurs Apple. Tout d'abord, avant d'installer des systèmes doubles, nous devons confirmer si notre ordinateur Apple prend en charge la commutation double système. D'une manière générale, les ordinateurs Apple sont basés sur

Quelle est l'architecture et le principe de fonctionnement de Spring Data JPA ? Quelle est l'architecture et le principe de fonctionnement de Spring Data JPA ? Apr 17, 2024 pm 02:48 PM

SpringDataJPA est basé sur l'architecture JPA et interagit avec la base de données via le mappage, l'ORM et la gestion des transactions. Son référentiel fournit des opérations CRUD et les requêtes dérivées simplifient l'accès à la base de données. De plus, il utilise le chargement paresseux pour récupérer les données uniquement lorsque cela est nécessaire, améliorant ainsi les performances.

1,3 ms prend 1,3 ms ! La dernière architecture de réseau neuronal mobile open source de Tsinghua, RepViT 1,3 ms prend 1,3 ms ! La dernière architecture de réseau neuronal mobile open source de Tsinghua, RepViT Mar 11, 2024 pm 12:07 PM

Adresse papier : https://arxiv.org/abs/2307.09283 Adresse code : https://github.com/THU-MIG/RepViTRepViT fonctionne bien dans l'architecture ViT mobile et présente des avantages significatifs. Ensuite, nous explorons les contributions de cette étude. Il est mentionné dans l'article que les ViT légers fonctionnent généralement mieux que les CNN légers sur les tâches visuelles, principalement en raison de leur module d'auto-attention multi-têtes (MSHA) qui permet au modèle d'apprendre des représentations globales. Cependant, les différences architecturales entre les ViT légers et les CNN légers n'ont pas été entièrement étudiées. Dans cette étude, les auteurs ont intégré des ViT légers dans le système efficace.

Comment utiliser les touches de raccourci pour changer de classeur dans Excel Comment utiliser les touches de raccourci pour changer de classeur dans Excel Mar 20, 2024 pm 01:50 PM

Dans l'application du logiciel Excel, nous sommes habitués à utiliser des touches de raccourci pour rendre certaines opérations plus faciles et plus rapides. Parfois, il existe des données liées entre plusieurs tableaux dans Excel. Lorsque nous les visualisons, nous devons constamment basculer entre les tâches. méthode de commutation plus rapide, cela permettra d'économiser beaucoup de temps perdu sur la commutation, ce qui contribuera grandement à améliorer l'efficacité du travail. Quelle méthode peut être utilisée pour effectuer une commutation rapide. Pour résoudre ce problème, l'éditeur va en parler aujourd'hui. : Comment utiliser les touches de raccourci pour changer de classeur dans Excel. 1. Tout d'abord, vous pouvez voir plusieurs classeurs au bas du tableau Excel ouvert. Vous devez basculer rapidement entre différents classeurs, comme le montre la figure ci-dessous. 2. Appuyez ensuite sur la touche Ctrl du clavier sans bouger, et sélectionnez la tâche à droite si vous en avez besoin.

Quelle est la courbe d'apprentissage de l'architecture du framework Golang ? Quelle est la courbe d'apprentissage de l'architecture du framework Golang ? Jun 05, 2024 pm 06:59 PM

La courbe d'apprentissage de l'architecture du framework Go dépend de la familiarité avec le langage Go et le développement back-end ainsi que de la complexité du framework choisi : une bonne compréhension des bases du langage Go. Il est utile d’avoir une expérience en développement back-end. Les cadres qui diffèrent en complexité entraînent des différences dans les courbes d'apprentissage.

See all articles