• 云途科技成立于2010年 - 专注全球跨境电商服务器租赁托管!
  • 帮助中心

    您可以通过下方搜索框快速查找您想知道的问题

    heartbeat mysql双机互备实现高可用 安装配置

      in  unix      Tags: 

    先说一下heartbeat的原理,在二台机子上都安装heartbeat,这样heartbeat会相互监听,如果主的挂了,从的会变成主的。如果主的恢复了,在转变过来。主的和从的要实现的高可用程序都要启动。没装成功之前我是这样理解的,heartbeat只要装在一台机器上就行了,由heartbeat来监控二台机器,感觉这样更合理一点,不过这种理解是错误的。

    一,服务器说明

    mysqlMaster eth0 192.168.1.108
    mysqlSlave  eth0 192.168.1.106

    主和从的heartbeat都启动时会在主服务器上产生一个虚拟IP(virtual IP)192.168.1.111

    我在网上找关于heartbeat安装配置的时候,发现全部是双网卡的,没发现一个是单网卡,开始没配置成功的时候,我还以为使用heartbeat必须是双网卡呢,其实不需要的。

    二,安装mysql和实现mysql主主同步

    mysql安装请参考:linux cmake 安装mysql5.5.11,以及更高版本

    mysql主主同步mysql replication 互为主从的安装及配置,以及数据同步

    mysql我安装过好多次,我都记不清了,在arch,CentOS,Ubuntu,rip上面我都装的,博客里单独拿出来写的到是不多,夹杂其他博文里面的比较多,可以搜索一下。

    三,安装heartbeat,主从一样

    yum install heartbeat

    四,heartbeat配置

    安装好后是/etc/ha.d/下面是没有配置文件的,你可以从

    [root@mysqlMaster ha.d]# cd /usr/share/doc/heartbeat-2.1.4/
    [root@mysqlMaster heartbeat-2.1.4]# cp ha.cf authkeys haresources /etc/ha.d/

    考过来的这三个文件,其实没有配置什么,基本上都注释掉了,不过可以看参数说明。

    1,修改配置文件ha.cf,主从配置差不多

    [root@mysqlMaster ha.d]#  cat /etc/ha.d/ha.cf |awk '{if($0 !~ /^$/ && $0 !~ /^#/) {print $0}}'
    logfile /var/log/ha-log              //设置heartbeat日志存放位置
    keepalive 2                         //设定心跳(监测)时间时间为2秒
    deadtime 30                          //设置监测不到,并认定其死机的时间是30
    warntime 10                          //设置监测到的警告时间为10
    udpport 694                          //设置heartbeat监听端口
    initdead 120                           //主机死掉后预留的恢复时间
    bcast   eth0                          //设置heartbeat监听的网卡
    ucast   eth0 192.168.1.106           //单播,现在是主服务上,在这里填写从服务器IP,如果在从的上面,就填写主的IP
    baud    19200                          //设置串行通讯的波特率
    auto_failback on                           //主服务恢复后从从服务器切换到主服务器
    node mysqlMaster                          //主服务器名,下面会提到如果何设置这个参数
    node mysqlSlave                          //从服务器名,这二个名字必须根uname -n一样,不然报错。
    ping 192.168.1.1                            //网关
    respawn hacluster /usr/lib/heartbeat/ipfail    //可选,列出和heartbeat一起启动和关闭的进程
    apiauth ipfail gid=haclient uid=hacluster      //启动用户和组

    2,修改配置authkeys,主从一样

    [root@mysqlMaster ha.d]#  cat /etc/ha.d/authkeys |awk '{if($0 !~ /^$/ && $0 !~ /^#/) {print $0}}'
    auth 1
    1 crc

    authkeys文件用于设定heartbeat的认证方式,共有三种可用的认证方式:crc、md5和sha1,三种认证方式的安全性依次提高,但是占用的系统资源也依次增加。

    改好后要加权限
    [root@mysqlMaster ha.d]# chmod 600 authkeys

    不然启动时会报以下错误
    heartbeat: udpport setting must precede media statementsheartbeat[5529]: 2012/05/15_20:09:25 ERROR: Bad permissions on keyfile [/etc/ha.d/authkeys], 600 recommended.

    3,修改haresources,主从一样

    [root@mysqlMaster ha.d]#  cat /etc/ha.d/haresources |awk '{if($0 !~ /^$/ && $0 !~ /^#/) {print $0}}'
    mysqlMaster IPaddr::192.168.1.111/24/eth0:0 mysqld

    说明
    1),mysqlMaster这里填写主服务器的名称,这个要根uname -n一样
    2),192.168.1.111这个是虚拟IP
    3),eth0:0虚拟IP对应的网络接口
    4),mysqld是mysql服务商的启动脚本,一般是放在/etc/init.d/下面

    四,修改主机名,也就是uname -n

    1,修改主服务器的network

    [root@mysqlMaster ha.d]# cat /etc/sysconfig/network
    NETWORKING=yes
    NETWORKING_IPV6=yes
    #HOSTNAME=localhost.localdomain   //这是以前的,注释掉了
    GATEWAY=192.168.1.1
    HOSTNAME=mysqlMaster     //这是我添加的

    2,修改从服务器的network

    [root@mysqlSlave ha.d]# cat /etc/sysconfig/network
    NETWORKING=yes
    NETWORKING_IPV6=yes
    #HOSTNAME=localhost.localdomain   //这是以前的,注释掉了
    GATEWAY=192.168.1.1
    HOSTNAME=mysqlSlave     //这是我添加的

    3,修改/etc/hosts,主从一样

    192.168.1.108           mysqlMaster
    192.168.1.106           mysqlSlave

    添加上面的内容后,然后重启网络/etc/init.d/network restart,就能看到

    [root@mysqlMaster ha.d]# uname -n
     mysqlMaster

    五,主和从都启动heartbeat

    /etc/init.d/heartbeat start

    启动后mysqld也会被heartbeat启动。

    [root@mysqlSlave ha.d]# netstat -upnl |grep heart
    udp        0      0 0.0.0.0:694                 0.0.0.0:*                               17752/heartbeat: wr
    udp        0      0 0.0.0.0:694                 0.0.0.0:*                               17750/heartbeat: wr
    udp        0      0 0.0.0.0:56652               0.0.0.0:*                               17752/heartbeat: wr
    udp        0      0 0.0.0.0:45286               0.0.0.0:*                               17750/heartbeat: wr

    694是监听的端口,剩下的二个没弄明白,我猜测是给对方用的,也就是说主的给从的留了二个端口,从的给主的留了二个端口。并且会产生虚拟IP,看下图

    heartbeat启动成功

    heartbeat启动成功

    六,测试heartbeat

    [root@mysqlMaster ha.d]# mysql -utest -p -h 192.168.1.111

    连接数据库时用这个虚拟IP来连接,这样给人感觉就像一台服务器一样,这个根mysql proxy的连接池有点像。

    把主服务器的heartbeat停止掉后,神奇的事情发生了,虚拟IP从主服务器跑到从服务器去,在从服务器mysql -utest -p -h 192.168.1.111,这样连接可以进去,而主服务器不行了。

    我也发现一个问题,就是当我把主服务器的mysql停止掉,heartbeat不停止,发现从服务器并没有接替主服务器。heartbeat只针对到机器,不针对到进程。如果有人知道怎么解决,还请留个言,非常感谢。



    • 外贸虚拟主机

      1GB硬盘

      2个独立站点

      1000M带宽

      不限制流量

      美国外贸专用虚拟主机,cPanel面板,每天远程备份.
      服务器配置:2*E5 32核,96GB 内存,4*2TB 硬盘 RAID10 阵列.

      ¥180/年

    • 美国/荷兰外贸VPS

      2核CPU

      1G内存

      30硬盘

      10M带宽

      美国/荷兰外贸云服务器,专注外贸服务器行业12年.
      服务器配置:2*E5 32核,96GB 内存,4*2TB 硬盘 RAID10 阵列.

      ¥99/月

    • 全球外贸服务器

      8核CPU

      32G内存

      1TB硬盘

      1000M带宽

      已部署数据中心:美国洛杉矶/亚特兰大、荷兰、加拿大、英国伦敦、德国、拉脱维亚、瑞典、爱沙尼亚
      自有机柜(全球九大数据中心),稳定在线率:99.9%

      ¥999/月 原价1380

    7*24小时 在线提交工单

    如果您的问题没有得到解决,推荐您在线提交工单,我们的客服人员会第一时间为您解决问题

    展开