数据库这一层需要做到避免单点故障可以是主从备份和主主备份,主主备份可能有性能损耗和数据同步的问题。这里记录下主从备份,

mysql进行备份之前确保mysql的版本是一样的,我这里用的都是mysql5.7.18

1、原文博客地址:http://qizhanming.com/blog/2017/06/20/how-to-config-mysql-57-master-slave-replication-on-centos-7

这篇博客已经写的很好了,不再记录了。

mysql备份好了以后,操作主mysql上面的数据可以看到从数据库的数据实时同步的。

2、那问题来了,如果在项目中主mysql挂了,我们是要手动切换msyql吗,这样会比较麻烦的,而且这段时间项目是不能用的。这里用keepalived实现IP的vip漂移,

keepalived就是一个软件,在主mysql和从mysql上面都安装后,会有一个虚拟IP在其中的一台服务器上面,如果这台服务器宕机了,这个IP就会出现在另一台服务器上面,这是keepalived的功能,能够判断是否可用和权重大小,然后自动漂移IP,这个IP是虚拟IP,我们可以自己随意设置,不过要跟主,从mysql的IP在同一个网段,云服务器好像需要再设置下默认是关闭的,如果是主机是可以直接用的。

1、安装keepalived
  # yum install keepalived –y
2、备份keepalived.conf
  cp /etc/keepalived/keepalived.conf /etc/keepalived/keepalived.conf.back
3、编辑keepalived.conf
  global_defs {
  notification_email{
    xxx@qq.com
  }
  notification_email_from waterlufei123@qq.com
  smtp_server 127.0.0.1
  smtp_connect_timeout 30
  router_id KeepAlive_Mysql
  }
  vrrp_script vs_mysql_82 {
  script "/etc/keepalived/checkMySQL.sh"
  interval 60
  }
  vrrp_instance VI_82 {
  state BACKUP
  nopreempt
  interface eth1
  virtual_router_id 82
  priority 100
  advert_int 5
  authentication {
  auth_type PASS
  auth_pass 1111
  }
  track_script {
  vs_mysql_82  
  }
  virtual_ipaddress {
  192.168.108.156/24 brd 192.168.108.255 dev eth1 label eth1:1
  }
  }
  virtual_server 192.168.108.156 3306 {
  delay_loop 2
  lb_algo wrr
  lb_kind DR
  persistence_timeout 60
  protocol TCP
  real_server 192.168.108.146 3306 {
  weight 3
  TCP_CHECK {
  connect_timeout 10
  nb_get_retry 3
  delay_before_retry 3
  connect_port 3306
  }
  }
  }
其中/etc/keepalived/checkMySQL.sh需要新建,内容为:
  echo "enter mysql_check.sh" >> /etc/keepalived/check_mysql.log
  MYSQL=/usr/bin/mysql
  MYSQL_HOST=127.0.0.1
  MYSQL_USER=user
  MYSQL_PASSWORD=password
  MYSQL_PORT=3306
  # 日志文件
  LOG_FILE=/etc/keepalived/check_mysql.log
  # 检查次数  
  CHECK_TIME=3
  #mysql is working MYSQL_OK is 1 , mysql down MYSQL_OK is 0
  MYSQL_OK=1

  function check_mysql_helth (){
    $MYSQL -h $MYSQL_HOST -u $MYSQL_USER -p${MYSQL_PASSWORD} -P${MYSQL_PORT} -e "show status;" >/dev/null 2>&1
    if [ $? = 0 ] ;then
    MYSQL_OK=1
    else
    MYSQL_OK=0
    fi
    return $MYSQL_OK
  }
  while [ $CHECK_TIME -ne 0 ]
  do
  let "CHECK_TIME -= 1"
  check_mysql_helth
  if [ $MYSQL_OK = 1 ] ; then
  CHECK_TIME=0
  #echo `date --date=today +"%Y-%M-%d %H:%m:%S"` - [INFO] - mysql available: success[$MYSQL_OK] >> $LOG_FILE
  exit 0
  fi
  if [ $MYSQL_OK -eq 0 ] && [ $CHECK_TIME -eq 0 ]
  then
  /etc/init.d/keepalived stop
  echo `date --date=today +"%Y-%M-%d %H:%m:%S"` - [INFO] - mysql invaild. keepalived stop. >> $LOG_FILE

  exit 1
  fi
  sleep 1  
  done
  添加执行权限:
  shell > chmod +x /etc/keepalived/checkMySQL.sh
  手动执行下这个脚本,看看返回是否是0,如果是1,请检查mysql连不上的原因:
  shell > /etc/keepalived/checkMySQL.sh
  shell > echo $?
  从库的keepalived.conf为:
  global_defs {
  notification_email{
  1163804452@qq.com
  }
  notification_email_from waterlufei123@qq.com
  smtp_server 127.0.0.1
  smtp_connect_timeout 30
  router_id KeepAlive_Mysql
  }
  vrrp_script vs_mysql_82 {
  script "/etc/keepalived/checkMySQL.sh"
  interval 60
  }
  vrrp_instance VI_82 {
  state BACKUP
  nopreempt
  interface eth0
  virtual_router_id 82
  priority 90
  advert_int 5
  authentication {
  auth_type PASS
  auth_pass 1111
  }
  track_script {
  vs_mysql_82
  }
  virtual_ipaddress {
  192.168.108.156/24 brd 192.168.108.255 dev eth0 label eth0:1  
  }
  }
  virtual_server 192.168.108.156 3306 {
  delay_loop 2
  lb_algo wrr
  lb_kind DR
  persistence_timeout 60
  protocol TCP
  real_server 192.168.108.145 3306 {
  weight 3  
  TCP_CHECK {
  connect_timeout 10
  nb_get_retry 3
  delay_before_retry 3
  connect_port 3306
  }  
  }
 }
/etc/keepalived/checkMySQL.sh文件一样。
然后主从服务器都启动keepalived:
shell > service keepalived start
shell > chkconfig keepalived on
查看虚拟VIP
# ip addr
连接数据库IP是192.168.108.156,当从库坏了以后不应该主库,当主库坏了以后,VIP会漂移到145上,当我们继续访问192.168.108.156时,实际访问的是145上的数据库

总的来说就是keepalived可以实现生成虚拟IP的功能,但是已什么为条件生成转移VIP呢?所以这里就加了checkMySQL.sh配置文件,根据mysql的状态漂移vip,然后呢,然后这里keepalived还可以用到其他地方,例如nginx,然后弄一个checkNginx.conf之类的,实现nginx的自动切换,这里也就是 说说还没做过

mysql主从备份+keepalived自动切换的更多相关文章

  1. mysql主从备份及常见问题处理

    1.mysql主从备份基本原理 mysql支持单向.异步复制,复制过程中一个服务器充当主服务器,而一个或多个其它服务器充当从服务器.mysql复制基于主服务器在二进制日志中跟踪所有对数据库的更改(更新 ...

  2. mysql主从备份及原理分析

    一.mysql主从备份(复制)的基本原理mysql支持单向.异步复制,复制过程中一个服务器充当主服务器,而一个或多个其它服务器充当从服务器.mysql复制基于主服务器在二进制日志中跟踪所有对数据库的更 ...

  3. 检测MySQL主从备份是否运行

    通过查看 slave  状态,确保 Slave_IO_Running: Yes Slave_SQL_Running: Yes #!/bin/bash#Author:Darius-Dmysql -uro ...

  4. MySQL主从备份配置实例

    转载自:https://www.cnblogs.com/ahaii/p/6307648.html MySQL主从备份配置实例 场景: 1.主服务器192.168.0.225.从服务器192.168.0 ...

  5. django+centos+mariadb读写分离完美实现(上)-mysql主从备份实现

    首先画图一张,用来展示今天要做的事情,读写分离,个人理解就是使用mysql主从备份的原理,让两个数据库同时为自己提供服务.其中主库负责数据保存,从库负责数据展示,可以一主一从,也可以一主多从.从而降低 ...

  6. 一次mysql主从加keepalived配置搭建及切换演示

    [需求] 根据需求需要搭建mysql主从架构数据库及加keepalived进行自动切换VIP [环境介绍]  系统环境:CentOS release 6.4 (Final) + Server vers ...

  7. mysql主从备份、主从切换的例子

    指定binlog(因为时通过binlog实现数据同步的) 配置完后重启数据库服务,用show master status可以看到Master信息. StepB: 在SerB的my.cnf中指定 [ht ...

  8. Mysql主从备份、主主备份

    简单介绍mysql双机,多机异地热备简单原理实战. 双机热备的概念简单说一下,就是要保持两个数据库的状态自动同步.对任何一个数据库的操作都自动应用到另外一个数据库,始终保持两个数据库数据一致. 这样做 ...

  9. mysql主从备份功能配置与測试

    在高訪问量服务环境下,单机配置mysql服务将无法满足频繁快速的数据读写操作. 一旦mysql出现故障造成数据丢失.无法恢复. 因此.在mysql服务上启用主从备份功能,支持读写分离技术.最靠可的是搭 ...

随机推荐

  1. StackExchange.Redis学习笔记(三)

    这一章主要写一些StackExchange.Redis的配置及不太经常用到的函数 数据库连接 下面是我的连接字符串,里面指定了地址,密码,及默认的数据库 Redis启动后默认会分成0-15个数据库,不 ...

  2. python 保存命令执行结果

    保存命令执行的结果需哟使用os.popen("系统命令").read(),然后使用变量赋值输出即可 >>> result = os.popen("df ...

  3. TQ2440在Ubuntu16.04上如何搭建DNW烧写环境

    八月份国赛比完,原计划开始的嵌入式Linux学习一直拖到了现在:由于之前所有的开发全在Windows下进行的,对各种底层完全不清楚,刚好这段时间开始学习Linux,我就在想能不能把开发环境给迁移到Li ...

  4. Cubieboard2安装Fedora20

    几天前入手一块Cubieboard2,又买了张16G的TF卡,装个linux折腾折腾.以前都是在虚拟机上用linux,个人比较喜欢Fedora,因为总能用上最新版的软件,像支持C++11的GCC.Cl ...

  5. 《java.util.concurrent 包源码阅读》03 锁

    Condition接口 应用场景:一个线程因为某个condition不满足被挂起,直到该Condition被满足了. 类似与Object的wait/notify,因此Condition对象应该是被多线 ...

  6. 13. ZooKeeper最佳实践

    以下列举了运行和管理ZooKeeper ensemble的一些最佳实践: ZooKeeper数据目录包含快照和事务日志文件.如果autopurge选项未启用,定期清理目录是一个好习惯.另外,管理员可能 ...

  7. 自动微分方法(auto diff)

    学习机器学习的同学在学习过程中会经常遇到一个问题,那就是对目标函数进行求微分,线性回归这类简单的就不说.复杂的如神经网络类那些求导过程的酸爽.像我还是那种比较粗心的人往往有十导九错,所以说自动求导就十 ...

  8. 原生javascript选项卡

    js选项卡是一个常用的实现.这里我们将用原生js来将其给予实现. 首先html代码: <div id="container"> <input type=" ...

  9. CCF-201509-3-生成模板系统

    问题描述 试题编号: 201509-3 试题名称: 模板生成系统 时间限制: 1.0s 内存限制: 256.0MB 问题描述: 问题描述 成成最近在搭建一个网站,其中一些页面的部分内容来自数据库中不同 ...

  10. PHP实现的进度条效果详解

      <?php //防止执行超时 set_time_limit(0); //清空并关闭输出缓存 ob_end_clean(); //需要循环的数据 for($i = 0; $i < 188 ...