ホームページ > データベース > mysql チュートリアル > MySQL - MySQL 高可用性実装の詳細な紹介

MySQL - MySQL 高可用性実装の詳細な紹介

黄舟
リリース: 2017-03-14 16:43:10
オリジナル
1709 人が閲覧しました

1. 基本的な環境の紹介と基本的な環境構成

ノード 1:node1.hulala.com 192.168.1.35 centos6.5_64 8G の新しいハードドライブを追加します
ノード 2:node2.hulala.com 192.168.1.36 centos6.5_64 8G の新しいハードドライブを追加しました
vip 192.168.1.39

ノード 1 とノード 2 の両方を設定する必要があります
ホスト名の変更:

vim /etc/sysconfig/network
HOSTNAME=node1.hulala.com
ログイン後にコピー

ホスト解像度の設定: <br/>

vim /etc/hosts
192.168.1.35    node1.hulala.com node1
192.168.1.36    node2.hulala.com node2
ログイン後にコピー

システム時刻の同期: <br/>

ntpdate cn.pool.ntp.org
ログイン後にコピー

ファイアウォールと SELINUX<br/>

service iptables stop
chkconfig iptables off
cat /etc/sysconfig/selinux
SELINUX=disabled
ログイン後にコピー

上記の構成は両方のノードで構成する必要があります。構成が完了したら、両方のノードを再起動します

2: 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
ログイン後にコピー

3: DRBD のインストールと構成 (node1 とノード2も同じ操作を実行)

[root@node1~]#wget -c //m.sbmmt.com/
[root@node1~]#wget -c //m.sbmmt.com/
[root@node1~]#rpm -ivh *.rpm
ログイン後にコピー

取得 sha1の値をshared-secretとして使用<br/>

[root@node1~]#sha1sum /etc/drbd.conf
8a6c5f3c21b84c66049456d34b4c4980468bcfb3  /etc/drbd.conf
ログイン後にコピー

リソース設定ファイルを作成、編集:/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;
    }
}
ログイン後にコピー

の説明上記の設定で使用されるパラメーター: <br/>RESOURCE: リソース名<br/>PROTOCOL: 使用プロトコル 「C」は「同期」を意味します。つまり、リモート書き込み確認を受信した後、書き込みは完了したとみなされます。 <br/>NET: 2 つの SHA1 キー。ノードは同じです<br/>after-sb-0pri: 「スプリット ブレイン」が発生し、データの変更がない場合、2 つのノード間の接続は正常です<br/>after-sb-1pri: データの変更がある場合、セカンダリ デバイスのデータ放棄され、メインデバイスから同期されます<br/>rr-conflict: 以前の設定を適用できず、drbd システムがロールの競合がある場合、システムはノード間の接続を自動的に切断します<br/> META-DISK: メタデータが保存されます同じディスク (sdb1) 上にあります<br/>ON : クラスターを形成するノード<br/> DRBD 設定をノードマシンにコピーします:<br/>

[root@node1~]#scp /etc/drbd.d/dbcluster.res root@192.168.1.36:/etc/drbd.d/
ログイン後にコピー

リソースとファイルシステムを作成します:<br/> パーティションを作成します (フォーマットされていません)<br/>ノード 1 とノード 2 で LVM パーティションを作成します:<br/>

[#root@node1~]fdisk /dev/sdb
ログイン後にコピー

ノード 1 とノード 2 でリソース (dbcluster) のメタデータを作成します:<br/>

[root@node1~drbd]#drbdadm create-md dbcluster
ログイン後にコピー

リソースをアクティブ化します (ノード 1 とノード 2 の両方をチェックする必要があります) <br/>– まず、drbd module が有効になっていることを確認します。がロードされました: <br/><br/>

# lsmod | grep drbd
ログイン後にコピー

ロードされているかどうかを確認します:

<br/>

# modprobe drbd
# lsmod | grep drbd
drbd                  317261  0
libcrc32c               1246  1 drbd
ログイン後にコピー

ロードされていない場合は、ロードする必要があります:

<br/>

[root@node1 drbd]# drbdadm up dbcluster
[root@node2 drbd]# drbdadm up dbcluster
ログイン後にコピー

– drbd バックグラウンドプロセスを開始します:

<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
ログイン後にコピー

DRBD ステータスを表示します: (node1 および node2):

<br/>

[root@node1 drbd]# drbdadm — –overwrite-data-of-peer primary dbcluster
ログイン後にコピー

上記の情報からわかるように、DRBD サービスはすでに 2 台のマシンで実行されていますが、どちらのマシンもメイン マシン (「プライマリ」ホスト) ではないため、リソース (ブロック デバイス) にアクセスできません。

同期を開始します。 <br/>

マスターノード(ここではnode1)のみで動作します

<br/>

<br/>
ログイン後にコピー

同期ステータスの表示:

<br/>

[root@centos193 drbd]# drbd-overview
  0:dbcluster/0  Connected Secondary/Primary UpToDate/UpToDate C r—–
ログイン後にコピー
<br/>上記の出力結果の説明:<br/>cs (接続状態): ネットワーク接続ステータス<br/>ro (ロール): ロールノードの状態 (このノードの役割が最初に表示されます)<br/>ds (ディスクの状態): ハードディスクの状態<br/> レプリケーション プロトコル: A、B または C (この構成は C)<br/> drbd の状態「cs:Connected」を参照してくださいro:Primary/Secondary ds:UpToDate/UpToDate" は同期が完了したことを意味します。

次のように drbd ステータスを確認することもできます:

<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.
ログイン後にコピー
<br/> ファイル システムを作成する:

プライマリ ノード (Node1) にファイル システムを作成します:

<br/>

yum install mysql* -y
ログイン後にコピー
注: DRBD が生のディスク データの同期を処理するため、セカンダリ ノード (Node2) で同じ操作を行う必要はありません。 さらに、この DRBD システムをどのマシンにもマウントする必要はありません。 (もちろん、<br/>MySQL をインストールします

MySQL をインストールするには一時的にマウントする必要があります)。また、コピーされたファイル システムがアクティブなメイン サーバーにのみマウントされていることを確認してください

4: MySQL のインストール。 <br/>

MySQL のインストール ブログ投稿「MySQL - CentOS6.5 Compile and Install MySQL5.6.16」も参照してください。

<br/>

1、ノード 1 とノード 2 に mysql をインストールします:

<br/>

[root@node1~]# service mysql stop
Shutting down MySQL.        [  OK  ]
ログイン後にコピー

2 両方の mysql サービスを停止します。ノード 1 とノード 2

<br/>

[root@host1 /]# mkdir -p /mysql/data
[root@host1 /]# chown -R mysql:mysql /mysql
ログイン後にコピー

3 .node1 とノード 2 はどちらもデータベース ディレクトリを作成し、ディレクトリ権限の所有者を mysql

<br/>

[root@node1 ~]# mount /dev/drbd0  /mysql/
ログイン後にコピー

4 に変更します。mysql を閉じて、DRBD ファイル システムをメイン ノード (ノード 1) に一時的にマウントします

<br/>

datadir=/mysql/data
ログイン後にコピー
<br/>5.node1とnode2は両方とも動作します my.cnfファイルを変更し、[mysqld]の下に新しいデータストレージパスを追加します

[root@host1 mysql]#cd /var/lib/mysql
[root@host1 mysql]#cp -R * /mysql/data/
ログイン後にコピー
<br/>6.デフォルトのデータパス内のすべてのファイルとディレクトリを新しいディレクトリにcpします(操作はありません)はノード 2 に必要です)

[root@host1 mysql]# chown -R mysql:mysql /mysql
ログイン後にコピー
<br/> ノード 1 とノード 2 の両方がここで動作します。ここで mysql ディレクトリを直接変更できることに注意してください。ログインテスト用のノード1

[root@host1 mysql]# mysql
ログイン後にコピー
<br/> 8. ノードNode1でDRBDファイルシステムをアンインストールします

[root@node1 ~]# umount /var/lib/mysql_drbd
[root@node1 ~]# drbdadm secondary dbcluster
ログイン後にコピー
<br/> 9. ノードNode2にMySQLを構成してテストします

[root@node2 ~]# drbdadm primary dbcluster
[root@node2 ~]# mount /dev/drbd0 /mysql/
ログイン後にコピー
<br/> 11. ノード 2 で mysql ログイン テストを実行します

[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. ノード 2 で DRBD ファイル システムをアンインストールし、クラスター管理ソフトウェア Pacemaker によって管理されるようにします

[root@node2 ~]# mysql
ログイン後にコピー
<br/>5: Corosync と Pacemaker のインストールと構成 (ノード 1 とノード 2 の両方)インストールする必要があります)

Pacemaker のインストールは以下に依存する必要があります:<br/>

[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~]#
ログイン後にコピー

クラスター スタックの依存関係のインストール:

[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
ログイン後にコピー
<br/> Pacemaker のインストール オプションの依存関係:

[root@node1~]yum -y install clusterlib-devel corosynclib-devel
ログイン後にコピー
<br/> Pacemaker のインストール:

[root@node1~]yum -y install pacemaker
ログイン後にコピー

crmsh安装:<br/>

[root@node1~]wget //m.sbmmt.com/:/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
ログイン後にコピー

以上がMySQL - MySQL 高可用性実装の詳細な紹介の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

関連ラベル:
ソース:php.cn
このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
最新の問題
人気のチュートリアル
詳細>
最新のダウンロード
詳細>
ウェブエフェクト
公式サイト
サイト素材
フロントエンドテンプレート