下面要介绍的是如何通过Keepalived+LVS方式来是实现MySQL的高可用性,利用LVS实现MySQL的读写负载均衡,Keepalived避免节点出现单点故障。

此测试是在博文:mysql+keepalived双主高可用配置  的基础上进行测试的,要先将mysql主主同步环境搭建好,然后进行下面的测试

测试环境

LVS_Master:           192.168.220.72  centos7.2

LVS_Backup:           192.168.220.73  centos7.2

MySQL1 Real Server:   192.168.220.70  centos6.9

MySQL2 Real Server:   192.168.220.71  centos6.9

VIP:                  192.168.220.74

采用lvs-dr模式,rr调度算法

防火墙设置:可以设置严格条件(注意多播地址),这里4台机器每台机器设置源ip为其他三台机器的都放行。lvs机器需将客户机的ip放行,允许访问

关于lvs和keepalived相关的介绍,需看前面的博文,此处只列出具体的配置,以及注意的地方

在:192.168.220.72和192.168.220.73机器上面安装好keepalived软件,此处使用rpm包安装,此处使用keepalived可抢占式配置,也可以将其都配置为backup非抢占式配置

[root@rtb-72 /etc/keepalived]#cat keepalived.conf

global_defs {

notification_email {

root@localhost

}

notification_email_from keepalived@localhost

smtp_server 127.0.0.1

smtp_connect_timeout 30

router_id lvs-mysql

vrrp_mcast_group4 224.0.100.0

}

vrrp_script chk_down {

script "[[ -f /etc/keepalived/down ]] && exit 1 || exit 0"  #down文件在,返回1。不在返回0

interval 1    #1秒钟调用一次,当上面的脚本执行返回1的时候会执行下面的操作

weight -20    #当down文件存在,这个vs的节点的优先级-20,如果这个节点的优先级低于其他的vs主机,

#这个主机就会处于维护模式,ip被其他优先级高的主机夺走。

}

vrrp_instance rtb_mysql {

state MASTER

interface bond0

virtual_router_id 20

priority 100

advert_int 1

authentication {

auth_type PASS

auth_pass 2345

}

virtual_ipaddress {

192.168.220.74/24 dev bond0

}

track_script {

chk_down

}

}

virtual_server 192.168.220.74 3306 {

delay_loop 3

lb_algo rr

lb_kind DR

protocol TCP

real_server 192.168.220.70 3306 {

weight 1

TCP_CHECK {

connect_timeout 1

nb_get_retry 3

delay_before_retry 1

connect_port 3306

}

}

real_server 192.168.220.71 3306 {

weight 1

TCP_CHECK {

connect_timeout 1

nb_get_retry 3

delay_before_retry 1

connect_port 3306

}

}

}

#启动keepalived

[root@rtb-72 ~]#systemctl restart keepalived

[root@rtb-72 ~]#systemctl is-enabled keepalived

disabled

[root@rtb-72 ~]#systemctl enable keepalived

Created symlink from /etc/systemd/system/multi-user.target.wants/keepalived.service to /usr/lib/systemd/system/keepalived.service.

[root@rtb-73 /etc/keepalived]#cat keepalived.conf

global_defs {

notification_email {

root@localhost

}

notification_email_from keepalived@localhost

smtp_server 127.0.0.1

smtp_connect_timeout 30

router_id lvs-mysql

vrrp_mcast_group4 224.0.100.0

}

vrrp_script chk_down {

script "[[ -f /etc/keepalived/down ]] && exit 1 || exit 0"  #down文件在,返回1。不在返回0

interval 1    #1秒钟调用一次,当上面的脚本执行返回1的时候会执行下面的操作

weight -20    #当down文件存在,这个vs的节点的优先级-20,如果这个节点的优先级低于其他的vs主机,

#这个主机就会处于维护模式,ip被其他优先级高的主机夺走。

}

vrrp_instance rtb_mysql {

state BACKUP

interface bond0

virtual_router_id 20

priority 90

advert_int 1

authentication {

auth_type PASS

auth_pass 2345

}

virtual_ipaddress {

192.168.220.74/24 dev bond0

}

track_script {

chk_down

}

}

virtual_server 192.168.220.74 3306 {

delay_loop 3

lb_algo rr

lb_kind DR

protocol TCP

real_server 192.168.220.70 3306 {

weight 1

TCP_CHECK {

connect_timeout 1

nb_get_retry 3

delay_before_retry 1

connect_port 3306

}

}

real_server 192.168.220.71 3306 {

weight 1

TCP_CHECK {

connect_timeout 1

nb_get_retry 3

delay_before_retry 1

connect_port 3306

}

}

}

#启动keepalived

[root@rtb-73 ~]#systemctl restart keepalived

[root@rtb-73 ~]#systemctl is-enabled keepalived

disabled

[root@rtb-73 ~]#systemctl enable keepalived

Created symlink from /etc/systemd/system/multi-user.target.wants/keepalived.service to /usr/lib/systemd/system/keepalived.service.

下面是后端rs配置文件,两个rs配置相同

[root@RTB-70 /data/lvs_dr]#cat lvs_dr_slave.sh

#!/bin/bash

#

vip=192.168.220.74

mask='255.255.255.255'

gw_ip="192.168.220.1"

case $1 in

start)

echo 1 > /proc/sys/net/ipv4/conf/all/arp_ignore

echo 1 > /proc/sys/net/ipv4/conf/lo/arp_ignore

echo 2 > /proc/sys/net/ipv4/conf/all/arp_announce

echo 2 > /proc/sys/net/ipv4/conf/lo/arp_announce

ifconfig lo:0 $vip netmask $mask broadcast $vip up

route add -host $vip dev lo:0    #vip必须从lo网卡进来,从lo网卡出去

route del default

route add default gw $gw_ip

;;

stop)

ifconfig lo:0 down

echo 0 > /proc/sys/net/ipv4/conf/all/arp_ignore

echo 0 > /proc/sys/net/ipv4/conf/lo/arp_ignore

echo 0 > /proc/sys/net/ipv4/conf/all/arp_announce

echo 0 > /proc/sys/net/ipv4/conf/lo/arp_announce

;;

*)

echo "Usage $(basename $0) start|stop"

exit 1

;;

esac

先启动后端的rs服务,lo网卡配置上vip

[root@RTB-70 /data/lvs_dr]#echo "bash /data/lvs_dr/lvs_dr_slave.sh" >> /etc/rc.d/rc.local  #加入开机启动

[root@RTB-70 /data/lvs_dr]#bash lvs_dr_slave.sh start

[root@RTB-70 /data/lvs_dr]#ifconfig

eth0      Link encap:Ethernet  HWaddr 00:50:56:A9:FE:EC

inet addr:192.168.220.70  Bcast:192.168.220.255  Mask:255.255.255.0

lo        Link encap:Local Loopback

inet addr:127.0.0.1  Mask:255.0.0.0

lo:0      Link encap:Local Loopback

inet addr:192.168.220.74  Mask:255.255.255.255

UP LOOPBACK RUNNING  MTU:65536  Metric:1

[root@RTB-71 /data/lvs_dr]#echo "bash /data/lvs_dr/lvs_dr_slave.sh" >> /etc/rc.d/rc.local

[root@RTB-71 /data/lvs_dr]#bash lvs_dr_slave.sh start

[root@RTB-71 /data/lvs_dr]#ifconfig

eth0      Link encap:Ethernet  HWaddr 00:50:56:A9:4A:AE

inet addr:192.168.220.71  Bcast:192.168.220.255  Mask:255.255.255.0

lo        Link encap:Local Loopback

inet addr:127.0.0.1  Mask:255.0.0.0

lo:0      Link encap:Local Loopback

inet addr:192.168.220.74  Mask:255.255.255.255

UP LOOPBACK RUNNING  MTU:65536  Metric:1

经过测试,调度机宕机一台,可以正常访问,可以正常切换

经过测试,后端mysql宕机一台,可以正常访问,不影响业务

关于keepalived的实时漂移,可以通过/var/log/message文件实时查看过程,这里不再赘述,可看前面博文

lvs的调度以及连接数可以通过下面的命令查看

[root@rtb-72 ~]#ipvsadm -Ln

IP Virtual Server version 1.2.1 (size=4096)

Prot LocalAddress:Port Scheduler Flags

-> RemoteAddress:Port           Forward Weight ActiveConn InActConn

TCP  192.168.220.74:3306 rr

-> 192.168.220.70:3306          Route   1      0          0

-> 192.168.220.71:3306          Route   1      1          0

如果其他网段需要连接此网段的lvs上面的mysql,需要授权其他网段可以访问。

如果其他网段访问此网段lvs上的mysql,linux主机作为网关,注意设置内核参数,不然ip和mac地址对不上的包会被丢弃

[root@localhost ~]#echo 0 > /proc/sys/net/ipv4/conf/all/rp_filter

[root@localhost ~]#echo 0 > /proc/sys/net/ipv4/conf/default/rp_filter

[root@localhost ~]#echo 0 > /proc/sys/net/ipv4/conf/eth0/rp_filter

[root@localhost ~]#echo 0 > /proc/sys/net/ipv4/conf/eth1/rp_filter

[root@localhost ~]#echo 0 > /proc/sys/net/ipv4/conf/lo/rp_filter

#0 就是对进来的包完全不作检查,这样有被dos 攻击的风险。

#1 就是严格检查,只要不是这个interface 的包,就不返回。

#2 就是不太严格,只要本机配置了这个ip ,还是可以返回的。

#对于lvs 来说,用2 也是可以的。

如果其他网段主机访问此网段的lvs上的mysql,默认网段不能出网,可能涉及到默认网关问题

可在keepalived配置文件中调用脚本来发送邮件通知或者处理其他事情

注意lvs以每个会话作为单独的调度,一个终端进入mysql后,在这个终端会话会全部调度到其中一台机器,所有操作都会在这台机器完成,所有插入语句id都是奇数。当又有一个终端会话的时候,全部调度到另外一台机器,所有操作都在这台机器完成,所有插入语句id都是偶数

当某台机器有vip的时候,不能从这台机器连接vip

未涉及到的地方,可查看前面博文或参考资料

ubuntu mysql双主热备配置_mysql学习:mysql双主热备+lvs+keepalived配置相关推荐

  1. mysql像plsql一样删除提交_MySQL学习-MySQL内置功能_事务操作

    1.事务详解 1.1 事务的概念 MySQL 事务主要用于处理操作量大,复杂度高的数据.比如说,在人员管理系统中,你删除一个人员,你即需要删除人员的基本资料,也要删除和该人员相关的信息,如信箱,文章等 ...

  2. mysql64位机安装和配置_MySQL学习第二天 安装和配置mysql winx64

    一.安装方式 MySQL安装文件分为两种,一种是MSI格式的,一种是ZIP格式的.下面来看看这两种方式: MSI格式的可以直接点击安装,按照它给出的安装提示进行安装,Windows操作系统下一般MyS ...

  3. mysql 报表统计sql使用实例_mysql 案例~mysql元数据的sql统计

    一 简介:今天我们来收集下提取元数据的sql 二 前沿: information_schema  引擎 memory 元数据收集表 三 sql语句: 1#没有使用索引的表统计 SELECT t.TAB ...

  4. mysql cluster rpm包的作用_MySQL之——MySQL Cluster集群搭建详解(基于RPM安装包)

    1.下载MySQL-cluster 7.3.7 http://dev.mysql.com/downloads/cluster/ 2.环境清理及安装 1)清理CentOS6.5自带的mysql服务,其中 ...

  5. mysql数据库管理系统的配置文件是_MySQL学习笔记_1_MySQL数据库管理系统概述

    1. MySQL架构 C/S: client / server架构 MySQL DBMS(Data Bank Management System): 数据库管理系统 客户端  服务器 --->  ...

  6. mysql5.7.19解压教程_Mysql学习mysql5.7.19 winx64解压缩版安装配置教程

    <MysqL学习MysqL5.7.19 winx64解压缩版安装配置教程>要点: 本文介绍了MysqL学习MysqL5.7.19 winx64解压缩版安装配置教程,希望对您有用.如果有疑问 ...

  7. mysql里面有没有map类型_MySQL学习(二) 数据类型

    MySQL支持多种列类型:数值类型.日期/时间类型和字符串(字符)类型. 数值类型 数值类型又分为整数型与小数型 整数型 下面的表显示了需要的每个整数类型的存储和范围 创建一张表 mysql> ...

  8. mysql反删除恢复软件下载_MySQL Recovery(MySQL恢复软件)下载 v4.1官方版-下载啦

    MySQL Recovery是一个强大好用的mysql数据库修复工具,与其他类似的程序相比,该软件具有更多更好的恢复功能,帮助用户更好地恢复MySQL数据,恢复的数据库有多种导出模式,可以同时打开多个 ...

  9. sql要学mysql还是php,MySQL_与MSSQL对比学习MYSQL的心得(一)--基本语法,这一期主要是学习MYSQL的基本 - phpStudy...

    与MSSQL对比学习MYSQL的心得(一)--基本语法 这一期主要是学习MYSQL的基本语法,陆续还会有续期的文章,敬请期待 语法的差异 我这里主要说语法的不同 1.默认约束 区别:mysql里面DE ...

  10. LVS/keepalived配置

    LVS/DR + keepalived配置 注意:前面虽然我们已经配置过一些操作,但是下面我们使用keepaliave操作和之前的操作是有些冲突的,所以若是之前配置过DR,请首先做如下操作:dr上执行 ...

最新文章

  1. arcgis合并tif影像_微图影像地图导出拼接大图的参数说明
  2. 让自己的开源项目支持CocoaPods集成
  3. android微信支付的实现
  4. Resource 资源 ---Day09 2014-06-13
  5. 微信小程序中使用圆形倒计时实例
  6. 我记录网站综合系统 -- 技术原理解析[0:简介(代序) 1.7Beta源代码下载开始]...
  7. Android之解决PC端上传http表单格式文件手机解析文件名乱码问题和PC浏览器下载文件的文件名显示乱码问题
  8. bmf mysql_bmf 的动态 - SegmentFault 思否
  9. L3-020 至多删三个字符 (30 分) DP
  10. 【Java从0到架构师】MyBatis - 查询
  11. PAT 1103 Integer Factorization[难]
  12. Netty 整合 MessagePack 序列化框架 + LengthFieldBasedFrameDecoder 自定义解码器
  13. 一只喵的西行记-12 灯火阑珊处那娃在哭
  14. 使用mac电脑生成 icns图标
  15. 【YOLOv3原文+翻译】YOLOv3:An Incremental Improvement
  16. ACM程序设计大赛概况
  17. 计算机教案课后记怎么写,教案后记怎么写
  18. 《数据结构》实验报告六:图的表示与遍历
  19. 初探USB3.0极简方案FT601Q芯片方案
  20. 硬盘中单击auto病毒的清理

热门文章

  1. 奥维中如何关闭gcj02坐标_QGIS入门知识:啥是坐标系
  2. kettle 下载地址
  3. 关于Bitmapimage图片保存(png格式)
  4. 内蒙古工业大学计算机好调剂吗,内蒙古工业大学信息工程学院2017硕士研究生第三次调剂公告...
  5. 打开gedit_使用 gedit 文本编辑器优化你的 GNOME 体验 | Linux 中国
  6. Hibernate方法save、update、merge、saveOrUpdate及get和load的区别
  7. 简单高效的短链接生成服务C#实现
  8. IIS 配置 PHP 环境搭建:web 文件管理器
  9. 整理发布一些关于VMware vSphere的文档
  10. mybatis-generator逆向工程生成boolean字段解决办法