Home > 学习 | 工作 > MYsql实现主主复制以及单点故障

MYsql实现主主复制以及单点故障

今天磕磕碰碰的把mysql的主主复制和单点故障搞定了,写下步骤,以及遇到的问题。 

mysql主主复制主要通过mysql较低版本来实现(已确认5.5版本貌似不支持…),于是,我重新下载了mysql-5.1.57-linux-i686-glibc23.tar.gz(124M),然后部署配置mysql,具体部署步骤详见《部署Centos5.4服务器–MySql篇》

ok,如果你的mysql能正常启动了,现在可以进入mysql主主复制的配置阶段了:

一、mysql主主复制

注意:下述配置需同时在两台服务器上配置,不同的地方已经指出。

1、登陆Mysql,在两台服务器上分别创建mysql授权用户:

mysql> grant replication slave,file on *.* to 'root'@'*' identified by '123456';

Query OK, 0 rows affected (0.00 sec)

mysql> flush privileges;

Query OK, 0 rows affected (0.00 sec)

这里我用,Navicat向两台服务器的测试同步的test数据库添加了一些信息,等配置完毕可以修改或者删除这些信息看是否实现主主同步。

2、停止mysql,修改两台服务器的mysql配置文件:

log-bin=mysql-bin #必须要开启二进制日志

 server-id = 1  #另外一台id改成2

binlog-do-db=test  #填写需要同步的数据库

binlog-ignore-db=mysql  #填写不需要同步的数据库

replicate-do-db=test #填写需要同步的数据库

replicate-ignore-db=mysql

log-slave-updates

slave-skip-errors=all

sync_binlog=1

auto_increment_increment=2

auto_increment_offset=1

 

 

稍后我会附上我整个my.cnf配置文件下载地址。

3、重启mysql,进入mysql配置主主同步:

mysql> stop slave;

mysql> flush tables with read lock\G

mysql> show master status\G

*************************** 1. row ***************************
File: mysql-bin.00001
Position: 106
Binlog_Do_DB: jsdoc
Binlog_Ignore_DB: mysql
1 row in set (0.00 sec)

change master to master_host='192.168.1.83',master_user='root',master_password='123456',master_log_file='mysql-bin.000001',master_log_pos=106;

###注意这里红色部分,Node2上面运行的应该是Node2-2的信息,反之Node2-2上面运行上述语句,用Node2得出信息(当然File和Postion一样就只需要改改IP了)###

mysql> start slave;

mysql> show processlist\G

###在这里看到回显里面有State: Has sent all binlog to slave; waiting for binlog to be updated,说明主主复制基本OK了。###

mysql> unlock tables;

4、修改test表,测试主主同步是否完成。

如果主主同步没有问题了,就可以进入下一个阶段,通过keepalived实现mysql的单点故障。如果有问题,请仔细查看mysql的错误日志,并自己google下。

二、keelalived实现mysql单点故障

注意:下述配置需同时在两台服务器上配置,不同的地方已经指出。

1、下载keepalived编译安装

wget http://www.keepalived.org/software/keepalived-1.2.2.tar.gz

tar zxvf keepalived-1.2.2.tar.gz

cd keepalived-1.2.2

./configure

make&&make install

2、配置keepalived

mv /etc/keepalived/keepalived.conf /etc/keepalived/keepalived.conf.bak

vim /etc/keepalived/keepalived.conf

! Configuration File for keepalived
global_defs {
notification_email {
admin@ajcheng.com
}
notification_email_from admin@ajcheng.com
smtp_server 127.0.0.1
smtp_connect_timeout 30
router_id MySQL-ha

}
vrrp_instance VI_1 {
state BACKUP   #两台配置此处均是BACKUP
interface eth0
virtual_router_id 61
priority 100   #优先级,另一台改为90
advert_int 1

nopreempt  #不抢占,只在优先级高的机器上设置即可,优先级低的机器不设置

authentication {
auth_type PASS
auth_pass 111
}
virtual_ipaddress {
192.168.1.86
}
}
virtual_server 192.168.1.86 3306 {
delay_loop 2   #每个2秒检查一次real_server状态
lb_algo wrr   #LVS算法
lb_kind DR    #LVS模式
persistence_timeout 60   #会话保持时间
protocol TCP

real_server 192.168.1.83 3306 {
weight 3
notify_down /usr/local/mysql/bin/mysql.sh  #检测到服务down后执行的脚本
TCP_CHECK {
connect_timeout 10    #连接超时时间
nb_get_retry 3       #重连次数
delay_before_retry 3   #重连间隔时间
connect_port 3306   #健康检查端口
}
}

}

vim /usr/local/mysql/bin/mysql.sh

#!/bin/sh
pkill keepalived

service network restart

chmod -R 777 /usr/local/mysql/bin/mysql.sh

chkconfig keepalived on

service keepalived start

service keepalived stauts

ip add

如果在其中一台机子上看到了VIP 192.168.1.86,且在局域网内能ping通,通过Navicat能过连上,说明ok了!

下面是一些遇到的问题:

1、在两台机子上通过ifconfig命令看不到vip

通过ip add命令查看即可

2、只有其中一台机子有VIP,另外一台没有

因为在keepalived配置文件里面的realserver就写了一台机器,貌似是这样吧?

3、tail -f /var/log/message报如下错误:

May 13 15:06:07 Sql-1 Keepalived_vrrp: ip address associated with VRID not present in received packet : 192.168.1.86
May 13 15:06:07 Sql-1 Keepalived_vrrp: one or more VIP associated with VRID mismatch actual MASTER advert
May 13 15:06:07 Sql-1 Keepalived_vrrp: bogus VRRP packet received on eth0 !!!
May 13 15:06:07 Sql-1 Keepalived_vrrp: VRRP_Instance(VI_1) ignoring received advertisment…

因为virtual_router_id冲突了,之前配置Node1和Node1-1服务器(LVS+keepalived)时,keepalived的配置文件用了这个id,只需要把这个id改成其他的就ok!注意:Node2和Node2-2上,这两个virtual_router_id必须一样。

基本上,结束了,写的估计就自己能看懂吧….汗!

原创文章,转载请注明: 转载自三叶草

本文链接地址:http://www.anjing.me/1246.html

特别声明:商业网站转载需经作者同意,否则视为侵权!

相关日志

POSTED ON 2011/05/13, , , , ,

Comments:5

Leave my own
  1. #1 深冬及夕
    11/05/15 回复

    实现起来很麻烦 的确没看懂!

  2. #2 三叶草
    11/06/18 回复

    2.In file included from /usr/include/stdlib.h:438, from ../../lib/memory.h:30, from vrrp_arp.c:28:/usr/include/sys/types.h:62: 错误:与 ‘dev_t’ 类型冲突/usr/include/linux/types.h:13: 错误:‘dev_t’ 的上一个声明在此/usr/include/sys/types.h:67: 错误:与 ‘gid_t’ 类型冲突/usr/include/linux/types.h:27: 错误:‘gid_t’ 的上一个声明在此/usr/include/sys/types.h:72: 错误:与 ‘mode_t’ 类型冲突/usr/include/linux/types.h:15: 错误:‘mode_t’ 的上一个声明在此/usr/include/sys/types.h:77: 错误:与 ‘nlink_t’ 类型冲突/usr/include/linux/types.h:16: 错误:‘nlink_t’ 的上一个声明在此/usr/include/sys/types.h:82: 错误:与 ‘uid_t’ 类型冲突/usr/include/linux/types.h:26: 错误:‘uid_t’ 的上一个声明在此In file included from /usr/include/sys/types.h:133, from /usr/include/stdlib.h:438, from ../../lib/memory.h:30, from vrrp_arp.c:28:/usr/include/time.h:105: 错误:与 ‘timer_t’ 类型冲突/usr/include/linux/types.h:22: 错误:‘timer_t’ 的上一个声明在此In file included from /usr/include/sys/types.h:220, from /usr/include/stdlib.h:438, from ../../lib/memory.h:30, from vrrp_arp.c:28:/usr/include/sys/select.h:78: 错误:与 ‘fd_set’ 类型冲突/usr/include/linux/types.h:12: 错误:‘fd_set’ 的上一个声明在此In file included from /usr/include/stdlib.h:438, from ../../lib/memory.h:30, from vrrp_arp.c:28:/usr/include/sys/types.h:235: 错误:与 ‘blkcnt_t’ 类型冲突/usr/include/linux/types.h:114: 错误:‘blkcnt_t’ 的上一个声明在此解决方式:安装iptraf

    • #3 三叶草
      11/06/20 回复

      centos5.6的内核不支持keepalived1.2.2以上的版本,请用1.2.1以下版本

      • #4 三叶草
        11/06/20 回复

        有时候,Node-1关闭mysql,执行了了pkill keepalived后,无法连上数据库,看日志,Node-2机器已经接管了VIP,但是在Node-1上ip add,eth0上的VIP并没有释放,需要service network restart 后才自动释放..
        所以将service network restart加入执行脚本/usr/local/mysql/bin/mysql.sh

        • #5 三叶草
          11/07/25 回复

          例如出现下面情况,将不支持lvs!

          Keepalived configuration
          ————————
          Keepalived version       : 1.1.15
          Compiler                 : gcc
          Compiler flags           : -g -O2
          Extra Lib                : -lpopt -lssl -lcrypto 
          Use IPVS Framework       : No
          IPVS sync daemon support : No

          Use VRRP Framework       : Yes
          Use LinkWatch            : No
          Use Debug flags          : No

          解决办法,指定kernel目录:

          /configure –with-kernel-dir=/usr/src/kernels/2.6.9-55.EL-i686 (rhel4.5_32平台)

          ./configure –with-kernel-dir=/usr/src/kernels/2.6.18-164.el5-i686/(rhel5.4_32平台)

Leave a Reply

TOP