快速部署MySQL高可用方案:heartbeat + drbd + mysql

實驗環境:

VIP:192.168.198.200

data1-1:

       eth0192.168.198.140  #用于外網管理IP

       eth110.0.0.7   #傳遞心跳信息,drbd數據同步。

data1-2:

       eth0192.168.198.150

       eth110.0.0.8    

1、heartbeat安裝配置

準備:兩節點都執行

yum install epel* -y
yum install -y heartbeat
ntpdate 202.120.2.101

1.1配置IP

#雙節點
iptables -I INPUT -s 192.168.198.0/24 -j ACCEPT   #來自內網的請求全部接受。
iptables -I INPUT -s 10.0.0.0/24 -j ACCEPT
#data1-1
ifconfig eth1 10.0.0.7/24 up
route add -host 10.0.0.8 dev eth1
#data1-2
ifconfig eth1 10.0.0.8/24 up
route add -host 10.0.0.7 dev eth1
#永久有效可以修改ifcfg-eth1文件

1.2修改主機名

#雙節點

cat >> /etc/hosts <<EOF
10.0.0.7 data1-1
10.0.0.8 data1-2
EOF
#data1-1
hostname data1-1
sed -i "/^H/d" /etc/sysconfig/network
sed -i "/^/a\HOSTNAME=data1-1" /etc/sysconfig/network
 #data1-2
hostname data1-2
sed -i "/^H/d" /etc/sysconfig/network
sed -i "/^/a\HOSTNAME=data1-2" /etc/sysconfig/network

1.3提供相同的配置文件

#data1-1
#cd /usr/share/doc/heartbeat-3.0.4/
#cp ha.cf haresources authkeys /etc/ha.d/  #把文件復制過去。
cd /etc/ha.d

vim authkeys   #編輯認證文件
auth 1
1 sha1 HI!
chmod 600 authkeys

vim ha.cf   #配置文件
debugfile /var/log/ha-debug
logfile     /var/log/ha-log
logfacility       local0
keepalive 2
deadtime 30
warntime 10
initdead 120
udpport   694
mcast eth1 225.0.100.2 694 1 0
auto_failback on
watchdog /dev/watchdog
node       data1-1
node       data1-2
crm off

vim haresources   #資源文件
data1-1 IPaddr::192.168.198.200/24/eth0
scp /etc/ha.d/{authkeys,haresources,ha.cf} data1-2:/etc/ha.d/    #雙方提供相同的配置文件

2、drbd安裝配置

#下面都是在兩臺節點執行相同的操作
yum groupinstall -y "Development tools"  #可選
yum install -y kernel kernel-devel kernel-headers  #后期內核版本和drbd不兼容問題,可選,安裝好之后不要忘記重啟。
vim /etc/drbd.conf    #編輯drbd配置文件
global {
       usage-count no;
}
common {
       syncer {
#            rate 10M;
              verify-alg crc32c;
       }
}
resource data {
       protocol C;
       disk {
              on-io-error detach;
       }
       on data1-1 {
              device /dev/drbd0;
              disk /dev/sda5; 
              address 10.0.0.7:7788;
              meta-disk /dev/sda6;
       }
       on data1-2 {
              device /dev/drbd0;
              disk /dev/sda5;
              address 10.0.0.8:7788;
              meta-disk /dev/sda6;
       }
}

提前對磁盤做好分區。

#兩節點
mkfs.ext4 /dev/sda5
drbdadm create-md data
mkdir -p  /usr/local/var/run/drbd
drbdadm up data

在data1-1上面:
drbdadm -- --overwrite-data-of-peer primary data
mkdir /data
mount /dev/drbd0 /data/
cat /proc/drbd #查看同步信息
vim /etc/ha.d/haresources
data1-1 IPaddr::192.168.198.200/24/eth0 drbddisk::data Filesystem::/dev/drbd0::/data::ext4

scp /etc/ha.d/haresources data1-2:/etc/ha.d/

重啟heartbeat測試

3、安裝配置mysql

#兩邊節點操作
groupadd mysql
useradd -g mysql mysql

#主節點data1-1操作
mkdir -pv /data/3306/{data,binlog}
chown -R mysql.mysql /data/
cd /usr/local/src/
wget http://dev.mysql.com/get/Downloads/MySQL-5.5/mysql-5.5.45.tar.gz
tar -xf mysql-5.5.45.tar.gz
cd mysql-5.5.45
cmake . -DCMAKE_INSTALL_PREFIX=/usr/local/mysql \
-DMYSQL_DATADIR=/data \
-DSYSCONFDIR=/etc \
-DWITH_INNOBASE_STORAGE_ENGINE=1 \
-DWITH_ARCHIVE_STORAGE_ENGINE=1 \
-DWITH_BLACKHOLE_STORAGE_ENGINE=1 \
-DWITH_READLINE=1 \
-DWITH_SSL=system \
-DWITH_ZLIB=system \
-DWITH_LIBWRAP=0 \
-DMYSQL_UNIX_ADDR=/tmp/mysql.sock \
-DDEFAULT_CHARSET=utf8 \
-DDEFAULT_COLLATION=utf8_general_ci
make
gmake
make install
cd /usr/local/mysql/
scripts/mysql_install_db --user=mysql --basedir=/usr/local/mysql --datadir=/data/3306/
cp support-files/my-small.cnf /data/3306/my.cf
vim /data/3306/my.cf
....
socket          = /data/3306/mysql.sock
 ....
datadir=/data/3306/data
server-id       = 3306
log-bin=/data/3306/binlog/mysql-bin
binlog_format=mixed
log-error=/data/3306/data/mysql-err
vim /data/3306/mysql.sh   #提供啟動腳本
#!/bin/bash
#
MYSQL=/usr/local/mysql/bin
PORT=3306
DEFAULTSFILE=/data/$PORT/my.cf
CMD=shutdown
SOCKET=/data/${PORT}/mysql.sock
start_mysql () {
       echo "Starting MySQL.."
       ${MYSQL}/mysqld_safe --defaults-file=${DEFAULTSFILE} &
}
 
stop_mysql () {
       echo "Stopping MySQL.."
       ${MYSQL}/mysqladmin -S $SOCKET $CMD
}
 
case $1 in
start)
       start_mysql
       ;;
stop)
       stop_mysql
       ;;
restart)
       stop_mysql
       sleep 2
       start_mysql    
       ;;
*)
       echo "Usage:`basename $0` {start|stop}"
esac
chmod +x /data/3306/mysql.sh
mv /data/3306/mysql.sh /data/3306/mysql
cp mysql /etc/ha.d/resource.d/   #提供mysql資源文件
vim /etc/ha.d/haresources
data1-1 IPaddr::192.168.198.200/24/eth0 drbddisk::data Filesystem::/dev/drbd0::/data::ext4 mysql
scp -r /etc/ha.d/ data1-2:/etc/

4、測試,查看輸出信息是否正確

ip addr show    #查看VIP
cat /proc/drbd   #查看drbd狀態
ss -tnl | grep 330   #查看mysql是否啟動

5、總結

    1、為什么叫快速部署方案呢?因為下次再次部署這個方案的時候,直接復制粘貼過去就可以了。

    2、在mysql上可以在增加從庫,實現主從同步,參考 http://www.www58058.com/8496

    3、這個方案還有很多需要完善的地方。

附錄:

關于裂腦

導致裂腦的原因

       1、高可用服務器之間心跳鏈路故障,導致無法通信。

              網線直連為例: 斷線,老鼠咬了,老化了,網卡壞了,驅動壞了。IP配置及沖突問題。

              心跳線間連接的設備故障(網卡,交換機壞了)。

              仲裁的機器出問題了。

      2、高可用服務器上面開啟了防火墻阻擋了心跳信息傳輸。

      3、高可用網卡信息配置不正確。

      4、其他服務配置不當,如心跳方式,心跳廣播沖突。

防止裂腦:

       裂腦危害是非常大的。有時候可能是致命的,以后用高可用的時候,先去想想高可用的危害,做高可用是有代價的。

       以下幾個方面防止裂腦的問題的發生。

       1、同時使用串行電纜和以太網電纜連接,同時用兩條心跳線路。

       2、檢測到裂腦時強行關閉一個心跳節點,這個功能需要特殊設備支持,stonith fence。備節點發現心跳故障,發送關機命令到主節點

       3、做好裂腦的監控報警(郵件及手機短信),在問題發生時候人為第一時間介入仲裁,降低損失,當然在實施高可用方案時,要根據業務實際需要確定是否能容忍這樣的損失,對于一般的網站業務,這個損失是可控的。

       4、報警報在服務器接管之前,給人員處理留足夠空間。一分鐘內報警了,但是服務器此時沒有接管,而是5分鐘接管。數據不會丟,導致用戶無法寫。

       5、報警后不自動接管,而是認為人員控制接管。

       6、增加仲裁機制,確定誰該獲得資源。

       6.1 列入設置參考IP,當心跳線斷開時候,誰ping一下餐開IP,能夠相互通信的一方就接管。ping不通的一方可以自我重啟,以徹底釋放資源。

       6.2 第三方軟件。

裂腦發生了,影響是比較大的,盡量不讓它發生。而不是已經發生再去解決。

drbd裂腦,參考:http://itindex.net/detail/50197-drbd

故障處理:

[root@data1-1 ~]# cat /proc/drbd
version: 8.4.4 (api:1/proto:86-101)
GIT-hash: 74402fecf24da8e5438171ee8c19e28627e1c98a build by root@data1-1, 2015-10-05 08:52:17
 0: cs:WFConnection ro:Secondary/Unknown ds:UpToDate/DUnknown C r-----
    ns:1057605 nr:8 dw:24 dr:1059271 al:1 bm:65 lo:0 pe:0 ua:0 ap:0 ep:1 wo:f oos:0

在從節點執行

drbdadm connect --discard-my-data data
[root@data1-1 ~]# cat /proc/drbd
version: 8.4.4 (api:1/proto:86-101)
GIT-hash: 74402fecf24da8e5438171ee8c19e28627e1c98a build by root@data1-1, 2015-10-05 08:52:17
 0: cs:Connected ro:Secondary/Secondary ds:UpToDate/UpToDate C r-----
    ns:1057605 nr:8 dw:24 dr:1059271 al:1 bm:65 lo:0 pe:0 ua:0 ap:0 ep:1 wo:f oos:0

原創文章,作者:艾賀,如若轉載,請注明出處:http://www.www58058.com/8608

(0)
艾賀艾賀
上一篇 2015-10-05 22:30
下一篇 2015-10-07 12:00

相關推薦

  • N22-love cat 17周博客作業第2部分-構建一個LVS-DR模型的高性能集群

    題目: 搭建一個LVS-DR模型的高性能集群,并實現以下功能:       (1)、wordpress程序通過nfs共享給個個realserver;       (2)、后端realserver中的nginx和php分離; 第17周   第2部分 網…

    Linux干貨 2016-08-15
  • Shell腳本編程 流程控制—循環

    循環:重復執行所指定的代碼片段,直到循環條件不滿足,則退出循環 一、for循環     語法格式:     for 變量名 in 列表     do         循環體     done &nbs…

    Linux干貨 2016-08-24
  • CentOS7.3安裝Jumpserver0.3.2

    CentOS7.3安裝Jumpserver0.3.2 公司服務器前端增加堡壘機,選用開源的jumpserver 軟件環境CentOS Linux release 7.3.1611 python 2.7.5 mysql5.7 安裝git yum -y install git 克隆jumpserver # cd /opt # git clone https://…

    Linux干貨 2017-07-11
  • 正則表達式30分鐘入門教程

    來園子之前寫的一篇正則表達式教程,部分翻譯自codeproject的The 30 Minute Regex Tutorial。 由于評論里有過長的URL,所以本頁排版比較混亂,推薦你到原處查看,看完了如果有問題,再到這里來提出. 一些要說的話: 如果你沒有正則表達式的基礎,請跟著教程“一步步來”。請不要大概地掃兩眼就說看不懂——以這種態度我寫成什么樣你也看不…

    2015-03-12
  • MongoDB

    Edit MongoDB 手冊 MongoDB 手冊 第一章 Introduction MongoDB入門學習目錄(建議) Databases Collections Documents 第二章 部署安裝 1. Import the MongoDB public key 2. Configure the package management system (…

    Linux干貨 2017-04-08
  • 第一周作業

    一·計算機組成及其功能     計算機由硬件和軟件組成,他們構成計算機系統 硬件:構成計算機的物理裝置包括中央控制器、存儲器、輸入設備、輸出設備。 中央控制器(CPU):由控制器、運算器、寄存器和緩存組成。cpu的主頻越高和緩存越大性能越好。主頻是中央處理器時鐘的頻率,通常以兆赫茲(MHZ)為單位。緩存:可以進行高速數…

    Linux干貨 2016-12-01
欧美性久久久久