mysql高可用之LVS + KEEPALIVE + MYSQL

1.架构图

 

 

注意

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

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

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

 

 

2. 架构

Mysql:

master<=slave

10.24.6.5:3306(system   !System)<=10.24.6.6: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


 

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

 

 

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架构
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
这是一种常见的架构组合,用于构建高可用、负载均衡和容灾的Web应用系统。下面是每个组件的简要介绍: LVS(Linux Virtual Server):LVS是一个在Linux内核中实现的负载均衡工具。它通过将输入流量分发到多个后端服务器,以提高系统的性能和可靠性。 keepalived:keepalived是一个基于VRRP(Virtual Router Redundancy Protocol)的高可用性解决方案。它可以监控服务器的健康状态,并在主服务器故障时自动切换到备份服务器。 nginx:nginx是一个高性能的HTTP和反向代理服务器。它可以同时处理静态和动态内容,并提供负载均衡和高可用性功能。 tomcat:tomcat是一个开源的Java Servlet容器,用于运行Java Web应用程序。它可以与nginx配合使用,处理动态内容。 mysqlmysql是一个流行的关系型数据库管理系统,常用于存储应用程序的数据。 MHA(MySQL Master High Availability):MHA是一个用于MySQL主从复制环境的高可用性解决方案。它可以自动监控主服务器的健康状态,并在主服务器故障时自动切换到备份服务器。 NFS(Network File System):NFS是一种分布式文件系统协议,允许远程服务器通过网络访问共享文件。在这种架构中,NFS可以用于共享静态文件或其他数据,以提供一致的内容访问。 这种架构组合可以提供高可用性、负载均衡和容灾能力,适用于大型Web应用系统。但是具体的实施和配置需要根据具体需求和环境来确定。

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值