溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊(cè)×
其他方式登錄
點(diǎn)擊 登錄注冊(cè) 即表示同意《億速云用戶服務(wù)條款》

Drbd+Heartbeat+Mysql主從高可用

發(fā)布時(shí)間:2020-06-05 07:51:49 來源:網(wǎng)絡(luò) 閱讀:547 作者:赤練摯愛 欄目:數(shù)據(jù)庫

一、準(zhǔn)備工作

系統(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è)文件(如沒有可手動(dòng)建立):ha.cf、haresources、authkeys。這三個(gè)配置文件需要在/etc/ha.d目錄下面,但是默認(rèn)是沒有這三個(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還沒有連接則把警告信息寫入日志里  
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命令無法使用;  
node     ser5.hyzc.com                       #節(jié)點(diǎn)名(通過uname -n查詢) 
node    ser6.hyzc.com                        #節(jié)點(diǎn)名(通過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)切換回來)

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來定義資源

[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ù)庫管理用戶

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

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

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

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

[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)庫

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

[root@ser5 mysql]# ls

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

[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ù)庫

#cd /data/mysql/data

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

mysql performance_schema test

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

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

啟動(dòng)數(shù)據(jù)庫服務(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ù)庫服務(wù)

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

Enter password:

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

# vim ~/.bash_profile

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

export PATH

#source ~/.bash_profile

設(shè)置數(shù)據(jù)庫管理員從本機(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í)別中都沒有被引用(運(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ù)庫db,然后建立表t,插入數(shù)據(jù)

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

啟動(dòng)之后,進(jìn)入mysql,建立數(shù)據(jù)庫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)閺牧耍琩rbd0已經(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ù)庫、t表是否已交傳過來

  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ù)庫了。


遇到的問題

報(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è)問題,先查看你的系統(tǒng)是32還是64位的,如果是64位的,則在ha.cf

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



向AI問一下細(xì)節(jié)

免責(zé)聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀點(diǎn)不代表本網(wǎng)站立場(chǎng),如果涉及侵權(quán)請(qǐng)聯(lián)系站長(zhǎng)郵箱:is@yisu.com進(jìn)行舉報(bào),并提供相關(guān)證據(jù),一經(jīng)查實(shí),將立刻刪除涉嫌侵權(quán)內(nèi)容。

AI