阿里云-云小站(无限量代金券发放中)
【腾讯云】云服务器、云数据库、COS、CDN、短信等热卖云产品特惠抢购

MySQL高可用之LVS + Keepalived + MySQL

244次阅读
没有评论

共计 4509 个字符,预计需要花费 12 分钟才能阅读完成。

1. 架构图

 MySQL 高可用之 LVS + Keepalived + MySQL

注意

(一)  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

 MySQL 高可用之 LVS + Keepalived + MySQL

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

 MySQL 高可用之 LVS + Keepalived + MySQL

3.2. 配置

LVS 默认不需要配置

4.KeepAlived 高可用配置

4.1. 安装

 MySQL 高可用之 LVS + Keepalived + MySQL

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

 MySQL 高可用之 LVS + Keepalived + MySQL

Slave

 MySQL 高可用之 LVS + Keepalived + MySQL

4.7. IPVSADM 验证

Master

 MySQL 高可用之 LVS + Keepalived + MySQL

Clave

 MySQL 高可用之 LVS + Keepalived + MySQL

4.8. 测试验证

实体 mysql

 MySQL 高可用之 LVS + Keepalived + MySQL

MySQL 高可用之 LVS + Keepalived + MySQL

Vip mysql

 MySQL 高可用之 LVS + Keepalived + 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

 MySQL 高可用之 LVS + Keepalived + MySQL

2.Mysql 连接 vip 的抓包情况

 MySQL 高可用之 LVS + Keepalived + MySQL

通过抓包可知,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 配置:

 MySQL 高可用之 LVS + Keepalived + MySQL

修改在 10.24.6.6 的 mysql 配置:

MySQL 高可用之 LVS + Keepalived + MySQL

6. 总结

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

Linux 下 HAProxy+Keepalived 双机高可用方案  http://www.linuxidc.com/Linux/2016-02/128566.htm

Haproxy+Keepalived 搭建 Weblogic 高可用负载均衡集群 http://www.linuxidc.com/Linux/2013-09/89732.htm

Keepalived+HAProxy 配置高可用负载均衡 http://www.linuxidc.com/Linux/2012-03/56748.htm

CentOS 6.3 下 Haproxy+Keepalived+Apache 配置笔记 http://www.linuxidc.com/Linux/2013-06/85598.htm

Haproxy + KeepAlived 实现 WEB 群集 on CentOS 6 http://www.linuxidc.com/Linux/2012-03/55672.htm

Haproxy+Keepalived 构建高可用负载均衡 http://www.linuxidc.com/Linux/2012-03/55880.htm

本文永久更新链接地址:http://www.linuxidc.com/Linux/2016-04/130098.htm

正文完
星哥说事-微信公众号
post-qrcode
 
星锅
版权声明:本站原创文章,由 星锅 2022-01-22发表,共计4509字。
转载说明:除特殊说明外本站文章皆由CC-4.0协议发布,转载请注明出处。
【腾讯云】推广者专属福利,新客户无门槛领取总价值高达2860元代金券,每种代金券限量500张,先到先得。
阿里云-最新活动爆款每日限量供应
评论(没有评论)
验证码
【腾讯云】云服务器、云数据库、COS、CDN、短信等云产品特惠热卖中