mysql dba系統學習(19)配置mysql+lvs+keeplived實現Mysql讀操作的負載均衡

配置mysql+lvs+keeplived實現Mysql讀操作的負載均衡

環境:

test1192.168.46.131master

test2192.168.46.130slave備份test庫

test3調度器

1、安裝與配置Keepalived

首先在節點test1、test2上安裝Keepalived軟件,軟件安裝非常簡單。

[root@test1 ]# yum install -y openssl-devel
[root@test1 ~]# wget  http://www.keepalived.org/software/keepalived-1.2.1.tar.gz
[root@test1 ~]# tar zxvf keepalived-1.2.1.tar.gz
[root@test1 ~]# cd keepalived-1.2.1
[root@test1 keepalived-1.2.1]# ./configure --prefix=/usr/local/keepalived
[root@test1 keepalived-1.2.1]# make && make install
[root@test1 ~]# cp /usr/local/keepalived/etc/sysconfig/keepalived  /etc/sysconfig/
[root@test1 ~]# cp /usr/local/keepalived/etc/rc.d/init.d/keepalived  /etc/init.d/
[root@test1 ~]# mkdir  /etc/keepalived
[root@test1 ~]# cp  /usr/local/keepalived/etc/keepalived  /keepalived.conf  /etc/keepalived/
[root@test1 ~]# ln -s  /usr/local/keepalived/sbin/keepalived  /usr/sbin/
[root@test1 ~]# service keepalived start
Starting keepalived:                                       [  OK  ]

Keepalived的配置也非常簡單,僅僅需要一個配置文件即可完成HAclusterlvs服務節點監控功能,在通過Keepalived搭建高可用的LVS集羣實例中,主、備DirectorServer都需要安裝Keepalived軟件,安裝成功後,默認的配置文件路徑爲/etc/Keepalived/Keepalived.conf

一個完整的keepalived配置文件,有三個部分組成,分別是全局定義部分、vrrp實例定義部分以及虛擬服務器定義部分,配置好的文件內容如下:

! Configuration File for keepalived
global_defs {
notification_email {
root@localhost
}
notification_email_from  root@localhost
smtp_server 192.168.46.131
smtp_connect_timeout 30
router_id LVS_MASTER
}
vrrp_instance VI_1 {
state MASTER      //備庫爲BACKUP
interface eth2     //通過的網卡
virtual_router_id 51
priority 100      //備庫爲99
advert_int 1
authentication {
auth_type PASS
auth_pass 1111
}
virtual_ipaddress {
192.168.46.100
}
}
virtual_server 192.168.46.100 3306 {
delay_loop 30
lb_algo rr
lb_kind DR
persistence_timeout 50
protocol TCP
real_server 192.168.46.131 3306 {
weight 1
MISC_CHECK{
misc_path "/etc/keepalived/check_slave.pl 192.168.46.131"
misc_dynamic
}
}
real_server 192.168.46.130 3306 {
weight 1
MISC_CHECK{
misc_path "/etc/keepalived/check_slave.pl 192.168.46.130"
misc_dynamic
}
}
}
}



2,check_slave.pl檢測mysql

check_slave.pl是用perl寫的一個檢測腳本,定時在slave機器上執行showslavestatus\G命令,檢查Slave_IO_RunningSlave_SQL_RunningSeconds_Behind_Master三個值。Slave_IO_RunningSlave_SQL_Running有一個值爲No就自動從LVSrealserver列表去掉,不再對外提供服務,如果這兩個值爲Yes檢查Seconds_Behind_Master大於設定的值也會自動從對外服務機器列表裏面去掉。三個值同時滿足時又會被加入到服務列表,對外提供服務。這個檢測腳本內容如下:

#!/usr/bin/perl -w
use DBI;
use DBD::mysql;
# CONFIG VARIABLES
$SBM = 120;
$db = "test";
$host = $ARGV[0];
$port = 3306;
$user = "root";
$pw = "mysql";
# SQL query
$query = "show slave status";
$dbh = DBI->connect("DBI:mysql:$db:$host:$port", $user, $pw, { RaiseError => 0,PrintError => 0 });
if (!defined($dbh)) {
exit 1;
}
$sqlQuery = $dbh->prepare($query);
$sqlQuery->execute;
$Slave_IO_Running =  "";
$Slave_SQL_Running = "";
$Seconds_Behind_Master = "";
while (my $ref = $sqlQuery->fetchrow_hashref()) {
$Slave_IO_Running = $ref->{'Slave_IO_Running'};
$Slave_SQL_Running = $ref->{'Slave_SQL_Running'};
$Seconds_Behind_Master = $ref->{'Seconds_Behind_Master'};
}
$sqlQuery->finish;
$dbh->disconnect();
if ( $Slave_IO_Running eq "No" || $Slave_SQL_Running eq "No" ) {
exit 1;
} else {
if ( $Seconds_Behind_Master > $SBM ) {
exit 1;
} else {
exit 0;
}
}


3、安裝配置lvs

[root@test1 ~]# yum install -y ipvsadm
[root@test1 ~]# lsmod  |grep ip_vs
[root@test1 ~]# modprobe  ip_vs
[root@test1 ~]# lsmod  |grep ip_vs
ip_vs                 122241  0
這裏不能靠進程來判斷是不是加載了ip_vs模塊,因爲這裏就是一個命令,沒有產生進程。
vim /etc/init.d/lvsdrrip
#!/bin/bash
#DR server
VIP=192.168.46.100
case "$1" in
start)
echo "start LVS of DR"
/sbin/ifconfig lo:0 $VIP broadcast $VIP netmask 255.255.255.255 up
/sbin/route add -host $VIP dev lo:0
echo "1" > /proc/sys/net/ipv4/conf/lo/arp_ignore
echo "2" > /proc/sys/net/ipv4/conf/lo/arp_announce
echo "1" > /proc/sys/net/ipv4/conf/all/arp_ignore
echo "2" > /proc/sys/net/ipv4/conf/all/arp_announce
;;
stop)
echo "stop LVS of DR"
/sbin/ifconfig lo:0 down
echo "0" > /proc/sys/net/ipv4/conf/lo/arp_ignore
echo "0" > /proc/sys/net/ipv4/conf/lo/arp_announce
echo "0" > /proc/sys/net/ipv4/conf/all/arp_ignore
echo "0" > /proc/sys/net/ipv4/conf/all/arp_announce
;;
*)
echo "Usage:$0 {start|stop}"
esac
exit
1


4,test1和test2上安裝mysql服務,test1爲master,test2爲slave

參考http://wolfword.blog.51cto.com/4892126/1290938


5,test3調度器安裝lvsdr

[root@test3 ~]# vim  /etc/init.d/lvsdr
#!/bin/bash
VIP=192.168.46.100
RIP1=192.168.46.131
RIP2=192.168.46.130
case "$1" in
start)
echo "start LVS of DirectorServer DR"
/sbin/iptables -F
/sbin/ipvsadm -C
/sbin/ifconfig eth0:0 $VIP broadcast $VIP  netmask 255.255.255.0  up
/sbin/ipvsadm  -A -t $VIP:3306  -s rr
/sbin/ipvsadm  -a -t $VIP:3306  -r  $RIP1 -g
/sbin/ipvsadm  -a -t $VIP:3306  -r  $RIP2 -g
/sbin/ipvsadm
;;
stop)
echo "stop  LVS of DirectorServer DR"
echo "0" >/proc/sys/net/ipv4/ip_forward
/sbin/ipvsadm -C
/sbin/ifconfig eth0:0 down
;;
*)
[root@test3  ~]#chown +x /etc/init.d/lvsdr










發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章