lvs mysql_MySQL 主主复制 + LVS + Keepalived 实现 MySQL 高可用性

原标题:MySQL 主主复制 + LVS + Keepalived 实现 MySQL 高可用性

(点击上方公众号,可快速关注)

作者:bestvivi

bestvivi.com/2015/09/09/MySQL主主复制+LVS+Keepalived实现MySQL高可用性/

能够保证数据的冗余的同时可以做读写分离来分担系统压力,如果是主主复制还可以很好的避免主节点的单点故障。但是MySQL主主复制存在一些问题无法满足我们的实际需要:未提供统一访问入口来实现负载均衡,如果其中master宕掉的话需要手动切换到另外一个master,而不能自动进行切换。

这篇文章下面要介绍如何通过LVS+Keepalived的方式来是实现MySQL的高可用性,同时解决以上问题。

Keepalived和LVS介绍

Keepalived是一个基于VRRP(虚拟路由冗余协议)可用来实现服务高可用性的软件方案,避免出现单点故障。Keepalived一般用来实现轻量级高可用性,且不需要共享存储,一般用于两个节点之间,常见有LVS+Keepalived、Nginx+Keepalived组合。

LVS(Linux Virtual Server)是一个高可用性虚拟的服务器集群系统。本项目在1998年5月由章文嵩博士成立,是中国国内最早出现的自由软件项目之一。

LVS主要用于多服务器的负载均衡,作用于网络层。LVS构建的服务器集群系统中,前端的负载均衡层被称为Director Server;后端提供服务的服务器组层被称为Real Server。通过下图可以大致了解LVS的基础架构。

d42626584fc29e072a09a1cd9c5b9ded.png

LVS有三种工作模式,分别是DR(Direct Routing 直接路由)、TUN(Tunneling IP隧道)、NAT(Network Address Translation 网络地址转换)。其中TUN模式能够支持更多的Real Server,但需要所有服务器支持IP隧道协议;DR也可以支持相当的Real Server,但需要保证Director Server虚拟网卡与物理网卡在同一网段;NAT扩展性有限,无法支持更多的Real Server,因为所有的请求包和应答包都需要Director Server进行解析再生,影响效率。 同时,LVS负载均衡有10中调度算法,分别是rr、wrr、lc、wlc、lblc、lblcr、dh、sh、sed、nq

本文中将利用LVS实现MySQL的读写负载均衡,Keepalived避免节点出现单点故障。

LVS+Keepalived配置

环境准备

LVS1:192.168.1.2

LVS2:192.168.1.11

MySQL Server1:192.168.1.5

MySQL Server2:192.168.1.6

VIP:192.168.1.100

OS: CentOS 6.4

eefac1a9f75cea3ba5fa3255f40d3a93.png

Keepalive安装

需要安装以下软件包

# yum install -y kernel-devel openssl openssl-devel

解压keepalived到/usr/local/并进入目录执行配置编译

# ./configure --prefix=/usr/local/keepalived --with-kernel-dir=/usr/src/kernels/2.6.32-431.5.1.el6.x86_64/

Keepalivedconfiguration

------------------------

Keepalivedversion:1.2.13

Compiler:gcc

Compilerflags: -g-O2

ExtraLib: -lssl-lcrypto-lcrypt

UseIPVSFramework:Yes

IPVS sync daemonsupport:Yes

IPVSuselibnl:No

fwmark socketsupport:Yes

UseVRRPFramework:Yes

UseVRRPVMAC:Yes

SNMPsupport:No

SHA1support:No

UseDebugflags:No

# make

默认情况下keepalived启动时会去/etc/keepalived目录下找配置文件,将需要的配置文件拷贝到指定位置

# cp /usr/local/keepalived/etc/rc.d/init.d/keepalived /etc/rc.d/init.d/

# cp /usr/local/keepalived/etc/sysconfig/keepalived /etc/sysconfig/

# cp /usr/local/keepalived/etc/keepalived/keepalived.conf /etc/keepalived/

# cp /usr/local/keepalived/sbin/keepalived /usr/sbin/

# chkconfig mysqld on

# chkconfig keepalived on

LVS安装

需要安装以下软件包

# yum install -y libnl* popt*

查看是否加载lvs模块

# modprobe -l |grep ipvs

解压安装

# ln -s /usr/src/kernels/2.6.32-431.5.1.el6.x86_64/ /usr/src/linux

# tar -zxvf ipvsadm-1.26.tar.gz

# make

LVS安装完成,查看当前LVS集群

# ipvsadm -L -n

IP Virtual Serverversion1.2.1(size=4096)

ProtLocalAddress:Port SchedulerFlags

->RemoteAddress:Port Forward Weight ActiveConnInActConn

LVS+Keepalived配置

搭建MySQL主主复制

这里不再赘述,请参考

配置Keepalived

下面是LVS1节点(Keepalived主节点)上的Keepalived配置,LVS2类似

# vim /etc/keepalived/keepalived.conf

!ConfigurationFileforkeepalived

global_defs{

router_idLVS1

}

vrrp_instanceVI_1{

stateMASTER#指定instance初始状态,实际根据优先级决定.backup节点不一样

interfaceeth0#虚拟IP所在网

virtual_router_id51#VRID,相同VRID为一个组,决定多播MAC地址

priority100#优先级,另一台改为90.backup节点不一样

advert_int1#检查间隔

authentication{

auth_typePASS#认证方式,可以是pass或ha

auth_pass1111#认证密码

}

virtual_ipaddress{

192.168.1.100#VIP

}

}

virtual_server192.168.1.1003306{

delay_loop6#服务轮询的时间间隔

lb_algowrr#加权轮询调度,LVS调度算法 rr|wrr|lc|wlc|lblc|sh|sh

lb_kindDR#LVS集群模式 NAT|DR|TUN,其中DR模式要求负载均衡器网卡必须有一块与物理网卡在同一个网段

#nat_mask 255.255.255.0

persistence_timeout50#会话保持时间

protocolTCP#健康检查协议

## Real Server设置,3306就是MySQL连接端口

real_server192.168.1.53306{

weight3##权重

TCP_CHECK{

connect_timeout3

nb_get_retry3

delay_before_retry3

connect_port3306

}

}

real_server192.168.1.63306{

weight3

TCP_CHECK{

connect_timeout3

nb_get_retry3

delay_before_retry3

connect_port3306

}

}

}

配置LVS

编写LVS启动脚本/etc/init.d/realserver

#!/bin/sh

VIP=192.168.1.100

./etc/rc.d/init.d/functions

case"$1"in

# 禁用本地的ARP请求、绑定本地回环地址

start)

/sbin/ifconfig lodown

/sbin/ifconfig lo 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

/sbin/sysctl-p>/dev/null2>&1

/sbin/ifconfiglo:0$VIPnetmask255.255.255.255up#在回环地址上绑定VIP,设定掩码,与Direct Server(自身)上的IP保持通信

/sbin/routeadd-host$VIP devlo:0

echo"LVS-DR real server starts successfully.n"

;;

stop)

/sbin/ifconfiglo:0down

/sbin/routedel$VIP>/dev/null2>&1

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

echo"LVS-DR real server stopped.n"

;;

status)

isLoOn=`/sbin/ifconfiglo:0|grep"$VIP"`

isRoOn=`/bin/netstat-rn|grep"$VIP"`

if["$isLoON"==""-a"$isRoOn"==""];then

echo"LVS-DR real server has run yet."

else

echo"LVS-DR real server is running."

fi

exit3

;;

*)

echo"Usage: $0 {start|stop|status}"

exit1

esac

exit0

将lvs脚本加入开机自启动

# chmod +x /etc/init.d/realserver

# echo "/etc/init.d/realserver" >> /etc/rc.d/rc.local

分别启动LVS和keepalived

# service realserver start

# service keepalived start

注意此时网卡的变化,可以看到虚拟网卡已经分配到了realserver上。

此时查看LVS集群状态,可以看到集群下有两个Real Server,调度算法,权重等信息。ActiveConn代表当前Real Server的活跃连接数

# ipvsadm -ln

IP Virtual Serverversion1.2.1(size=4096)

ProtLocalAddress:Port SchedulerFlags

->RemoteAddress:Port Forward Weight ActiveConn InActConn

TCP192.168.1.100:3306wrrpersistent50

->192.168.1.5:3306Route341

->192.168.1.6:3306Route302

此时LVS+Keepalived+MySQL主主复制已经搭建完成。

测试验证

功能性验证

关闭MySQL Server2

# service mysqld stop

在LVS1查看/var/log/messages中关于keepalived日志,LVS1检测到了MySQL Server2宕机,同时LVS集群自动剔除了故障节点

Sep913:50:53192.168.1.2Keepalived_healthcheckers[18797]:TCP connectionto[192.168.1.6]:3306failed!!!

Sep913:50:53192.168.1.2Keepalived_healthcheckers[18797]:Removingservice[192.168.1.6]:3306fromVS[192.168.1.100]:3306

从新启动MySQL Server2后自动将故障节点自动加入LVS集群

Sep913:51:41192.168.1.2Keepalived_healthcheckers[18797]:TCP connectionto[192.168.1.6]:3306success.

Sep913:51:41192.168.1.2Keepalived_healthcheckers[18797]:Addingservice[192.168.1.6]:3306toVS[192.168.1.100]:3306

关闭LVS1上的Keepalived(模拟宕机操作),查看LVS1上的日志,可以看到Keepalived移出了LVS1上的VIP

Sep914:01:27192.168.1.2Keepalived[18796]:Stopping Keepalivedv1.2.13(09/09,2014)

Sep914:01:27192.168.1.2Keepalived_healthcheckers[18797]:Removingservice[192.168.1.5]:3306fromVS[192.168.1.100]:3306

Sep914:01:27192.168.1.2Keepalived_healthcheckers[18797]:Removingservice[192.168.1.6]:3306fromVS[192.168.1.100]:3306

Sep914:01:27192.168.1.2Keepalived_vrrp[18799]:VRRP_Instance(VI_1)sending0priority

Sep914:01:27192.168.1.2Keepalived_vrrp[18799]:VRRP_Instance(VI_1)removing protocolVIPs.

同时查看LVS2上日志,可以看到LVS2成为了Master,并接管了VIP

Sep914:11:24192.168.1.11Keepalived_vrrp[7457]:VRRP_Instance(VI_1)TransitiontoMASTER STATE

Sep914:11:25192.168.1.11Keepalived_vrrp[7457]:VRRP_Instance(VI_1)Entering MASTER STATE

Sep914:11:25192.168.1.11Keepalived_vrrp[7457]:VRRP_Instance(VI_1)setting protocolVIPs.

Sep914:11:25192.168.1.11Keepalived_vrrp[7457]:VRRP_Instance(VI_1)Sending gratuitous ARPs on eth0for192.168.1.100

Sep914:11:25192.168.1.11Keepalived_healthcheckers[7456]:Netlink reflector reportsIP192.168.1.100added

Sep914:11:25192.168.1.11avahi-daemon[1407]:Registeringnewaddress recordfor192.168.1.100oneth0.IPv4.

Sep914:11:30192.168.1.11Keepalived_vrrp[7457]:VRRP_Instance(VI_1)Sending gratuitous ARPs on eth0for192.168.1.100

在LVS2上查看LVS集群状态,一切正常。

# ipvsadm -ln

IP Virtual Serverversion1.2.1(size=4096)

ProtLocalAddress:Port SchedulerFlags

->RemoteAddress:Port Forward Weight ActiveConn InActConn

TCP192.168.1.100:3306wrrpersistent50

->192.168.1.5:3306Route320

->192.168.1.6:3306Route310

总结

MySQL主主复制是集群的基础,组成Server Array,其中每个节点作为Real Server。

LVS服务器提供了负载均衡的作用,将用户请求分发到Real Server,一台Real Server故障并不会影响整个集群。

Keepalived搭建主备LVS服务器,避免了LVS服务器的单点故障,出现故障时可以自动切换到正常的节点。

觉得本文有帮助?请分享给更多人

关注「数据库开发」,提升数据库开发技术返回搜狐,查看更多

责任编辑:

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值