通过LVS + Keepalived 部署MySQL高可用

LVS是Linux Virtual Server的简称,也就是Linux虚拟服务器, 是一个由章文嵩博士发起的自由软件项目,它的官方站点是www.linuxvirtualserver.org。现在LVS已经是 Linux标准内核的一部分,在Linux2.4内核以前,使用LVS时必须要重新编译内核以支持LVS功能模块,但是从Linux2.4内核以后,已经完全内置了LVS的各个功能模块,无需给内核打任何补丁,可以直接使用LVS提供的各种功能。

keepalived简单来讲就是,Keepalived是一个专门为lvs提供高可用功能的机制,它可以实现当有两个主从lvs,而且主lvs损坏的时候,将其IP地址以及lvs转移至备份lvs上。其高可用主要基于VRRP协议实现,VRRP是一个“选举”协议,它能够动态地将一个虚拟路由器的责任指定至同一个VRRP组中的其它路由器上,从而消除了静态路由配置的单点故障。如果一个VRRP设备将虚拟路由器IP地址作为真实的接口地址,则该设备被称为IP地址拥有者。如果IP地址拥有者是可用的,通常它将成为Master。

1.架构图

注意

(一) MySQL需要把bind-address的配置去掉,否则无法实现虚拟ip访问

(二) 关闭所有linux防火墙:/sbin/iptables –F(可能没用)

(三) 重启networking:sudo /etc/init.d/networking restart(可能没用)

2. 架构

Mysql:

master

10.24.6.5:3306(system !System)

LB

10.24.6.4 Master

10.24.6.7 BACKUP

VIP:

10.24.6.2

3.LVS负载均衡配置

3.1. Lvs模块检测

Ipvs 具体实现是由ipvsadm 这个程序来完成,因此判断一个系统是否具备ipvs 功能,只需要察看ipvsadm 程序是否被安装。察看ipvsadm 程序最简单的办法就是在任意路径执行命令ipvsadm。表6-1 为安装ipvsadm 及未安装ipvsadm 的输出对比。

执行 ipvsadm 后的输出
未安装ipvsadm bash: /sbin/ipvsadm: 没有那个文件或目录
安装ipvsadm IP Virtual Server version 1.2.1 (size=4096)Prot LocalAddress:Port Scheduler Flags ->RemoteAddress:Port Forward Weight ActiveConn InActConn

显示详细信息

表6-1 ipvsadm 输出对比

a) 通过系统命令比较简单:apt-get install ipvsadm

b) 检验ipvsadm 是否被正确安装

​ i. 执行ipvsadm,看是否有表6-1 第2 栏的输出。

​ ii. 检查当前加载的内核模块,看是否存在ip_vs 模块。

modprobe -l |grep ipvs

或lsmod | grep ip_vs

img

Ubuntu9.10已经用了2.6的内核,所以不需要再编译内核了

3.2.配置

LVS默认不需要配置

4.KeepAlived高可用配置

4.1. 安装

4.2. MASTER配置(/etc/keepalived/keepalived.conf)

global_defs {

router_id HaMySQL_1

}

vrrp_instance VI_MYSQL {

state MASTER

interface eth0

virtual_router_id 51

priority 100

advert_int 1

authentication {

auth_type PASS

auth_pass 1111

}

virtual_ipaddress {

10.24.6.2

}

}

virtual_server 10.24.6.2 3306 {

delay_loop 6

lb_algo wrr

lb_kind DR

persistence_timeout 60

protocol TCP

real_server 10.24.6.5 3306 {

weight 3

TCP_CHECK {

connect_timeout 3

nb_get_retry 3

delay_before_retry 3

connect_port 3306

}

}

real_server 10.24.6.6 3306 {

weight 3

TCP_CHECK {

connect_timeout 3

nb_get_retry 3

delay_before_retry 3

connect_port 3306

}

}

}

4.3. SLAVE配置(/etc/keepalived/keepalived.conf)

global_defs {

router_id HaMySQL_1

}

vrrp_instance VI_MYSQL {

state BACKUP

interface eth0

virtual_router_id 51

priority 50

advert_int 1

authentication {

auth_type PASS

auth_pass 1111

}

virtual_ipaddress {

10.24.6.2

}

}

virtual_server 10.24.6.2 3306 {

delay_loop 6

lb_algo wrr

lb_kind DR

persistence_timeout 60

protocol TCP

real_server 10.24.6.5 3306 {

weight 3

TCP_CHECK {

connect_timeout 3

nb_get_retry 3

delay_before_retry 3

connect_port 3306

}

}

real_server 10.24.6.6 3306 {

weight 3

TCP_CHECK {

connect_timeout 3

nb_get_retry 3

delay_before_retry 3

connect_port 3306

}

}

}

4.4. 日志

Ubuntu下面是/var/log/syslog

All daemon messages are logged through the Linux syslog. If you start Keepalived with the “dump

configuration data” option, you should see in your /var/log/messages (on Debian this may be

/var/log/daemon.log depending on your syslog configuration) something like this :

4.5. 负载均衡服务的启用和验证

Lvs 客户端的启用和验证在前面的有过详细的说明,此处略过。前面我们也提过,keepalived 启动过程不会检查配置文件的语法,因此在启动keepalived 以前,需要人工对/etc/keepalived/keepalived.conf 文件做全面的语法检查。一个比较容易犯的错误就是把花括号“}”写漏了,不成对!当lvs 客户端都正常启动并且配置文件经检查无误后(当然有错误也无妨,随时可以修改嘛!),执行命令 /usr/local/keepalived/sbin/keepalived –D ,然后我们查看系统进程,看是否是3 个keepalived 进程。如果配置文件的路径不是/etc/keepalived/keepalived.conf 则需要在启动时用选项-f 指定。

最能反映keepalived 启动情况的地方当属系统日志。手动执行启动操作后,使用命令 tail –f /var/log/syslog 滚动查看输出,就能详细了解其运行情况。图6-3 为某个lvs 环境的keepalived 启动输出:

另外一个反映keepalived 正常运行状态的地方是网络接口vip 的启用。通过执行ip add 即可看见vip 已经被绑定在制定的网络接口(注意:ifconfig 不能显示 vip)。需要注意的是,BACKUP 的vip 暂时不绑定。如下图所示:

4.6. Vip验证

Master

Slave

4.7. IPVSADM验证

Master

Clave

4.8. 测试验证

实体mysql

img

Vip mysql

4.9. 高可用测试结果

LB:

10.24.6.4 Master关闭以后,10.24.6.7 BACKUP启用接管

MYSQL:

10.24.6.5:3306

10.24.6.6:3306

任意一个mysql异常之后,可连接到其他mysql

5. 遇到问题

5.1. Mysql连接不上(错误码111)分析

1.Mysql连接vip

2.Mysql连接vip的抓包情况

通过抓包可知,10.24.6.2:3306是可以连上的,它有回包,只不过回包的状态为R

3.TCP连接出现RST的情况分析:

 @1端口未打开

 @2请求超时

 @3提前关闭

 @4在一个已关闭的socket上收到数据

4.在结合mysql返回值为111可以知道应该是mysql服务提前关闭了,

Google了下mysql111的解决办法:

QT链接Mysql的时候出现QSqlError(2003, “QMYSQL: Unable to connect”, “Can’t connect to MySQL server on ‘172.18.186.244’ (111)”)错误,google之后发现是mysql为了安全,对hostname进行了绑定。

解决办法:修改/etc/mysql/my.cnf(不同Linux发行版位置可能不同,我用的是Ubuntu 11.04,windows是my.ini文件),里面有一句:bind-address = 127.0.0.1用#注释掉,重启mysql服务就OK了。

原文地址:http://stackoverflow.com/questions/1420839/cant-connect-to-mysql-server-error-111

\5. 解决方案(去掉bind-address):

修改在10.24.6.5的mysql配置:

修改在10.24.6.6的mysql配置:

****

6. 总结

主mysql和从mysql可以同时存在服务
Keepalive从可用的服务列表里面选择一��服务访问
主mysql和从mysql随机选择
适合做负载均衡,主从备份
share nothing架构

原创文章,作者:晴川运维,如若转载,请注明出处:https://baike.qcidc.com/9288.html

(0)
晴川运维晴川运维
上一篇 6天前
下一篇 6天前

相关推荐

  • Linux删除分区的正确方法

    管理分区是一件严肃的事情,尤其是当你不得不删除它们时。我发现自己经常这样做,特别是在使用 U 盘作为实时磁盘和 Linux 安装程序之后,因为它们创建了几个我以后不需要的分区。在本…

    Debian 2025年6月8日
  • 【Debian管理员手册】第 3 章 分析当前设置与迁移

    3.1. 在异构环境中共存 3.1.1. 和Windows机器整合 3.1.2. 和OS X机器整合 3.1.3. 与其他 Linux/Unix 设备集成 3.2. 如何迁移 3.…

    Debian 2025年6月8日
  • apt-get的清理操作

    apt-get,是一条linux命令,适用于deb包管理式的操作系统,主要用于自动从互联网的软件仓库中搜索、安装、升级、卸载软件或操作系统。 在基于 Debian 的系统上运行 a…

    Debian 2025年6月8日
  • ssh_scan:远程验证你 SSH 服务的配置和策略

    ssh_scan 是一个面向 Linux 和 UNIX 服务器的易用的 SSH 服务参数配置和策略的扫描器程序,其思路来自Mozilla OpenSSH 安全指南,这个指南为 SS…

    Debian 2025年6月8日
  • Linux下安装并使用netstat命令

    Netstat命令用于显示协议统计数据和当前TCP/IP网络的连接相关信息。很多时候我们需要查看自己的电脑某些网络端口是否被正常打开或者是否已经成功与别的机器建立连接,或者想看一些…

    Debian 2025年6月8日
  • 【Debian GNU/Linux 安装手册】A.3. 安装

    A.3. 安装 一旦安装程序运行,会有一个初始画面迎接您。按 Enter 启动系统;或者先阅读一下其它的启动方式以及各种参数的说明(参阅第 5.3 节…

    Debian 2025年6月8日
  • 如何在 Debian 12 和 Ubuntu 22.04 启用 RSA 密钥登录方式

    引言 随着 OpenSSH 的不断更新,安全策略也趋于严格。自 8.3 版本起,OpenSSH 默认禁用了传统的 RSA 密钥登录方式,以提升远程连接的安全性。然而,在一些老旧系统…

    Debian 3天前
  • 在 Ubuntu 和 Debian 上启用双因子身份验证的三种备选方案

    如何为你的 SSH 服务器安装三种不同的双因子身份验证方案。 如今,安全比以往更加重要,保护 SSH 服务器是作为系统管理员可以做的最为重要的事情之一。传统地,这意味着禁用密码身份…

    Debian 6天前
  • Centos7部署nmon监控工具具体步骤

    nmon是一种在AIX与各种Linux操作系统上广泛使用的监控与分析工具,它能在系统运行过程中实时地捕捉系统资源的使用情况,记录的信息比较全面,并且能输出结果到文件中,然后通过nm…

    Debian 2025年6月10日
  • Linux下使用BTFS 在线观看种子视频

    BitTorrent文件共享(BTFS)是利用TRON网络和BitTorrent生态系统的下一代文件共享协议,本篇文章为大家讲解一下Linux下使用BTFS 在线观看种子视频具体方…

    Debian 2025年6月8日

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注