您好,登錄后才能下訂單哦!
這篇文章主要為大家展示了“如何搭建Heartbeat+DRBD+Mysql+Lvs+Keepalived高可用”,內容簡而易懂,條理清晰,希望能夠幫助大家解決疑惑,下面讓小編帶領大家一起研究并學習一下“如何搭建Heartbeat+DRBD+Mysql+Lvs+Keepalived高可用”這篇文章吧。
環境介紹:
主節點mysql1:192.168.9.25
主節點mysql2:192.168.9.26
Heartbeat的寫的VIP:192.168.9.231
LVS1:192.168.9.27
LVS2:192.168.9.28
keepalived 分發的VIP:192.168.9.230
要分發的mysql1: 192.168.9.29
要分發的mysql2:192.168.9.30
整體安裝注意:1,drbd的兩個節點,同一時期只有那個主節點能掛載盤DRBD的那個盤,2,把MySQL的數據文件,日志文件,臨時文件目錄要寫到DRBD那個盤也就是datadir ,tmpdir ,log_error, log-bin 這幾個參數。3,關于MySQL的配置文件(/etc/my.cnf)
也應該放到drdb的那個盤上,并且把主節點和從節點上/etc目錄下的my.cnf刪掉,但是必須要建立軟連接,到/etc/my.cnf。4,lvs+keepalived 架構中,lvs實現分發,keepalived實現lvs的高可用,keepalived配置里vip,作為分發的vip.
heartbeat+drbd搭建流程:
如果主服務器宕機,造成的損失是不可估量的。要保證主服務器不間斷服務,就需要對服務器實現冗余。在眾多的實現服務器冗余的解決方案中,heartbeat為我們提供了廉價的、可伸縮的高可用集群方案。我們通過heartbeat+drbd在Linux下創建一個高可用(HA)的集群服務器。
DRBD是一種塊設備,可以被用于高可用(HA)之中。它類似于一個網絡RAID-1功能。當你將數據寫入本地文件系統時,數據還將會被發送到網絡中另一臺主機上。以相同的形式記錄在一個文件系統中。本地(主節點)與遠程主機(備節點)的數據可以保證實時同步。當本地系統出現故障時,遠程主機上還會保留有一份相同的數據,可以繼續使用。在高可用(HA)中使用DRBD功能,可以代替使用一個共享盤陣。因為數據同時存在于本地主機和遠程主機上。切換時,遠程主機只要使用它上面的那份備份數據,就可以繼續進行服務了
heartbeat 實現當本地節點出問題后,自動檢測出來,并且完成主備切換,實現高可用,
區別于MHA: mha 中從change 的時候指向的是真的IP。而DRBD指向的vip
1,DRBD的部署(兩個主節點都要部署)
DRBD的安裝,centOS6.5自帶的yum沒有drbd和Heartbeat的包,需要更新yum源,再安裝,步驟如下:
[root@master2 ~]# yum install kernel-devel ##升級內核
[root@master2 ~]# rpm -Uvh http://www.elrepo.org/elrepo-release-6-6.el6.elrepo.noarch.rpm ## centOS6的第三方工具包集
[root@master2 ~]# rpm -Uvh http://www.elrepo.org/elrepo-release-5-5.el5.elrepo.noarch.rpm ## centOS5的第三方工具包集
[root@master2 ~]# yum -y install drbd83-utils kmod-drbd83
[root@master2 ~]# modprobe drbd #加載DRBD。執行該命令如果報錯,將系統重啟后再執行。
[root@master2 ~]# lsmod |grep drbd
drbd 332493 4 #顯示此條信息,說明drbd加載成功
2,DRBD的配置
配置之前需要先使用fdisk -l或df -v看下系統的分區情況,這里用到系統現有的/dev/sdb分區做為drbd的配置。
2 . 對于DRBD的配置,配置/etc/drbd.conf和hosts文件,dbserver1和dbserver2的hosts添加的內容如下:
[root@master1 ~]# cat /etc/hosts
# Do not remove the following line, or various programs
# that require network functionality will fail.
127.0.0.1 localhost.localdomain localhost
::1 localhost6.localdomain6 localhost6
192.168.9.25 master1
192.168.9.26 master2
3. #配置/etc/sysconfig/network文件,該文件兩邊配置
[root@master1 ~]# cat /etc/sysconfig/network
NETWORKING=yes
NETWORKING_IPV6=yes
HOSTNAME=master1 、master2
4. /etc/drbd.conf文件的內容如下(dbserver1和dbserver2的配置一樣):
[root@master1 ~]# cat /etc/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";
global { usage-count yes; }
common { syncer { rate 10M; } } ###設置主,備節點同步的的網絡速率最大值,單位是字節
resource r1 {
protocol C; ##使用drbd的第三種同步協議,表示收到遠程主機的寫入確認后認為寫入完成
startup {
}
disk {
on-io-error detach;
# size 1G;
}
net {
}
on mysql_master1 {
device /dev/drbd0;
disk /dev/sdb; #這里磁盤或分區兩邊最好一樣,也可以用邏輯分區
address 192.168.9.25:7888;
meta-disk internal;
}
on mysql_master2 {
device /dev/drbd0;
disk /dev/sdb;
address 192.168.9.26:7888; #端口和上面一樣都設置成7888就可以
meta-disk internal;
}
}
5 .
先執行dd測試命令,覆蓋文件系統中 的設備塊信息,不然的話,在第6步創建資源的時候會報錯
Dd if=/dev/zero of=/dev/sdb bs=1M count=100
6. 配置好drbd以后,就需要使用命令在dbserver1和dbserver2上創建drbd元數據庫信息,使用如下命令
drbdadm create-md r1 , r1為配置文件中resource后面定義的資源名,如下顯示建立資源成功,執行命令時配置文件中的disk /dev/sdb的硬盤處在不掛載的情況,才行,兩臺機器都不掛載。
[root@master1 ~]# drbdadm create-md r1
Writing meta data...
initializing activity log
NOT initialized bitmap
New drbd meta data block successfully created.
Success
6 . DRBD的啟動和停止
[root@master1 ~]# /etc/rc.d/init.d/drbd start #啟動drbd
[root@master1 ~]# /etc/rc.d/init.d/drbd stop #停止drbd
[root@master1 ~]# /etc/rc.d/init.d/drbd restart #重啟drbd
7 . 查看DRBD狀態
watch -n 1 cat /proc/drbd
/etc/init.d/drbd status
8 . 設置當前節點為主節點,并進行格式化和掛載 注意只有主節點能掛載,
[root@master1 ~]#drbdadm primary all
如果上條命令不成功,則執行下面命令。
[root@master1 ~]# drbdadm -- --overwrite-data-of-peer primary all
[root@master1 ~]# mkfs.ext3 /dev/drbd0 ##這個也就是/dev/sdb
[root@master1 ~]# mkdir -p /mysql/data ##創建drbd那個盤的掛載點
[root@master1 ~]# mount /dev/drbd0 /mysql/data
主drbd掛載后可以往drbd目錄也就是/mysql/data目錄寫數據,然后主備切換,如果數據同步,表明drbd搭建成功。
主切換成從,需要先卸載文件系統,再執行降級為從的命令:
[root@master1 ~]#umount /dev/drbd0
[root@master1 ~]#drbdadm secondary all
從切換成主,要先執行升級成主的命令然后掛在文件系統:
[root@master1 ~]#drbdadm primary all 如果不成功drbdsetup /dev/drbd0 primary -o
[root@master1 ~]#mount /dev/drbd0 /mysql/data
9,如下可以判斷出是master1是Primary狀態。
[root@master1 ~]# more /proc/drbd | grep ro
0 : cs : Connected ro : Primary/Secondary ds:UpToDate/UpToDate C r------
DRBD上Mysql的遷移 (這個步驟的目的就是要把保證數據目錄,日志目錄,臨時文件目錄在drbd那個目錄下)
1. 將數據目錄指定到drbd掛載的mysql目錄中并將my.cnf配置文件放到mysql中即可
關閉dbserver1和dbserver2的mysql
/etc/rc.d/init.d/mysqld stop
b) 在dbserver1上創建存放數據庫數據的目錄及日志的目錄
mkdir -p /mysql/data /mysql/log /mysql/tmp
c) 修改mysql目錄的屬主
chown -R mysql:mysql /mysql
d) 在dbserver1將配置文件移動到mysql目錄中:
mv /etc/my.cnf /mysql
刪除dbserver2上的/etc/my.cnf,rm -f /etc/my.cnf
在dbserver1和dbserver2上執行如下命令創建軟鏈接,需要寫全路徑
ln -s /mysql/my.cnf /etc/my.cnf
e) 修改/etc/my.cnf的數據目錄指向/mysql/data
f) 將原來的mysql數據文件移動到/mysql/data
g) 啟動mysql,如果沒有移動數據目錄內容,需要將mysql重新初始化再啟動mysql
初始化過程:{(1)進入./mysql/bin目錄下,執行腳本./mysql_install_db;
(2)執行完(1)后,此時會在./mysql/var目錄下創建兩個目錄文件mysql、test;
(3)修改mysql、test兩個目錄及目錄下所有文件的權限:chown mysql:mysql -R mysql test}
Mysql-master1 上主配文件/etc/my.cnf配置如下,當然master2和master1用的是同一個配置文件,不需要配置。
[root@mysql_master1 ~]# cat /etc/my.cnf
[mysql]
default-character-set=utf8
[mysqld]
user=mysql
pid-file=/var/run/mysql/mysql.pid
#socket=/var/run/mysql/mysql.sock
socket=/tmp/mysql.sock
basedir=/usr/local/mysql
datadir=/mysql/data
tmpdir=/mysql/tmp
max_connections = 2000 #定義最大連接數
server-id=3 #每個MySQL server的此選項都必須唯一
###begin innodb settiong###
innodb_file_per_table=1
innodb_lock_wait_timeout=500
innodb_buffer_pool_size=512M
###end innodb setting###
###key buffer size set###
key-buffer-size=500M
sort_buffer_size=500M
max_user_connections=1000
table-cache=5000
query_cache_size=500M
###key buffer size set###
###begin bin log###
log-bin=/mysql/log/binlog
log-bin-index=/mysql/log/binlog.index
expire-logs-days=90
###end bin log###
###begin general log###
#general_log=1
#general_log_file=/mysql/log/record.log
###end general log###
###begin error log###
log_error=/mysql/log/error.log
###end error log###
###begin skip name resolve###
###end skip name resolve###
###being slow query log###
slow_query_log=1
long_query_time=60
slow_query_log_file=/mysql/log/slow.log
###end slow query log###
3. Mysql的主從配置
在mysql主上創建復制賬號
mysql> create user repl identified by ‘%#7a@H)’;
為從mysql授權
mysql> GRANT replication slave ON *.* TO 'repl'@'%' ;
mysql> Flush privileges;
4. Mysql從/etc/my.cnf配置
[root@localhost ~]# cat /etc/my.cnf
[mysql]
default-character-set=utf8
[mysqld]
user=mysql
pid-file=/var/run/mysql/mysql.pid
#socket=/var/run/mysql/mysql.sock
socket=/tmp/mysql.sock
basedir=/usr/local/mysql
datadir=/wgz/mysql/data
tmpdir=/wgz/mysql/tmp
max_connections = 2000 #定義最大連接數
server-id=12 #每個MySQL server的此選項都必須唯一
read_only=1 #設置只讀
###begin innodb settiong###
innodb_file_per_table=1
innodb_lock_wait_timeout=500
innodb_buffer_pool_size=512M
###end innodb setting###
###key buffer size set###
key-buffer-size=500M
sort_buffer_size=500M
max_user_connections=1000
table-cache=5000
query_cache_size=500M
###key buffer size set###
###begin bin log###
log-bin=/wgz/mysql/log/binlog
log-bin-index=/wgz/mysql/log/binlog.index
expire-logs-days=90
###end bin log###
###begin general log###
#general_log=1
#general_log_file=/wgz/mysql/log/record.log
###end general log###
###begin error log###
log_error=/wgz/mysql/log/error.log
###end error log###
###begin skip name resolve###
###end skip name resolve###
###being slow query log###
slow_query_log=1
long_query_time=60
slow_query_log_file=/wgz/mysql/log/slow.log
###end slow query log###
5.在mysql從上做指向主的操作
mysql>change master to master_host='192.168.15.47', master_port=3306, master_user='repl', master_password='%#7a@H)', master_log_file='binlog.000011',master_log_pos=3234;
啟動主從復制
mysql> start slave;
#查看同步狀態
mysql> show slave status \G;
Slave_IO_Running: Yes
Slave_SQL_Running: Yes
Slave_IO_Running和Slave_SQL_Running:兩個顯示Yes說明主從同步成功。
Heartbeat的部署 (自動完成兩個主之間的切換)
安裝heartbeat,需安裝epel擴展源
[root@master1 ~]# yum -y install epel-release
[root@master1 ~]# yum install -y heartbeat
2. .Hearbeat的配置主要包括三個配置文件,authkeys,ha.cf和haresources的配置,下面就分別來看!
Authkerys密碼認證文件的配置,兩臺機器配置一樣。
[root@master1 ~]# vim /etc/ha.d/authkeys
auth 1
1 crc
[root@master1 ~]# chmod 600 /etc/ha.d/authkeys #配置完成后,修改文件的權限,否者heartbeat啟動報錯
ha.cf的配置
Master1(dbserver1)的ha.cf的配置
[root@master1 ~]# cat /etc/ha.d/ha.cf
logfile /var/log/ha-log
logfacility local0
keepalive 2
deadtime 30
warntime 10
initdead 60
udpport 694
ucast eth0 192.168.9.26 #寫對方的ip
auto_failback off ## 建議使用off,如果使用on會導致主備機之間來回切換,增加成本。
node master1
node master2
ping 192.168.15.254 #網關就行
respawn hacluster /usr/lib64/heartbeat/ipfail
Master2(dbserver2)的ha.cf的配置
[root@master2 ~]# cat /etc/ha.d/ha.cf
logfile /var/log/ha-log
logfacility local0
keepalive 2
deadtime 30
warntime 10
initdead 60
udpport 694
ucast eth0 192.168.9.25 #寫對方的ip
auto_failback on
node master1
node master2
ping 192.168.9.254
respawn hacluster /usr/lib64/heartbeat/ipfail
haresources的配置,兩臺機器配置完全一樣,mysqld需要做成服務,放在/etc/rc.d/init.d/目錄下,配置配置如下:
[root@master1 ~]# cat /etc/ha.d/haresources
master1 IPaddr::192.168.9.231/24/eth0:0 drbddisk::r1 Filesystem::/dev/drbd0::/mysql/data::ext3 mysqld
以上/etc/ha.d/haresources配置文件說明:192.168.9.231/24/eth0:0,192.168.9.231/24為mysql高可用的vip,eth0:0:表示vip走eth0:0口,r1:表示上面drbd定義的資源庫,/dev/drbd0:表示以上drbd自己形成的硬盤分區,/mysql/data:表示drbd掛載的目錄,mysqld:表示mysql的服務。
5 . Heartbeat的管理
配置好heartbeat之后,需要將mysql從自啟動服務器中去掉,因為主heartbeat啟動的時候會掛載drdb文件系統以及啟動mysql,切換的時候會將主上的mysql停止并卸載文件系統,從上會掛載文件系統,并啟動mysql。因此需要做如下操作:
[root@master1 ~]#chkconfig mysqld off
[root@master1 ~]#chkconfig --add heartbeat
[root@master1 ~]#chkconfig heartbeat on
[root@master1 ~]#service heartbeat start #啟動Heartbeat
6. Heartbeat+DRBD+Mysql測試
用腳本判斷mysql宕后,腳本將 heartbeat服務stop掉,vip和drbd的分區掛載自轉移到drbd從的上,當主mysql修復啟動,在將heartbeat服務啟動,vip和drbd的分區掛載又自轉移到drbd主的上。
7. 判斷mysql服務及停止heartbeat服務腳本,在主的上后臺執行,nohup /opt/check_mysql_heartbeat.sh &,腳本中的password需要改成當前mysql的root密碼。
[root@mysql_master1 opt]# cat check_mysql_heartbeat.sh
#!/bin/bash
trap 'echo PROGRAM INTERRUPTED; exit 1' INT
username=root
password=123456
n=0
log='/var/log/mysqlmon.log'
while true
do
if mysql -u${username} -p${password} -e "use test" >&/dev/null
then
echo `date +"%Y-%m-%d %H:%M:%S"` mysqld is alive! >> ${log}
n=0
else
echo "`date +"%Y-%m-%d %H:%M:%S"` mysqld cannot be connected!" >> ${log}
n=$[n + 1]
if [ $n -eq 3 ]
then
/etc/init.d/heartbeat stop
echo "`date +"%Y-%m-%d %H:%M:%S"` mysqld switched to backup!" >> ${log}
echo "`date +"%Y-%m-%d %H:%M:%S"` mysqld switched to backup"
break
fi
fi
sleep 10
done
測試總結:
判斷腳本放在drbd主的上后臺執行就行,從的上不用,如果主的mysql宕掉后,腳本將heartbeat服務殺掉,vip和掛載自動切換到從上,等主的mysql和heartbeat修復啟動后,vip和掛載又自動切換到主。
二: lvs+keepalived 安裝部署
試驗環境:
LVS1:192.168.9.27
LVS2:192.168.9.28
keepalived 的VIP:192.168.9.230
要分發的mysql1: 192.168.9.29
要分發的mysql2:192.168.9.30
具體安裝步驟:
#下載ipvsadm (也就是LVS程序包)
wget http://www.linuxvirtualserver.org/software/kernel-2.6/ipvsadm-1.24.tar.gz
#解壓
[root@lvs-a ~]# tar -zxf ipvsadm-1.24.tar.gz
#進入該ipvsadm目錄
[root@lvs-a ~]# cd /usr/local/ipvsadm-1.24
#安裝開發包及庫文件
[root@lvs-a ipvsadm-1.24]# # yum install zlib-devel gcc gcc-c++ openssl-devel pcre-devel libtool kernel-devel ncurses-devel -y
#創建內核連接
[root@lvs-a ipvsadm-1.24]# ln -sv /usr/src/kernels/2.6.18-194.el5-i686/ /usr/src/linux #(2.6.18-194.el5-i686)根據系統版本修改。
#編譯安裝
[root@lvs-a ipvsadm-1.24]# make;make install
#進入目錄
[root@lvs-a ~]# cd /usr/local/
#下載keepalived
wget http://www.keepalived.org/software/keepalived-1.1.17.tar.gz
#解壓
[root@lvs-a ipvsadm-1.24]# tar -zxf keepalived-1.2.12.tar.gz
#進入該keepalived目錄
[root@lvs-a ~]cd keepalived-1.2.12
#編譯安裝
[root@lvs-a keepalived-1.2.12]#./configure --prefix=/usr/local/keepalived #這里編譯完后面顯示三個yes,說明編譯成功,否則安裝不成功。
#以下為1.2.12版本./configure結果如下
#如果為1.1.17版本./configure結果如下
[root@lvs-a keepalived-1.2.12]#make
[root@lvs-a keepalived-1.2.12]#make install
#復制啟動文件
[root@lvs-a keepalived-1.2.12]#cp /usr/local/keepalived/etc/rc.d/init.d/keepalived /etc/init.d/ ##這樣才能用service keepalived 的命令。
#復制命令文件
[root@lvs-a keepalived-1.2.12]#cp /usr/local/keepalived/sbin/keepalived /usr/sbin/
#復制【配置文件
[root@lvs-a keepalived-1.2.12]#cp /usr/local/keepalived/etc/sysconfig/keepalived /etc/sysconfig/
#新建主配置文件目錄
[root@lvs-a keepalived-1.2.12]#mkdir -p /etc/keepalived
#編輯配置文件LVS1
[root@lvs-a sysconfig]#vim /etc/keepalived/keepalived.conf
! Configuration File for keepalived
global_defs {
router_id lvs
}
vrrp_sync_group http { #設置vrrp組,隨便起名字,
group {
mysql ###隨便起的名字
}
}
vrrp_instance apache { ###定義一個vrrp實例
state MASTER #設置lvs的狀態, MASTER和BACKUP兩種,必須大寫,主節點master,從節點backup
interface eth0 #設置對外服務的接口,也就是/LVS監控的網絡接口
virtual_router_id 01 #設置lvs監聽的接口,同一實例下virtual_router_id必須相同 ,隨便起名字
priority 500 # #設置優先級,數值越大,優先級越高 ,也就是主節點的這個值大
advert_int 1 ## //MASTER與BACKUP負載均衡器之間同步檢查的時間間隔,單位是秒
authentication { #設置驗證類型和密碼
auth_type PASS
auth_pass aabb ##密碼
}
virtual_ipaddress { ##設置keepalived的VIP
192.168.9.230 #如果有多個,往下加就行了
#192.168.9.231
#192.168.9.232
}
}
virtual_server 192.168.9.230 3306 { ##定義虛擬服務器
delay_loop 6 #健康檢查時間,單位是秒。
lb_algo rr #負載調度算法,這里設置為rr,即輪詢算法
lb_kind DR #LVS實現負載均衡的機制,可以有NAT、TUN和DR三個模式可選
nat_mask 255.255.255.0 #可以不填寫這個參數,
# persistence_timeout 50
protocol TCP
real_server 192.168.9.29 3306 { ##要分發的目標服務器IP,
weight 1 #設置權重,也就是分發的次數,這里表示每個分發一次,
TCP_CHECK { #通過tcpcheck判斷RealServer的健康狀態
connect_timeout 3 ##連接超時時間
#nb_get_retry 3 #重連次數 ,有默認值
#delay_before_retry 3 #重連間隔時間 有默認值
connect_port 3306
}
}
real_server 192.168.9.30 3306 {
weight 1
TCP_CHECK {
connect_timeout 3
connect_port 3306
}
}
}
#配置完成重啟keepalived
[root@lvs-a sysconfig]#service keepalived restart
#添加自己的網關
[root@lvs-a network-scripts]# route add -host 192.168.9.254 dev eth0
#安裝keepalived同lvs1相同
#安裝keepalived后配置LVS2,配置如下:
[root@lvs-b ~]# cat /etc/keepalived/keepalived.conf
! Configuration File for keepalived
global_defs {
router_id lvs
}
vrrp_sync_group http {
group {
mysql
}
}
vrrp_instance apache {
state BACKUP
interface eth0
virtual_router_id 01
priority 400
advert_int 1
# nopreempt
authentication {
auth_type PASS
auth_pass aabb
}
virtual_ipaddress {
192.168.9.230
}
}
virtual_server 192.168.9.230 3306 {
delay_loop 6
lb_algo rr
lb_kind DR
nat_mask 255.255.255.0
# persistence_timeout 50
protocol TCP
real_server 192.168.9.29 3306 {
weight 1
TCP_CHECK {
connect_timeout 3
connect_port 3306
}
}
real_server 192.168.9.30 3306 {
weight 1
TCP_CHECK {
connect_timeout 3
connect_port 3306
}
}
}
#配置完成重啟keepalived
service keepalived restart
#添加自己的網關
route add -host 192.168.9.254 dev eth0
#查看
route -n
#查看分發結果
Ipvsadm -ln
#清除分發
Ipvsadm -C
#查看虛擬ip(VIP)
Ip addr
#配置 mysql-realserver1 在192.168.9.29上執行:
[root@lvs-a ~]# ifconfig lo:0 192.168.9.230 netmask 255.255.255.0 broadcast 192.168.9.230 up ##設置的一個臨時的IP
設置到主機的路由
[root@lvs-b ~]# route add -host 192.168.9.230 dev lo:0
設置默認路由
[root@lvs-b ~]#route add default gw 192.168.9.137
保證arp協議在連接過程中,路由器上,只知道網絡中192.168.9.230對應的是分發器
[root@lvs-b ~]#echo 1 > /proc/sys/net/ipv4/conf/all/arp_ignore
[root@lvs-b ~]#echo 2 > /proc/sys/net/ipv4/conf/all/arp_announce
#配置 mysql-realserver2 在192.168.9.30上執行:
[root@lvs-a ~]# ifconfig lo:0 192.168.9.230 netmask 255.255.255.0 broadcast 192.168.9.230 up
設置到主機的路由
[root@lvs-a ~]#route add -host 192.168.9.230 dev lo:0
設置默認路由
[root@lvs-a ~]#route add default gw 192.168.153.137
保證arp協議在連接過程中,路由器上,只知道網絡中192.168.9.230對應的是分發器
[root@lvs-a ~]#echo 1 > /proc/sys/net/ipv4/conf/all/arp_ignore
[root@lvs-a ~]#echo 2 > /proc/sys/net/ipv4/conf/all/arp_announce
#兩臺mysql-realserver配置完成后啟動分別mysql
Service mysqld start
LVS分發測試:
1,在 mysql-realserver1(192.168.9.29) 創建一個名字叫做slave1的數據庫:
mysql> create database slave1;
Query OK, 1 row affected (0.00 sec)
2,在mysql-realserver2 (192.168.9.30)上創建一個名字叫做slave2的數據庫:
mysql> create database slave2 ;
Query OK, 1 row affected (0.00 sec)
3,在一臺能ping通mysql-realserver1和mysql-realserver2的機器上執行(注意不要在正在用著的lvs機器上執行,例如我現在lvs用著[root@lvs-a ~]#這個機器,如果你在這里執行他會報錯
[root@lvs-a ~]# mysql -uroot -pliuwenhe -h292.168.9.230 -e'show databases';
ERROR 2003 (HY000): Can't connect to MySQL server on '192.168.9.230' (111)
You have new mail in /var/spool/mail/root
[root@lvs-b ~]# mysql -uroot -pliuwenhe -h292.168.9.230 -e'show databases';
+--------------------+
| Database |
+--------------------+
| information_schema |
| he |
| liuwenhe |
| mysql |
| performance_schema |
| slave1 |
| test |
+--------------------+
[root@lvs-b ~]# mysql -uroot -pliuwenhe -h292.168.9.230 -e'show databases';
+--------------------+
| Database |
+--------------------+
| information_schema |
| he |
| liuwenhe |
| mysql |
| performance_schema |
| slave2 |
| test |
+--------------------+
說明lvs分發成功。
五、故障處理:
當主drbd (mysql)宕掉以后恢復過程:
1. 先恢復啟動主drbd上的mysql服務
service mysqld start
2. 確定主drbd的mysql啟動后,在啟動heartbeat服務,這時vip和掛載自動切換到主drbd
service heartbeat start
3. 在主drbd上執行后臺腳本
nohup /opt/check_mysql_heartbeat.sh &
六、參考網址
http://blog.chinaunix.net/uid-20639775-id-3337484.html #部署主要參考網址
http://www.centoscn.com/CentosServer/cluster/2015/0605/5604.html#安裝drbd網址
http://www.51ou.com/browse/Apache/60681.html #安裝heartbeat網址
遷移mysql說明:mysql遷移需要注意的步驟
部署在drbd搭建成后,主從切換drbd同步沒有問題,將mysql的配置文件移動到drbd的掛載目錄下,將drbd從上的配置文件刪除或改名,然后將掛載目錄下的配置文件軟連接到/etc/my.cn,因為他們用的同一個配置文件,在掛載目錄下,建立mysql的數據目錄和日志目錄,并且修改目錄的屬主mysql,如果原有的mysql有數據將數據和日志移動到新建的目錄下,配置文件也將相應的目錄修改,然后重啟mysql,如果不移動數據,數據庫需要初始化,然后重啟,這時可以參照網址上的步驟手動切換drbd的主從,看從drbd的mysql是否能正常啟動,在主上mysql插入的數據是否同步,如果同步,然后就可以啟動已經配置好的heartbeat服務,這時看當前主drbd上掛載和vip是否顯示,在主drbd上執行后臺腳本后,關閉主drbd上的mysql服務,看從drbd上的mysql是否正常啟動,以及掛載和vip是否自動切換到從上,如果以上三項正常飄移,說明搭建成功。
故障處理說明:
當主mysql宕以后,需要修復時,需要先啟動heartbeat,否則drbd不會飄到主上,自然掛載也不會切換過來,更別說啟動mysql了,mysql主配置文件都在drbd的磁盤上,所以修復時,啟動heartbeat后,看主drbd的mysql是否正常啟動,如果沒有,解決后再啟動。
附錄1
下面是keepalived詳細配置文件解析:
[root@localhost kernels]# cat /etc/keepalived/keepalived.conf
! Configuration File for keepalived
global_defs {
# notification_email {
# acassen@firewall.loc
# failover@firewall.loc
# sysadmin@firewall.loc
# }
# notification_email_from Alexandre.Cassen@firewall.loc
# smtp_server 192.168.200.1
# smtp_connect_timeout 30
router_id LVS_DEVEL //負載均衡器標識,同一網段內,可以相同
}
vrrp_sync_group VGM { //定義一個vrrp組
group {
VI_1
}
}
vrrp_instance VI_1 { //定義vrrp實例
state MASTER //主LVS是MASTER,從的BACKUP
interface eth0 //LVS監控的網絡接口
virtual_router_id 51 //同一實例下virtual_router_id必須相同
priority 100 //定義優先級,數字越大,優先級越高
advert_int 5 //MASTER與BACKUP負載均衡器之間同步檢查的時間間隔,單位是秒
authentication { //驗證類型和密碼
auth_type PASS
auth_pass 1111
}
virtual_ipaddress { //虛擬IP
192.168.1.8
# 192.168.1.9 //如果有多個,往下加就行了
# 192.168.1.7
}
}
virtual_server 192.168.1.8 80 { //定義虛擬服務器
delay_loop 6 //健康檢查時間,單位是秒
lb_algo rr //負載調度算法,這里設置為rr,即輪詢算法
lb_kind DR //LVS實現負載均衡的機制,可以有NAT、TUN和DR三個模式可選
persistence_timeout 50 //會話保持時間,單位是秒(可以適當延長時間以保持session)
protocol TCP //轉發協議類型,有tcp和udp兩種
sorry_server 127.0.0.1 80 //web服務器全部失敗,vip指向本機80端口
real_server 192.168.1.16 80 { //定義WEB服務器
weight 1 //權重
TCP_CHECK { //通過tcpcheck判斷RealServer的健康狀態
connect_timeout 5 //連接超時時間
nb_get_retry 3 //重連次數
delay_before_retry 3 //重連間隔時間
connect_port 80 //檢測端口
}
}
real_server 192.168.1.17 80 {
weight 1
TCP_CHECK {
connect_timeout 5
nb_get_retry 3
delay_before_retry 3
connect_port 80
}
}
}
,解決后再啟動。
以上是“如何搭建Heartbeat+DRBD+Mysql+Lvs+Keepalived高可用”這篇文章的所有內容,感謝各位的閱讀!相信大家都有了一定的了解,希望分享的內容對大家有所幫助,如果還想學習更多知識,歡迎關注億速云行業資訊頻道!
免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。