sofh7777 发表于 2015-11-20 09:02:21

Mysql 5.6 双主互备高可用(Keepalived+mysql) (二)

  安装环境:Redhat 5.8
  mysql版本:mysql-5.6.25
  DB机器A:192.168.8.193 主机名:mysql01

  DB机器B:192.168.8.194 主机名:mysql02
  mysql VIP(IP) :192.168.8.198
  -------------------------------------------------------------------------------------------------------------------------------------------------
  简介:keepalived 是基于虚拟路由冗余协议vrrp来完成它的工作。 长见于高可用集群中,通常搭配 LVS,haproxy

  等负载均衡器,主要用作RealServer的健康状态检查以及LoadBalance主机和BackUP主机之间failover的实现。

  -------------------------------------------------------------------------------------------------------------------------------------------------
  上一篇文章中我们完成了 mysql 的安装,本篇我们开始 lvs+keepalived 软件的安装。
  首先我们需要确认机器的内核版本并安装相应的依赖包:
  uname -r输出结果:

  2.6.18-308.el5

  yum -y install kernel kernel-devel gcc openssl openssl-devel popt

  检查当前加载的内核模块,查看是否存在ip_vs模块

  lsmod | grep ip_vs 或者modprobe -l | grep ipvs 查看有无输出

  如果没有,我们需要通过yum安装lvs管理模块ipvs:
  yum -y install ipvsadm             #Linux 2.6内核已经集成了lvs软件,ipvsadm为lvs管理工具

  modprobe ip_vs                   #加载ip_vs
  lsmod | grepip_vs            #确认是否存在,输出如下:

  ip_vs               1221120

  调整服务器参数,开启路由转发功能:

  vi/etc/sysctl.conf

  net.ipv4.ip_forward= 1#默认为0
  /sbin/sysctl -p   #使修改立即生效
  --------------------------------------------------------------------------------------------------------------------------------------------------
  关闭SElinux、配置防火墙:
  vi /etc/selinux/config

  SELINUX=disabled      #修改

  setenforce 0                   #使配置立即生效

  vi /etc/sysconfig/iptables

  -A RH-Firewall-1-INPUT -d 224.0.0.18 -j ACCEPT      #默认需要使用D类多播地址224.0.0.18 进行心跳通信,这里配置允许vrrp虚拟路由器冗余协议组播地址通信,

  -A RH-Firewall-1-INPUT -m state --state NEW -m tcp -p tcp --dport 3306 -j ACCEPT    #允许3306端口通过防火墙

  /etc/init.d/iptables restart #重启防火墙使配置生效

  --------------------------------------------------------------------------------------------------------------------------------------------------

  解压并编译安装 keepalived :

  tar -zxvf keepalived-1.2.15.tar.gz
  ./configure --sysconf=/etc --disable-fwmark --prefix=/usr/local/keepalived --with-kernel-dir=/usr/src/kernels/2.6.18-400.1.1.el5-x86_64
  make && make install
  加入系统服务并随系统开机启动:
  chkconfig--addkeepalived

  chkconfigkeepalived on
  chkconfig --listkeepalived       输出结果:

  keepalived      0:关闭1:关闭2:启用3:启用4:启用5:启用6:关闭
  配置 keepalived 日志:

vi /etc/sysconfig/keepalived修改后如下:
  KEEPALIVED_OPTIONS="-D -d -S 0"

  然后设置系统日志 syslog:
  vi /etc/syslog.conf    在最后添加一行

  local0.*                               /var/log/keepalived.log

  配置 keepalived 环境变量:

  echoexportPATH='$PATH:/usr/local/keepalived/sbin'>>/etc/profile
  source /etc/profile   #使配置立即生效
  启动 keepalived :
  service keepalived start   执行后输出:

  启动 keepalived:/bin/bash: keepalived: command not found                                                      

  [失败]
  默认安装路径为 /usr/local/keepalived/sbin ,这里我们建立一个软连接 ln -s /usr/local/keepalived/sbin/keepalived/usr/sbin/
  或者直接:
  cp /usr/local/keepalived/sbin/keepalived /usr/sbin
  然后可以正常启动 keepalived 。

  -------------------------------------------------------------------------------------------------------------------------------------------------------

  keepalived 的配置文件 keepalived.conf 默认在 /etc/keepalived 目录下,启动时会加载,(也可以通过 -f 绝对路径/keepalived.conf

  指定要加载的配置)这里我们需要修改 keepalived.conf 文件:此处作为主服务器来配置

  vi/etc/keepalived/keepalived.conf

  
! Configuration File for keepalived

global_defs {
  notification_email {
   ********@qq.com#监控报警邮箱,可以设置多个,如果要使用,注意SMTP服务是否开启,一般不采用
  }
  notification_email_from root@localhost#设置邮件的发送地址
  smtp_server 127.0.0.1   #设置连接SMTP SERVER的超时时间
  smtp_connect_timeout 30   #邮件服务链接超时的最长时间
  router_id Mysql+LVS       #表示Keepalived服务的一个标识,发邮件时显示在邮件主题中的信息
   }

vrrp_script check_running {   
  script "/etc/keepalived/check_slave.pl 127.0.0.1"#健康检查脚本路径,脚本需要我们指定

  interval 2      #检查心跳

}
vrrp_instance HA_1 {

   state BACKUP      #两台这里都是BACKUP,只有MASTER和BACKUP两种状态,必须保持大写   
  interface eth0      #网卡,通过ifconfig命令查看
  virtual_router_id    #虚拟路由标识,同一个vrrp实例使用唯一的标识,同一个vrrp_instance下,MASTER和BACKUP必须一致
  priority 100             #另一台从服务器改为90,定义优先级,数字越大,优先级越高。在一个vrrp_instance下,MASTER的优先级必须大于BACKUP的优先级
  advert_int 1            #设定MASTER与BACKUP负载均衡器之间同步检查的时间间隔,单位是秒
  nopreempt             #不抢占,只在优先级高的机器上设置即可,优先级低的机器不设置,另一台需要删除此项
   authentication {                  #认证信息
  auth_type PASS
  auth_pass 123456
  }

track_script {
  check_running
  }
   virtual_ipaddress {
  192.168.8.198/24 dev eth0   # Mysql的对外服务IP,即VIP
  }
  --------------------------------------------------------------------------
  Mysql 监控脚本 check_slave.pl

  vi /etc/keepalived/check_slave.pl #编辑:   

  #!/usr/bin/perl -w

  use DBI;

  use DBD::mysql;

  # CONFIG VARIABLES

  $SBM = 120;

  $db = "shenguo_test";         #$db 数据库名称

  $host = $ARGV;

  $port = 3306;

  $user = "repl_user";               #user 数据库用户名

  $pw = "repl_passwd";            #pw 数据库密码

  # SQL query

  $query = "show slave status";

  $dbh = DBI->connect("DBI:mysql:$db:$host:$port", $user, $pw, { RaiseError => 0,PrintError => 0 });

  if (!defined($dbh)) {

  exit 1;

  }

  $sqlQuery = $dbh->prepare($query);

  $sqlQuery->execute;

  $Slave_IO_Running ="";

  $Slave_SQL_Running = "";

  $Seconds_Behind_Master = "";

  while (my $ref = $sqlQuery->fetchrow_hashref()) {

  $Slave_IO_Running = $ref->{'Slave_IO_Running'};

  $Slave_SQL_Running = $ref->{'Slave_SQL_Running'};

  $Seconds_Behind_Master = $ref->{'Seconds_Behind_Master'};

  }

  $sqlQuery->finish;

  $dbh->disconnect();

  if ( $Slave_IO_Running eq "No" || $Slave_SQL_Running eq "No" ) {

  exit 1;

  } else {

  if ( $Seconds_Behind_Master > $SBM ) {

  exit 1;

  } else {

  exit 0;

  }

  }

  #脚本至此结束
  执行命令,添加脚本可执行权限:

  chmod +x/etc/keepalived/check_slave.pl

  ---------------------------------------------------------------------------------------------------------------------------------------------------
  以上为主服务器 keepalived 的安装与配置,从服务器以相同的方式安装,但是要注意文中提到的主从不同的配置项。
  完成所有软件的安装和配置后,我们就可以通过 VIP 地址连接mysql数据库了,赶快验证下!
页: [1]
查看完整版本: Mysql 5.6 双主互备高可用(Keepalived+mysql) (二)