本文主要是介绍keepalive实现mysql主从自动切换,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!
环境说明
mysql master端192.168.56.201
mysql slave端 192.168.56.211
虚拟IP地址 192.168.56.200
1.安装keepalived
下载地址:
http://www.keepalived.org/software/keepalived-1.1.15.tar.gz
在master和slave节点分别解压缩后执行./config&&make&&make install
[root@mysql1-slave keepalived-1.2.19]# ./configurechecking for gcc... gccchecking whether the C compiler works... yeschecking for C compiler default output file name... a.outchecking for suffix of executables...checking whether we are cross compiling... nochecking for suffix of object files... ochecking whether we are using the GNU C compiler... yeschecking whether gcc accepts -g... yeschecking for gcc option to accept ISO C89... none neededchecking for a BSD-compatible install... /usr/bin/install -cchecking for strip... stripchecking how to run the C preprocessor... gcc -Echecking for grep that handles long lines and -e... /bin/grepchecking for egrep... /bin/grep -Echecking for ANSI C header files... yeschecking for sys/wait.h that is POSIX.1 compatible... yeschecking for sys/types.h... yeschecking for sys/stat.h... yeschecking for stdlib.h... yeschecking for string.h... yeschecking for memory.h... yeschecking for strings.h... yeschecking for inttypes.h... yeschecking for stdint.h... yeschecking for unistd.h... yeschecking fcntl.h usability... yeschecking fcntl.h presence... yeschecking for fcntl.h... yeschecking syslog.h usability... yeschecking syslog.h presence... yeschecking for syslog.h... yeschecking for unistd.h... (cached) yeschecking sys/ioctl.h usability... yeschecking sys/ioctl.h presence... yeschecking for sys/ioctl.h... yeschecking sys/time.h usability... yeschecking sys/time.h presence... yeschecking for sys/time.h... yeschecking openssl/ssl.h usability... yeschecking openssl/ssl.h presence... yeschecking for openssl/ssl.h... yeschecking openssl/md5.h usability... yeschecking openssl/md5.h presence... yeschecking for openssl/md5.h... yeschecking openssl/err.h usability... yeschecking openssl/err.h presence... yeschecking for openssl/err.h... yeschecking whether ETHERTYPE_IPV6 is declared... yeschecking for crypt in -lcrypt... yeschecking for MD5_Init in -lcrypto... yeschecking for SSL_CTX_new in -lssl... yeschecking for nl_socket_alloc in -lnl-3... nochecking for nl_socket_modify_cb in -lnl... yeschecking for kernel version... 2.6.32checking for IPVS syncd support... yeschecking for kernel macvlan support... yeschecking whether SO_MARK is declared... yeschecking for an ANSI C-conforming const... yeschecking for pid_t... yeschecking whether time.h and sys/time.h may both be included... yeschecking whether gcc needs -traditional... nochecking for working memcmp... yeschecking return type of signal handlers... voidchecking for gettimeofday... yeschecking for select... yeschecking for socket... yeschecking for strerror... yeschecking for strtol... yeschecking for uname... yesconfigure: creating ./config.statusconfig.status: creating Makefileconfig.status: creating genhash/Makefileconfig.status: creating keepalived/core/Makefileconfig.status: creating lib/config.hconfig.status: creating keepalived.specconfig.status: creating keepalived/Makefileconfig.status: creating lib/Makefileconfig.status: creating keepalived/vrrp/Makefileconfig.status: creating keepalived/check/Makefileconfig.status: creating keepalived/libipvs-2.6/MakefileKeepalived configuration------------------------Keepalived version : 1.2.19Compiler : gccCompiler flags : -g -O2 -DFALLBACK_LIBNL1Extra Lib : -lssl -lcrypto -lcrypt -lnlUse IPVS Framework : YesIPVS sync daemon support : YesIPVS use libnl : Yesfwmark socket support : YesUse VRRP Framework : YesUse VRRP VMAC : YesSNMP support : NoSHA1 support : NoUse Debug flags : No[root@mysql1-slave keepalived-1.2.19]# makemake -C lib || exit 1;make[1]: Entering directory `/root/keepalived-1.2.19/lib'gcc -I. -g -O2 -DFALLBACK_LIBNL1 -I/usr/src/linux/include -I/usr/src/linux/include -Wall -Wunused -Wstrict-prototypes -D_WITHOUT_SNMP_ -c memory.cgcc -I. -g -O2 -DFALLBACK_LIBNL1 -I/usr/src/linux/include -I/usr/src/linux/include -Wall -Wunused -Wstrict-prototypes -D_WITHOUT_SNMP_ -c utils.cgcc -I. -g -O2 -DFALLBACK_LIBNL1 -I/usr/src/linux/include -I/usr/src/linux/include -Wall -Wunused -Wstrict-prototypes -D_WITHOUT_SNMP_ -c notify.cgcc -I. -g -O2 -DFALLBACK_LIBNL1 -I/usr/src/linux/include -I/usr/src/linux/include -Wall -Wunused -Wstrict-prototypes -D_WITHOUT_SNMP_ -c timer.cgcc -I. -g -O2 -DFALLBACK_LIBNL1 -I/usr/src/linux/include -I/usr/src/linux/include -Wall -Wunused -Wstrict-prototypes -D_WITHOUT_SNMP_ -c scheduler.cgcc -I. -g -O2 -DFALLBACK_LIBNL1 -I/usr/src/linux/include -I/usr/src/linux/include -Wall -Wunused -Wstrict-prototypes -D_WITHOUT_SNMP_ -c vector.cgcc -I. -g -O2 -DFALLBACK_LIBNL1 -I/usr/src/linux/include -I/usr/src/linux/include -Wall -Wunused -Wstrict-prototypes -D_WITHOUT_SNMP_ -c list.cgcc -I. -g -O2 -DFALLBACK_LIBNL1 -I/usr/src/linux/include -I/usr/src/linux/include -Wall -Wunused -Wstrict-prototypes -D_WITHOUT_SNMP_ -c html.cgcc -I. -g -O2 -DFALLBACK_LIBNL1 -I/usr/src/linux/include -I/usr/src/linux/include -Wall -Wunused -Wstrict-prototypes -D_WITHOUT_SNMP_ -c parser.cgcc -I. -g -O2 -DFALLBACK_LIBNL1 -I/usr/src/linux/include -I/usr/src/linux/include -Wall -Wunused -Wstrict-prototypes -D_WITHOUT_SNMP_ -c signals.cgcc -I. -g -O2 -DFALLBACK_LIBNL1 -I/usr/src/linux/include -I/usr/src/linux/include -Wall -Wunused -Wstrict-prototypes -D_WITHOUT_SNMP_ -c logger.cmake[1]: Leaving directory `/root/keepalived-1.2.19/lib'make -C keepalivedmake[1]: Entering directory `/root/keepalived-1.2.19/keepalived'make[2]: Entering directory `/root/keepalived-1.2.19/keepalived/core'gcc -I../include -I../../lib -g -O2 -DFALLBACK_LIBNL1 -I/usr/src/linux/include -I/usr/src/linux/include -Wall -Wunused -Wstrict-prototypes -D_KRNL_2_6_ -D_WITH_LVS_ -D_WITH_VRRP_ -D_WITHOUT_SNMP_ -D_WITH_SO_MARK_ -c main.cgcc -I../include -I../../lib -g -O2 -DFALLBACK_LIBNL1 -I/usr/src/linux/include -I/usr/src/linux/include -Wall -Wunused -Wstrict-prototypes -D_KRNL_2_6_ -D_WITH_LVS_ -D_WITH_VRRP_ -D_WITHOUT_SNMP_ -D_WITH_SO_MARK_ -c daemon.cgcc -I../include -I../../lib -g -O2 -DFALLBACK_LIBNL1 -I/usr/src/linux/include -I/usr/src/linux/include -Wall -Wunused -Wstrict-prototypes -D_KRNL_2_6_ -D_WITH_LVS_ -D_WITH_VRRP_ -D_WITHOUT_SNMP_ -D_WITH_SO_MARK_ -c pidfile.cgcc -I../include -I../../lib -g -O2 -DFALLBACK_LIBNL1 -I/usr/src/linux/include -I/usr/src/linux/include -Wall -Wunused -Wstrict-prototypes -D_KRNL_2_6_ -D_WITH_LVS_ -D_WITH_VRRP_ -D_WITHOUT_SNMP_ -D_WITH_SO_MARK_ -c layer4.cgcc -I../include -I../../lib -g -O2 -DFALLBACK_LIBNL1 -I/usr/src/linux/include -I/usr/src/linux/include -Wall -Wunused -Wstrict-prototypes -D_KRNL_2_6_ -D_WITH_LVS_ -D_WITH_VRRP_ -D_WITHOUT_SNMP_ -D_WITH_SO_MARK_ -c smtp.cgcc -I../include -I../../lib -g -O2 -DFALLBACK_LIBNL1 -I/usr/src/linux/include -I/usr/src/linux/include -Wall -Wunused -Wstrict-prototypes -D_KRNL_2_6_ -D_WITH_LVS_ -D_WITH_VRRP_ -D_WITHOUT_SNMP_ -D_WITH_SO_MARK_ -c global_data.cgcc -I../include -I../../lib -g -O2 -DFALLBACK_LIBNL1 -I/usr/src/linux/include -I/usr/src/linux/include -Wall -Wunused -Wstrict-prototypes -D_KRNL_2_6_ -D_WITH_LVS_ -D_WITH_VRRP_ -D_WITHOUT_SNMP_ -D_WITH_SO_MARK_ -c global_parser.cmake[2]: Leaving directory `/root/keepalived-1.2.19/keepalived/core'make[2]: Entering directory `/root/keepalived-1.2.19/keepalived/check'gcc -I../include -I../../lib -g -O2 -DFALLBACK_LIBNL1 -I/usr/src/linux/include -I/usr/src/linux/include -Wall -Wunused -Wstrict-prototypes -D_KRNL_2_6_ -D_WITH_LVS_ -D_HAVE_IPVS_SYNCD_ -D_WITH_VRRP_ -D_WITHOUT_SNMP_ -D_WITH_SO_MARK_ -c check_daemon.cgcc -I../include -I../../lib -g -O2 -DFALLBACK_LIBNL1 -I/usr/src/linux/include -I/usr/src/linux/include -Wall -Wunused -Wstrict-prototypes -D_KRNL_2_6_ -D_WITH_LVS_ -D_HAVE_IPVS_SYNCD_ -D_WITH_VRRP_ -D_WITHOUT_SNMP_ -D_WITH_SO_MARK_ -c check_data.cgcc -I../include -I../../lib -g -O2 -DFALLBACK_LIBNL1 -I/usr/src/linux/include -I/usr/src/linux/include -Wall -Wunused -Wstrict-prototypes -D_KRNL_2_6_ -D_WITH_LVS_ -D_HAVE_IPVS_SYNCD_ -D_WITH_VRRP_ -D_WITHOUT_SNMP_ -D_WITH_SO_MARK_ -c check_parser.cgcc -I../include -I../../lib -g -O2 -DFALLBACK_LIBNL1 -I/usr/src/linux/include -I/usr/src/linux/include -Wall -Wunused -Wstrict-prototypes -D_KRNL_2_6_ -D_WITH_LVS_ -D_HAVE_IPVS_SYNCD_ -D_WITH_VRRP_ -D_WITHOUT_SNMP_ -D_WITH_SO_MARK_ -c check_api.cgcc -I../include -I../../lib -g -O2 -DFALLBACK_LIBNL1 -I/usr/src/linux/include -I/usr/src/linux/include -Wall -Wunused -Wstrict-prototypes -D_KRNL_2_6_ -D_WITH_LVS_ -D_HAVE_IPVS_SYNCD_ -D_WITH_VRRP_ -D_WITHOUT_SNMP_ -D_WITH_SO_MARK_ -c check_tcp.cgcc -I../include -I../../lib -g -O2 -DFALLBACK_LIBNL1 -I/usr/src/linux/include -I/usr/src/linux/include -Wall -Wunused -Wstrict-prototypes -D_KRNL_2_6_ -D_WITH_LVS_ -D_HAVE_IPVS_SYNCD_ -D_WITH_VRRP_ -D_WITHOUT_SNMP_ -D_WITH_SO_MARK_ -c check_http.cgcc -I../include -I../../lib -g -O2 -DFALLBACK_LIBNL1 -I/usr/src/linux/include -I/usr/src/linux/include -Wall -Wunused -Wstrict-prototypes -D_KRNL_2_6_ -D_WITH_LVS_ -D_HAVE_IPVS_SYNCD_ -D_WITH_VRRP_ -D_WITHOUT_SNMP_ -D_WITH_SO_MARK_ -c check_ssl.cgcc -I../include -I../../lib -g -O2 -DFALLBACK_LIBNL1 -I/usr/src/linux/include -I/usr/src/linux/include -Wall -Wunused -Wstrict-prototypes -D_KRNL_2_6_ -D_WITH_LVS_ -D_HAVE_IPVS_SYNCD_ -D_WITH_VRRP_ -D_WITHOUT_SNMP_ -D_WITH_SO_MARK_ -c check_smtp.cgcc -I../include -I../../lib -g -O2 -DFALLBACK_LIBNL1 -I/usr/src/linux/include -I/usr/src/linux/include -Wall -Wunused -Wstrict-prototypes -D_KRNL_2_6_ -D_WITH_LVS_ -D_HAVE_IPVS_SYNCD_ -D_WITH_VRRP_ -D_WITHOUT_SNMP_ -D_WITH_SO_MARK_ -c check_misc.cgcc -I../include -I../../lib -g -O2 -DFALLBACK_LIBNL1 -I/usr/src/linux/include -I/usr/src/linux/include -Wall -Wunused -Wstrict-prototypes -D_KRNL_2_6_ -D_WITH_LVS_ -D_HAVE_IPVS_SYNCD_ -D_WITH_VRRP_ -D_WITHOUT_SNMP_ -D_WITH_SO_MARK_ -c ipwrapper.cgcc -I../include -I../../lib -g -O2 -DFALLBACK_LIBNL1 -I/usr/src/linux/include -I/usr/src/linux/include -Wall -Wunused -Wstrict-prototypes -D_KRNL_2_6_ -D_WITH_LVS_ -D_HAVE_IPVS_SYNCD_ -D_WITH_VRRP_ -D_WITHOUT_SNMP_ -D_WITH_SO_MARK_ -c ipvswrapper.cmake[2]: Leaving directory `/root/keepalived-1.2.19/keepalived/check'make[2]: Entering directory `/root/keepalived-1.2.19/keepalived/vrrp'gcc -I../include -I../../lib -g -O2 -DFALLBACK_LIBNL1 -I/usr/src/linux/include -I/usr/src/linux/include -Wall -Wunused -Wstrict-prototypes -D_KRNL_2_6_ -D_WITH_LVS_ -D_HAVE_IPVS_SYNCD_ -D_HAVE_VRRP_VMAC_ -D_WITHOUT_SNMP_ -c vrrp_daemon.cgcc -I../include -I../../lib -g -O2 -DFALLBACK_LIBNL1 -I/usr/src/linux/include -I/usr/src/linux/include -Wall -Wunused -Wstrict-prototypes -D_KRNL_2_6_ -D_WITH_LVS_ -D_HAVE_IPVS_SYNCD_ -D_HAVE_VRRP_VMAC_ -D_WITHOUT_SNMP_ -c vrrp_print.cgcc -I../include -I../../lib -g -O2 -DFALLBACK_LIBNL1 -I/usr/src/linux/include -I/usr/src/linux/include -Wall -Wunused -Wstrict-prototypes -D_KRNL_2_6_ -D_WITH_LVS_ -D_HAVE_IPVS_SYNCD_ -D_HAVE_VRRP_VMAC_ -D_WITHOUT_SNMP_ -c vrrp_data.cgcc -I../include -I../../lib -g -O2 -DFALLBACK_LIBNL1 -I/usr/src/linux/include -I/usr/src/linux/include -Wall -Wunused -Wstrict-prototypes -D_KRNL_2_6_ -D_WITH_LVS_ -D_HAVE_IPVS_SYNCD_ -D_HAVE_VRRP_VMAC_ -D_WITHOUT_SNMP_ -c vrrp_parser.cgcc -I../include -I../../lib -g -O2 -DFALLBACK_LIBNL1 -I/usr/src/linux/include -I/usr/src/linux/include -Wall -Wunused -Wstrict-prototypes -D_KRNL_2_6_ -D_WITH_LVS_ -D_HAVE_IPVS_SYNCD_ -D_HAVE_VRRP_VMAC_ -D_WITHOUT_SNMP_ -c vrrp.cgcc -I../include -I../../lib -g -O2 -DFALLBACK_LIBNL1 -I/usr/src/linux/include -I/usr/src/linux/include -Wall -Wunused -Wstrict-prototypes -D_KRNL_2_6_ -D_WITH_LVS_ -D_HAVE_IPVS_SYNCD_ -D_HAVE_VRRP_VMAC_ -D_WITHOUT_SNMP_ -c vrrp_notify.cgcc -I../include -I../../lib -g -O2 -DFALLBACK_LIBNL1 -I/usr/src/linux/include -I/usr/src/linux/include -Wall -Wunused -Wstrict-prototypes -D_KRNL_2_6_ -D_WITH_LVS_ -D_HAVE_IPVS_SYNCD_ -D_HAVE_VRRP_VMAC_ -D_WITHOUT_SNMP_ -c vrrp_scheduler.cgcc -I../include -I../../lib -g -O2 -DFALLBACK_LIBNL1 -I/usr/src/linux/include -I/usr/src/linux/include -Wall -Wunused -Wstrict-prototypes -D_KRNL_2_6_ -D_WITH_LVS_ -D_HAVE_IPVS_SYNCD_ -D_HAVE_VRRP_VMAC_ -D_WITHOUT_SNMP_ -c vrrp_sync.cgcc -I../include -I../../lib -g -O2 -DFALLBACK_LIBNL1 -I/usr/src/linux/include -I/usr/src/linux/include -Wall -Wunused -Wstrict-prototypes -D_KRNL_2_6_ -D_WITH_LVS_ -D_HAVE_IPVS_SYNCD_ -D_HAVE_VRRP_VMAC_ -D_WITHOUT_SNMP_ -c vrrp_index.cgcc -I../include -I../../lib -g -O2 -DFALLBACK_LIBNL1 -I/usr/src/linux/include -I/usr/src/linux/include -Wall -Wunused -Wstrict-prototypes -D_KRNL_2_6_ -D_WITH_LVS_ -D_HAVE_IPVS_SYNCD_ -D_HAVE_VRRP_VMAC_ -D_WITHOUT_SNMP_ -c vrrp_netlink.cgcc -I../include -I../../lib -g -O2 -DFALLBACK_LIBNL1 -I/usr/src/linux/include -I/usr/src/linux/include -Wall -Wunused -Wstrict-prototypes -D_KRNL_2_6_ -D_WITH_LVS_ -D_HAVE_IPVS_SYNCD_ -D_HAVE_VRRP_VMAC_ -D_WITHOUT_SNMP_ -c vrrp_arp.cgcc -I../include -I../../lib -g -O2 -DFALLBACK_LIBNL1 -I/usr/src/linux/include -I/usr/src/linux/include -Wall -Wunused -Wstrict-prototypes -D_KRNL_2_6_ -D_WITH_LVS_ -D_HAVE_IPVS_SYNCD_ -D_HAVE_VRRP_VMAC_ -D_WITHOUT_SNMP_ -c vrrp_if.cgcc -I../include -I../../lib -g -O2 -DFALLBACK_LIBNL1 -I/usr/src/linux/include -I/usr/src/linux/include -Wall -Wunused -Wstrict-prototypes -D_KRNL_2_6_ -D_WITH_LVS_ -D_HAVE_IPVS_SYNCD_ -D_HAVE_VRRP_VMAC_ -D_WITHOUT_SNMP_ -c vrrp_track.cgcc -I../include -I../../lib -g -O2 -DFALLBACK_LIBNL1 -I/usr/src/linux/include -I/usr/src/linux/include -Wall -Wunused -Wstrict-prototypes -D_KRNL_2_6_ -D_WITH_LVS_ -D_HAVE_IPVS_SYNCD_ -D_HAVE_VRRP_VMAC_ -D_WITHOUT_SNMP_ -c vrrp_ipaddress.cgcc -I../include -I../../lib -g -O2 -DFALLBACK_LIBNL1 -I/usr/src/linux/include -I/usr/src/linux/include -Wall -Wunused -Wstrict-prototypes -D_KRNL_2_6_ -D_WITH_LVS_ -D_HAVE_IPVS_SYNCD_ -D_HAVE_VRRP_VMAC_ -D_WITHOUT_SNMP_ -c vrrp_iproute.cgcc -I../include -I../../lib -g -O2 -DFALLBACK_LIBNL1 -I/usr/src/linux/include -I/usr/src/linux/include -Wall -Wunused -Wstrict-prototypes -D_KRNL_2_6_ -D_WITH_LVS_ -D_HAVE_IPVS_SYNCD_ -D_HAVE_VRRP_VMAC_ -D_WITHOUT_SNMP_ -c vrrp_ipsecah.cgcc -I../include -I../../lib -g -O2 -DFALLBACK_LIBNL1 -I/usr/src/linux/include -I/usr/src/linux/include -Wall -Wunused -Wstrict-prototypes -D_KRNL_2_6_ -D_WITH_LVS_ -D_HAVE_IPVS_SYNCD_ -D_HAVE_VRRP_VMAC_ -D_WITHOUT_SNMP_ -c vrrp_ndisc.cgcc -I../include -I../../lib -g -O2 -DFALLBACK_LIBNL1 -I/usr/src/linux/include -I/usr/src/linux/include -Wall -Wunused -Wstrict-prototypes -D_KRNL_2_6_ -D_WITH_LVS_ -D_HAVE_IPVS_SYNCD_ -D_HAVE_VRRP_VMAC_ -D_WITHOUT_SNMP_ -c vrrp_vmac.cmake[2]: Leaving directory `/root/keepalived-1.2.19/keepalived/vrrp'make[2]: Entering directory `/root/keepalived-1.2.19/keepalived/libipvs-2.6'gcc -g -O2 -DFALLBACK_LIBNL1 -I/usr/src/linux/include -I/usr/src/linux/include -DLIBIPVS_USE_NL -Wall -Wunused -c -o libipvs.o libipvs.cgcc -g -O2 -DFALLBACK_LIBNL1 -I/usr/src/linux/include -I/usr/src/linux/include -DLIBIPVS_USE_NL -Wall -Wunused -c -o ip_vs_nl_policy.o ip_vs_nl_policy.car rv libipvs.a libipvs.o ip_vs_nl_policy.oar: creating libipvs.aa - libipvs.oa - ip_vs_nl_policy.orm libipvs.o ip_vs_nl_policy.omake[2]: Leaving directory `/root/keepalived-1.2.19/keepalived/libipvs-2.6'Building ../bin/keepalivedstrip ../bin/keepalivedMake completemake[1]: Leaving directory `/root/keepalived-1.2.19/keepalived'make -C genhashmake[1]: Entering directory `/root/keepalived-1.2.19/genhash'gcc -I../lib -g -O2 -DFALLBACK_LIBNL1 -D_WITH_SO_MARK_ -I/usr/src/linux/include -I/usr/src/linux/include -Wall -Wunused -Wstrict-prototypes -c -o main.o main.cgcc -I../lib -g -O2 -DFALLBACK_LIBNL1 -D_WITH_SO_MARK_ -I/usr/src/linux/include -I/usr/src/linux/include -Wall -Wunused -Wstrict-prototypes -c -o sock.o sock.cgcc -I../lib -g -O2 -DFALLBACK_LIBNL1 -D_WITH_SO_MARK_ -I/usr/src/linux/include -I/usr/src/linux/include -Wall -Wunused -Wstrict-prototypes -c -o layer4.o layer4.cgcc -I../lib -g -O2 -DFALLBACK_LIBNL1 -D_WITH_SO_MARK_ -I/usr/src/linux/include -I/usr/src/linux/include -Wall -Wunused -Wstrict-prototypes -c -o http.o http.cgcc -I../lib -g -O2 -DFALLBACK_LIBNL1 -D_WITH_SO_MARK_ -I/usr/src/linux/include -I/usr/src/linux/include -Wall -Wunused -Wstrict-prototypes -c -o ssl.o ssl.cBuilding ../bin/genhashstrip ../bin/genhashMake completemake[1]: Leaving directory `/root/keepalived-1.2.19/genhash'Make complete[root@mysql1-slave keepalived-1.2.19]#[root@mysql1-slave keepalived-1.2.19]# make installmake -C keepalived installmake[1]: Entering directory `/root/keepalived-1.2.19/keepalived'install -d /usr/local/sbininstall -m 700 ../bin/keepalived /usr/local/sbin/install -d /usr/local/etc/rc.d/init.dinstall -m 755 etc/init.d/keepalived.init /usr/local/etc/rc.d/init.d/keepalivedinstall -d /usr/local/etc/sysconfiginstall -m 644 etc/init.d/keepalived.sysconfig /usr/local/etc/sysconfig/keepalivedinstall -d /usr/local/etc/keepalived/samplesinstall -m 644 etc/keepalived/keepalived.conf /usr/local/etc/keepalived/install -m 644 ../doc/samples/* /usr/local/etc/keepalived/samples/install -d /usr/local/share/man/man5install -d /usr/local/share/man/man8install -m 644 ../doc/man/man5/keepalived.conf.5 /usr/local/share/man/man5install -m 644 ../doc/man/man8/keepalived.8 /usr/local/share/man/man8make[1]: Leaving directory `/root/keepalived-1.2.19/keepalived'make -C genhash installmake[1]: Entering directory `/root/keepalived-1.2.19/genhash'install -d /usr/local/bininstall -m 755 ../bin/genhash /usr/local/bin/install -d /usr/local/share/man/man1install -m 644 ../doc/man/man1/genhash.1 /usr/local/share/man/man1make[1]: Leaving directory `/root/keepalived-1.2.19/genhash'
安装完成之后默认的keepalived可执行文件放在/usr/local/sbin下,默认的配置文件存放在/usr/local/etc/下。
2.将keepalived添加到服务中,并且设置为自动启动;拷贝配置文件到/etc/keepalived中
[root@mysql1-slave init.d]# cp /usr/local/etc/rc.d/init.d/keepalived /etc/rc.d/init.d/[root@mysql1-slave init.d]# cp /usr/local/etc/sysconfig/keepalived /etc/sysconfig/[root@mysql1-slave init.d]# mkdir /etc/keepalived[root@mysql1-slave init.d]# cp /usr/local/etc/keepalived/keepalived.conf /etc/keepalived/[root@mysql1-slave init.d]# cp /usr/local/sbin/keepalived /usr/sbin/[root@mysql1-slave init.d]# chkconfig --add keepalived[root@mysql1-slave init.d]# chkconfig --level 345 keepalived on
3.配置master端keepalived
在/etc/keepalived/下配置keepalived.conf。
master会执行vvr_script check_run来检查mysql进程是否正常
Keepalived在转换状态时会依照状态来呼叫:
当进入Master状态时会呼叫notify_master
当进入Backup状态时会呼叫notify_backup
当发现异常情况时进入Fault状态呼叫notify_fault
当Keepalived程序终止时则呼叫notify_stop
[root@mysql1 keepalived]# cat keepalived.confglobal_defs {router_id KeepAlive_Mysql}vrrp_script check_run {script "/root/shell/mysql_check.sh"interval 10}vrrp_sync_group VG1 {group {VI_1}}vrrp_instance VI_1 {state BACKUP !开始状态都是BACKUP防止vip抢占漂移,只有两张状态MASTER/BACKUP必须是大些interface eth0virtual_router_id 51priority 100 !优先级advert_int 1nopreempt !不抢占,在优先级高的上设置即可authentication { !认证两边必须一致auth_type PASSauth_pass 1111}track_script { !执行上面定义check mysql脚本check_run}notify_master /root/shell/master.shnotify_backup /root/shell/backup.shnotify_stop /root/shell/stop.shvirtual_ipaddress { !虚拟ip地址,会在mater和backup中间漂移192.168.56.200}}
其中有4个shell脚本:
mysql_check.sh脚本检查mysql是否正常,如果mysql不健康则停止master端的keepalived:
[root@mysql1 shell]# cat mysql_check.sh#!/bin/bash. /root/.bash_profilecount=1while truedomysql -e "show status;" > /dev/null 2>&1i=$?ps aux | grep mysqld | grep -v grep > /dev/null 2>&1j=$?if [ $i = 0 ] && [ $j = 0 ]thenexit 0elseif [ $i = 1 ] && [ $j = 0 ]thenexit 0elseif [ $count -gt 5 ]thenbreakfilet count++continuefifidone/etc/init.d/keepalived stop
master.sh脚本表示状态改变为master后需要执行的脚本,先判断同步复制是否执行完成,如果未执行完成等待1分钟后强制停止同步复制,并且更改业务帐号admin的密码和权限,并且记录切换后的日志和pos:
[root@mysql1 shell]# cat master.sh#!/bin/bash. /root/.bash_profileMaster_Log_File=$(mysql -e "show slave status\G" | grep -w Master_Log_File | awk -F": " '{print $2}')Relay_Master_Log_File=$(mysql -e "show slave status\G" | grep -w Relay_Master_Log_File | awk -F": " '{print $2}')Read_Master_Log_Pos=$(mysql -e "show slave status\G" | grep -w Read_Master_Log_Pos | awk -F": " '{print $2}')Exec_Master_Log_Pos=$(mysql -e "show slave status\G" | grep -w Exec_Master_Log_Pos | awk -F": " '{print $2}')i=1while truedoif [ $Master_Log_File = $Relay_Master_Log_File ] && [ $Read_Master_Log_Pos -eq $Exec_Master_Log_Pos ]thenecho "ok"breakelsesleep 1if [ $i -gt 60 ]thenbreakficontinuelet i++fidonemysql -e "stop slave;"mysql -e "set global innodb_support_xa=0;"mysql -e "set global sync_binlog=0;"mysql -e "set global innodb_flush_log_at_trx_commit=0;"mysql -e "flush logs;GRANT ALL PRIVILEGES ON *.* TO 'root'@'%' IDENTIFIED BY 'root';flush privileges;"mysql -e "show master status;" > /tmp/master_status_$(date "+%y%m%d-%H%M").txt
backup.sh表示状态改变为backup后执行的脚本:
#!/bin/bash. /root/.bash_profilemysql -e "GRANT ALL PRIVILEGES ON *.* TO 'root'@'%' IDENTIFIED BY 'root';flush privileges;"mysql -e "set global event_scheduler=0;"mysql -e "set global innodb_support_xa=0;"mysql -e "set global sync_binlog=0;"mysql -e "set global innodb_flush_log_at_trx_commit=0;"
stop.sh表示keepalived停止后执行的脚本,首先更改admin密码,然后设置参数保证数据不丢失,最后查看是否还有写操作,最后1分钟后退出:
[root@mysql1 shell]# cat stop.sh#!/bin/bash. /root/.bash_profilemysql -e "GRANT ALL PRIVILEGES ON *.* TO 'root'@'%' IDENTIFIED BY 'root';flush privileges;"mysql -e "set global innodb_support_xa=1;"mysql -e "set global sync_binlog=1;"mysql -e "set global innodb_flush_log_at_trx_commit=1;"M_File1=$(mysql -e "show master status\G" | awk -F': ' '/File/{print $2}')M_Position1=$(mysql -e "show master status\G" | awk -F': ' '/Position/{print $2}')sleep 1M_File2=$(mysql -e "show master status\G" | awk -F': ' '/File/{print $2}')M_Position2=$(mysql -e "show master status\G" | awk -F': ' '/Position/{print $2}')i=1while truedoif [ $M_File1 = $M_File1 ] && [ $M_Position1 -eq $M_Position2 ]thenecho "ok"breakelsesleep 1if [ $i -gt 60 ]thenbreakficontinuelet i++fidone
4.配置slave端的keepalived.conf
[root@mysql1-slave shell]# cat /etc/keepalived/keepalived.confglobal_defs {router_id KeepAlive_Mysql}vrrp_script check_run {script "/root/shell/mysql_check.sh"interval 10}vrrp_sync_group VG1 {group {VI_1}}vrrp_instance VI_1 {state BACKUPinterface eth0virtual_router_id 51priority 90advert_int 1authentication {auth_type PASSauth_pass 1111}track_script {check_run}notify_master /root/shell/master.shnotify_backup /root/shell/backup.shnotify_stop /root/shell/stop.shvirtual_ipaddress {192.168.56.200}}
5.keepalived接管和调用脚本流程
一、停止master的mysql
master检测到mysql停止会停止keepalived,然后调用执行stop.sh
slave端会切换为master端,然后调用master.sh
二、启动原master的mysql和keepalived
此时原来master端并不会变成master,也就是说不会自动漂移,此时会调用backup.sh
三、关闭slave端的keepalived
原master会再变成master端,此时调用master.sh
停止slave端,所以调用stop.sh
四、打开slave端的keepalived
slave端再次变成backup,所以会再次执行backup.sh
6.管理keepalived
启动停止service keepalived stop/start/restart
日志在系统日志中/var/log/messages,里面有vip的漂移说明和mater-backup的切换记录
Jan 11 00:50:13 mysql1 Keepalived_vrrp[6862]: VRRP_Instance(VI_1) Transition to MASTER STATEJan 11 00:50:13 mysql1 Keepalived_vrrp[6862]: VRRP_Group(VG1) Syncing instances to MASTER stateJan 11 00:50:14 mysql1 Keepalived_vrrp[6862]: VRRP_Instance(VI_1) Entering MASTER STATEJan 11 00:50:14 mysql1 Keepalived_vrrp[6862]: VRRP_Instance(VI_1) setting protocol VIPs.Jan 11 00:50:14 mysql1 Keepalived_vrrp[6862]: VRRP_Instance(VI_1) Sending gratuitous ARPs on eth0 for 192.168.56.200Jan 11 00:50:14 mysql1 Keepalived_healthcheckers[6861]: Netlink reflector reports IP 192.168.56.200 addedJan 11 00:50:19 mysql1 Keepalived_vrrp[6862]: VRRP_Instance(VI_1) Sending gratuitous ARPs on eth0 for 192.168.56.200
通过 ip a可以查看keepalived所持有的虚拟ip地址!
这篇关于keepalive实现mysql主从自动切换的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!