mysql高可用之LVS + KEEPALIVE + MYSQL

摘要:
System)LB10.24.6.4Master10.24.6.7BACKUPVIP:10.24.6.23.LVS负载均衡配置3.1.Lvs模块检测Ipvs具体实现是由ipvsadm这个程序来完成,因此判断一个系统是否具备ipvs功能,只需要察看ipvsadm程序是否被安装。modprobe-l|grepipvs或lsmod|grepip_vsUbuntu9.10已经用了2.6的内核,所以不需要再编译内核了3.2.配置LVS默认不需要配置4.KeepAlived高可用配置4.1.安装4.2.MASTER配置global_defs{router_idHaMySQL_1}vrrp_instanceVI_MYSQL{stateMASTERinterfaceeth0virtual_router_id51priority100advert_int1authentication{auth_typePASSauth_pass1111}virtual_ipaddress{10.24.6.2}}virtual_server10.24.6.23306{delay_loop6lb_algowrrlb_kindDRpersistence_timeout60protocolTCPreal_server10.24.6.53306{weight3TCP_CHECK{connect_timeout3nb_get_retry3delay_before_retry3connect_port3306}}real_server10.24.6.63306{weight3TCP_CHECK{connect_timeout3nb_get_retry3delay_before_retry3connect_port3306}}}4.3.SLAVE配置global_defs{router_idHaMySQL_1}vrrp_instanceVI_MYSQL{stateBACKUPinterfaceeth0virtual_router_id51priority50advert_int1authentication{auth_typePASSauth_pass1111}virtual_ipaddress{10.24.6.2}}virtual_server10.24.6.23306{delay_loop6lb_algowrrlb_kindDRpersistence_timeout60protocolTCPreal_server10.24.6.53306{weight3TCP_CHECK{connect_timeout3nb_get_retry3delay_before_retry3connect_port3306}}real_server10.24.6.63306{weight3TCP_CHECK{connect_timeout3nb_get_retry3delay_before_retry3connect_port3306}}}4.4.日志Ubuntu下面是/var/log/syslogAlldaemonmessagesareloggedthroughtheLinuxsyslog.IfyoustartKeepalivedwiththe“dumpconfigurationdata”option,youshouldseeinyour/var/log/messagessomethinglikethis:4.5.负载均衡服务的启用和验证Lvs客户端的启用和验证在前面的有过详细的说明,此处略过。最能反映keepalived启动情况的地方当属系统日志。

1.架构图

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|grepipvs

或lsmod|grepip_vs

mysql高可用之LVS + KEEPALIVE + MYSQL第2张

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

mysql高可用之LVS + KEEPALIVE + MYSQL第3张

3.2.配置

LVS默认不需要配置

4.KeepAlived高可用配置

4.1. 安装

mysql高可用之LVS + KEEPALIVE + MYSQL第4张

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 + KEEPALIVE + MYSQL第5张

Slave

mysql高可用之LVS + KEEPALIVE + MYSQL第6张

4.7. IPVSADM验证

Master

mysql高可用之LVS + KEEPALIVE + MYSQL第7张

Clave

mysql高可用之LVS + KEEPALIVE + MYSQL第8张

4.8. 测试验证

实体mysql

mysql高可用之LVS + KEEPALIVE + MYSQL第9张

mysql高可用之LVS + KEEPALIVE + MYSQL第10张

Vip mysql

mysql高可用之LVS + KEEPALIVE + MYSQL第11张

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 + KEEPALIVE + MYSQL第12张

2.Mysql连接vip的抓包情况

mysql高可用之LVS + KEEPALIVE + MYSQL第13张

通过抓包可知,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 + KEEPALIVE + MYSQL第14张

修改在10.24.6.6的mysql配置:

mysql高可用之LVS + KEEPALIVE + MYSQL第15张

6. 总结

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

免责声明:文章转载自《mysql高可用之LVS + KEEPALIVE + MYSQL》仅用于学习参考。如对内容有疑问,请及时联系本站处理。

上篇转:3.3惩戒骑士指南pgpool-II主备流复制的架设下篇

宿迁高防,2C2G15M,22元/月;香港BGP,2C5G5M,25元/月 雨云优惠码:MjYwNzM=

相关文章

mysql 解决全角半角 问题

SELECTc.transfer_amount FROMpdf_inf a LEFT JOIN pdf_grantor_pgor_infos b ON a.uuid =b.pdf_id AND b.sys_status = 1 LEFT JOIN pdf_dne c ON b.uuid =c.biz_id AND c.sys_status = 1 WHER...

数据同步工具otter(一)谈谈binlog和canal

之前因为懒,没有针对otter做更多的解释和说明,在使用过程中,也发现了一些问题,此次补上一个完整的文档,方便大家使用。 Otter是基于cannal开源的,canal又是基于mysql binlog的产品。我们就从binlog说起 binlog mysql的binlog日志是被设计用来作主从备份或者数据恢复用的。binlog是The Binary Lo...

MySQL单表恢复方法

正休息的时候一个电话将我的睡意完全打散,“开发童鞋写update SQL的时候忘了加where条件了”,相信每一个DBA同学听到这个消息的时候都有骂街的冲动吧。万幸只是单表写花了,而不是哪位大神在DB里面drop table玩。虽然已经很久没进行单表恢复了,但是还好步骤都印在脑海中,没有出问题的就恢复完了。 言归正传,记录一下单表恢复的步骤和关键点,提醒自...

Linux 平台MySQL启动关闭方式总结

  MySQL的启动方法有很多种,下面对比、总结这几种方法的一些差异和特性,下面实验的版本为MySQL 5.6。如有疏漏或不足,敬请指点一二。   1:使用mysqld启动、关闭MySQL服务      mysqld是MySQL的守护进程,我们可以用mysqld来启动、关闭MySQL服务,关于mysqld, MySQL 5.6官方介绍资料如下所示:...

[转]C#从MySQL数据库中读取

实现了数据库的建表、存储数据的功能后,还需要实现数据库的读取,综合查资料后发现有两种发发比较好; 一、如需要界面操作,需要将数据表格在界面上显示出来的话,需要使用DataGrid控件。 基本操作流程:声明一个数据适配器和数据集,并将读取指令赋值给数据适配器的指令,打开数据库,执行数据适配器的指令,然后将适配器读取的数据填充到数据集中,最后将数据集通过DAT...

mysql 5.7 迁移数据方案

从一台服务器迁移至其他服务器,如何选择最短的停服时间方案 方案一、凌晨3点的全备份+停服后一天的大概一天的增备   1. 拷贝前一天的全备份至新的服务器    rsync -auzrP /Data/dbbak/db/2019-04-23/2019-04-23_03-10-11 root@172.16.1.80:/data/backup/full/   2....