咱们选择主主互热备作生产环境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 主主热备高可用方案与实现相关推荐

  1. 服务器与虚拟机进行双机热备,基于虚拟机的双机热备高可靠协同办公系统

    摘 要 随着高校信息化的不断推进,各高校纷纷建立起协同办公系统,推行无纸化.网络化办公.协同办公系统一旦出现故障,将对学校的正常办公造成严重的影响.本文针对虚拟化环境下协同办公系统的高可靠运行问题,介 ...

  2. mysql+keepalived 双主热备高可用

    理论介绍: 我们通常说的双机热备是指两台机器都在运行,但并不是两台机器都同时在提供服务.当提供服务的一台出现故障的时候,另外一台会马上自动接管并且提供服务,而且切换的时间非常短.MySQL双主复制,即 ...

  3. mysql双机热备数据库_MySQL 数据库双机热备方案

    标签: 转载:http://www.microcolor.cn/solutions/80.html 本手册主要介绍通过使用 MicroColor ServHAMirror/Cluster 软件在Win ...

  4. mysql8双机热备高可用配置

    mysql8主从双机热备配置 大致拓扑关系如下 使用的软件为 mysql+keepalived 安装软件前准备 yum -y install epel-release keepalived(添加epe ...

  5. F5实现2台机器的热备 Priority Group Activation

    原文出处:http://zhumeng8337797.blog.163.com/blog/static/100768914201363011312367/ 手上有个项目,2台机器,需要做热备.研究了下 ...

  6. mysql中非主键不能自增吗_mysql非主键自增长用法实例分析

    本文实例讲述了mysql非主键自增长用法.分享给大家供大家参考,具体如下: mysql并非只有主键才能自增长,而是设为键的列就可以设置自增长.   如下: CREATE TABLE t1 ( id I ...

  7. mysql根据外键多条件查询_MySQL练习-主外键多表查询

    练习: 1.建立表关系: 请创建如下表,并创建相关约束 1USE db1;2 CREATE TABLE class(3cid INT AUTO_INCREMENT PRIMARY KEY,4 capt ...

  8. mysql主键重复会覆盖还是_mysql如果主键重复了会发生什么情况

    首先创建一个person表: create TABLE `person`( `id` int not null auto_increment, `name` VARCHAR(255) , `age` ...

  9. 使用keepalived搭建双机热备高可用一览

    很多时候大家为了部署高可用方案都是前端配一个 nginx,如果nginx挂掉怎么办,比如下面这张图: 你可以清楚的看到,如果 192.168.2.100 这台机器挂掉了,那么整个集群就下线了,这个问题 ...

最新文章

  1. AutoShape:实时单目3D检测网络(ICCV2021)
  2. PHP移动文件指针ftell()、fseek()、rewind()总结
  3. 功能奇数次执行和偶数次执行时的结果不同的故障复盘
  4. Zuul1.0和2.0我们该如何选择?
  5. 1021 Deepest Root (25 分) 【难度: 中 / 知识点: 树的直径 连通块】
  6. Docker镜像与容器命令 专题
  7. [零基础学JAVA]Java SE应用部分-35.JAVA类集之四
  8. 福字背景|传统中国风国潮设计必备素材!
  9. iphone11系列的尺寸_揭秘iPhone12日常使用的2大隐患:还不如iPhone11?|iphone11|iphone12|电池|手机|电池容量|iphone...
  10. 利用thread和sleep生成字符串的伪随机序列
  11. Android NDK 【错误】The method loadLibrary(String) is undefined for the type Settings.Syste
  12. 能量时域空间物理_定性半定量物理学——1.如何理解倒空间?
  13. PX4原生固件,position_estimator_inav解读
  14. GMP文件分类与编码管理规程
  15. C++第14周项目1 - 动物怎么叫
  16. Go语言系列——Go语言介绍
  17. 提升方法AdaBoost你真的懂吗
  18. echarts自定义legend图例和tooltip默认提示文字
  19. chatgpt为什么在中国不能被使用
  20. 一个人怎么写大型软件

热门文章

  1. Android 源码编译及常见错误及解决方法
  2. Oracle安装ORA-12154和ORA-12169问题的解决
  3. Unknown host ‘services.gradle.org‘ 解决方法
  4. 解决 “OperationalError: (sqlite3.OperationalError) no such table: ...“问题
  5. 为什么枚举类优于纯枚举?
  6. 华为9.0系统机器一键激活xposed框架的流程
  7. Python获取list中指定元素的索引
  8. CentOS7 开放端口
  9. 分析师洞察:边缘数据中心的UPS系统
  10. Android开发学习之路--Notification之初体验