mysql主主和F5高可用_MYSQL 主主热备高可用方案与实现
咱们选择主主互热备作生产环境MYSQL高可用方案,该方案的优势是在压力大的时候,仍然能够经过设置负载均衡来作业务分发。并且最重要的是配置简单,两份配置都同样,改个IP就能够
就喜欢简单的东西。mysql
目前考虑负债均衡分发可能有同步过程当中引发数据不一致的问题,咱们使用主主机制作数据即时同步,用KeepAliveD作数据库监控及故障自动切换。redis
实现:sql
1.数据库主从设置:mongodb
MYSQL安装完成后,mysql的配置修改成:shell
写道
[mysqld]
datadir=/usr/local/mysql/data
socket=/var/lib/mysql/mysql.sock
max_connection=1000
log-bin=mysql-bin
server-id=2
//这块两台服务器须要设置成不一样
binlog-do-db=CU
binlog-do-db=FAE
binlog-do-db=HA
//它是用于主从同步时,给master用的配置参数。来讲明须要复制那些库给从库。由于有时主从不是要把所有的DB都复制给从库。
binlog-ignore-db=mysql
//安全起见,不管如何不从主同步系统DB
replicate-do-db=CU
replicate-do-db=FAE
replicate-do-db=HA
//从主读取的库
replicate-ignore-db=mysql
//安全起见,不管如何不从主同步系统DB
log-slave-updates
#slave-skip-errors=all
#auto_increment_increment=2
#auto_increment_offset=2
//不是用负载均衡模式,用的是主主模式,因此这块不须要设置
[mysql.server]
user=mysql
basedir=/usr/local/mysql
[client]
socket=/var/lib/mysql/mysql.sock
配置好以后,在两台机器上分别给从创建帐号,登陆两台Mysql,执行如下语句:
数据库
写道
CHANGE MASTER TO
MASTER_HOST='192.***.***.***',
MASTER_USER='repl_user',
MASTER_PASSWORD='hj3****’;
注意的一点就是,使用sqlyog,必定要使用12.09以上的版本,否者主从同步会出现脏数据,由于sqlyog的老版本在修改数据库的时候,某些时候不会产生binlog,致使这些修改数据不会同步。安全
2.故障检测和主从切换。bash
咱们使用keepalived和shell脚本搞定。服务器
原理:两台数据库服务器上同时部署Keepalived。Keepalived全部节点会互相通讯,互报平安。一旦抢到主的机器的Keepalived没有心跳了,从机器的Keepalived会把主的IP抢过来。Keepalived会按期调用shell脚本检测本机mysql是否可用。一旦本机mysq不可用,Keepalived会通知其余机器的Keepalived抢主的IP来实现故障切换。网络
Keepalived的配置:
写道
! Configuration File for keepalived
#Keepalived组的名称,各个组之间互相不影响
global_defs {
router_id cu_ha_router
}
#检测MYSQL的实例
vrrp_instance mysql {
state BACKUP # 主也配置为SLAVE
interface eth0 #绑定虚拟IP的网络接口
virtual_router_id 101 #VRRP组名,两个节点的设置必须同样,以指明各个节点属于同一VRRP组
priority 150 #节点的优先级(1-254之间),备用节点必须比主节点优先级低
nopreempt # 不抢占,注意加上
advert_int 1 #组播信息发送间隔,两个节点设置必须同样
authentication { #设置验证信息,两个节点必须一致
auth_type PASS
auth_pass xmotor
}
#必定要注意这块子网掩码的计算,写错了可能会影响整台的网络访问
virtual_ipaddress {
172.*.*.201/20
}
track_script {
chk_mysql
}
#咱们使用的是亚马逊云,不能使用组播模式(advertisement),因此必须使用单播模式。单播模式须要增长如下配置。咱们作过测试,单播模式支持三台或以上的机器。
unicast_src_ip 172.31.2.1 #localIp
unicast_peer {
172.31.2.124 #Resource-02
#172.31.0.207 #Management
}
#如下四个脚本分别在机器变成主、从、失败、宕机的时候执行的脚本,目前咱们只记录一条日志
notify_master "/home/keepalived/scripts/mysql_be_master.sh"
notify_backup "/home/keepalived/scripts/mysql_be_slave.sh"
notify_fault "/home/keepalived/scripts/mysql_fault.sh"
notify_stop "/home/keepalived/scripts/mysql_stop.sh"
}
#检测MYSQL函数
vrrp_script chk_mysql
{
script "/home/keepalived/scripts/mysql_chk.sh eth0 root root"
interval 2
timeout 2
fall 3
}
vrrp_script chk_redis
{
script "/home/keepalived/scripts/redis_check.sh 6391 eth0"
interval 2
timeout 2
fall 3
}
vrrp_script chk_mongo
{
script "/home/keepalived/scripts/mongo_chk.sh eth0"
interval 2
timeout 2
fall 3
}
vrrp_instance redis {
state BACKUP
interface eth0 #绑定虚拟IP的网络接口
virtual_router_id 102 #VRRP组名,两个节点的设置必须同样,以指明各个节点属于同一VRRP组
priority 100 #节点的优先级(1-254之间),备用节点必须比主节点优先级低
advert_int 1 #组播信息发送间隔,两个节点设置必须同样
authentication { #设置验证信息,两个节点必须一致
auth_type PASS
auth_pass xmotor
}
virtual_ipaddress {
172.*.*.202/20
}
track_script {
chk_redis
}
unicast_src_ip 172.*.*.1 #localIp
unicast_peer {
172.*.*.124 #Resource-02
#172.*.*.207 #Management
}
notify_master "/home/keepalived/scripts/redis_be_master.sh 6391"
notify_backup "/home/keepalived/scripts/redis_be_slave.sh 172.*.*.* 6391"
notify_fault "/home/keepalived/scripts/redis_fault.sh 6391"
notify_stop "/home/keepalived/scripts/redis_stop.sh 6391"
}
vrrp_instance mongodb {
state BACKUP
interface eth0 #绑定虚拟IP的网络接口
virtual_router_id 103 #VRRP组名,两个节点的设置必须同样,以指明各个节点属于同一VRRP组
priority 100 #节点的优先级(1-254之间),备用节点必须比主节点优先级低
advert_int 1 #组播信息发送间隔,两个节点设置必须同样
authentication { #设置验证信息,两个节点必须一致
auth_type PASS
auth_pass xmotor
}
unicast_src_ip 172.*.*.1 #localIp
unicast_peer {
172.*.*.124 #Resource-02
#172.*.*.207 #Management
}
virtual_ipaddress {
172.*.*.203/20
}
track_script {
chk_mongo
}
notify_master "/home/keepalived/scripts/mongo_be_master.sh"
notify_backup "/home/keepalived/scripts/mongo_be_slave.sh"
notify_fault "/home/keepalived/scripts/mongo_fault.sh"
notify_stop "/home/keepalived/scripts/mongo_stop.sh"
}
下面是检测mysql的脚本,可用返回0,不可用返回1。
写道
#!/bin/bash
#define mysql variable
NETBOARD=$1
MYSQL_USER=$2
MYSQL_PWD=$3
LOGFILE="/var/log/keepalived/mysql/mysql-check.log"
# 看3306端口是否开这
mysql_alive=`netstat -nl | awk 'NR>2{if ($4 ~ /.*:3306/) {print "Yes";exit 0}}'`
#记录日志
echo "[CHECK]" >> $LOGFILE
date >> $LOGFILE
# 取出网关的IP地址
gate=`route -n | grep $NETBOARD | grep UG | awk '{print $2}'`
# 查看网关是否通畅
ping -w 1 -c 1 $gate >/dev/null
ret=$?
#连不上网关,记录日志,返回1
if [ $ret != 0 ];then
echo "Network Gate is not connected" >> $LOGFILE 2>&1
exit 1
fi
Slave_IO_Running=""
Slave_SQL_Running=""
# 若是MYSQL端口是通的,登陆mysql,执行mysql语句,检查mysql状态
if [ "$mysql_alive" == "Yes" ];then
Slave_IO_Running=`mysql -u${MYSQL_USER} -p${MYSQL_PWD} -e"show slave status\G" | grep "Slave_IO_Running:" | awk '{print $2}'`
Slave_SQL_Running=`mysql -u${MYSQL_USER} -p${MYSQL_PWD} -e"show slave status\G" | grep "Slave_SQL_Running:" | awk '{print $2}'`
if [ "$Slave_IO_Running" != "" -a "$Slave_SQL_Running" != "" ];then
echo "Success, Slave_IO_Running = $Slave_IO_Running, Slave_SQL_Running = $Slave_SQL_Running" >> $LOGFILE 2>&1
exit 0
else
mysql -u${MYSQL_USER} -p${MYSQL_PWD} -e"show slave status\G"
getSlaveStatusResult=$?
echo "Failed, Reason: $getSlaveStatusResult" >> $LOGFILE 2>&1
exit 1
fi
else
echo "Mysql Down" >> $LOGFILE 2>&1
exit 1
fi
mysql主主和F5高可用_MYSQL 主主热备高可用方案与实现相关推荐
- 服务器与虚拟机进行双机热备,基于虚拟机的双机热备高可靠协同办公系统
摘 要 随着高校信息化的不断推进,各高校纷纷建立起协同办公系统,推行无纸化.网络化办公.协同办公系统一旦出现故障,将对学校的正常办公造成严重的影响.本文针对虚拟化环境下协同办公系统的高可靠运行问题,介 ...
- mysql+keepalived 双主热备高可用
理论介绍: 我们通常说的双机热备是指两台机器都在运行,但并不是两台机器都同时在提供服务.当提供服务的一台出现故障的时候,另外一台会马上自动接管并且提供服务,而且切换的时间非常短.MySQL双主复制,即 ...
- mysql双机热备数据库_MySQL 数据库双机热备方案
标签: 转载:http://www.microcolor.cn/solutions/80.html 本手册主要介绍通过使用 MicroColor ServHAMirror/Cluster 软件在Win ...
- mysql8双机热备高可用配置
mysql8主从双机热备配置 大致拓扑关系如下 使用的软件为 mysql+keepalived 安装软件前准备 yum -y install epel-release keepalived(添加epe ...
- F5实现2台机器的热备 Priority Group Activation
原文出处:http://zhumeng8337797.blog.163.com/blog/static/100768914201363011312367/ 手上有个项目,2台机器,需要做热备.研究了下 ...
- mysql中非主键不能自增吗_mysql非主键自增长用法实例分析
本文实例讲述了mysql非主键自增长用法.分享给大家供大家参考,具体如下: mysql并非只有主键才能自增长,而是设为键的列就可以设置自增长. 如下: CREATE TABLE t1 ( id I ...
- mysql根据外键多条件查询_MySQL练习-主外键多表查询
练习: 1.建立表关系: 请创建如下表,并创建相关约束 1USE db1;2 CREATE TABLE class(3cid INT AUTO_INCREMENT PRIMARY KEY,4 capt ...
- mysql主键重复会覆盖还是_mysql如果主键重复了会发生什么情况
首先创建一个person表: create TABLE `person`( `id` int not null auto_increment, `name` VARCHAR(255) , `age` ...
- 使用keepalived搭建双机热备高可用一览
很多时候大家为了部署高可用方案都是前端配一个 nginx,如果nginx挂掉怎么办,比如下面这张图: 你可以清楚的看到,如果 192.168.2.100 这台机器挂掉了,那么整个集群就下线了,这个问题 ...
最新文章
- AutoShape:实时单目3D检测网络(ICCV2021)
- PHP移动文件指针ftell()、fseek()、rewind()总结
- 功能奇数次执行和偶数次执行时的结果不同的故障复盘
- Zuul1.0和2.0我们该如何选择?
- 1021 Deepest Root (25 分) 【难度: 中 / 知识点: 树的直径 连通块】
- Docker镜像与容器命令 专题
- [零基础学JAVA]Java SE应用部分-35.JAVA类集之四
- 福字背景|传统中国风国潮设计必备素材!
- iphone11系列的尺寸_揭秘iPhone12日常使用的2大隐患:还不如iPhone11?|iphone11|iphone12|电池|手机|电池容量|iphone...
- 利用thread和sleep生成字符串的伪随机序列
- Android NDK 【错误】The method loadLibrary(String) is undefined for the type Settings.Syste
- 能量时域空间物理_定性半定量物理学——1.如何理解倒空间?
- PX4原生固件,position_estimator_inav解读
- GMP文件分类与编码管理规程
- C++第14周项目1 - 动物怎么叫
- Go语言系列——Go语言介绍
- 提升方法AdaBoost你真的懂吗
- echarts自定义legend图例和tooltip默认提示文字
- chatgpt为什么在中国不能被使用
- 一个人怎么写大型软件
热门文章
- Android 源码编译及常见错误及解决方法
- Oracle安装ORA-12154和ORA-12169问题的解决
- Unknown host ‘services.gradle.org‘ 解决方法
- 解决 “OperationalError: (sqlite3.OperationalError) no such table: ...“问题
- 为什么枚举类优于纯枚举?
- 华为9.0系统机器一键激活xposed框架的流程
- Python获取list中指定元素的索引
- CentOS7 开放端口
- 分析师洞察:边缘数据中心的UPS系统
- Android开发学习之路--Notification之初体验