ÔĶÁĿ¼
1¡¢¼ò½é
2¡¢»ù±¾»·¾³
3¡¢ÅäÖÃMySQLÖ÷Ö÷¸´ÖÆ
4¡¢Öмä¼þ¼òÊö
4.1¡¢Haproxy½éÉÜ
4.2¡¢keepalived½éÉÜ 5¡¢Öмä¼þµÄ°²×°ÓëÅäÖã¨haproxy¡¢keepalived£©
5.1¡¢°²×°haproxy
1£©¡¢±àÒë°²×°haproxy
2£©¡¢ÌṩÆô¶¯½Å±¾
3£©¡¢ÌṩÅäÖÃÎļþ
4£©¡¢Æô¶¯ÈÕÖ¾
5£©¡¢Æô¶¯haproxy
6£©¡¢²âÊÔhaproxy
5.2¡¢°²×°keepalived
1£©¡¢½â¾öȱÉÙµÄÈí¼þ¿âÎļþ
2£©¡¢±àÒë°²×°keepalivedÈí¼þ
3£©¡¢´´½¨ÅäÖÃÎļþ
4£©¡¢´´½¨½Å±¾Îļþ
6¡¢¹¦ÄܲâÊÔ
6.1¡¢Á÷³Ì¼òÊö
6.2¡¢²âÊÔhaproxy¼àÌýǰ¶Ë¶Ë¿Ú3306
6.3¡¢²âÊԸ߿ÉÓÃ+keepalived²»ÇÀÕ¼vip
6.4¡¢²âÊÔ¸ºÔؾùºâ
7¡¢×ܽáÓ뽨Òé
1¡¢¼ò½é
ʹÓÃMySQLÊ±Ëæ×Åʱ¼äµÄÔö³¤£¬Óû§Á¿ÒÔ¼°Êý¾ÝÁ¿µÄÖð½¥Ôö¼Ó£¬·ÃÎÊÁ¿¸üÊǾçÔö£¬×îÖÕ½«»áʹMySQL´ïµ½Ä³¸öÆ¿¾±£¬ÄÇôMySQLµÄÐÔÄܽ«»á´ó´ó½µµÍ¡£ÕâÒ»½á¹ûÒ²²»ÀûÓÚÈí¼þµÄÍÆ¹ã¡£
ÄÇôÈçºÎ¿ç¹ýÕâ¸öÆ¿¾±£¬Ìá¸ßMySQLµÄ²¢·¢Á¿ÄØ£¿·½·¨Óкܶ࣬·Ö²¼Ê½Êý¾Ý¿â¡¢¶Áд·ÖÀë¡¢¸ß¿ÉÓøºÔؾùºâ¡¢Ôö¼Ó»º´æ·þÎñÆ÷µÈµÈ¡£Ö®Ç°µÄÎÄÕÂÀïÒѾ½éÉÜÁ˶Áд·ÖÀëµÄ·½°¸ÁË£¬½ÓÏÂÀ´ÎÒ½«½²½âMySQL¸ß¿ÉÓøºÔؾùºâÕâÒ»·½·¨¡£
ÆäÖÐʵÏָ߿ÉÓøºÔؾùºâµÄ·½·¨Óкܶ࣬ÀýÈçLVS+keepalived×éºÏʵÏÖ¡¢haproxy+keepalived×éºÏʵÏֵȵȣ¬ÕâÀïÎÒÃDzÉÓÃhaproxy+keepalived×éºÏʵÏÖMySQL¸ß¿ÉÓøºÔؾùºâÕâÒ»¼¼Êõ¡£
2¡¢»ù±¾»·¾³
ËĄ̈linuxÐéÄâÖ÷»ú
Linux°æ±¾CentOS6.6
MySQL 5.5£¨ÒѰ²×°ºÃ£©
haproxy-1.5.14
keepalived-1.2.19
IP£º192.168.95.11£¨mysql1£©¡¢192.168.95.12£¨mysql2£©¡¢192.168.95.13£¨haproxy+keepalived£©¡¢192.168.95.14£¨haproxy+keepalived£©¡¢192.168.95.55£¨vip£©
3¡¢ÅäÖÃMySQLÖ÷Ö÷¸´ÖÆ
ÏêϸÅäÖò½Öè¿ÉÒԲο¼ÕâÆªÎÄÕ£º
http://www.cnblogs.com/phpstudy2015-6/p/6485819.html#_label7
ÒÔϼòÒª½éÉÜÒ»ÏÂmysqlµÄÖ÷Ö÷¸´ÖÆ£º
ºÎΪÖ÷Ö÷¸´ÖÆ£¿¾ÍÊÇÁ½¸ömysql¶¼ÄܶÁÄÜд£¬Êý¾Ý¼Ç¼ͨ¹ý¶þ½øÖÆ´«´ï¸ø¶Ô·½´Ó¶ø±£³ÖÊý¾ÝµÄÒ»ÖÂÐÔ¡£
£¨192.168.95.11Ö÷´Ó¸´ÖÆ+192.168.95.12Ö÷´Ó¸´ÖÆ==192.168.95.11¡¢192.168.95.12Ö÷Ö÷¸´ÖÆ£©
Òò´ËÖ÷Ö÷¸´ÖÆÖбØÐëÒª½â¾öµÄÊÂÇé¾ÍÊÇ×ÔÔöÖ÷¼üµÄÎÊÌâ¡£Èç¹ûmysql1Ö÷¼üidÔö¼Óµ½12ÁË£¬´Ëʱ¶þ½øÖÆÊý¾Ý»¹Ã»µ½´ïmysql2£¬ÄÇômysql2Ç¡ºÃÒª²åÈëÊý¾Ý£¬ÄÇôÐÂÊý¾ÝÖ÷¼üidÒ²ÊÇ12£¬ÄDz»¾ÍÊÇÂÒÌ×ÁËô£¡½â¾öÕâÒ»ÎÊÌâÎÒÃÇ¿ÉÒÔÖ±½Ó¸ü¸ÄMySQLÖеÄÅäÖÃÎļþ¼´¿É¡£
1£©¡¢¸ü¸ÄÅäÖÃÎļþ
--192.168.95.11£ºMySQL
server-id=11 #ÈÎÒâ×ÔÈ»Êýn£¬Ö»Òª±£Ö¤Á½Ì¨MySQLÖ÷»ú²»Öظ´¾Í¿ÉÒÔÁË¡£
log-bin=mysql-bin #¿ªÆô¶þ½øÖÆÈÕÖ¾
auto_increment_increment=2 #²½½øÖµauto_imcrement¡£Ò»°ãÓÐn̨Ö÷MySQL¾ÍÌîn
auto_increment_offset=1 #Æðʼֵ¡£Ò»°ãÌîµÚn̨Ö÷MySQL¡£´ËʱΪµÚһ̨Ö÷MySQL
binlog-ignore=mysql #ºöÂÔmysql¿â¡¾ÎÒÒ»°ã¶¼²»Ð´¡¿
binlog-ignore=information_schema #ºöÂÔinformation_schema¿â¡¾ÎÒÒ»°ã¶¼²»Ð´¡¿
replicate-do-db=aa #Ҫͬ²½µÄÊý¾Ý¿â£¬Ä¬ÈÏËùÓпâ
--192.168.95.12£ºMySQL
server-id=12
log-bin=mysql-bin
auto_increment_increment=2
auto_increment_offset=2
replicate-do-db=aa |
ÅäÖúúóÖØÆôMySQL
2£©¡¢ÅäÖÃ192.168.95.11Ö÷´Ó¸´ÖÆ
1¡¢ÔÚ192.168.95.12Öд´½¨Ò»¸ö192.168.95.11Ö÷»úÖпÉÒԵǼµÄMySQLÓû§
Óû§£ºmysql11
ÃÜÂ룺mysql11
mysql>GRANT
REPLICATION SLAVE ON *.* TO ¡®mysql11¡¯@¡¯192.168.95.11¡¯
IDENTIFIED BY ¡¯mysql11¡¯;
mysql>FLUSH PRIVILEGES; |
2¡¢²é¿´192.168.95.12¶þ½øÖÆÈÕÖ¾
mysql>
show master status; |
3¡¢¸æÖª¶þ½øÖÆÎļþÃûÓëλÖÃ
¸´ÖÆ´úÂë
mysql> change master to
-> master_host='192.168.95.11',
-> master_user='mysql11',
->master_password='mysql11',
->master_log_file='mysql-bin.000097',
-> master_log_pos=107; |
4¡¢²é¿´½á¹û
mysql>
slave start;
mysql> show slave status\G |

ÅäÖÃÖ÷´Ó¸´ÖƳɹ¦
3£©¡¢ÅäÖÃ192.168.95.12Ö÷´Ó¸´ÖÆ
ͬÉÏ

ÅäÖÃÖ÷´Ó¸´ÖƳɹ¦¡£
4¡¢Öмä¼þ¼òÊö
4.1¡¢Haproxy½éÉÜ
HaproxyÊÇÒ»¸ö¿ªÔ´µÄ¸ßÐÔÄܵķ´Ïò´úÀí»òÕß˵ÊǸºÔؾùºâ·þÎñÈí¼þÖ®Ò»£¬ËüÖ§³ÖË«»úÈȱ¸¡¢ÐéÄâÖ÷»ú¡¢»ùÓÚTCPºÍHTTPÓ¦ÓôúÀíµÈ¹¦ÄÜ¡£ÆäÅäÖüòµ¥£¬¶øÇÒÓµÓкܺõĶԷþÎñÆ÷½ÚµãµÄ½¡¿µ¼ì²é¹¦ÄÜ£¨Ï൱ÓÚkeepalived½¡¿µ¼ì²é£©£¬µ±Æä´úÀíµÄºó¶Ë·þÎñÆ÷³öÏÖ¹ÊÕÏʱ£¬Haproxy»á×Ô¶¯µÄ½«¸Ã¹ÊÕÏ·þÎñÆ÷Õª³ý£¬µ±·þÎñÆ÷µÄ¹ÊÕϻָ´ºóHaproxy»¹»á×Ô¶¯½«RS·þÎñÆ÷¡£
HAProxyÌØ±ðÊÊÓÃÓÚÄÇЩ¸ºÔØÌØ´óµÄwebÕ¾µã£¬ÕâЩվµãͨ³£ÓÖÐèÒª»á»°±£³Ö»òÆß²ã´¦Àí¡£HAProxyÔËÐÐÔÚµ±Ç°µÄÓ²¼þÉÏ£¬ÍêÈ«¿ÉÒÔÖ§³ÖÊýÒÔÍò¼ÆµÄ²¢·¢Á¬½Ó¡£²¢ÇÒËüµÄÔËÐÐģʽʹµÃËü¿ÉÒԺܼòµ¥°²È«µÄÕûºÏ½øÄúµ±Ç°µÄ¼Ü¹¹ÖУ¬
ͬʱ¿ÉÒÔ±£»¤ÄãµÄweb·þÎñÆ÷²»±»±©Â¶µ½ÍøÂçÉÏ¡£
HaproxyÈí¼þÒýÈëÁËfrontend£¬backendµÄ¹¦ÄÜ£¬frontend£¨acl¹æÔòÆ¥Å䣩¿ÉÒÔ¸ù¾ÝÈÎÒâHTTPÇëÇóÍ·×ö¹æÔòÆ¥Å䣬Ȼºó°ÑÇëÇó¶¨Ïòµ½Ïà¹ØµÄbackend£¨server
poolsµÈ´ýǰ¶Ë°ÑÇëÇóת¹ýÀ´µÄ·þÎñÆ÷×飩¡£Í¨¹ýfrontendºÍbackup£¬ÎÒÃÇ¿ÉÒÔºÜÈÝÒ×µÄʵÏÖhaproxyµÄ7²ã´úÀí¹¦ÄÜ£¬haproxyÊÇÒ»¿î²»¿É¶àµÃµÄÓÅÐã´úÀí·þÎñÈí¼þ¡£
4.2¡¢keepalived½éÉÜ
keepalivedÊÇÒÔVRRPÐÒéΪʵÏÖ»ù´¡µÄ£¬VRRPÈ«³ÆVirtual
Router Redundancy Protocol£¬¼´ÐéÄâ·ÓÉÈßÓàÐÒé¡£
ÐéÄâ·ÓÉÈßÓàÐÒ飬¿ÉÒÔÈÏΪÊÇʵÏÖ·ÓÉÆ÷¸ß¿ÉÓõÄÐÒ飬¼´½«N̨ÌṩÏàͬ¹¦ÄܵÄ·ÓÉÆ÷×é³ÉÒ»¸ö·ÓÉÆ÷×飬Õâ¸ö×éÀïÃæÓÐÒ»¸ömasterºÍ¶à¸öbackup£¬masterÉÏÃæÓÐÒ»¸ö¶ÔÍâÌṩ·þÎñµÄvip£¨¸Ã·ÓÉÆ÷ËùÔÚ¾ÖÓòÍøÄÚÆäËû»úÆ÷µÄĬÈÏ·ÓÉΪ¸Ãvip£©£¬master»á·¢×é²¥£¬µ±backupÊÕ²»µ½vrrp°üʱ¾ÍÈÏΪmasterå´µôÁË£¬Õâʱ¾ÍÐèÒª¸ù¾ÝVRRPµÄÓÅÏȼ¶À´Ñ¡¾ÙÒ»¸öbackupµ±master¡£ÕâÑùµÄ»°¾Í¿ÉÒÔ±£Ö¤Â·ÓÉÆ÷µÄ¸ß¿ÉÓÃÁË¡£
keepalivedÖ÷ÒªÓÐÈý¸öÄ£¿é£¬·Ö±ðÊÇcore¡¢checkºÍvrrp¡£coreÄ£¿éΪkeepalivedµÄºËÐÄ£¬¸ºÔðÖ÷½ø³ÌµÄÆô¶¯¡¢Î¬»¤ÒÔ¼°È«¾ÖÅäÖÃÎļþµÄ¼ÓÔØºÍ½âÎö¡£check¸ºÔ𽡿µ¼ì²é£¬°üÀ¨³£¼ûµÄ¸÷ÖÖ¼ì²é·½Ê½¡£vrrpÄ£¿éÊÇÀ´ÊµÏÖVRRPÐÒéµÄ¡£
5¡¢Öмä¼þµÄ°²×°ÓëÅäÖã¨haproxy¡¢keepalived£©
°Ù¶ÈÔÆÏÂÔØ£ºhttp://pan.baidu.com/s/1qYoCjDE
ÃÜÂ룺7cef
5.1¡¢°²×°haproxy
ÔÚ192.168.95.13¡¢192.168.95.14°²×°haproxy£¨Ò»Ä£Ò»Ñù°²×°£©
1£©¡¢±àÒë°²×°haproxy
#
tar -zxvf haproxy-1.5.14.tar.gz
# cd haproxy-1.5.14
# make TARGET=linux26 ARCH=x86_64
# make install SBINDIR=/usr/sbin/ MANDIR=/usr/share/man/
DOCDIR=/usr/share/doc/ |
×¢Ò⣺
1¡¢ÎªÊ²Ã´²»ÓÃconfigure£¬Çë¿´ÏÂͼ¡£haproxy-1.5.14ÒѾ´æÔÚMakefileÎļþÁË¡£
2¡¢makeµÄʱºò£¬targetÒÔ¼°archÐèÒª¸ù¾Ý×Ô¼ºµÄlinuxÖ÷»úÉèÖÃ
3¡¢make installµÄʱºòÎÒÔö¼ÓÁËһЩ¶îÍâÑ¡Ïî¡£Õâ¿É¼Ó¿É²»¼ÓÓÉ×Ô¼ºÅäÖ㬲»¼ÓµÄ»°½«»á°´Ä¬ÈÏ·¾¶°²×°£¬Çë¿´ÏÂͼ¡£


2£©¡¢ÌṩÆô¶¯½Å±¾
½«haproxyÕâ¸öÆô¶¯½Å±¾·ÅÔÚ/etc/init.d/Îļþ¼ÐÏ£¬ÒÔ±ãÎÒÃÇ¿ÉÒÔÖ±½ÓserviceÆô¶¯Ëü
¡¾×¢Òâ¡¿£º´ËÆô¶¯½Å±¾½ö½öÊʺÏÎÒÒÔÉϵݲװ·¾¶¡£¼ÙÈô°²×°Â·¾¶²»Í¬£¬ÔòÐèÒª½øÐÐÏàÓ¦µÄÐ޸ķ½¿ÉʹÓá£
¸´ÖÆ´úÂë
#!/bin/sh
#
# haproxy
#
# chkconfig: - 85 15
# description: HAProxy is a free, very fast
and reliable solution \
# offering high availability, load balancing,
and \
# proxying for TCP and HTTP-based applications
# processname: haproxy
# config: /etc/haproxy/haproxy.cfg
# pidfile: /var/run/haproxy.pid
# Source function library.
. /etc/rc.d/init.d/functions
# Source networking configuration.
. /etc/sysconfig/network
# Check that networking is up.
[ "$NETWORKING" = "no" ]
&& exit 0
exec="/usr/sbin/haproxy"
prog=$(basename $exec)
[ -e /etc/sysconfig/$prog ] && . /etc/sysconfig/$prog
cfgfile=/etc/haproxy/haproxy.cfg
pidfile=/var/run/haproxy.pid
lockfile=/var/lock/subsys/haproxy
check() {
$exec -c -V -f $cfgfile $OPTIONS
}
start() {
$exec -c -q -f $cfgfile $OPTIONS
if [ $? -ne 0 ]; then
echo "Errors in configuration file, check
with $prog check."
return 1
fi
echo -n $"Starting $prog: "
# start it up here, usually something like "daemon
$exec"
daemon $exec -D -f $cfgfile -p $pidfile $OPTIONS
retval=$?
echo
[ $retval -eq 0 ] && touch $lockfile
return $retval
}
stop() {
echo -n $"Stopping $prog: "
# stop it here, often "killproc $prog"
killproc $prog
retval=$?
echo
[ $retval -eq 0 ] && rm -f $lockfile
return $retval
}
restart() {
$exec -c -q -f $cfgfile $OPTIONS
if [ $? -ne 0 ]; then
echo "Errors in configuration file, check
with $prog check."
return 1
fi
stop
start
}
reload() {
$exec -c -q -f $cfgfile $OPTIONS
if [ $? -ne 0 ]; then
echo "Errors in configuration file, check
with $prog check."
return 1
fi
echo -n $"Reloading $prog: "
$exec -D -f $cfgfile -p $pidfile $OPTIONS -sf
$(cat $pidfile)
retval=$?
echo
return $retval
}
force_reload() {
restart
}
fdr_status() {
status $prog
}
case "$1" in
start|stop|restart|reload)
$1
;;
force-reload)
force_reload
;;
check)
check
;;
status)
fdr_status
;;
condrestart|try-restart)
[ ! -f $lockfile ] || restart
;;
*)
echo $"Usage: $0 {start|stop|status|restart|try-restart|reload|force-reload}"
exit 2
esac
|
#¸øÖ´ÐÐȨÁ¦
#chmod
+x /etc/init.d/haproxy |
»Øµ½¶¥²¿
3£©¡¢ÌṩÅäÖÃÎļþ
¸ù¾ÝÉÏÃæµÄÆô¶¯½Å±¾½¨Á¢ÏàÓ¦µÄĿ¼ÒÔ¼°ÅäÖÃÎļþ
#
mkdir /etc/haproxy
# mkdir /var/lib/haproxy
# useradd -r haproxy #½¨Á¢½Å±¾Æô¶¯Óû§
# vi /etc/haproxy/haproxy.cfg |
¡¾ÅäÖÃÎļþ¡¿
#ÕâÀïµÄÅäÖÃÎļþ½ö½öÖ»ÊÇÌù³öÀ´½øÐнâÎö˵Ã÷¡£
#Èç¹ûÐèÒªÕâ¸öÅäÖÃÎļþ×îºÃ½«×¢ÊͽâÎöÈ«²¿É¾³ýµô£¬ÒòΪÎÒÔÚʹÓõĹý³ÌÖУ¬ÕýÊÇÒòΪ´æÔÚ×¢ÊͽâÎö¶øµ¼Ö³ö´í£¬É¾³ýºó¾ÍÄÜÕý³£ÔËÐС£
#¿ÉÒÔÏÂÔØÕâ¸öÅäÖÃÎļþ½øÐÐʹÓã¬ÓëÏÂÃæÌù³öÀ´µÄÅäÖÃÎļþÒ»Ö£¬Ö»ÊDz»´æÔÚ×¢ÊͽâÎö
#°Ù¶ÈÔÆÏÂÔØ¸ÃÅäÖÃÎļþ£¨²»º¬×¢ÊÍ£©£ºÁ´½Ó£ºhttp://pan.baidu.com/s/1gfOMtKB
ÃÜÂ룺zl9o
global
log 127.0.0.1 local2 //ÈÕÖ¾¶¨Òå¼¶±ð
chroot /var/lib/haproxy //µ±Ç°¹¤×÷Ŀ¼
pidfile /var/run/haproxy.pid //½ø³Ìid
maxconn 4000 //×î´óÁ¬½ÓÊý
user haproxy //ÔËÐиijÌÐòµÄÓû§
group haproxy
daemon //ºǫ́ÐÎʽÔËÐÐ
stats socket /var/lib/haproxy/stats
defaults
mode tcp //haproxyÔËÐÐģʽ£¨http | tcp | health£©
log global
option dontlognull
option redispatch //serverId¶ÔÓ¦µÄ·þÎñÆ÷¹Òµôºó,Ç¿ÖÆ¶¨Ïòµ½ÆäËû½¡¿µµÄ·þÎñÆ÷
retries 3 //Èý´ÎÁ¬½Óʧ°ÜÔò·þÎñÆ÷²»ÓÃ
timeout http-request 10s
timeout queue 1m
timeout connect 10s //Á¬½Ó³¬Ê±
timeout client 1m //¿Í»§¶Ë³¬Ê±
timeout server 1m //·þÎñÆ÷³¬Ê±
timeout http-keep-alive 10s
timeout check 10s //ÐÄÌø¼ì²â
maxconn 600 //×î´óÁ¬½ÓÊý
listen stats //ÅäÖÃhaproxy״̬ҳ£¨ÓÃÀ´²é¿´µÄÒ³Ãæ£©
mode http
bind :8888
stats enable
stats hide-version //Òþ²Øhaproxy°æ±¾ºÅ
stats uri /haproxyadmin?stats //Ò»»áÓÃÓÚ´ò¿ª×´Ì¬Ò³µÄuri
stats realm Haproxy\ Statistics //ÊäÈëÕË»§ÃÜÂëʱµÄÌáʾÎÄ×Ö
stats auth admin:admin //Óû§Ãû:ÃÜÂë
frontend main
bind 0.0.0.0:3306 //ʹÓÃ3306¶Ë¿Ú¡£¼àÌýǰ¶Ë¶Ë¿Ú¡¾±íʾÈκÎip·ÃÎÊ3306¶Ë¿Ú¶¼»á½«Êý¾ÝÂÖ·¬×ª·¢µ½mysql·þÎñÆ÷Ⱥ×éÖС¿
default_backend mysql //ºó¶Ë·þÎñÆ÷×éÃû
backend mysql
balance leastconn //ʹÓÃ×îÉÙÁ¬½Ó·½Ê½µ÷¶È
server mysql1 192.168.95.11:3306 check port
3306 maxconn 300
server mysql2 192.168.95.12:3306 check port
3306 maxconn 300 |
4£©¡¢Æô¶¯ÈÕÖ¾

5£©¡¢Æô¶¯haproxy

6£©¡¢²âÊÔhaproxy
°²ÕÕÅäÖÃÎļþ½øÐÐÏàÓ¦µÄ²âÊÔ

´ò¿ªä¯ÀÀÆ÷ÊäÈë192.168.95.13:8888/haproxyadmin?stats

µÇ½ºóÈçÏÂÈçËùʾ£¬±íÃ÷°²×°haproxy³É¹¦¡£

5.2¡¢°²×°keepalived
¹ÙÍøÏÂÔØ£ºhttp://www.keepalived.org/download.html
ÔÚ192.168.95.13¡¢192.168.95.14°²×°keepalived
1£©¡¢½â¾öȱÉÙµÄÈí¼þ¿âÎļþ
¡¾ÕâÒ»²½ÖèÊÓ¾ßÌåµÄlinux°æ±¾¶ø¶¨£¬ÓÐЩÒѾ°²×°opensslÁË¡£¾ßÌåÇé¿ö¿ÉÒÔÖ´ÐÐ./configure¾ÍÄܹ»È·¶¨È±²»È±ÉÙÈí¼þ¿âÎļþÁË¡¿
Ê×ÏÈÎÒÃÇÏȽ«keepalived-1.2.19.tar.gz½âѹ£¬È»ºó½øÈëĿ¼./configure²é¿´
#
tar -zxvf keepalived-1.2.19.tar.gz
# ./configure --prefix=/usr/local/keepalived
--sbindir=/usr/sbin/ --sysconfdir=/etc/ --mandir=/usr/local/share/man/
--with-kernel-dir=/usr/src/kernels/2.6.32-504.el6.x86_64/ |


ÓÉÉÏͼ¿É¼ûkeepalivedµÄ°²×°ÐèÒªÏȰ²×°Èí¼þOpenSSL
ȱÉÙÍ·Îļþ£¬Ö»ÐèÒª°²×°opensslºÍopenssl-devel¼´¿É
×î¼òµ¥µÄ·½·¨ÊÇ£ºyum -y install openssl openssl-devel
Ã»ÍøµÄÅóÓÑÒ²²»ÓÃÅ£¬½ÓÏÂÀ´½«½éÉܵÄÊÇrpm·½·¨°²×°£º
#¹ÒÔØ¹âÅÌ£¬ÔÚ¹âÅÌÖвéÕÒÈí¼þ¡£Èô¹âÅÌÕÒ²»µ½¾ÍÖ±½ÓÏÂÔØ£¬ÔÙ´«Èëlinux½øÐа²×°
#
mount /dev/cdrom /home/suifeng2/rom/
# cd rom/
# cd Packages/
# ls |grep openssl |

°²×°keepalivedÈí¼þʱ´æÔÚ¸÷ÖÖÒÀÀµ£¬ÏÂͼÊÇÎÒ°²×°Èí¼þºóÕûÀíµÄÒÀÀµ¹ØÏµÍ¼£º

¼ÈÈ»ÒѾ֪µÀ¸÷Èí¼þÒÀÀµ£¬Ôò¿É°´×îºóÃæµÄÈí¼þ¿ªÊ¼°²×°£º
£¨ÄãÒ²¿ÉÒÔ´ÓÇ°Ãæ¿ªÊ¼½øÐа²×°£¬Ò»²½Ò»²½µÄ²é¿´¸÷¸öÒÀÀµ¹ØÏµ£©
1¡¢°²×°openssl
#
rpm -ivh openssl-1.0.1e-30.el6.x86_64.rpm |

°²×°openssl³É¹¦
2¡¢°²×°openssl-devel
°²×°libsepol-devel£º
#
rpm -ivh libsepol-devel-2.0.41-4.el6.x86_64.rpm |

°²×°pkgconfig(libsepol)£º
#
rpm -ivh pkgconfig-0.23-9.1.el6.x86_64.rpm |

°²×°libselinux-devel£º
#
rpm -ivh libselinux-devel-2.0.94-5.8.el6.x86_64.rpm |

°²×°keyutils-libs-devel£º
#
rpm -ivh keyutils-libs-devel-1.4-5.el6.x86_64.rpm |

°²×°libcom_err-devel£º

°²×°krb5-devel£º
#
rpm -ivh libcom_err-devel-141.12-21.el6.x86_64.rpm |

°²×°zlib-devel£º
#
rpm -ivh zlib-devel-1.2.3-29.el6.x86_64.rpm |

°²×°openssl-devel£º
#
rpm -ivh openssl-devel-1.0.1e-30.el6.x86_64.rpm |

2£©¡¢±àÒë°²×°keepalivedÈí¼þ
#
cd keepalived-1.2.19
# ./configure --prefix=/usr/local/keepalived
--sbindir=/usr/sbin/ --sysconfdir=/etc/ --mandir=/usr/local/share/man/
--with-kernel-dir=/usr/src/kernels/2.6.32-504.el6.x86_64/
# make && make install
# chkconfig --add keepalived #Ìí¼Ó¿ª»ú×ÔÆô£¨ÎÒÔÝʱûÌí¼Ó£©
# chkconfig keepalived on |

¡¾×¢Òâ¡¿£º
1¡¢°²×°Ê±./configureÖеġªprefixºóµÄ¼¸¸öÑ¡Ôñ¿ÉÑ¡¿É²»Ñ¡£¬Ñ¡Á˾ͿÉÒÔ²ÉÓÃserviceÖ±½ÓÆô¶¯ÁË¡£½¨Òé×îºÃ¶¼¼ÓÉϰÉ
2¡¢--with-kernel-dirÕâ¸öÑ¡Ïî¸ù¾Ý×Ô¼ºµÄlinux°æ±¾½øÐÐÌîд£¨ÔÚlinuxÖÐʹÓÃÃüÁîuname
¨Ca¿ÉÒԲ鵽£©

3£©¡¢´´½¨ÅäÖÃÎļþ
/etc/keepalived/Îļþ¼ÐÒÑ´æÔÚkeepalived.confÎļþ£¬ÎÒÃǽ«Ëü¸ÄÃûΪkeepalived.conf.back£¬ÔÙ½¨Á¢Ò»¸öÎÒÃÇ×Ô¼ºkeepalived.confÅäÖÃÎļþ¡£

vi /etc/keepalived/keepalived.conf£¨13Óë14ÅäÖÃÎļþ·¾¶Ò»Ö£©
¡¾ÒÔÏÂÊǼòµ¥µÄÅäÖÃÎļþ£¬Ê¹ÓÃʱ×îºÃÈ¥µô×¢ÊÍ¡¿
ÅäÖÃÎļþÏÂÔØ£¨²»º¬×¢ÊÍ£©£º
192.168.95.13ÅäÖÃÎļþ:
!
Configuration File for keepalived
#¼òµ¥µÄÍ·²¿£¬ÕâÀïÖ÷Òª¿ÉÒÔ×öÓʼþ֪ͨ±¨¾¯µÈµÄÉèÖ㬴˴¦¾ÍÔݲ»ÅäÖÃÁË£»
global_defs {
notificationd LVS_DEVEL
}
#Ô¤Ïȶ¨ÒåÒ»¸ö½Å±¾£¬·½±ãºóÃæµ÷Óã¬Ò²¿ÉÒÔ¶¨Òå¶à¸ö£¬·½±ãÑ¡Ôñ£»
vrrp_script chk_haproxy {
script "/etc/keepalived/chk.sh" #¾ßÌå½Å±¾Â·¾¶
interval 2 #½Å±¾Ñ»·ÔËÐмä¸ô
}
#VRRPÐéÄâ·ÓÉÈßÓàÐÒéÅäÖÃ
vrrp_instance VI_1 { #VI_1 ÊÇ×Ô¶¨ÒåµÄÃû³Æ£»
state BACKUP #MASTER±íʾÊÇһ̨Ö÷É豸£¬BACKUP±íʾΪ±¸ÓÃÉ豸¡¾ÎÒÃÇÕâÀïÒòΪÉèÖÃΪ¿ªÆô²»ÇÀÕ¼£¬ËùÒÔ¶¼ÉèÖÃΪ±¸Óá¿
nopreempt #¿ªÆô²»ÇÀÕ¼
interface eth0 #Ö¸¶¨VIPÐèÒª°ó¶¨µÄÎïÀíÍø¿¨
virtual_router_id 11 #VRIDÐéÄâ·Óɱêʶ£¬Ò²½Ð×ö·Ö×éÃû³Æ£¬¸Ã×éÄÚµÄÉ豸ÐèÒªÏàͬ
priority 130 #¶¨ÒåÕą̂É豸µÄÓÅÏȼ¶ 1-254£»¿ªÆôÁ˲»ÇÀÕ¼£¬ËùÒÔ´Ë´¦ÓÅÏȼ¶±ØÐë¸ßÓÚÁíһ̨
advert_int 1 #Éú´æ¼ì²âʱµÄ×é²¥ÐÅÏ¢·¢Ëͼä¸ô£¬×éÄÚÒ»ÖÂ
authentication { #ÉèÖÃÑéÖ¤ÐÅÏ¢£¬×éÄÚÒ»ÖÂ
auth_type PASS #ÓÐPASS ºÍ AH Á½ÖÖ£¬³£Óà PASS
auth_pass asd #ÃÜÂë
}
virtual_ipaddress {
192.168.95.55 #Ö¸¶¨VIPµØÖ·£¬×éÄÚÒ»Ö£¬¿ÉÒÔÉèÖöà¸öIP
}
track_script { #ʹÓÃÔÚÕâ¸öÓòÖÐʹÓÃÔ¤Ïȶ¨ÒåµÄ½Å±¾£¬ÉÏÃæ¶¨ÒåµÄ
chk_haproxy
}
notify_backup "/etc/init.d/haproxy restart"
#±íʾµ±Çл»µ½backup״̬ʱ,ÒªÖ´ÐеĽű¾
notify_fault "/etc/init.d/haproxy stop"
#¹ÊÕÏʱִÐеĽű¾
} |
192.168.95.14ÅäÖÃÎļþ:
ÅäÖÃÎļþÓëÉÏÃæµÄ¼¸ºõÒ»Ñù£¬½ö½ö¸Ä±äpriority 120¡¾Ö»ÐèÒª±ÈÉÏÃæµÄС¼´¿É¡¿
4£©¡¢´´½¨½Å±¾Îļþ
´´½¨ÉÏÃæÅäÖÃÎļþËùÐèµÄ½Å±¾Îļþ£¨13¡¢14Ò»Ñù£©
£¨¼ì²âhaproxyÓÐûÓз¢Éú¹ÊÕÏ£¬·¢Éú¹ÊÕÏÔò½«keepalivedÍ£µô£¬Èóövip£©
#
vi /etc/keepalived/chk.sh#!/bin/bash
#
if [ $(ps -C haproxy --no-header | wc -l) -eq
0 ]; then
/etc/init.d/keepalived stop
fi |
¸øÖ´ÐÐȨÏÞ
# chmod +x /etc/keepalived/chk.sh
|

Æô¶¯keepalived£º
#
service keepalived start |

°²×°keepalived³É¹¦£¡
6¡¢¹¦ÄܲâÊÔ
²âÊÔ֮ǰÏÈÔÚmysql1ºÍmysql2Öн¨Á¢Ò»¸ömysqlÓû§£¬´ËÓû§¿ÉÒÔÔÊÐí13¡¢14linuxÖ÷»úµÇ½£º
Óû§£ºjack
ÃÜÂ룺321
host£º192.168.95.%
mysql>
GRANT ALL ON *.* TO 'jack'@'192.168.95.%' IDENTIFIED
BY '321';
mysql> FLUSH PRIVILEGES; |
6.1¡¢Á÷³Ì¼òÊö
´ó¸Å½²ÊöÒ»ÏÂÕûÌåµÄÔË×÷Á÷³Ì:
Ê×ÏÈÁ½¸ö11,12µÄmysqlÒÔ¼°13¡¢14µÄhaproxy¡¢keepalived¶¼Æô¶¯£»
keepalivedÔÚkeepalivedȺ×éÖлñÈ¡ÐéÄâIP£¬ÒÔ¼°¼ì²âhaproxyÊÇ·ñ±»kill£»
haproxy¸ºÔ𽫽øÀ´µÄÊý¾Ýת·¢µ½11»òÕß12µÄmysqlÖС£
ÏÂͼÊÇÎÒ»µÄ¼òµ¥Àí½âͼ£º£¨Ïà¶ÔÀ´Ëµ±È½Ï¼ò½à¹þ£¬´ÕºÏ´ÕºÏ¹þ£©

½ÓÏÂÀ´ÎÒÃǽ«Ò»¸ö¸ö¹¦ÄܵĽøÐвâÊÔÑéÖ¤¡£
6.2¡¢²âÊÔhaproxy¼àÌýǰ¶Ë¶Ë¿Ú3306
1¡¢frontend¼àÌý¶Ë¿Ú3306ʱ£¬½«mysql¡¢haproxy¡¢keepalivedÈ«²¿¿ªÆô
2¡¢Ê¹ÓÃÈÎÒâÒ»¸ömysql¿Í»§¶ËµÇ½Óû§jack
µÇ½³É¹¦(windownsÉϵǽmysql)

3¡¢¸ü¸Äfrontend¼àÌý¶Ë¿ÚΪ3307£¬¼ÌÐø²Ù×÷µÇ½²âÊÔ
µÇ½ʧ°Ü

½á¹û£ºËµÃ÷ÁËfrontend¼àÌý¶Ë¿ÚµÄÓô¦£¬ÓÐÖúÓÚÎÒÃÇÀí½âhaproxyÓ÷¨¡£
6.3¡¢²âÊԸ߿ÉÓÃ+keepalived²»ÇÀÕ¼vip
¿ÉÒÔͨ¹ýhaproxy¼à¿ØÒ³Ãæ»ñ֪˻ñÈ¡ÁËvip
1¡¢ÒÀ´ÎÆô¶¯13¡¢14µÄkeepalived¡¢haproxy£¨Æô¶¯keepalivedºó½«»á×Ô¶¯¿ªÆôhaproxy£©


2¡¢·ÃÎÊhttp://192.168.95.55:8888/haproxyadmin?stats
13»ñÈ¡ÁËvip

3¡¢# kill -9 8923
Ë¢ÐÂhttp://192.168.95.55:8888/haproxyadmin?stats

14»ñÈ¡ÁËvip£¬»úÆ÷Õý³£¹¤×÷
½á¹û£ºÖ¤Ã÷Á˸߿ÉÓ㬹ÒÁËһ̨Áíһ̨¼ÌÐø¹¤×÷
4¡¢ÖØÐÂÆô¶¯13µÄhaproxyÒÔ¼°keepalived
²¢Ë¢ÐÂhttp://192.168.95.55:8888/haproxyadmin?stats


½á¹û£º´ËʱvipÈÔÔÚ14ÊÖÖУ¬Ö¤Ã÷ÁËkeepalivedÅäÖÃÁ˲»ÇÀÕ¼vip£¬²»±ØÀË·Ñ×ÊÔ´È¥»ñÈ¡vip¡£
6.4¡¢²âÊÔ¸ºÔؾùºâ
1¡¢È«²¿Õý³£Æô¶¯£¬´ËʱvipÔÚ14ÊÖÖÐ
2¡¢·Ö±ðÔÚ11¡¢12ÖпªÆô×¥°ü
#
tcpdump -n -i eth0 host 192.168.95.11 and 192.168.95.14
# tcpdump -n -i eth0 host 192.168.95.12 and
192.168.95.14 |
3¡¢Ê¹Óò»Í¬¿Í»§¶ËµÇ½jackÓû§£¬²»¶ÏÏòÊý¾Ý¿âÌí¼ÓÊý¾Ý


½á¹û£º´Ëʱ14Ïò11¡¢12¶¼Óз¢ËÍÊý¾Ý£¬´Ëʱ֤Ã÷¸ºÔؾùºâ
¡¾ÎÒÃÇÉèÖõÄhaproxyÖÐbalance·½Ê½ÊÇ×îÉÙÁ¬½Ó·½Ê½£¬¼ÙÈô²ÉÓÃroundrobin·½Ê½²âÊÔ½á¹û½«»á¸ü¼ÓÃ÷ÏÔ¡¿
×¢Ò⣺
µ±Ä³Ò»Ì¨mysql¹ÒÁËÒÔºó£¬haproxy»á½«ÆäÌß³ömysql·þÎñÆ÷Ⱥ×é¡£
µ±ÓÐÃüÁî´«À´Ê±»á½«Æäת·¢µ½Õý³£µÄ·þÎñÆ÷ÉÏ¡£
µ±³öÎÊÌâµÄmysql»Ö¸´ºó£¬haproxyÓÖ»á×Ô¶¯µØ½«Ëü·Å»Ømysql·þÎñÆ÷Ⱥ×éÖУ¬²¢ÇÒ×Ô¶¯Í¬²½Ã»ÓÐͬ²½µÄÊý¾Ý
²âÊÔ£º
1¡¢È«²¿Õý³£Æô¶¯
mysql1¡¢mysql2¶¼Õý³£

2¡¢½«mysql2¹Øµô

mysql2³öÎÊÌ⣬½«ÆäÌß³ömysqlȺ×é
3¡¢Æô¶¯mysql2

mysql2»Ö¸´ºóÓÖ½«Æä·Å»ØmysqlȺ×éÀï
¡¾µ±mysql2¹Òµôʱ£¬ÈôÓÐÊý¾Ý²åÈ룬½«»áת·¢¸ømysql1£¬µ±mysql»Ö¸´ºó£¬ÓֻὫÕâЩÊý¾Ýͬ²½µ½mysql2ÖС¿
7¡¢×ܽáÓ뽨Òé
ÔÚÕâÆª²©ÎÄÖÐÎÒÃDz»½ö½öÖ»¹Ø×¢ÕâÒ»Õû¸ömysql¸ß¿ÉÓøºÔؾùºâµÄʵÏÖ·½Ê½£¬ÎÒÃÇ»¹Ó¦¸ÃÀí½âhaproxyÒÔ¼°keepalivedµÄ¹¤×÷·½Ê½¡£HaproxyºÍkeepalivedÕâÁ½¸ö¹¤¾ßºÜÇ¿´ó£¬Á˽âËûÃǵÄʵÏÖ·½Ê½£¬ÄÇô¾Í¿ÉÒÔÒÔ´ËÀàÍÆÓëÆäËû·þÎñÆ÷×éºÏ¹¹½¨Ç¿´ó½¡×³µÄ·þÎñ¼¯Èº¡£ÀýÈçËü¿ÉÒÔÓëapache×éºÏ£¬¹¹³É¸ß¿ÉÓøºÔؾùºâµÄweb¼¯Èº¡£
ÕâÆªÎÄÕÂÖÐÖ»ÊǼò¼òµ¥µ¥µÄ´î½¨ÁËÒ»¸ömysql¸ß¿ÉÓøºÔؾùºâµÄ»·¾³£¬ÕæÕýÓ¦Óõ½Éú²ú»·¾³ÖУ¬»¹ÐèÒª¸ù¾Ý¾ßÌåÏîÄ¿½øÐÐÏàÓ¦µÄÐ޸ġ£ |