`
greenmoon
  • 浏览: 48622 次
  • 性别: Icon_minigender_1
  • 来自: 北京
社区版块
存档分类
最新评论

使用keepalive+lvs实现mysql master-master自动故障转移

 
阅读更多

1.准备机器,需要至少准备2台机器
3.配置mysql双机master-master实现,不再赘述,参见另一篇mysql mmm的博文
2.安装lvs和keepalived和配置keepalived,参见http://www.keepalived.org/sery-lvs-cluster.pdf,注意lvs的最新版本是1.26,对应的是linux2.6.28以上内核版本,版本需要一致,
否则编译不通过,查看内核版本命令: uname -r
3. 操作说明:
1). keepalived启动后会自动绑定虚ip到物理网卡上,比如eth0。如果主机不同时是mysql主机不需要realserver脚本。
2). mysql主机,即不需要keepalived服务的主机,只需要安装lvs模块,并且需要配置realserver脚本,并且需要启动此脚本。
realserver里配置的虚ip月keepalived里配置的虚ip保持一致,虚ip一定要被绑定到lo上。这是由lvs/dr模式的处理方式决定的。(使用VS/DR方法:调度器和服务 器组都必须在物理上有一个网卡通过不分断的局域网相连,如通过交换机或者高速的HUB相连。VIP地址为调度器和服务器组共享,调度器配置的VIP地址是 对外可见的,用于接收虚拟服务的请求报文;所有的服务器把VIP地址配置在各自的Non-ARP网络设备上,它对外面是不可见的,只是用于处理目标地址为 VIP的网络请求。在VS/DR中,调度器根据各个服务器的负载情况,动态地选择一台服务器,不修改也不封装IP报文,而是将数据帧的MAC地址改为选出 服务器的MAC地址,再将修改后的数据帧在与服务器组的局域网上发送。因为数据帧的MAC地址是选出的服务器,所以服务器肯定可以收到这个数据帧,从中可 以获得该IP报文。当服务器发现报文的目标地址VIP是在本地的网络设备上,服务器处理这个报文,然后根据路由表将响应报文直接返回给客户。
3).keepalived需要安装1.2.1版本,否则sorry server的切换会有问题
4).自动切换原理是:keepalived realserver列表只配置一台mysql主机,sorry server配置另一台主机,这样在realserver正常情况下,sorry server不会被切换,
只充当备机,只有realserver出故障时才切换到sorry server,keepalived的sorry server天生具有这个特性。
5). iptables防火墙配置,keepalived的master与backup之间需要保证心跳,这样才能保证其相互切换,如果iptables不进行特殊配置,则不会正常切换。配置如下:
-I INPUT -i eth0 -d 224.0.0.0/8 -j ACCEPT
-A INPUT -p 112 -i eth0 -j ACCEPT
-A OUTPUT -p 112 -o eth0 -j ACCEPT
4. 具体操作:

1) keepalived master主机和mysql master主机:10.3.1.24
keepalived backup主机: 10.3.1.18
mysql slave 主机:10.3.1.23

虚ip:10.3.1.56

2) keepalived master(10.3.1.24)配置:

global_defs {
lvs_id LVS_HA_MASTER
}
vrrp_sync_group DBGROUP {
group {
VI_MYSQL
}
}
vrrp_instance VI_MYSQL {
state MASTER
interface eth0
lvs_sync_daemon_inteface eth0
virtual_router_id 59
priority 200
advert_int 1
authentication {
auth_type PASS
auth_pass 1111
}
virtual_ipaddress {
10.3.1.56
}
}

virtual_server 10.3.1.56 3306 {
delay_loop 3
lb_algo wlc
lb_kind DR
# persistence_timeout 20
protocol TCP

sorry_server 10.3.1.23 3306

real_server 127.0.0.1 3306 {
weight 100
TCP_CHECK {
connect_timeout 3
nb_get_retry 3
delay_before_retry 3
connect_port 3306
}
}
}

3) mysql master realserver(10.3.1.24)脚本:

#!/bin/bash
#desciription : start realserver
MYSQLHA=10.3.1.56
/etc/rc.d/init.d/functions
case "$1" in
start)
echo " start LVS of REALServer"
/sbin/ifconfig lo:0 $MYSQLHA broadcast $MYSQLHA netmask 255.255.255.255 up
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)
/sbin/ifconfig lo:0 down
echo "close LVS Directorserver"
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}"
exit 1
esac
4) keepalived backup(10.3.1.18)配置:

global_defs {
lvs_id LVS_HA_BACKUP #注意这儿与master不同
}
vrrp_sync_group DBGROUP {
group {
VI_MYSQL
}
}
vrrp_instance VI_MYSQL {
state BACKUP #注意这儿,与master不同
interface eth0
lvs_sync_daemon_inteface eth0
virtual_router_id 59
priority 100 #注意这儿,与master不同
advert_int 1
authentication {
auth_type PASS
auth_pass 1111
}
virtual_ipaddress {
10.3.1.56
}
}

virtual_server 10.3.1.56 3306 {
delay_loop 3
lb_algo wlc
lb_kind DR
# persistence_timeout 20
protocol TCP

sorry_server 10.3.1.23 3306

real_server 10.3.1.24 3306 {
weight 100
TCP_CHECK {
connect_timeout 3
nb_get_retry 3
delay_before_retry 3
connect_port 3306
}
}
}

5) mysql slave realserver(10.3.1.23)脚本:

#!/bin/bash
#desciription : start realserver
MYSQLHA=10.3.1.56
/etc/rc.d/init.d/functions
case "$1" in
start)
echo " start LVS of REALServer"
/sbin/ifconfig lo:0 $MYSQLHA broadcast $MYSQLHA netmask 255.255.255.255 up
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)
/sbin/ifconfig lo:0 down
echo "close LVS Directorserver"
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}"
exit 1
esac

6). 防火墙配置:

vi /etc/sysconfig/iptables

add:
-I INPUT -i eth0 -d 224.0.0.0/8 -j ACCEPT
-A INPUT -p 112 -i eth0 -j ACCEPT
-A OUTPUT -p 112 -o eth0 -j ACCEPT

保存后重启:service iptables restart

7).启动

keepalive master: service keepalived start
mysql master: /usr/local/bin/realserver start

调用ip add 命令会看到:

1: lo: <LOOPBACK,UP,LOWER_UP> mtu 16436 qdisc noqueue
link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00
inet 127.0.0.1/8 scope host lo
inet 10.3.1.56/32 brd 10.3.1.56 scope global lo:0
inet6 ::1/128 scope host
valid_lft forever preferred_lft forever
2: eth0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast qlen 1000
link/ether f4:ce:46:b4:35:40 brd ff:ff:ff:ff:ff:ff
inet 10.3.1.24/8 brd 10.255.255.255 scope global eth0
inet 10.3.1.56/32 scope global eth0
inet6 fe80::f6ce:46ff:feb4:3540/64 scope link
valid_lft forever preferred_lft forever
3: eth1: <BROADCAST,MULTICAST> mtu 1500 qdisc noop qlen 1000
link/ether f4:ce:46:b4:35:44 brd ff:ff:ff:ff:ff:ff
4: sit0: <NOARP> mtu 1480 qdisc noop
link/sit 0.0.0.0 brd 0.0.0.0


keepalived backup启动: service keepalived start

调用ip add 命令会看到:
1: lo: <LOOPBACK,UP,LOWER_UP> mtu 16436 qdisc noqueue
link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00
inet 127.0.0.1/8 scope host lo
inet6 ::1/128 scope host
valid_lft forever preferred_lft forever
2: eth0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast qlen 1000
link/ether f4:ce:46:89:63:98 brd ff:ff:ff:ff:ff:ff
inet 10.3.1.18/8 brd 10.255.255.255 scope global eth0
inet6 fe80::f6ce:46ff:fe89:6398/64 scope link
valid_lft forever preferred_lft forever
3: eth1: <BROADCAST,MULTICAST> mtu 1500 qdisc noop qlen 1000
link/ether f4:ce:46:89:63:9c brd ff:ff:ff:ff:ff:ff
4: sit0: <NOARP> mtu 1480 qdisc noop
link/sit 0.0.0.0 brd 0.0.0.0

注意不会绑定任何ip


msyql slave: /usr/local/bin/realserver start

调用ip add 命令会看到:

1: lo: <LOOPBACK,UP,LOWER_UP> mtu 16436 qdisc noqueue
link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00
inet 127.0.0.1/8 scope host lo
inet 10.3.1.56/32 brd 10.3.1.56 scope global lo:0
inet6 ::1/128 scope host
valid_lft forever preferred_lft forever
2: eth0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast qlen 1000
link/ether f4:ce:46:b4:31:58 brd ff:ff:ff:ff:ff:ff
inet 10.3.1.23/8 brd 10.255.255.255 scope global eth0
inet6 fe80::f6ce:46ff:feb4:3158/64 scope link
valid_lft forever preferred_lft forever
3: eth1: <BROADCAST,MULTICAST> mtu 1500 qdisc noop qlen 1000
link/ether f4:ce:46:b4:31:5c brd ff:ff:ff:ff:ff:ff
4: sit0: <NOARP> mtu 1480 qdisc noop
link/sit 0.0.0.0 brd 0.0.0.0

分享到:
评论

相关推荐

    mysql+lvs+keepalive+mha高可用

    在本教程中,我们将探讨一种基于`mysql`、`lvs`(Linux Virtual Server)、`keepalived`以及`MHA`(Master High Availability)的解决方案,这种方案可以实现VIP(Virtual IP)漂移,有效防止因单点故障导致的服务...

    keepalive+lvs搭建高可用服务器

    linux学习文档之-keepalive+lvs搭建高可用服务器

    HAProxy+Keepalived+LVS实现负载平衡高可用集群最佳实践

    HAProxy+Keepalived+LVS实现负载平衡高可用集群最佳实践

    Keepalive+mysql主主同步.pdf

    Keepalive+mysql主主同步是指在高可用性环境中,使用Keepalive和MySQL主主同步技术来实现数据库的高可用性和负载均衡。下面是相关的知识点: 一、Keepalive简介 Keepalive是一个高可用性解决方案,主要用于实现...

    lvs+keepalived+mha+mysql架构最佳部署手册

    通过MHA实现故障自动切换,LVS和Keepalived保证服务的高可用性和负载均衡能力。 #### 第三部分 安装配置MySQL、MHA服务 本部分详细介绍如何安装配置MySQL、MHA服务。 ##### 3.1 安装MySQL及配置主从 1. **安装...

    centos7-lvs+keepalive部署

    根据提供的部分内容可以看出,本教程旨在演示如何在 CentOS 7 系统上安装配置 LVS(Linux Virtual Server)及 Keepalived 服务,以实现服务器集群的负载均衡与高可用性。首先,需要确保系统已安装必要的工具和库。 ...

    LVS+Keepalive for centos7-可实施文档.docx

    它主要通过 VRRP (Virtual Router Redundancy Protocol) 协议来监控主服务器的状态,并在主服务器发生故障时,自动将备份服务器切换为主服务器。这一过程几乎无缝连接,对外部客户端几乎是透明的。 - **核心功能**...

    LVS-DR+keepalive+ldirectord构建高可用负载均衡群集试验手册

    - 支持故障转移,当检测到某节点故障时,能够迅速将流量重定向到其他健康的节点。 #### 4. 构建高可用负载均衡群集实验步骤详解 - **实验环境**: - **负载均衡器**:LVS-Master和LVS-Slave - **后端服务器**:...

    LVS-NAT安装文档及介质

    2. **监控和故障排查**:定期使用`ipvsadm`命令检查LVS的状态,如连接数、健康检查等,及时发现并解决可能的问题。 3. **日志分析**:配置并查看系统日志,如`/var/log/messages`,有助于诊断潜在问题。 综上,LVS...

    使用keepalived实现对mysql主从复制的主备自动切换.docx

    "使用keepalived实现对mysql主从复制的主备自动切换" 本文主要讲解如何使用keepalived实现对mysql主从复制的主备自动切换。keepalived是一款高可用性解决方案,可以实现虚拟IP的管理和服务监控,在mysql主从复制...

    基于vue2.0构建的在线电影网【film】,webpack+vue+vuex+keepAlive+muse-ui+.zip

    对于有一定基础或热衷于研究的人来说,可以在这些基础代码上进行修改和扩展,实现其他功能。 【沟通交流】: 有任何使用上的问题,欢迎随时与博主沟通,博主会及时解答。 鼓励下载和使用,并欢迎大家互相学习,共同...

    Mysql keepalive-1.4.5.tar.gz

    Keepalived本身通常被关联到LVS(Linux Virtual Server)中,用于实现高可用性和负载均衡,但这里提到的是MySQL Keepalive,它主要关注的是数据库连接的保持。MySQL Keepalive通过周期性地发送心跳包到数据库,确保...

    lvs+keepalived+vsftp配置FTP服务器负载均衡

    在构建大型、高可用性的FTP(File Transfer Protocol)服务时,使用LVS(Linux Virtual Server)、Keepalived和VSFTPd的组合是一个常见的解决方案。LVS提供负载均衡,Keepalived确保服务高可用,而VSFTPd是常用的FTP...

    ubuntu 12.04 安装 Nginx+PHP5 (PHP-FPM) +MySQL主机详解.docx

    sudo apt-get install mysql-server mysql-client ``` 在安装过程中,系统会提示你设置MySQL的root用户的密码。 2. **启动和验证MySQL** 安装完成后,启动MySQL服务: ``` sudo systemctl start mysql ``` ...

    ubuntu12.04安装Nginx+PHP5(PHP-FPM)+MySQL主机详解.pdf

    - 使用`apt-get`命令安装MySQL服务器和客户端: ``` sudo apt-get install mysql-server mysql-client ``` - 在安装过程中,系统会提示你设置MySQL的root用户密码。 - 安装完成后,可以启动MySQL服务: ``` ...

    ubuntu 12.04 安装 Nginx+PHP5 (PHP-FPM) +MySQL主机详解.pdf

    sudo apt-get install mysql-server mysql-client ``` 安装过程中,系统会提示你设置MySQL root用户的密码。确保选择一个安全的密码,并记住它。 2. 启动MySQL服务: ``` sudo service mysql start ``` 3. 安装...

    Centos下Mysql+Keepalived双主热备高可用环境完整部署记录(个人珍藏版)

    在本篇文章中,我们将深入探讨如何在CentOS操作系统上配置MySQL与Keepalived实现双主热备高可用环境。MySQL的双主复制意味着两个主服务器互相复制数据,任何一台服务器上的更新都会被复制到另一台服务器,从而确保...

Global site tag (gtag.js) - Google Analytics