Maison > base de données > tutoriel mysql > MySQL - Introduction détaillée à l'implémentation de la haute disponibilité MySQL

MySQL - Introduction détaillée à l'implémentation de la haute disponibilité MySQL

黄舟
Libérer: 2017-03-14 16:43:10
original
1693 Les gens l'ont consulté

1. Introduction à l'environnement de base et configuration de l'environnement de base

Nœud 1 : node1.hulala.com 192.168.1.35 centos6.5_64 Ajouter un nouveau disque dur de 8 Go
nœud 2 : node2.hulala.com 192.168.1.36 centos6.5_64 Ajoutez un nouveau disque dur de 8 Go
vip 192.168.1.39

Le nœud 1 et le nœud 2 doivent être configurés
Modifiez le nom d'hôte :

vim /etc/sysconfig/network
HOSTNAME=node1.hulala.com
Copier après la connexion

Configurer la résolution des hôtes : <br/>

vim /etc/hosts
192.168.1.35    node1.hulala.com node1
192.168.1.36    node2.hulala.com node2
Copier après la connexion

Synchroniser l'heure du système : <br/>

ntpdate cn.pool.ntp.org
Copier après la connexion

Fermer le pare-feu et SELINUX<br/>

service iptables stop
chkconfig iptables off
cat /etc/sysconfig/selinux
SELINUX=disabled
Copier après la connexion

La configuration ci-dessus doit être configurée sur les deux nœuds. Une fois la configuration terminée, redémarrez les deux nœuds

Deux : configurez la confiance mutuelle ssh<br/>

[root@node1~]#ssh-keygen -t rsa -b 1024
[root@node1~]#ssh-copy-id root@192.168.1.36
[root@node2~]#ssh-keygen -t rsa -b 1024
[root@node2~]#ssh-copy-id root@192.168.1.35
Copier après la connexion
<. 🎜>Trois : Installer DRBD

Configurer (node1 et node2 effectuent la même opération)

[root@node1~]#wget -c http://www.php.cn/
[root@node1~]#wget -c http://www.php.cn/
[root@node1~]#rpm -ivh *.rpm
Copier après la connexion
Obtenir une valeur sha1 en tant que secret partagé

<br/>

[root@node1~]#sha1sum /etc/drbd.conf
8a6c5f3c21b84c66049456d34b4c4980468bcfb3  /etc/drbd.conf
Copier après la connexion
Créez et modifiez la ressource

Fichier de configuration :/etc/drbd.d/dbcluster.res<br/>

[root@node1~]# vim /etc/drbd.d/dbcluster.res
resource dbcluster {
    protocol C;
    net {
        cram-hmac-alg sha1;
        shared-secret "8a6c5f3c21b84c66049456d34b4c4980468bcfb3";
        after-sb-0pri discard-zero-changes;
after-sb-1pri discard-secondary;
        after-sb-2pri disconnect;
        rr-conflict disconnect;
    }
    device    /dev/drbd0;
    disk      /dev/sdb1;
meta-disk internal;
    on node1.hulala.com {
        address   192.168.1.35:7789;
    }
    on node2.hulala.com {
        address   192.168.1.36:7789;
    }
}
Copier après la connexion
Description des paramètres pour la configuration ci-dessus :

RESOURCE : Nom de la ressource<br/>PROTOCOLE : Utiliser le protocole "C" signifie "synchrone", c'est-à-dire qu'après avoir reçu la confirmation d'écriture à distance, l'écriture est considérée comme terminée <br/>NET : La clé SHA1 des deux nœuds est la même <🎜. >after-sb-0pri : "Split Brain" Lorsqu'il se produit et qu'il n'y a pas de changement de données, la connexion entre les deux nœuds est normale<br/>after-sb-1pri : S'il y a un changement de données, les données de l'appareil secondaire sont abandonné et synchronisé depuis l'appareil principal<br/>rr-conflict : Si les paramètres précédents ne peuvent pas s'appliquer, et s'il y a un conflit de rôle dans le système drbd, le système déconnecte automatiquement les connexions entre les nœuds <br/>META-DISK : Métadonnées est enregistré sur le même disque (sdb1) <br/>ON : nœuds qui forment un cluster <br/> Copier la configuration DRBD sur la machine du nœud : <br/><br/><br/>

Créer des ressources et
[root@node1~]#scp /etc/drbd.d/dbcluster.res root@192.168.1.36:/etc/drbd.d/
Copier après la connexion
Système de fichiers

 :Créer des partitions (non formatées) sur node1 et node2 Créer une partition LVM sur node1 et node2 : <br/><br/><br/>

Créer des métadonnées pour la ressource (dbcluster) sur node1 et node2 :
[#root@node1~]fdisk /dev/sdb
Copier après la connexion

<br/>

Activez la ressource (node1 et node2 à vérifier) ​​
[root@node1~drbd]#drbdadm create-md dbcluster
Copier après la connexion
– Assurez-vous d'abord que drbd

module<br/> est chargé Vérifiez s'il est chargé : <br/><br/>

S'il n'est pas chargé, vous devez le charger :
# lsmod | grep drbd
Copier après la connexion

<br/>

– Démarrez le processus en arrière-plan DRBD :
# modprobe drbd
# lsmod | grep drbd
drbd                  317261  0
libcrc32c               1246  1 drbd
Copier après la connexion

<br/>

Afficher (nœud1 et nœud2) l'état DRBD :
[root@node1 drbd]# drbdadm up dbcluster
[root@node2 drbd]# drbdadm up dbcluster
Copier après la connexion

<br/>

D'en haut Vous pouvez voir à partir des informations que le service DRBD est déjà exécuté sur deux machines, mais aucune des deux machines n'est la machine principale (hôte "primaire"), donc la ressource (périphérique de bloc) n'est pas accessible
[root@node2 drbd]# /etc/init.d/drbd status
GIT-hash: 7ad5f850d711223713d6dcadc3dd48860321070c build by dag@Build64R6, 2016-10-23 08:16:10
m:res        cs         ro                   ds                         p  mounted  fstype
0:dbcluster  Connected  Secondary/Secondary  Inconsistent/Inconsistent  C
Copier après la connexion
Démarrer la synchronisation :

<br/>Opération uniquement sur le nœud maître (nœud1 ici)<. 🎜>

<br/>Afficher l'état de synchronisation :

[root@node1 drbd]# drbdadm — –overwrite-data-of-peer primary dbcluster
Copier après la connexion

<br/>Quelques explications des résultats de sortie ci-dessus :

cs (état de la connexion) : État de la connexion réseau
<br/>
Copier après la connexion
ro (rôles) : Le rôle du nœud (le rôle de ce nœud est affiché en premier)

ds (états du disque) : L'état du disque dur<br/>Protocole de réplication : A, B ou C (cette configuration est C)<br/>Voir que l'état du DRBD est "cs:Connected ro:Primary/Secondary ds:UpToDate/UpToDate" signifie que la synchronisation est terminée.<br/>Vous pouvez également vérifier l'état du DRBD comme ceci :<br/> <br/><br/><br/>Créer un système de fichiers :

Créer un système de fichiers sur le nœud principal (Node1) :
[root@centos193 drbd]# drbd-overview
  0:dbcluster/0  Connected Secondary/Primary UpToDate/UpToDate C r—–
Copier après la connexion

<br/><br/>Remarque : Il n'est pas nécessaire de faire de même sur le fonctionnement du nœud secondaire (Node2), car DRBD gérera la synchronisation des données du disque d'origine.

De plus, nous n'avons pas besoin de monter ce système DRBD sur une machine (bien sûr, il doit être temporairement monté lors de l'installation
[root@node1 drbd]# mkfs -t ext4 /dev/drbd0
mke2fs 1.41.12 (17-May-2010)
Filesystem label=
OS type: Linux
Block size=4096 (log=2)
…….
180 days, whichever comes first.  Use tune2fs -c or -i to override.
Copier après la connexion
MySQL

Installer MySQL), car le logiciel de gestion du cluster le gérera. Assurez-vous également que le système de fichiers copié est uniquement monté sur le serveur maître actif <br/>Quatre : installation de MySQL. <br/>

MySQL Pour l'installation, vous pouvez également vous référer au billet de blog "MySQL - CentOS6.5 Compile and Install MySQL5.6.16"

1 Installez MySQL sur les nœuds node1 et node2 : <br/>

<br/>2. Node1 et node2 fonctionnent tous deux pour arrêter le service mysql

yum install mysql* -y
Copier après la connexion

<br/>3. le propriétaire de l'autorisation du répertoire sur mysql

[root@node1~]# service mysql stop
Shutting down MySQL.        [  OK  ]
Copier après la connexion

<br/>4. Fermez mysql et montez temporairement le système de fichiers DRBD sur le nœud principal (Node1)

[root@host1 /]# mkdir -p /mysql/data
[root@host1 /]# chown -R mysql:mysql /mysql
Copier après la connexion

<br/>5. node1 et node2 exploitent et modifient le fichier my.cnf Modifier

dans Ajouter un nouveau chemin de stockage de données sous [mysqld]
[root@node1 ~]# mount /dev/drbd0  /mysql/
Copier après la connexion

<br/><br/>6. chemin des données vers le nouveau répertoire (aucune opération n'est requise pour node2)

datadir=/mysql/data
Copier après la connexion

<br/>Node1 et node2 fonctionnent ici. Notez que le propriétaire de l'autorisation de copie du répertoire doit être remplacé par mysql. peut directement modifier le répertoire mysql ici.

[root@host1 mysql]#cd /var/lib/mysql
[root@host1 mysql]#cp -R * /mysql/data/
Copier après la connexion

<br/>7. Démarrez le test de connexion avec mysql sur le nœud1

[root@host1 mysql]# chown -R mysql:mysql /mysql
Copier après la connexion

<br/>8. Désinstallez le système de fichiers DRBD sur le nœud. Node1

[root@host1 mysql]# mysql
Copier après la connexion

<br/>9. Montez le système de fichiers DRBD sur le nœud Node2

[root@node1 ~]# umount /var/lib/mysql_drbd
[root@node1 ~]# drbdadm secondary dbcluster
Copier après la connexion

<br/>10. Configurez MySQL sur le nœud Node2 et testez

[root@node2 ~]# drbdadm primary dbcluster
[root@node2 ~]# mount /dev/drbd0 /mysql/
Copier après la connexion
.

<br/>11. Faites un test de connexion mysql sur node2

[root@node1 ~]# scp node2:/etc/my.cnf /etc/my.cnf
[root@node2 ~]# chown mysql /etc/my.cnf
[root@node2 ~]# chmod 644 /etc/my.cnf
Copier après la connexion

<br/>12. Désinstallez le système de fichiers DRBD sur Node2 et laissez-le gérer par le logiciel de gestion de cluster Pacemaker

[root@node2 ~]# mysql
Copier après la connexion

<br/>5 : Installation et configuration de Corosync et Pacemaker (node1 et node2 doivent être installés)

[root@node2~]# umount /var/lib/mysql_drbd
[root@node2~]# drbdadm secondary dbcluster
[root@node2~]# drbd-overview
  0:dbcluster/0  Connected Secondary/Secondary UpToDate/UpToDate C r—–
[root@node2~]#
Copier après la connexion
Dépendances requises pour l'installation de Pacemaker :

<br/>Installation des dépendances de Cluster Stack :

[root@node1~]#yum -y install automake autoconf libtool-ltdl-devel pkgconfig python glib2-devel libxml2-devel 
libxslt-devel python-devel gcc-c++ bzip2-devel gnutls-devel pam-devel libqb-devel
Copier après la connexion

<br/>Dépendances facultatives pour l'installation de Pacemaker :

[root@node1~]yum -y install clusterlib-devel corosynclib-devel
Copier après la connexion

<br/>Installation de Pacemaker :

[root@node1~]yum -y install ncurses-devel openssl-devel cluster-glue-libs-devel docbook-style-xsl
Copier après la connexion
[root@node1~]yum -y install pacemaker
Copier après la connexion

crmsh安装:<br/>

[root@node1~]wget http://www.php.cn/:/ha-clustering:/Stable/CentOS_CentOS-6/network:ha-clustering:Stable.repo
[root@node1~]yum -y install crmsh
Copier après la connexion

1,配置corosync<br/>Corosync Key<br/>– 生成节点间安全通信的key:<br/>

[root@node1~]# corosync-keygen
Copier après la connexion
– 将authkey拷贝到node2节点(保持authkey的权限为400):
[root@node~]# scp /etc/corosync/authkey node2:/etc/corosync/
2,[root@node1~]# cp /etc/corosync/corosync.conf.example /etc/corosync/corosync.conf
Copier après la connexion

编辑/etc/corosync/corosync.conf:<br/>

# Please read the corosync.conf.5 manual page
compatibility: whitetank
aisexec {
        user: root
        group: root
}
totem {
        version: 2
secauth: off
threads: 0
interface {
ringnumber: 0
bindnetaddr: 192.168.1.0
mcastaddr: 226.94.1.1
mcastport: 4000
ttl: 1
}
}
logging {
fileline: off
to_stderr: no
to_logfile: yes
to_syslog: yes
logfile: /var/log/cluster/corosync.log
debug: off
timestamp: on
logger_subsys {
subsys: AMF
debug: off
}
}
amf {
mode: disabled
}
Copier après la connexion

– 创建并编辑/etc/corosync/service.d/pcmk,添加”pacemaker”服务<br/>

[root@node1~]# cat /etc/corosync/service.d/pcmk
service {
	# Load the Pacemaker Cluster Resource Manager
	name: pacemaker
	ver: 1
}
Copier après la connexion

将上面两个配置文件拷贝到另一节点<br/>

[root@node1]# scp /etc/corosync/corosync.conf node2:/etc/corosync/corosync.conf
[root@node1]# scp /etc/corosync/service.d/pcmk node2:/etc/corosync/service.d/pcmk
Copier après la connexion

3,启动corosync和Pacemaker<br/> 分别在两个节点上启动corosync并检查.<br/>

[root@node1]# /etc/init.d/corosync start
Starting Corosync Cluster Engine (corosync):               [  OK  ]
[root@node1~]# corosync-cfgtool -s
Printing ring status.
Local node ID -1123964736
RING ID 0
id = 192.168.1.189
status = ring 0 active with no faults
[root@node2]# /etc/init.d/corosync start
Starting Corosync Cluster Engine (corosync):               [  OK  ]
Copier après la connexion

– 在两节点上分别启动Pacemaker:<br/>

[root@node1~]# /etc/init.d/pacemaker start
Starting Pacemaker Cluster Manager:                        [  OK  ]
[root@node2~]# /etc/init.d/pacemaker start
Starting Pacemaker Cluster Manager:
Copier après la connexion

六、资源配置

<br/>配置资源及约束 <br/>配置默认属性<br/>查看已存在的配置:

[root@node1 ~]# crm configure property stonith-enabled=false
[root@node1 ~]# crm_verify -L
Copier après la connexion
Copier après la connexion

禁止STONITH错误:<br/>

[root@node1 ~]# crm configure property stonith-enabled=false
[root@node1 ~]# crm_verify -L
Copier après la connexion
Copier après la connexion

让集群忽略Quorum:<br/>

[root@node1~]# crm configure property no-quorum-policy=ignore
Copier après la connexion

防止资源在恢复之后移动:<br/>

[root@node1~]# crm configure rsc_defaults resource-stickiness=100
Copier après la connexion

设置操作的默认超时:<br/>

[root@node1~]# crm configure property default-action-timeout="180s"
Copier après la connexion

设置默认的启动失败是否为致命的:

[root@node1~]# crm configure property start-failure-is-fatal="false"
Copier après la connexion

配置DRBD资源<br/>– 配置之前先停止DRBD:<br/>

[root@node1~]# /etc/init.d/drbd stop
[root@node2~]# /etc/init.d/drbd stop
Copier après la connexion

– 配置DRBD资源:<br/>

[root@node1~]# crm configure
crm(live)configure# primitive p_drbd_mysql ocf:linbit:drbd params drbd_resource="dbcluster" op monitor interval="15s"
 op start timeout="240s" op stop timeout="100s"
Copier après la connexion

– 配置DRBD资源主从关系(定义只有一个Master节点):<br/>

crm(live)configure# ms ms_drbd_mysql p_drbd_mysql meta master-max="1" master-node-max="1" 
clone-max="2" clone-node-max="1" notify="true"
Copier après la connexion

– 配置文件系统资源,定义挂载点(mount point):<br/>

crm(live)configure# primitive p_fs_mysql ocf:heartbeat:Filesystem params device="/dev/drbd0" directory="/var/lib/mysql_drbd/" fstype="ext4"
Copier après la connexion

配置VIP资源<br/>

crm(live)configure# primitive p_ip_mysql ocf:heartbeat:IPaddr2 params ip="192.168.1.39" cidr_netmask="24" op 
monitor interval="30s"
Copier après la connexion

配置MySQL资源<br/>

crm(live)configure# primitive p_mysql lsb:mysql op monitor interval="20s" 
timeout="30s" op start interval="0" timeout="180s" op stop interval="0" timeout="240s"
Copier après la connexion

七、组资源和约束

通过”组”确保DRBD,MySQL和VIP是在同一个节点(Master)并且确定资源的启动/停止顺序.<br/>

启动: p_fs_mysql–>p_ip_mysql->p_mysql
停止: p_mysql–>p_ip_mysql–>p_fs_mysql
Copier après la connexion
crm(live)configure# group g_mysql p_fs_mysql p_ip_mysql p_mysql
Copier après la connexion

组group_mysql永远只在Master节点:<br/>

crm(live)configure# colocation c_mysql_on_drbd inf: g_mysql ms_drbd_mysql:Master
Copier après la connexion

MySQL的启动永远是在DRBD Master之后:<br/>

crm(live)configure# order o_drbd_before_mysql inf: ms_drbd_mysql:promote g_mysql:start
Copier après la connexion

配置检查和提交<br/>

crm(live)configure# verify
crm(live)configure# commit
crm(live)configure# quit
Copier après la connexion

查看集群状态和failover测试<br/>状态查看:<br/>

[root@node1 mysql]# crm_mon -1r
Copier après la connexion

Failover测试:<br/>将Node1设置为Standby状态<br/>

[root@node1 ~]# crm node standby
Copier après la connexion

过几分钟查看集群状态(若切换成功,则看到如下状态):<br/>

[root@node1 ~]# crm status
Copier après la connexion

将Node1恢复online状态:<br/>

[root@node1 mysql]# crm node online
[root@node1 mysql]# crm status
Copier après la connexion

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:php.cn
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