溫馨提示×

溫馨提示×

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

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

Heartbeat+DRBD+MySQL高可用方案

發(fā)布時間:2020-07-11 10:17:48 來源:網(wǎng)絡 閱讀:1942 作者:逐夢小濤 欄目:建站服務器

Heartbeat+DRBD+MySQL高可用方案

===============================================================================

概述:


===============================================================================

方案介紹

 1.方案介紹及優(yōu)缺點

方案介紹

  • 本方案采用Heartbeat雙機熱備軟件來保證數(shù)據(jù)庫的高穩(wěn)定性和連續(xù)性,數(shù)據(jù)的一致性由DRBD這個工具來保證。默認情況下只有一臺mysql在工作,當主mysql服務器出現(xiàn)問題后,系統(tǒng)將自動切換到備機上繼續(xù)提供服務,當主數(shù)據(jù)庫修復完畢,又將服務切回繼續(xù)由主mysql提供服務。

方案優(yōu)缺點

優(yōu)點:

  • 安全性高、穩(wěn)定性高、可用性高,出現(xiàn)故障自動切換。

缺點:

  • 只有一臺服務器提供服務,成本相對較高,不方便擴展,可能會發(fā)生腦裂。

 2.軟件介紹

Heartbeat介紹

  • 官方站點:http://linux-ha.org/wiki/Main_Page

  • heartbeat可以將資源(VIP地址及程序服務)從一臺有故障的服務器快速的轉(zhuǎn)移到另一臺正常的服務器提供服務,heartbeat和keepalived相似,heartbeat可以實現(xiàn)failover功能,但不能實現(xiàn)對后端的健康檢查;

DRBD介紹

  • 官方站點:http://www.drbd.org/

  • DRBD(DistributedReplicatedBlockDevice)是一個基于塊設備級別在遠程服務器之間同步和鏡像數(shù)據(jù)的軟件,用軟件實現(xiàn)的、無共享的、服務器之間鏡像塊設備內(nèi)容的存儲復制解決方案。它可以實現(xiàn)在網(wǎng)絡中兩臺服務器之間基于塊設備級別的實時鏡像或同步復制(兩臺服務器都寫入成功)/異步復制(本地服務器寫入成功),相當于網(wǎng)絡的RAID1,由于是基于塊設備(磁盤,LVM邏輯卷),在文件系統(tǒng)的底層,所以數(shù)據(jù)復制要比cp命令更快。DRBD已經(jīng)被MySQL官方寫入文檔手冊作為推薦的高可用的方案之一;

方案拓撲及適用場景

Heartbeat+DRBD+MySQL高可用方案


適用場景:

  • 適用于數(shù)據(jù)庫訪問量不太大,短期內(nèi)訪問量增長不會太快,對數(shù)據(jù)庫可用性要求非常高的場景。

安裝部署及測試

 1.測試環(huán)境介紹(均已關(guān)閉防火墻和selinux)

主機名
IP地址
系統(tǒng)DRBD磁盤heartbeat版本
per2172.22.144.232CentOS 6.5
/dev/sdb32.1.4-12
per3172.22.144.233CentOS 6.5/dev/sdb32.1.4-12

 2.測試環(huán)境準備:

本地yum源配置

將裝系統(tǒng)時使用的光盤上的所有文件拷貝到主機 /cdrom下

Heartbeat+DRBD+MySQL高可用方案

Ntpserver配置

集群服務各節(jié)點之間的時間必須是同步的,所以這里需要搭建一臺NTP server,這里選擇在一臺服務器(node1)上搭建,其他節(jié)點(配置crontab)用ntpdate serverip進行同步,具體部署步驟如下:

Heartbeat+DRBD+MySQL高可用方案

域名解析配置

將所有的IP和主機名寫入一臺服務器的/etc/hosts,然后scp到每一臺服務器。

Heartbeat+DRBD+MySQL高可用方案

主被服務器件雙機互信通信

Heartbeat+DRBD+MySQL高可用方案




DRBD安裝配置及啟動測試:

1.安裝依賴包(node1和node2都要做)

yum install -y gcc gcc-c++ make glibc flex kernel-devel kernel-headers PyXML net-snmp-libs tigervnc-server

2.DRBD的安裝及配置(node1和node2都要做)

1)安裝包準備如下:

[root@node1 heartbeat+drbd+mysql]# cd drbd/
[root@node1 drbd]# ll
總用量 45652
-rw-r--r-- 1 root root   224376 4月  26 17:15 drbd83-utils-8.3.16-1.el6.elrepo.x86_64.rpm
-rw-r--r-- 1 root root   688328 4月  26 17:15 drbd-8.4.3.tar.gz
-rw-r--r-- 1 root root 30514788 4月  26 17:16 kernel-2.6.32-504.12.2.el6.x86_64.rpm
-rw-r--r-- 1 root root 15133064 4月  26 17:16 kernel-firmware-2.6.32-504.12.2.el6.noarch.rpm
-rw-r--r-- 1 root root   177360 4月  26 17:16 kmod-drbd83-8.3.16-3.el6.elrepo.x86_64.rpm

2)解壓 drbd-8.4.3.tar.gz的壓縮包,并進入到解壓后的目錄中,執(zhí)行命令,如下:

# 解壓
[root@node1 drbd]# tar -zxvf drbd-8.4.3.tar.gz
[root@node1 drbd]# cd drbd-8.4.3
[root@node1 drbd-8.4.3]# ls
autogen.sh  configure     documentation  drbd-kernel.spec.in  filelist-redhat  preamble         preamble-sles11  scripts
benchmark   configure.ac  drbd           drbd-km.spec.in      filelist-suse    preamble-rhel5   README           user
ChangeLog   COPYING       drbd_config.h  drbd.spec.in         Makefile.in      preamble-sles10  rpm-macro-fixes

[root@node1 drbd-8.4.3]# ./configure --prefix=/usr/local/drbd --with-km --with-heartbeat
[root@node1 drbd-8.4.3]# make KDIR=/usr/src/kernels/`uname -r`
[root@node1 drbd-8.4.3]# make install

# 編譯完成后的文件在 /usr/local/drbd 路徑下

3)進入 /usr/local/drbd 目錄,完成后續(xù)操作如下:

[root@node1 drbd]# mkdir -p /usr/local/drbd/var/run/drbd
[root@node1 drbd]# cp /usr/local/drbd/etc/rc.d/init.d/drbd /etc/rc.d/init.d

# 加入到服務中去
[root@node1 init.d]# chkconfig --add drbd
[root@node1 init.d]# chkconfig drbd on

4)加載drbd模塊

[root@node1 init.d]# modprobe drbd

# 查看是否加載 drbd 模塊
[root@node1 init.d]# lsmod |grep drbd
drbd                  326138  0 
libcrc32c               1246  1 drbd

3.DRBD的配置啟動

1)編輯drbd的配置文件如下(node1和node2相同):

[root@node1 etc]# pwd
/usr/local/drbd/etc

[root@node1 etc]# vim drbd.conf 
# You can find an example in  /usr/share/doc/drbd.../drbd.conf.example

include "drbd.d/global_common.conf";
include "drbd.d/*.res";

resource data{                #創(chuàng)建一個資源,名字叫"data"
	protocol C;           #選擇的是drbd的C 協(xié)議(數(shù)據(jù)同步協(xié)議,C為收到數(shù)據(jù)并寫入后返回,確認成功)
	startup { wfc-timeout 0; degr-wfc-timeout 120;}
	disk { on-io-error detach;}
	net{
		timeout 60;
		connect-int 10;
		ping-int 10;
		max-buffers 2048;
		max-epoch-size 2048;
	}
	syncer { rate 100M;}
	on node1{			#設定一個節(jié)點,分別以各自的主機名命名			
		device /dev/drbd0;      #設定資源設備/dev/drbd0 指向?qū)嶋H的物理分區(qū) /dev/sda3
		disk /dev/sdb3;
		address 172.21.1.112:7788;  #設定監(jiān)聽地址以及端口
		meta-disk internal;         #internal表示是在同一個局域網(wǎng)內(nèi)
	} 
	on node2{
		device /dev/drbd0;
		disk /dev/sdb3;					
		address 172.21.1.113:7788;
		meta-disk internal;
	}
}

2)初始化資源并啟動服務(node1和node2操作相同)

# /dev/sdb3 是 DRBD分區(qū),在實驗環(huán)境也可能是邏輯卷,依據(jù)情況修改。
# 不這樣做的話,在創(chuàng)建資源的時候報錯
[root@node1 ~]# dd if=/dev/zero of=/dev/sdb3 bs=1M count=100
記錄了100+0 的讀入
記錄了100+0 的寫出
104857600字節(jié)(105 MB)已復制,3.33403 秒,31.5 MB/秒

[root@node1 ~]# drbdadm create-md data
you are the 57124th user to install this version
Writing meta data...
initializing activity log
NOT initializing bitmap
New drbd meta data block successfully created.
success

3)DRBD的啟動與查看

[root@node1 init.d]# pwd
/etc/init.d

# 啟動服務
[root@node1 init.d]# ./drbd start
Starting DRBD resources: [
     create res: data
   prepare disk: data
    adjust disk: data
     adjust net: data
]
outdated-wfc-timeout has to be shorter than degr-wfc-timeout
outdated-wfc-timeout implicitly set to degr-wfc-timeout (120s)

# 檢查端口7788是否監(jiān)聽 
[root@node1 init.d]# netstat -tnp
Active Internet connections (w/o servers)
Proto Recv-Q Send-Q Local Address               Foreign Address             State       PID/Program name   
tcp        0    248 172.21.1.112:22             172.21.1.58:52000           ESTABLISHED 3922/sshd           
tcp        0      0 172.21.1.112:7788           172.21.1.113:50683          ESTABLISHED -                   
tcp        0      0 172.21.1.112:22             172.21.1.58:51494           ESTABLISHED 1893/sshd           
tcp        0      0 172.21.1.112:37965          172.21.1.113:7788           ESTABLISHED -

4)查看DRBD的狀態(tài),可以看到這時還沒有主節(jié)點,兩節(jié)點都為Secondary;

[root@node1 init.d]# ./drbd status
drbd driver loaded OK; device status:
version: 8.4.3 (api:1/proto:86-101)
GIT-hash: 89a294209144b68adb3ee85a73221f964d3ee515 build by root@node1, 2017-04-28 10:22:42
m:res   cs         ro                   ds                         p  mounted  fstype
0:data  Connected  Secondary/Secondary  Inconsistent/Inconsistent  C

[root@node1 sbin]# pwd
/usr/local/drbd/sbin
[root@node1 sbin]# ./drbd-overview 
  0:data/0  Connected Secondary/Secondary Inconsistent/Inconsistent C r-----

4.設置node1節(jié)點為主節(jié)點

[root@node1 ~]# drbdsetup /dev/drbd0 primary --force

# 再次查看可以發(fā)現(xiàn)數(shù)據(jù)同步過程已經(jīng)開始
[root@node1 sbin]# ./drbd-overview 
  0:data/0  SyncSource Primary/Secondary UpToDate/Inconsistent C r---n- 
	[>....................] sync'ed:  0.2% (10236/10244)M
[root@node1 sbin]# ./drbd-overview 
  0:data/0  SyncSource Primary/Secondary UpToDate/Inconsistent C r---n- 
	[>...................] sync'ed:  7.7% (9464/10244)M	

[root@node1 init.d]# ./drbd status
drbd driver loaded OK; device status:
version: 8.4.3 (api:1/proto:86-101)
GIT-hash: 89a294209144b68adb3ee85a73221f964d3ee515 build by root@node1, 2017-04-28 10:22:42
m:res   cs          ro                 ds                     p  mounted  fstype
...     sync'ed:    22.0%              (8000/10244)M
0:data  SyncSource  Primary/Secondary  UpToDate/Inconsistent  C

# 此時,可以使用 watch -n 1 "./drbd-overview" 監(jiān)控同步進度
# 等數(shù)據(jù)同步完成以后再次查看狀態(tài),可以發(fā)現(xiàn)節(jié)點已經(jīng)牌實時狀態(tài),且節(jié)點已經(jīng)有了主從
[root@node1 sbin]# ./drbd-overview 
  0:data/0  Connected Primary/Secondary UpToDate/UpToDate C r-----

5.創(chuàng)建文件系統(tǒng),及查看最大掛載限制并解除

文件系統(tǒng)的掛載只能在Primary節(jié)點進行,因此,也只有在設置了主節(jié)點后才能對drbd設備進行格式化:

[root@node1 ~]# mkfs.ext4 /dev/drbd0
mke2fs 1.41.12 (17-May-2010)
文件系統(tǒng)標簽=
操作系統(tǒng):Linux
塊大小=4096 (log=2)
分塊大小=4096 (log=2)
Stride=0 blocks, Stripe width=0 blocks
655776 inodes, 2622521 blocks
131126 blocks (5.00%) reserved for the super user
第一個數(shù)據(jù)塊=0
Maximum filesystem blocks=2688548864
81 block groups
32768 blocks per group, 32768 fragments per group
8096 inodes per group
Superblock backups stored on blocks: 
	32768, 98304, 163840, 229376, 294912, 819200, 884736, 1605632

正在寫入inode表: 完成                            
Creating journal (32768 blocks): 完成
Writing superblocks and filesystem accounting information: 完成

This filesystem will be automatically checked every 38 mounts or
180 days, whichever comes first.  Use tune2fs -c or -i to override.

################################################################################
# 查看最大掛載限制
[root@node1 ~]# tune2fs -l /dev/drbd0 | grep ^M
Mount count:              0
Maximum mount count:      38

# 解除最大掛載限制
[root@node1 ~]# tune2fs -i 0 -c 0 /dev/drbd0
tune2fs 1.41.12 (17-May-2010)
Setting maximal mount count to -1
Setting interval between checks to 0 seconds

[root@node1 ~]# tune2fs -l /dev/drbd0 | grep ^M
Mount count:              0
Maximum mount count:      -1

注:

  • 如果drbd是由heartbeat管理,則兩臺機器都要設置為secondary

  • 從節(jié)點(備機)不能mkfs和mount;Secondary節(jié)點上不允許對DRBD設備進行任何操作,包括只讀,所有的讀寫操作只能在Primary節(jié)點上進行,只有當Primary節(jié)點掛掉時,Secondary節(jié)點才能提升為Primary節(jié)點,繼續(xù)工作;

6.DRBD主從切換,驗證DRBD工作是否正確

1)主節(jié)點操作

[root@node1 ~]# mkdir /mydata

[root@node1 ~]# mount /dev/drbd0 /mydata

[root@node1 ~]# df -h
Filesystem      Size  Used Avail Use% Mounted on
/dev/sda3        97G  9.0G   83G  10% /
tmpfs           491M   72K  491M   1% /dev/shm
/dev/sda1       194M   29M  155M  16% /boot
/dev/drbd0      9.9G  151M  9.2G   2% /mydata

[root@node1 ~]# ls /mydata
lost+found

# 創(chuàng)建樣例數(shù)據(jù)
[root@node1 ~]# echo 123456 > /mydata/testfile
[root@node1 ~]# ls /mydata
lost+found  testfile

# 解除主節(jié)點的掛載
[root@node1 ~]# umount /mydata
[root@node1 ~]# df
Filesystem     1K-blocks    Used Available Use% Mounted on
/dev/sda3      100944296 9406416  86410152  10% /
tmpfs             502204      72    502132   1% /dev/shm
/dev/sda1         198337   29472    158625  16% /boot

# 主服務節(jié)點變成從節(jié)點
[root@node1 ~]# drbdsetup /dev/drbd0 secondary

2)從節(jié)點操作

# 從節(jié)點創(chuàng)建掛載目錄
[root@node2 ~]# mkdir /mydata

# 升級從節(jié)點服務為主節(jié)點
[root@node2 ~]# drbdsetup /dev/drbd0 primary

# 掛載 drbd
[root@node2 ~]# mount /dev/drbd0 /mydata 

[root@node2 ~]# df
Filesystem     1K-blocks    Used Available Use% Mounted on
/dev/sda3      100944296 5168556  90648012   6% /
tmpfs             502204      72    502132   1% /dev/shm
/dev/sda1         198337   29472    158625  16% /boot
/dev/drbd0      10325420  154140   9646776   2% /mydata

# 查看樣例數(shù)據(jù)為node1上創(chuàng)建的數(shù)據(jù)
[root@node2 ~]# ls /mydata/
lost+found  testfile
[root@node2 ~]# cat /mydata/testfile 
123456

此時可以說明drbd 配置正確,且工作正常。

==============================================================================

MySQL安裝配置及啟動(兩節(jié)點同時安裝)

1.mysql安裝,我這里為了簡單直接安裝編譯好的二進制軟件包(兩臺服務器都需要安裝,操作一樣,只是第二臺mysql不需要初始化數(shù)據(jù))

[root@node1 mysql]# ls
mysql-5.6.36-linux-glibc2.5-x86_64.tar.gz  
[root@node1 mysql]# tar xvf mysql-5.6.36-linux-glibc2.5-x86_64.tar.gz -C /usr/local/

[root@node1 local]# cd /usr/local/mysql
[root@node1 local]# ln -s mysql-5.6.36-linux-glibc2.5-x86_64 mysql
[root@node1 local]# ll
總用量 48
drwxr-xr-x.  2 root root 4096 4月  27 10:07 bin
drwxr-xr-x   7 root root 4096 4月  28 10:23 drbd
drwxr-xr-x.  2 root root 4096 9月  23 2011 etc
drwxr-xr-x.  2 root root 4096 9月  23 2011 games
drwxr-xr-x.  3 root root 4096 4月  27 10:07 include
drwxr-xr-x.  4 root root 4096 4月  27 10:07 lib
drwxr-xr-x.  2 root root 4096 9月  23 2011 lib64
drwxr-xr-x.  2 root root 4096 9月  23 2011 libexec
lrwxrwxrwx   1 root root   34 4月  28 14:40 mysql -> mysql-5.6.36-linux-glibc2.5-x86_64
drwxr-xr-x  13 root root 4096 4月  28 14:37 mysql-5.6.36-linux-glibc2.5-x86_64
drwxr-xr-x.  2 root root 4096 9月  23 2011 sbin
drwxr-xr-x.  5 root root 4096 4月   6 18:50 share
drwxr-xr-x.  2 root root 4096 9月  23 2011 src

# 創(chuàng)建 mysql 用戶和mysql 組,如果有的話就不需要創(chuàng)建
[root@192.168.0.10 local]# groupadd mysql
[root@192.168.0.10 local]# useradd -r -g mysql mysql

[root@node1 mysql]# pwd
/usr/local/mysql
[root@node1 mysql]# chown -R mysql.mysql *

2.創(chuàng)建/mydata/data 目錄作為 mysql 數(shù)據(jù)庫的datadir,并修改其屬主和屬組為mysql

[root@node1 ~]# mkdir /mydata/data
[root@node1 ~]# chown mysql.mysql /mydata/data/

3.初始化mysql數(shù)據(jù)庫目錄(只在第一臺服務器上做)

注意:初始化數(shù)據(jù)庫之前要掛載鏡像分區(qū)/dev/drbd0到 /mydata,這里以 node1為例

1)首先提升node1為主節(jié)點,并掛載 /dev/drbd0 到 /mydata

[root@node1 ~]# drbdsetup /dev/drbd0 primary
[root@node1 ~]# mount /dev/drbd0 /mydata

[root@node1 ~]# df
Filesystem     1K-blocks     Used Available Use% Mounted on
/dev/sda3      100944296 11479256  84337312  12% /
tmpfs             502204       72    502132   1% /dev/shm
/dev/sda1         198337    29472    158625  16% /boot
/dev/drbd0      10325420   154140   9646776   2% /mydata

[root@node1 sbin]# cd /usr/local/drbd/sbin
[root@node1 sbin]# ./drbd-overview 
  0:data/0  Connected Primary/Secondary UpToDate/UpToDate C r----- /mydata ext4 9.9G 151M 9.2G 2%

2)對node1主服務節(jié)點上的mysql數(shù)據(jù)庫做初始化,如下:

[root@node1 scripts]# /usr/local/mysql/scripts
[root@node1 scripts]# ./mysql_install_db --user=mysql --datadir=/mydata/data/ --basedir=/usr/local/mysql

[root@node1 scripts]# ls /mydata/
data  lost+found  testfile

[root@node1 scripts]# ll /mydata/data/
總用量 110604
-rw-rw---- 1 mysql mysql 12582912 4月  28 15:24 ibdata1
-rw-rw---- 1 mysql mysql 50331648 4月  28 15:24 ib_logfile0
-rw-rw---- 1 mysql mysql 50331648 4月  28 15:23 ib_logfile1
drwx------ 2 mysql mysql     4096 4月  28 15:23 mysql
drwx------ 2 mysql mysql     4096 4月  28 15:23 performance_schema
drwx------ 2 mysql mysql     4096 4月  28 15:23 test

3)配置mysql啟動(兩節(jié)點同時做)

[root@node1 mysql]# pwd
/usr/local/mysql
[root@node1 mysql]# ls
bin  COPYING  data  docs  include  lib  man  my.cnf  mysql-test  README  scripts  share  sql-bench  support-files
[root@node1 mysql]# ll support-files/
總用量 32
-rwxr-xr-x 1 mysql mysql  1153 3月  18 15:06 binary-configure
-rw-r--r-- 1 mysql mysql   773 3月  18 14:43 magic
-rw-r--r-- 1 mysql mysql  1126 3月  18 15:06 my-default.cnf     # mysql的配置文件
-rwxr-xr-x 1 mysql mysql  1061 3月  18 15:06 mysqld_multi.server
-rwxr-xr-x 1 mysql mysql   894 3月  18 15:06 mysql-log-rotate
-rwxr-xr-x 1 mysql mysql 10565 3月  18 15:06 mysql.server       # mysql的啟動腳本

[root@node1 mysql]# cp support-files/my-default.cnf /etc/my.cnf
[root@node1 mysql]# cp support-files/mysql.server /etc/init.d/mysqld
[root@node1 mysql]# chmod 755 /etc/init.d/mysqld

4)修改mysql的啟動配置文件 /etc/my.cnf(兩節(jié)點同時做),并啟動mysql服務;

[root@node1 init.d]# cat /etc/my.cnf
[mysqld]
datadir=/mydata/data
socket=/mydata/data/mysql.sock
user=mysql
character_set_server = utf8
init_connect = 'SET NAMES utf8'
sql_mode=NO_ENGINE_SUBSTITUTION,STRICT_TRANS_TABLES
# Disabling symbolic-links is recommended to prevent assorted security risks
symbolic-links=0
skip_name_resolve
innodb_file_per_table=ON

[mysqld_safe]
log-error=/var/log/mysqld.log
pid-file=/var/run/mysqld/mysqld.pid

# 啟動服務
[root@node1 init.d]# ./mysqld status
MySQL is not running                                       [失敗]

[root@node1 init.d]# ./mysqld start
Starting MySQL.........................................    [確定]

# 因為系統(tǒng)之前默認安裝過mysql,所以客戶端查找的mysql.sock還在默認的/var/lib/mysql/mysql.sock路徑下,而現(xiàn)在我們指定的mysql.sock在/mydata/data下,所以會出現(xiàn)如下報錯
[root@wztao data]# mysql
ERROR 2002 (HY000): Can't connect to local MySQL server through socket '/var/lib/mysql/mysql.sock' (2)

# 解決此類問題,可以創(chuàng)建軟連接,或者mysql客戶端登陸時指定mysql.sock文件路徑(mysql -S /mydata/data/mysql.sock ),如下:
[root@wztao data]# mkdir /var/lib/mysql
[root@wztao data]# ln -s /mydata/data/mysql.sock /var/lib/mysql/mysql.sock
[root@wztao data]# ll /var/lib/mysql/mysql.sock
lrwxrwxrwx 1 root root 23 Feb 23 17:26 /var/lib/mysql/mysql.sock -> /mydata/data/mysql.sock

# 設置mysql的登錄密碼,登錄數(shù)據(jù)庫,并創(chuàng)建表
[root@node1 init.d]# mysql
Welcome to the MySQL monitor.  Commands end with ; or \g.
Your MySQL connection id is 1
Server version: 5.6.36 MySQL Community Server (GPL)

Copyright (c) 2000, 2013, 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> SET PASSWORD=PASSWORD('admin');
Query OK, 0 rows affected (0.05 sec)

mysql> show databases;
+--------------------+
| Database           |
+--------------------+
| information_schema |
| mysql              |
| performance_schema |
| test               |
+--------------------+
4 rows in set (0.00 sec)

mysql> create database db1;
Query OK, 1 row affected (0.01 sec)

mysql> show databases;
+--------------------+
| Database           |
+--------------------+
| information_schema |
| db1                |
| mysql              |
| performance_schema |
| test               |
+--------------------+
5 rows in set (0.01 sec)

mysql> \q
Bye

# 查看數(shù)據(jù)庫目錄,db1已經(jīng)存在
[root@node1 init.d]# ls /mydata/data/
auto.cnf  db1  ibdata1  ib_logfile0  ib_logfile1  mysql  mysql.sock  node1.pid  performance_schema  test

5)執(zhí)行完以上操作后,在node1上執(zhí)行以下命令,為部署heartbeat做準備:

# 停止mysql服務;
[root@node1 init.d]# ./mysqld stop
Shutting down MySQL..                                      [確定]

# 解除drbd分區(qū)掛載:
[root@node1 ~]# umount /mydata/

# 把node1 降為從節(jié)點:
[root@node1 ~]# drbdsetup /dev/drbd0 secondary

[root@node1 ~]# /usr/local/drbd/sbin/drbd-overview 
  0:data/0  Connected Secondary/Secondary UpToDate/UpToDate C r-----

==============================================================================

Heartbeat安裝配置及啟動(node1和node2都要安裝)

1.部署確認:

1)mysql 服務關(guān)閉,且關(guān)閉了開機自啟動

[root@node1~] # /etc/init.d/mysqld stop
[root@node1 init.d]# chkconfig mysqld off
[root@node1 init.d]# chkconfig --list mysqld
mysqld         	0:關(guān)閉	1:關(guān)閉	2:關(guān)閉	3:關(guān)閉	4:關(guān)閉	5:關(guān)閉	6:關(guān)閉

2)drbd 服務必須打開,且兩個節(jié)點都是Secondary狀態(tài)

[root@node1 ~]# /usr/local/drbd/sbin/drbd-overview 
  0:data/0  Connected Secondary/Secondary UpToDate/UpToDate C r-----

3)主備機間的互信通信;

[root@node1 ~]# date;ssh node2 date
2017年 05月 02日 星期二 13:16:06 CST
2017年 05月 02日 星期二 13:16:06 CST

2.安裝及配置Heartbeat

1)安裝heartbeat(注意,如果此前機器安裝過heartbeat其他的版本需要將其卸載之后方可安裝heartbeat-2.1.4,卸載時要將其依賴到的安裝包一并卸載,否則安裝會起沖突)

[root@node1 heartbeat]# ls
heartbeat-2.1.4-12.el6.x86_64.rpm      heartbeat-pils-2.1.4-12.el6.x86_64.rpm     libnet-1.1.6-7.el6.x86_64.rpm
heartbeat-gui-2.1.4-12.el6.x86_64.rpm  heartbeat-stonith-2.1.4-12.el6.x86_64.rpm

[root@node1 heartbeat]# rpm -ivh libnet-1.1.6-7.el6.x86_64.rpm
[root@node1 heartbeat]# rpm -ivh heartbeat-2.1.4-12.el6.x86_64.rpm heartbeat-pils-2.1.4-12.el6.x86_64.rpm heartbeat-stonith-2.1.4-12.el6.x86_64.rpm heartbeat-gui-2.1.4-12.el6.x86_64.rpm
Preparing...                ########################################### [100%]
   1:heartbeat-pils         ########################################### [ 25%]
   2:heartbeat-stonith      ########################################### [ 50%]
   3:heartbeat              ########################################### [ 75%]
   4:heartbeat-gui          ########################################### [100%]

2)配置heartbeat,默認安裝好的heartbeat沒有配置文件,但是有樣例文件,這里只需要兩個配置文件ha.cf 和 authkeys

[root@node1 ~]# cp /usr/share/doc/heartbeat-2.1.4/{authkeys,ha.cf} /etc/ha.d/
[root@node1 ~]# cd /etc/ha.d/
[root@node1 ha.d]# ll
總用量 40
-rw-r--r-- 1 root root   645 5月   2 13:33 authkeys
-rw-r--r-- 1 root root 10539 5月   2 13:33 ha.cf
-rwxr-xr-x 1 root root   745 9月  10 2013 harc
drwxr-xr-x 2 root root  4096 5月   2 13:05 rc.d
-rw-r--r-- 1 root root   692 9月  10 2013 README.config
drwxr-xr-x 2 root root  4096 5月   2 13:05 resource.d
-rw-r--r-- 1 root root  7864 9月  10 2013 shellfuncs

# 修改其權(quán)限為600
[root@node1 ha.d]# chmod 600 authkeys 
[root@node1 ha.d]# ll
總用量 40
-rw------- 1 root root   645 5月   2 13:33 authkeys
-rw-r--r-- 1 root root 10539 5月   2 13:33 ha.cf
-rwxr-xr-x 1 root root   745 9月  10 2013 harc
drwxr-xr-x 2 root root  4096 5月   2 13:05 rc.d
-rw-r--r-- 1 root root   692 9月  10 2013 README.config
drwxr-xr-x 2 root root  4096 5月   2 13:05 resource.d
-rw-r--r-- 1 root root  7864 9月  10 2013 shellfuncs

3)配置文件修改如下:

[root@node2 ha.d]# vim authkeys
 auth 1
 1  md5 91961e19f5730f736d27c07ffbc093d1
 
[root@node1 ha.d]# vim ha.cf
 logfacility     local0
 keepalive    2                     #>>> 發(fā)送心跳的間隔時間
 udpport    694                     #>>> 通信端口
 ucast      eth0 172.22.1.113       #>>>心跳線網(wǎng)口,對方心跳口ip;在psae2配置時寫172.21.1.112
 auto_failback    on
 node    psae1                      #>>> 設置集群中的節(jié)點,節(jié)點名必須與uname -n 一樣
 node    psae2
 crm     on                         #>>>啟用crm

復制文件到psea2

復制以上2個配置文件到psae2上,并修改/etc/ha.d/ha.cf中的ucastip為psae1的ip

[root@node1 ha.d]# scp -p authkeys ha.cf node2:/etc/ha.d/
[root@node2 ~]# vim /etc/ha.d/ha.cf
 ucast eth0 172.21.1.112

3.檢查配置文件沒有錯誤后就可以啟動heartbeat

[root@node1 ha.d]# service heartbeat start
Starting High-Availability services: 
Done.

[root@node2 ha.d]# service heartbeat start
Starting High-Availability services: 
Done.

[root@node1 ha.d]# netstat -unlp | grep 694
udp        0      0 0.0.0.0:694                 0.0.0.0:*                               4035/heartbeat: wri 

[root@node2 ha.d]# ss -tunlp |grep 694
udp    UNCONN     0      0                      *:694                   *:*      users:(("heartbeat",11523,9),("heartbeat",11524,9))

3.配置Heartbeat集群資源(只在一臺完成即可)需要配置的集群資源:vip、drbd、mysql

1)為客戶端連入服務端進行配置的用戶設置密碼 建議設置成pachira,主備服務器都要操作

[root@node1 ha.d]# passwd hacluster
更改用戶 hacluster 的密碼 。
新的 密碼:
無效的密碼: 它基于字典單詞
無效的密碼: 過于簡單
重新輸入新的 密碼:
passwd: 所有的身份驗證令牌已經(jīng)成功更新。

2)執(zhí)行 # hb_gui & 命令啟動heartbeat圖形化的客戶端程序,用VNC連接linux桌面

Heartbeat+DRBD+MySQL高可用方案

資源添加順序 組 --> vip --> drbd--> mysqld --> p_monitor








向AI問一下細節(jié)

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

AI