Drbd+Heartbeat+Mysql主從高可用-創(chuàng)新互聯(lián)

一、準(zhǔn)備工作

創(chuàng)新互聯(lián) - 樂(lè)山服務(wù)器托管,四川服務(wù)器租用,成都服務(wù)器租用,四川網(wǎng)通托管,綿陽(yáng)服務(wù)器托管,德陽(yáng)服務(wù)器托管,遂寧服務(wù)器托管,綿陽(yáng)服務(wù)器托管,四川云主機(jī),成都云主機(jī),西南云主機(jī),樂(lè)山服務(wù)器托管,西南服務(wù)器托管,四川/成都大帶寬,大帶寬服務(wù)器,四川老牌IDC服務(wù)商

系統(tǒng):Centos6.5

        兩臺(tái)主機(jī)需要相互域名解析


主節(jié)點(diǎn)(Primary Node)次節(jié)點(diǎn)(Secondary Node)
主機(jī)名ser5.hyzc.comser6.hyzc.com
IP地址192.168.2.10192.168.2.11

1.安裝DRBD

   參考博客安裝 http://pengjc.blog.51cto.com/9255463/1835186

2.安裝heartbeat與mysql

安裝epel擴(kuò)展源:
  #yum -y install epel-release
兩個(gè)機(jī)器都安裝heartbeat
  #yum -y install heartbeat*

查看heartbeat的配置文件ha.cf

在啟用Heartbeat之前,安裝后要配置三個(gè)文件(如沒(méi)有可手動(dòng)建立):ha.cf、haresources、authkeys。這三個(gè)配置文件需要在/etc/ha.d目錄下面,但是默認(rèn)是沒(méi)有這三個(gè)文件的,可以到官網(wǎng)上下這三個(gè)文件,也可以在源碼包里找這三個(gè)文件,在源碼目錄下的DOC子目錄里。

查看heartbeat的配置文件ha.cf

[root@ser5 ~]# grep -v "^#" /etc/ha.d/ha.cf  

debugfile /var/log/ha-debug                  #錯(cuò)誤的日志   logfile /var/log/ha-log                      #日志   logfacility local0                       #這個(gè)是設(shè)置heartbeat的日志,這里是用的系統(tǒng)日志 keepalive 2                                  #心跳的頻率   deadtime 10                                  #死亡時(shí)間,如果其他節(jié)點(diǎn)10s回應(yīng),則認(rèn)為死亡  warntime 5                        #如果死亡之后,5s還沒(méi)有連接則把警告信息寫入日志里   initdead 120          #在其他節(jié)點(diǎn)死掉之后,系統(tǒng)啟動(dòng)前需要等待的時(shí)間,一般為deadtime的兩倍 udpport 694                                  #用udp協(xié)議的694端口通信   ucast eth0 192.168.2.11                       #另外一個(gè)節(jié)點(diǎn)的ip   auto_failback on                #設(shè)置當(dāng)死亡節(jié)點(diǎn)恢復(fù)正常之后是否重新啟用;容易發(fā)生數(shù)據(jù)不一致的情況,必須項(xiàng),不然后面hb_standby命令無(wú)法使用;   node     ser5.hyzc.com                       #節(jié)點(diǎn)名(通過(guò)uname -n查詢)  node    ser6.hyzc.com                        #節(jié)點(diǎn)名(通過(guò)uname -n查詢)   #ping 10.1.88.254                            #ping網(wǎng)關(guān)查看網(wǎng)絡(luò)情況(當(dāng)網(wǎng)絡(luò)或者h(yuǎn)eartbeat失效是使用)   respawn hacluster /usr/lib64/heartbeat/ipfail  #這里是配置ip綁定和切換的功能, ipfail就是控制ip切換的程序根據(jù)系統(tǒng)64位配置lib64,32位配置為lib       auto_failback on                    # 自動(dòng)切換(主節(jié)點(diǎn)恢復(fù)后會(huì)自動(dòng)切換回來(lái))

2、設(shè)置節(jié)點(diǎn)之間的通信密鑰

[root@ser5 ~]# grep -v "^#" /etc/ha.d/authkeys
auth 1
1 crc

[root@ser5 ~]# chmod 600 authkeys

3、使用heartbeat的haresources來(lái)定義資源

[root@ser5 ~]# mkdir /data

[root@ser5 ~]# grep -v "^#" /etc/ha.d/haresources

ser5.hyzc.com IPaddr::192.168.2.15/24/eth0:1 drbddisk::r0 Filesystem::/dev/drbd0::/data::ext4

解釋:

ser5.hyzc.com  主節(jié)點(diǎn)的主機(jī)名

IPaddr::192.168.2.15/24/eth0    設(shè)置虛擬IP

drbddisk::r0                 管理資源r0

Filesystem::/dev/drbd0::/data::ext4  執(zhí)行umount和mount操作

次節(jié)點(diǎn)操作:

將ha.cf中的192.168.2.11改成192.168.2.10

啟動(dòng)heartbeat 2.11和2.10機(jī)器

# service heartbeat start

從結(jié)果可以看出,VIP已經(jīng)出現(xiàn)

[root@ser5 ha.d]# ip a
1: lo: <LOOPBACK,UP,LOWER_UP> mtu 16436 qdisc noqueue state UNKNOWN
   link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00
   inet 127.0.0.1/8 scope host lo
   inet6 ::1/128 scope host
      valid_lft forever preferred_lft forever
2: eth0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast state UP qlen 1000
   link/ether 00:0c:29:fe:2d:ab brd ff:ff:ff:ff:ff:ff
   inet 192.168.2.10/24 brd 192.168.2.255 scope global eth0
   inet 192.168.2.15/24 brd 192.168.2.255 scope global secondary eth0:1
   inet6 fe80::20c:29ff:fefe:2dab/64 scope link
      valid_lft forever preferred_lft forever  

停止ser5的heartbeat服務(wù)或?qū)⒕W(wǎng)線斷掉,同時(shí)監(jiān)控ser6的DRBD狀態(tài),

ser6操作:

watch -n 1 /etc/init.d/drbd status

如果一切正常,可以看到狀態(tài)在不斷變化。

Drbd+Heartbeat+Mysql主從高可用

4)   恢復(fù)ser5的heartbeat服務(wù)或?qū)⒕W(wǎng)線接上,同時(shí)監(jiān)控ser6的DRBD狀態(tài),如果正常ser5又變?yōu)橹鞴?jié)點(diǎn)(auto_failback on 決定)了。

Drbd+Heartbeat+Mysql主從高可用

mysql的安裝

注:DMYSQL_DATADIR=/data/mysql/data/

mysql數(shù)據(jù)目錄的安裝位置在drbd上面

# mkdir –pv /data/mysql/data/

# chown -R mysql.mysql /data

源碼包安裝(生產(chǎn)環(huán)境使用最新穩(wěn)定版的源碼安裝)

1.先安裝編譯工具cmake

[root@ser5 Desktop]# rpm -qa gcc gcc-c++ make ncurses-devel cmake openssl-devel openss

[root@ser5 Desktop]# yum -y install gcc-c++ ncurses-devel cmake openssl-devel openss

[root@ser5]# tar -zxvf cmake-2.8.10.2.tar.gz

[root@ser5]# cd cmake-2.8.10.2

[root@ser5 cmake-2.8.10.2]# ./bootstrap --prefix=/usr/local/cmake //安裝程序

[root@ser5 cmake-2.8.10.2]#make && make install

[root@ser5 cmake-2.8.10.2]# /usr/local/cmake/bin/cmake --version //驗(yàn)證是否已安裝

cmake version 2.8.10.2

2.安裝mysql

1)檢查是否安裝mysql,有則執(zhí)行下邊程序

[root@ser5 cmake-2.8.10.2]# rpm -q mysql-server

[root@ser5 cmake-2.8.10.2]# service mysqld stop

[root@ser5 cmake-2.8.10.2]# chkconfig mysqld stop

[root@ser5 cmake-2.8.10.2]# rm -rf /etc/my.cnf

[root@ser5 cmake-2.8.10.2]# rpm -e --nodeps mysql-server

2)添加數(shù)據(jù)庫(kù)管理用戶

[root@ser5 cmake-2.8.10.2]# useradd -s /sbin/nologin -M mysql //添加數(shù)據(jù)庫(kù)管理用戶

[root@ser5 cmake-2.8.10.2]# grep mysql /etc/passwd

mysql:x:501:501::/home/mysql:/sbin/nologin

3)安裝數(shù)據(jù)庫(kù)

[root@ser5 ]# tar -zxvf mysql-5.5.13.tar.gz

[root@ser5 ]# cd mysql-5.5.13

[root@ser5 mysql-5.5.13]#rm -rf /usr/local/mysql/

[root@ser5 mysql-5.5.13]# mv /root/Desktop/mysql.sh . // . 代表當(dāng)前

[root@ser5 mysql-5.5.13]# sh mysql.sh

/usr/local/cmake/bin/cmake -DCMAKE_INSTALL_PREFIX=/usr/local/mysql    -DSYSCONFDIR=/etc   -DMYSQL_DATADIR=/data/mysql/data/  -DMYSQL_TCP_PORT=3306   -DMYSQL_UNIX_ADDR=/tmp/mysqld.sock   -DMYSQL_USER=mysql   -DEXTRA_CHARSETS=all   -DWITH_READLINE=1   -DWITH_SSL=system   -DWITH_EMBEDDED_SERVER=1   -DENABLED_LOCAL_INFILE=1   -DWITH_INNOBASE_STORAGE_ENGINE=1

注:若有報(bào)錯(cuò)信息,則根據(jù)報(bào)錯(cuò)信息安裝相應(yīng)的安裝包,務(wù)必清除此目錄下的CMakeCache.txt,然后再重新執(zhí)行

[root@ser5 mysql-5.5.13]#make && make install

3.初始化授權(quán)庫(kù)

[root@ser5 mysql-5.5.13]# cd /usr/local/mysql/

[root@ser5 mysql]# ls

bin 命令 data 目錄 mysql-test scripts 初始化數(shù)據(jù)庫(kù)

[root@ser5 ~]# cd /usr/local/mysql/

[root@ser5 mysql]# chown –R mysql.mysql .

[root@ser5 mysql]# ./scripts/mysql_install_db --user=mysql --datadir=/data/mysql/data/   //初始化數(shù)據(jù)庫(kù)

#cd /data/mysql/data

[root@ser5 data]# ls         //查看初始化是否成功performance_schema

mysql performance_schema test

4.創(chuàng)建主配置文件,啟動(dòng)數(shù)據(jù)庫(kù)服務(wù)

[root@ser5 Desktop]# cp lnmp+memcached/mysql-5.5.13/support-files/my-medium.cnf /etc/my.cnf //主配置模板

啟動(dòng)數(shù)據(jù)庫(kù)服務(wù)

[root@ser5 Desktop]# netstat -anptul | grep :3306

[root@ser5 mysql]# cd /usr/local/mysql/bin/

[root@ser5 bin]# ./mysqld_safe --user=mysql  --datadir=/data/mysql/data/ &

登錄數(shù)據(jù)庫(kù)服務(wù)

[root@ser5 ~]# /usr/local/mysql/bin/mysql -hlocalhost -uroot -p

Enter password:

5.設(shè)置快捷啟動(dòng),并在所有終端有效,并設(shè)置數(shù)據(jù)庫(kù)密碼

# vim ~/.bash_profile

PATH=$PATH:$HOME/bin:/usr/local/mysql/bin/ //添加命令搜索路徑

export PATH

#source ~/.bash_profile

設(shè)置數(shù)據(jù)庫(kù)管理員從本機(jī)登錄的密碼 為123

[root@ser5 ~]# mysqladmin -hlocalhost -uroot password "123"

# cat /etc/ld.so.conf

#ldconfig

[root@ser5 ~]# jobs

[root@ser5 ~]# kill -9 %1

[root@ser5 ~]# ./mysqld_safe --user=mysql   --datadir=/data/mysql/data/ &   //重啟服務(wù)

[root@ser5 ~]# mysql -uroot -p123

mysql>

6.service mysql restart給源碼包寫啟動(dòng)腳本;設(shè)置為service啟動(dòng)方式:

[root@ser5 ~]# cd /root/Desktop/lnmp+memcached/mysql-5.5.13/support-files/

# vim mysql.server basedir=/usr/local/mysql/  datadir=/data/mysql/data/

[root@ser5 support-files]# cp mysql.server /etc/init.d/mysqld //拷貝腳本

[root@ser5 support-files]# chmod +x /etc/init.d/mysqld //添加執(zhí)行權(quán)限

[root@ser5 support-files]# pkill -9 mysql

[root@ser5 support-files]# service mysqld restart

[root@ser5 support-files]# chkconfig mysqld on

[root@ser5 support-files]# chkconfig --list mysqld

mysqld 服務(wù)支持 chkconfig,但它在任何級(jí)別中都沒(méi)有被引用(運(yùn)行“chkconfig --add mysqld”)

[root@ser5 support-files]# chkconfig --add mysqld

[root@ser5 support-files]# chkconfig --list mysqld

mysqld 0:關(guān)閉 1:關(guān)閉 2:啟用 3:啟用 4:啟用 5:啟用 6:關(guān)閉

同樣ser6.hyzc.com也同樣安裝

修改ha.cf

由于現(xiàn)在是管理Mysql,故要將mysqld由heartbeat管理(2個(gè)節(jié)點(diǎn)都執(zhí)行)

ser5.hyzc.com IPaddr::192.168.2.15/24/eth0:1 drbddisk::r0 Filesystem::/dev/drbd0::/data::ext4 mysqld  

重新啟動(dòng)heartbeat

# service heartbeat restart

啟動(dòng)之后,進(jìn)入mysql,建立數(shù)據(jù)庫(kù)db,然后建立表t,插入數(shù)據(jù)

[root@ser5 local]# mysql -uroot -p  

啟動(dòng)之后,進(jìn)入mysql,建立數(shù)據(jù)庫(kù)db,然后建立表t,插入數(shù)據(jù)

  1. [root@ser5 resource.d]# mysql

  2. Welcome to the MySQL monitor.  Commands end with ; or \g.  Your MySQL connection id is 2  Server version: 5.0.95 Source distribution    Copyright (c) 2000, 2011, Oracle and/or its affiliates. All rights reserved.    Oracle is a registered trademark of Oracle Corporation and/or its  affiliates. Other names may be trademarks of their respective  owners.    Type 'help;' or '\h' for help. Type '\c' to clear the current input statement.    mysql> show databases;  +--------------------+  | Database           |  +--------------------+  | information_schema |      | lost+found         |   | mysql              |   | test               |   +--------------------+  5 rows in set (0.04 sec)    mysql> create database db;  Query OK, 1 row affected (0.01 sec)    mysql> use db  Database changed  mysql> create table t (id int(10),name char(10));  Query OK, 0 rows affected (0.05 sec)    mysql> insert into t values(001,"ser1"),(002,"ser2");  Query OK, 2 rows affected (0.00 sec)  Records: 2  Duplicates: 0  Warnings: 0    mysql> select * from t;  +------+----------+  | id   | name     |  +------+----------+  |    1 | ser1|   |    2 | ser2 |   +------+----------+  2 rows in set (0.00 sec)  mysql> COMMIT; mysql> exit  Bye

之后停止heartbeat,查看其它節(jié)點(diǎn)(ser6)里是否有mysql的數(shù)據(jù)

[root@ser5 /]# service heartbeat stop

drbd已經(jīng)變?yōu)閺牧?,drbd0已經(jīng)從database里卸載了

[root@ser5 data]# cat /proc/drbd
version: 8.4.6 (api:1/proto:86-101)
GIT-hash: 833d830e0152d1e457fa7856e71e11248ccf3f70 build by root@ser5.hyzc.com, 2016-08-05 02:12:56
0: cs:Connected ro:Secondary/Primary ds:UpToDate/UpToDate C r-----
   ns:1308 nr:348 dw:1656 dr:6085 al:8 bm:0 lo:0 pe:0 ua:0 ap:0 ep:1 wo:f oos:0
[root@ser5 data]# df -hT
Filesystem    Type    Size Used Avail Use% Mounted on
/dev/sda2     ext4     96G 6.0G  85G  7% /
tmpfs         tmpfs   415M 224K 415M  1% /dev/shm
/dev/sda1     ext4    194M  34M 151M 19% /boot
/dev/sr0      iso9660 4.2G 4.2G    0 100% /misc  

在ser6里查看drbd是否為主,drbd0是否裝載了database

[root@ser6 Desktop]# cat /proc/drbd
version: 8.4.6 (api:1/proto:86-101)
GIT-hash: 833d830e0152d1e457fa7856e71e11248ccf3f70 build by root@ser5.hyzc.com, 2016-08-05 02:12:56
0: cs:Connected ro:Primary/Secondary ds:UpToDate/UpToDate C r-----
   ns:348 nr:1308 dw:1656 dr:6097 al:6 bm:0 lo:0 pe:0 ua:0 ap:0 ep:1 wo:f oos:0

[root@ser6 Desktop]# df -h
Filesystem     Size Used Avail Use% Mounted on
/dev/sda2       96G 6.0G  85G  7% /
tmpfs          415M 224K 415M  1% /dev/shm
/dev/sda1      194M  34M 151M 19% /boot
/dev/sr0       4.2G 4.2G    0 100% /misc
/dev/drbd0      20G 203M  19G  2% /data  

此時(shí),ser6已經(jīng)變?yōu)橹?,并且drbd0已經(jīng)掛載到了database了

進(jìn)入mysql里查看db數(shù)據(jù)庫(kù)、t表是否已交傳過(guò)來(lái)

  1. [root@ser6 /]# mysql

  2. Welcome to the MySQL monitor.  Commands end with ; or \g.  Your MySQL connection id is 2  Server version: 5.0.95 Source distribution  Copyright (c) 2000, 2011, Oracle and/or its affiliates. All rights reserved.  Oracle is a registered trademark of Oracle Corporation and/or its  affiliates. Other names may be trademarks of their respective  owners.  Type 'help;' or '\h' for help. Type '\c' to clear the current input statement.  mysql> show databases;  +--------------------+  | Database           |  +--------------------+  | information_schema |   | db                 |   | mysql              |   | test               |   +--------------------+  6 rows in set (0.04 sec)  mysql> use db;  Reading table information for completion of table and column names  You can turn off this feature to get a quicker startup with -A  Database changed  mysql> select * from t;  +------+----------+  | id   | name     |  +------+----------+  |    1 | ser1  |   |    2 | ser2 |   +------+----------+  2 rows in set (0.00 sec)

 mysql已經(jīng)收到了數(shù)據(jù)。這樣我們的drbd+heartbeat+mysql已經(jīng)實(shí)現(xiàn)了高可用的mysql數(shù)據(jù)庫(kù)了。

遇到的問(wèn)題

報(bào)錯(cuò)1:

Aug 14 15:01:46 ser5.hyzc.com heartbeat: [85845]: ERROR: Bad permissions on keyfile [/etc/ha.d//authkeys], 600 recommended.

Aug 14 15:01:46 ser5.hyzc.com heartbeat: [85845]: ERROR: Authentication configuration error.

Aug 14 15:01:46 ser5.hyzc.com heartbeat: [85845]: ERROR: Configuration error, heartbeat not started.

解決方案:

chmod 600 authkeys即可

報(bào)錯(cuò)2

[root@test6 /]# service heartbeat start

logd is already running

Starting High-Availability services:

2012/03/14_21:36:50 INFO:  Resource is stopped

                              [FAILED]

heartbeat[6579]: 2012/03/14_21:36:50 ERROR: Client child command [/usr/lib/heartbeat/ipfail] is not executable

heartbeat[6579]: 2012/03/14_21:36:50 ERROR: Heartbeat not started: configuration error.

heartbeat[6579]: 2012/03/14_21:36:50 ERROR: Configuration error, heartbeat not started.

解決辦法:

如果發(fā)生這個(gè)問(wèn)題,先查看你的系統(tǒng)是32還是64位的,如果是64位的,則在ha.cf

里respawn hacluster /usr/lib/heartbeat/ipfail吧這個(gè)lib改成lib64;32位的不變。

另外有需要云服務(wù)器可以了解下創(chuàng)新互聯(lián)cdcxhl.cn,海內(nèi)外云服務(wù)器15元起步,三天無(wú)理由+7*72小時(shí)售后在線,公司持有idc許可證,提供“云服務(wù)器、裸金屬服務(wù)器、高防服務(wù)器、香港服務(wù)器、美國(guó)服務(wù)器、虛擬主機(jī)、免備案服務(wù)器”等云主機(jī)租用服務(wù)以及企業(yè)上云的綜合解決方案,具有“安全穩(wěn)定、簡(jiǎn)單易用、服務(wù)可用性高、性價(jià)比高”等特點(diǎn)與優(yōu)勢(shì),專為企業(yè)上云打造定制,能夠滿足用戶豐富、多元化的應(yīng)用場(chǎng)景需求。

文章名稱:Drbd+Heartbeat+Mysql主從高可用-創(chuàng)新互聯(lián)
分享URL:http://muchs.cn/article34/dpeese.html

成都網(wǎng)站建設(shè)公司_創(chuàng)新互聯(lián),為您提供網(wǎng)站改版、營(yíng)銷型網(wǎng)站建設(shè)網(wǎng)站收錄、網(wǎng)站排名虛擬主機(jī)、網(wǎng)站制作

廣告

聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶投稿、用戶轉(zhuǎn)載內(nèi)容為主,如果涉及侵權(quán)請(qǐng)盡快告知,我們將會(huì)在第一時(shí)間刪除。文章觀點(diǎn)不代表本網(wǎng)站立場(chǎng),如需處理請(qǐng)聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內(nèi)容未經(jīng)允許不得轉(zhuǎn)載,或轉(zhuǎn)載時(shí)需注明來(lái)源: 創(chuàng)新互聯(lián)

營(yíng)銷型網(wǎng)站建設(shè)