1. Grundlegende Umgebungseinführung und grundlegende Umgebungskonfiguration
Knoten 1: node1.hulala.com 192.168.1.35 centos6.5_64 8G neue Festplatte hinzufügen
Knoten 2: node2.hulala.com 192.168.1.36 centos6.5_64 8G neue Festplatte hinzufügen
vip 192.168.1.39
Sowohl Knoten 1 als auch Knoten 2 müssen konfiguriert werden
Ändern Sie den Hostnamen:
vim /etc/sysconfig/network HOSTNAME=node1.hulala.com
Hostauflösung konfigurieren: <br/>
vim /etc/hosts 192.168.1.35 node1.hulala.com node1 192.168.1.36 node2.hulala.com node2
Systemzeit synchronisieren: <br/>
ntpdate cn.pool.ntp.org
Firewall und SELINUX schließen<br/>
service iptables stop chkconfig iptables off cat /etc/sysconfig/selinux SELINUX=disabled
Die obige Konfiguration muss auf beiden Knoten konfiguriert werden. Nachdem die Konfiguration abgeschlossen ist, starten Sie beide Knoten neu
[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
[root@node1~]#wget -c http://www.php.cn/ [root@node1~]#wget -c http://www.php.cn/ [root@node1~]#rpm -ivh *.rpm
Einen SHA1-Wert als gemeinsames Geheimnis abrufen <br/>
[root@node1~]#sha1sum /etc/drbd.conf 8a6c5f3c21b84c66049456d34b4c4980468bcfb3 /etc/drbd.conf
Erstellen und bearbeiten Sie die Ressource Konfigurationsdatei :/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; } }
Parameterbeschreibung für die obige Konfiguration: <br/>RESSOURCE: Ressourcenname <br/>PROTOKOLL: Das Protokoll „C“ bedeutet „synchron“, d. h. nach Erhalt der Remote-Schreibbestätigung gilt der Schreibvorgang als abgeschlossen <br/>NET: Der SHA1-Schlüssel der beiden Knoten ist derselbe <br/>after-sb-0pri: „Split Brain“ Wenn es auftritt und keine Datenänderung vorliegt, ist die Verbindung zwischen den beiden Knoten normal<br/>after-sb-1pri: Wenn es eine Datenänderung gibt, sind die sekundären Gerätedaten normal aufgegeben und vom primären Gerät synchronisiert<br/>rr-conflict: Wenn die vorherigen Einstellungen nicht angewendet werden können und ein Rollenkonflikt im drbd-System vorliegt, trennt das System automatisch die Verbindungen zwischen Knoten <br/>META-DISK: Metadaten wird auf derselben Festplatte (sdb1) gespeichert <br/>ON
[root@node1~]#scp /etc/drbd.d/dbcluster.res root@192.168.1.36:/etc/drbd.d/
Ressourcen erstellen und Dateisystem:<br/>Erstellen Sie Partitionen (nicht formatiert) <br/> auf Knoten1 und Knoten2. Erstellen Sie eine LVM-Partition auf Knoten1 und Knoten2: <br/>
[#root@node1~]fdisk /dev/sdb
Erstellen Sie Metadaten für die Ressource (dbcluster) auf Knoten1 und Knoten2: <br/>
[root@node1~drbd]#drbdadm create-md dbcluster
Aktivieren Sie die Ressource (sowohl Knoten1 als auch Knoten2 müssen überprüft werden) <br/>– Stellen Sie zunächst sicher, dass drbd Modul ist geladen <br/>Überprüfen Sie, ob es geladen ist: <br/>
# lsmod | grep drbd
Wenn es nicht geladen ist, müssen Sie es laden: <br/>
# modprobe drbd # lsmod | grep drbd drbd 317261 0 libcrc32c 1246 1 drbd
– Starten Sie den DRBD-Hintergrundprozess: <br/>
[root@node1 drbd]# drbdadm up dbcluster [root@node2 drbd]# drbdadm up dbcluster
Ansicht (Knoten1 und Knoten2) DRBD-Status: <br/>
[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
Von oben Anhand der Informationen können Sie erkennen, dass der DRBD-Dienst bereits auf zwei läuft Maschinen, aber keine Maschine ist die Hauptmaschine („primärer“ Host), daher kann nicht auf die Ressource (Blockgerät) zugegriffen werden. <br/> Synchronisierung starten:
Nur auf dem Masterknoten (hier Knoten1) betreiben 🎜><br/>
[root@node1 drbd]# drbdadm — –overwrite-data-of-peer primary dbcluster
<br/>
<br/>
cs (Verbindungsstatus): Netzwerkverbindungsstatus<br/> ro (Rollen): Rolle des Knotens (die Rolle dieses Knotens wird zuerst angezeigt)<br/>ds (Festplattenstatus): Status der Festplatte<br/>Replikationsprotokoll: A, B oder C (diese Konfiguration ist C) <br/>Wenn Sie sehen, dass der DRBD-Status „cs:Connected ro:Primary/Secondary ds:UpToDate/UpToDate“ ist, bedeutet dies, dass die Synchronisierung abgeschlossen ist.<br/>Sie können den DRBD-Status auch so überprüfen:<br/> <br/>
[root@centos193 drbd]# drbd-overview 0:dbcluster/0 Connected Secondary/Primary UpToDate/UpToDate C r—–
Erstellen Sie ein Dateisystem auf dem primären Knoten (Knoten1): <br/><br/>
[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.
Außerdem müssen wir dieses DRBD-System nicht auf einem Computer mounten (natürlich muss es bei der Installation vorübergehend gemountet werden <br/>MySQLInstallieren Sie MySQL), da die Cluster-Management-Software dies übernimmt. Stellen Sie außerdem sicher, dass das kopierte Dateisystem nur auf dem aktiven Masterserver gemountet ist <br/>
Viertens: MySQL-Installation MySQL Zur Installation können Sie auch den Blog-Beitrag „MySQL – CentOS6.5 Kompilieren und Installieren von MySQL5.6.16“ lesen<br/>
1. Installieren Sie MySQL auf den Knoten Node1 und Node2:<br/>
yum install mysql* -y
<br/>
[root@node1~]# service mysql stop Shutting down MySQL. [ OK ]
<br/>
[root@host1 /]# mkdir -p /mysql/data [root@host1 /]# chown -R mysql:mysql /mysql
<br/>
[root@node1 ~]# mount /dev/drbd0 /mysql/
<br/><br/>
6 in das neue Verzeichnis (für Knoten2 ist kein Vorgang erforderlich)datadir=/mysql/data
<br/>
Beachten Sie, dass die Berechtigung zum Kopieren des Verzeichnisses direkt auf MySQL geändert werden muss Ändern Sie hier das MySQL-Verzeichnis.[root@host1 mysql]#cd /var/lib/mysql [root@host1 mysql]#cp -R * /mysql/data/
<br/>
7. Starten Sie den Anmeldetest mit MySQL auf Knoten1[root@host1 mysql]# chown -R mysql:mysql /mysql
<br/>
Deinstallieren Sie das DRBD-Dateisystem auf Knoten Knoten1[root@host1 mysql]# mysql
<br/>
9. Mounten Sie das DRBD-Dateisystem auf Knoten Node2[root@node1 ~]# umount /var/lib/mysql_drbd [root@node1 ~]# drbdadm secondary dbcluster
<br/>
10. Konfigurieren Sie MySQL auf Knoten Node2 und testen Sie[root@node2 ~]# drbdadm primary dbcluster [root@node2 ~]# mount /dev/drbd0 /mysql/
<br/>
11. Führen Sie einen MySQL-Anmeldetest auf Knoten2 durch[root@node1 ~]# scp node2:/etc/my.cnf /etc/my.cnf [root@node2 ~]# chown mysql /etc/my.cnf [root@node2 ~]# chmod 644 /etc/my.cnf
<br/>
12. Deinstallieren Sie das DRBD-Dateisystem auf Knoten2 und lassen Sie es von der Cluster-Management-Software Pacemaker verwalten[root@node2 ~]# mysql
5: Installation und Konfiguration von Corosync und Pacemaker (sowohl Knoten1 als auch Knoten2 müssen installiert sein)<br/>
Erforderliche Abhängigkeiten für die Installation von Pacemaker:[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~]#
Installation Cluster-Stack-Abhängigkeiten:<br/>
[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
Optionale Abhängigkeiten für die Installation von Pacemaker:<br/>
[root@node1~]yum -y install clusterlib-devel corosynclib-devel
Pacemaker-Installation:<br/>
[root@node1~]yum -y install pacemaker
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
1,配置corosync<br/>Corosync Key<br/>– 生成节点间安全通信的key:<br/>
[root@node1~]# corosync-keygen
– 将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
编辑/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 }
– 创建并编辑/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 }
将上面两个配置文件拷贝到另一节点<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
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 ]
– 在两节点上分别启动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:
<br/>配置资源及约束 <br/>配置默认属性<br/>查看已存在的配置:
[root@node1 ~]# crm configure property stonith-enabled=false [root@node1 ~]# crm_verify -L
禁止STONITH错误:<br/>
[root@node1 ~]# crm configure property stonith-enabled=false [root@node1 ~]# crm_verify -L
让集群忽略Quorum:<br/>
[root@node1~]# crm configure property no-quorum-policy=ignore
防止资源在恢复之后移动:<br/>
[root@node1~]# crm configure rsc_defaults resource-stickiness=100
设置操作的默认超时:<br/>
[root@node1~]# crm configure property default-action-timeout="180s"
设置默认的启动失败是否为致命的:
[root@node1~]# crm configure property start-failure-is-fatal="false"
配置DRBD资源<br/>– 配置之前先停止DRBD:<br/>
[root@node1~]# /etc/init.d/drbd stop [root@node2~]# /etc/init.d/drbd stop
– 配置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"
– 配置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"
– 配置文件系统资源,定义挂载点(mount point):<br/>
crm(live)configure# primitive p_fs_mysql ocf:heartbeat:Filesystem params device="/dev/drbd0" directory="/var/lib/mysql_drbd/" fstype="ext4"
配置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"
配置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"
通过”组”确保DRBD,MySQL和VIP是在同一个节点(Master)并且确定资源的启动/停止顺序.<br/>
启动: p_fs_mysql–>p_ip_mysql->p_mysql 停止: p_mysql–>p_ip_mysql–>p_fs_mysql
crm(live)configure# group g_mysql p_fs_mysql p_ip_mysql p_mysql
组group_mysql永远只在Master节点:<br/>
crm(live)configure# colocation c_mysql_on_drbd inf: g_mysql ms_drbd_mysql:Master
MySQL的启动永远是在DRBD Master之后:<br/>
crm(live)configure# order o_drbd_before_mysql inf: ms_drbd_mysql:promote g_mysql:start
配置检查和提交<br/>
crm(live)configure# verify crm(live)configure# commit crm(live)configure# quit
查看集群状态和failover测试<br/>状态查看:<br/>
[root@node1 mysql]# crm_mon -1r
Failover测试:<br/>将Node1设置为Standby状态<br/>
[root@node1 ~]# crm node standby
过几分钟查看集群状态(若切换成功,则看到如下状态):<br/>
[root@node1 ~]# crm status
将Node1恢复online状态:<br/>
[root@node1 mysql]# crm node online [root@node1 mysql]# crm status
Das obige ist der detaillierte Inhalt vonMySQL – Detaillierte Einführung in die MySQL-Hochverfügbarkeitsimplementierung. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!