溫馨提示×

溫馨提示×

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

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

Drbd+Heartbeat+Mysql主從高可用

發布時間:2020-06-05 07:51:49 來源:網絡 閱讀:591 作者:赤練摯愛 欄目:數據庫

一、準備工作

系統:Centos6.5

         兩臺主機需要相互域名解析


主節點(Primary Node)次節點(Secondary Node)
主機名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擴展源:    
    #yum -y install epel-release    
兩個機器都安裝heartbeat 
    #yum -y install heartbeat*

查看heartbeat的配置文件ha.cf

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

查看heartbeat的配置文件ha.cf

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

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

2、設置節點之間的通信密鑰

[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   主節點的主機名

IPaddr::192.168.2.15/24/eth0     設置虛擬IP

drbddisk::r0                  管理資源r0

Filesystem::/dev/drbd0::/data::ext4   執行umount和mount操作

 

次節點操作:

將ha.cf中的192.168.2.11改成192.168.2.10

啟動heartbeat 2.11和2.10機器

# service heartbeat start

 

從結果可以看出,VIP已經出現

[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服務或將網線斷掉,同時監控ser6的DRBD狀態,

ser6操作:

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

如果一切正常,可以看到狀態在不斷變化。

Drbd+Heartbeat+Mysql主從高可用

4)    恢復ser5的heartbeat服務或將網線接上,同時監控ser6的DRBD狀態,如果正常ser5又變為主節點(auto_failback on 決定)了。

Drbd+Heartbeat+Mysql主從高可用

 

 

mysql的安裝

注:DMYSQL_DATADIR=/data/mysql/data/ 

mysql數據目錄的安裝位置在drbd上面

# mkdir –pv  /data/mysql/data/ 

# chown -R mysql.mysql /data

源碼包安裝(生產環境使用最新穩定版的源碼安裝)

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 //驗證是否已安裝

cmake version 2.8.10.2

2.安裝mysql

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

[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)添加數據庫管理用戶

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

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

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

3)安裝數據庫

[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 . // . 代表當前

 

[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

注:若有報錯信息,則根據報錯信息安裝相應的安裝包,務必清除此目錄下的CMakeCache.txt,然后再重新執行

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

3.初始化授權庫

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

[root@ser5 mysql]# ls

bin 命令 data 目錄 mysql-test scripts 初始化數據庫

[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/    //初始化數據庫

#cd /data/mysql/data

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

mysql performance_schema test

4.創建主配置文件,啟動數據庫服務

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

啟動數據庫服務

[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/  &

登錄數據庫服務

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

Enter password:

5.設置快捷啟動,并在所有終端有效,并設置數據庫密碼

# vim ~/.bash_profile

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

export PATH

#source ~/.bash_profile

設置數據庫管理員從本機登錄的密碼 為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/  &    //重啟服務

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

mysql>

6.service mysql restart給源碼包寫啟動腳本;設置為service啟動方式:

[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 //添加執行權限

[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 服務支持 chkconfig,但它在任何級別中都沒有被引用(運行“chkconfig --add mysqld”)

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

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

mysqld 0:關閉 1:關閉 2:啟用 3:啟用 4:啟用 5:啟用 6:關閉

 

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

 

修改ha.cf

由于現在是管理Mysql,故要將mysqld由heartbeat管理(2個節點都執行)

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

重新啟動heartbeat

# service heartbeat restart

 

 

啟動之后,進入mysql,建立數據庫db,然后建立表t,插入數據

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

啟動之后,進入mysql,建立數據庫db,然后建立表t,插入數據

  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,查看其它節點(ser6)里是否有mysql的數據

[root@ser5 /]# service heartbeat stop

 

drbd已經變為從了,drbd0已經從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  

此時,ser6已經變為主,并且drbd0已經掛載到了database了


進入mysql里查看db數據庫、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已經收到了數據。這樣我們的drbd+heartbeat+mysql已經實現了高可用的mysql數據庫了。


遇到的問題

報錯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即可


報錯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.  

解決辦法:

如果發生這個問題,先查看你的系統是32還是64位的,如果是64位的,則在ha.cf

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



向AI問一下細節

免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

AI

亚洲午夜精品一区二区_中文无码日韩欧免_久久香蕉精品视频_欧美主播一区二区三区美女