1. 程式人生 > >mysql+heartbeat+drbd安裝

mysql+heartbeat+drbd安裝

smo resource 準備 本機 nod 連續 mount ext4 operation

環境:

系統 IP地址 主機名 軟件包列表

centos6.5 192.168.200.101 server1 DRBD、heartbeat、mysql

centos6.5 192.168.200.102 server2 DRBD、heartbeat、mysql

安裝前準備配置:

所有主機需要添加一塊20G 的SCSI 接口硬盤。

將兩臺機器的硬盤分區(10G),分區不需要格式化,過程省略

主從更改主機名以及

host

[root@localhost ~]# vim /etc/sysconfig/network

HOSTNAME=server1

[root@localhost ~]# hostname server1

[root@localhost ~]# bash

[root@server1 ~]# vim /etc/hosts

192.168.200.101 server1

192.168.200.102 server2

Heartbeat 安裝:

主從都需要安裝

將軟件包上傳

[root@server1 ~]# yum -y install perl-TimeDate cluster-glue-libs kernel-devel kernel-headers flex

進入到上傳的軟件包目錄下

[root@server1 ~]# rpm -ivh cluster-glue-1.0.5-6.el6.x86_64.rpm

[root@server1 ~]# yum -y localinstall heartbeat-*

安裝配置DRBD

主從都需要安裝

[root@server1 ~]# tar xf drbd-8.4.3.tar.gz

[root@server1 ~]# cd drbd-8.4.3

[root@server1 drbd-8.4.3]#./configure --prefix=/usr/local/drbd --with-km --with-heartbeat

make KDIR=/usr/src/kernels/2.6.32-431.el6.x86_64/ && make &&

make install

紅色部分要看本機的版本,主機不同,版本不同

[root@server1 drbd-8.4.3]# mkdir -p /usr/local/drbd/var/run/drbd

[root@server1 drbd-8.4.3]# cp /usr/local/drbd/etc/rc.d/init.d/drbd /etc/init.d/

[root@server1 drbd-8.4.3]# chkconfig --add drbd

[root@server1 drbd-8.4.3]# cd drbd

[root@server1 drbd]# make clean

make KDIR=/usr/src/kernels/2.6.32-431.el6.x86_64/

cp drbd.ko /lib/modules/2.6.32-431.el6.x86_64/kernel/lib/

[root@server1 drbd]# depmod

[root@server1 drbd]# cp -R /usr/local/drbd/etc/ha.d/resource.d/* /etc/ha.d/resource.d/

[root@server1 drbd]# cd /usr/local/drbd/etc/drbd.d/

vim /usr/local/drbd/etc/drbd.conf

include "drbd.d/global_common.conf";

include "drbd.d/*.res"; //此目錄下所有以.res 結尾的都為資源文件

1、配置global_common.conf 文件(主從一致)

[root@server1 drbd.d]# pwd

/usr/local/drbd/etc/drbd.d

[root@server1 drbd.d]# cp global_common.conf{,-$(date +%s)}

[root@server1 drbd.d]# vim global_common.conf

global {

usage-count yes; //是否對使用信息作統計,默認為yes

}

common {

startup {

wfc-timeout 120; //等待連接的超時時間

degr-wfc-timeout 120;

}

disk {

on-io-error detach; //當IO 出現錯誤時執行的動作

}

net {

protocol C; //復制模式為第3 種

}

2、配置資源文件(主從一致)

[root@server1 drbd.d]# vim r0.res

resource r0 { //r0 資源名稱

on server1 {

device /dev/drbd0; //邏輯設備路徑

disk /dev/sdb1; //物理設備

address 192.168.200.101:7788; //主節點

meta-disk internal;

}

on server2 {

device /dev/drbd0;

disk /dev/sdb1;

address 192.168.200.102:7788; //備節點

meta-disk internal;

}

}

註意:將內容復制到文件中的時候,將註釋刪除掉,否則報錯(文件是細新建的)

[root@server1 drbd.d]# scp global_common.conf r0.res

192.168.200.102:/usr/local/drbd/etc/drbd.d

3、創建元數據(兩個節點上操作)

[root@server1 drbd.d]# modprobe drbd

[root@server1 drbd.d]# lsmod | grep drbd

drbd 310268 0

libcrc32c 1246 1 drbd

[root@server1 drbd.d]# dd if=/dev/zero bs=1M count=1 of=/dev/sdb1

[root@server1 drbd.d]# drbdadm create-md r0 //輸出以下信息

. //當輸出成功信息後可Ctrl+C 結束

註意:

當執行命令”drbdadm create-md r0”時,出現以下錯誤信息。

Device size would be truncated, which

would corrupt data and result in
You need to either
* use external meta data (recommended)
* shrink that filesystem first
* zero out the device (destroy the filesystem)
Operation refused.
Command ‘drbdmeta 0 v08 /dev/xvdb internal create-md‘ terminated with exit code 40
drbdadm create-md r0: exited with code 40

解決辦法:初始化磁盤文件格式, dd if=/dev/zero bs=1M count=1 of=/dev/sdb1; sync

啟動 DRBD(主從節點都要執行)

[root@server1 ~]# /etc/init.d/drbd start

這裏的yes是指的終止等待

[root@server1 ~]# netstat -anpt | grep 7788

tcp 0 0 192.168.200.101:7788 0.0.0.0:* LISTEN -

手動驗證主從切換:

在server1上執行

drbdadm -- --overwrite-data-of-peer primary r0

cat /proc/drbd

數據同步測試(主節點上操作前 6 步驟,次節點上操作後三步驟)
[root@server1 drbd.d]# mkfs.ext4 /dev/drbd0
[root@server1 drbd.d]# mkdir /mysqldata
[root@server1 drbd.d]# mount /dev/drbd0 /mysqldata
[root@server1 drbd.d]# echo www.crushlinux.com > /mysqldata/file //建立測試文件

[root@server1 ~]# umount /dev/drbd0
[root@server1 ~]# drbdadm secondary r0 //主降為次


[root@server2 drbd.d]# drbdadm primary r0 //次升為主
[root@server2 drbd.d]# mkdir /mysqldata
[root@server2 drbd.d]# mount /dev/drbd0 /mysqldata
[root@server2 drbd.d]# ls /mysqldata //在備節點上查看數據

file lost+found //可以看到創建的文件

安裝 MySQL
更改 Mysql 數據庫的存儲位置為共享目錄(主從都要執行)
[root@server1 ~]# yum -y install mysql mysql-server
[root@server1 ~]# vim /etc/my.cnf
2 datadir=/mysqldata/mysql
[root@server1 ~]# chown -R mysql.mysql /mysqldata
[root@server1 ~]# chkconfig mysqld on
註意: 此時我們修改了數據目錄和其屬主和權限,有時會因為此操作導致數據庫無法啟動,
解決方法:
一,查看你的 selinux 是否處於打開狀態,將其關閉。
二, /etc/apparmor.d/usr.sbin.mysqld 文件中,有兩行內容規定了 mysql 使用數據文件的路徑權限,改掉即可,重啟/etc/init.d/apparmor restart。

進行數據庫測試
因為此前的操作,現在把 server2 節點降為次
[root@server2 ~]#umount /dev/drbd0
[root@server2 ~]#drbdadm secondary r0
把 server1 升為主節點

[root@server1 ~]#drbdadm primary r0
[root@server1 ~]#mount /dev/drbd0 /mysqldata
[root@server1 ~]# /etc/init.d/mysqld start
在 server1 上創建一個庫 crushlinux,然後主降為備,把 server2 升為主查看庫有沒有同步。

[root@server1 ~]# mysql
mysql> create database crushlinux;
Query OK, 1 row affected (0.00 sec)
mysql> exit

[root@server1 ~]# service mysqld stop

[root@server1 ~]# umount /dev/drbd0

[root@server1 ~]# drbdadm secondary r0

[root@server2 drbd.d]# drbdadm primary r0

[root@server2 drbd.d]# mount /dev/drbd0 /mysqldata

[root@server2 drbd.d]# service mysqld start

[root@server2 drbd.d]# ls /mysqldata/mysql/
crushlinux ibdata1 ib_logfile0 ib_logfile1 mysql test

配置 heartbeat
1、配置 ha.cf 文件(主從大體一致)
[root@server1 ~]# cd /usr/share/doc/heartbeat-3.0.4/
[root@server1 heartbeat-3.0.4]# cp ha.cf authkeys haresources /etc/ha.d/
[root@server1 heartbeat-3.0.4]# cd /etc/ha.d/
[root@server1 ha.d]# vim ha.cf
29 logfile /var/log/ha-log
34 logfacility local0
48 keepalive 2 //多長時間檢測一次
56 deadtime 10 //連續多長時間聯系不上後認為對
61 warntime 5 //連續多長時間聯系不上開始警告
71 initdead 100 //主要是給重啟後預留的一段忽略
76 udpport 694 //UDP 端口
121 ucast eth0 192.168.200.102 //填寫對方 IP(主從的差異點)
157 auto_failback on //節點修復後是否切換回來
211 node server1 //節點名稱
212 node server2 //節點名稱
253 respawn hacluster /usr/lib64/heartbeat/ipfail

//控制 IP 切換的程序
2、配置 haresources 文件(主從一致)
[root@server1 ha.d]# vim haresources

添加以下內容


server1 IPaddr::192.168.200.254/24/eth0:0 drbddisk::r0
Filesystem::/dev/drbd0::/mysqldata::ext4 mysqld

[root@server1 ha.d]# ln -s /etc/init.d/mysqld /etc/ha.d/resource.d/mysqld

3配置 authkeys 文件(主從一致)

[root@server1 ha.d]# vim authkeys
23 auth 1
24 1 crc
[root@server1 ha.d]# chmod 600 authkeys

4 HA 驗證:

主從節點啟動 heartbeat
[root@server1 ha.d]# service heartbeat start
查看主節點 VIP 是否存在

啟動報錯1:

解決:vim /etc/ha.d/ha.cf

//系統是64位的,所以路徑應該在/usr/lib64/目錄

啟動報錯2:


[root@server1 ha.d]# ip a //需要等待 10
inet 192.168.200.254/24 brd 192.168.200.255 scope global secondary eth0:0

驗證:先停掉 server1 上的 heartbeat 服務,查看 VIP 是否能轉移
此時 server2 的 mysql 服務是關閉的
[root@server2 ha.d]# mysqladmin -uroot ping //備節點操作
mysqladmin: connect to server at ‘localhost‘ failed
error: ‘Can‘t connect to local MySQL server through socket ‘/var/lib/mysql/mysql.sock‘ (2)‘
Check that mysqld is running and that the socket: ‘/var/lib/mysql/mysql.sock‘ exists!
[root@server1 ha.d]# service heartbeat stop //主節點操作
Stopping High-Availability services: Done.
[root@server2 ha.d]# ip a //備節點操作
inet 192.168.200.254/24 brd 192.168.0.255 scope global secondary eth0:0
[root@server2 ha.d]# mysqladmin -uroot ping //備節點操作,發現 mysql 隨之啟動
Mysqld is alive
此時還不具備停掉 mysql 後 VIP 漂移的功能,需要添加腳本實現,當發現 mysql 服務出現掛
掉,就停掉 heartbeat 服務,實現 VIP 轉移(雙方都要在後臺執行)
[root@server1 ~]# vim chk_mysql.sh
#!/bin/bash
mysql="/etc/init.d/mysqld"
mysqlpid=$(ps -C mysqld --no-header | wc -l)
if [ $mysqlpid -eq 0 ];then
$mysql start
sleep 3
13 / 13
mysqlpid=$(ps -C mysqld --no-header | wc -l)
if [ $mysqlpid -eq 0 ];then
/etc/init.d/heartbeat stop
echo "heartbeat stopped,please check your mysql !" | tee -a
/var/log/messages
fi
fi
[root@server1 ha.d]# bash chk_mysql.sh &
[root@server1 ha.d]# echo “bash chk_mysql.sh &” >> /etc/rc.local

mysql+heartbeat+drbd安裝