RHEL6:mysql主从复制及高可用性

  • 格式:doc
  • 大小:228.50 KB
  • 文档页数:7

1、MYSQL复制概述Mysql内建的复制功能是构建大型,高性能应用程序的基础。

将Mysql的数据分布到多个系统上去,这种分布的机制,是通过将Mysql的某一台主机的数据复制到其它主机(slaves)上,并重新执行一遍来实现的。

复制过程中一个服务器充当主服务器,而一个或多个其它服务器充当从服务器。

主服务器将更新写入二进制日志文件,并维护文件的一个索引以跟踪日志循环。

这些日志可以记录发送到从服务器的更新。

当一个从服务器连接主服务器时,它通知主服务器从服务器在日志中读取的最后一次成功更新的位置。

从服务器接收从那时起发生的任何更新,然后封锁并等待主服务器通知新的更新。

请注意当你进行复制时,所有对复制中的表的更新必须在主服务器上进行。

否则,你必须要小心,以避免用户对主服务器上的表进行的更新与对从服务器上的表所进行的更新之间的冲突。

mysql支持的复制类型:1.基于语句的复制:在主服务器上执行的SQL语句,在从服务器上执行同样的语句。

MySQL 默认采用基于语句的复制,效率比较高。

一旦发现没法精确复制时,会自动选着基于行的复制。

2.基于行的复制:把改变的内容复制过去,而不是把命令在从服务器上执行一遍. 从mysql5.0开始支持3.混合类型的复制: 默认采用基于语句的复制,一旦发现基于语句的无法精确的复制时,就会采用基于行的复制。

复制解决的问题MySQL复制技术有以下一些特点:(1) 数据分布(Data distribution )(2) 负载平衡(load balancing)(3) 备份(Backups)(4) 高可用性和容错行High availability and failover复制如何工作整体上来说,复制有3个步骤:(1) master将改变记录到二进制日志(binary log)中(这些记录叫做二进制日志事件,binary log events);(2) slave将master的binary log events拷贝到它的中继日志(relay log);(3) slave重做中继日志中的事件,将改变反映它自己的数据。

下图描述了复制的过程:该过程的第一部分就是master记录二进制日志。

在每个事务更新数据完成之前,master 在二日志记录这些改变。

MySQL将事务串行的写入二进制日志,即使事务中的语句都是交叉执行的。

在事件写入二进制日志完成后,master通知存储引擎提交事务。

下一步就是slave将master的binary log拷贝到它自己的中继日志。

首先,slave开始一个工作线程——I/O线程。

I/O线程在master上打开一个普通的连接,然后开始binlog dump process。

Binlog dump process从master的二进制日志中读取事件,如果已经跟上master,它会睡眠并等待master产生新的事件。

I/O线程将这些事件写入中继日志。

SQL slave thread(SQL从线程)处理该过程的最后一步。

SQL线程从中继日志读取事件,并重放其中的事件而更新slave的数据,使其与master中的数据一致。

只要该线程与I/O 线程保持一致,中继日志通常会位于OS的缓存中,所以中继日志的开销很小。

复制配置:1)server1(192.168.7.201)和server2(192.168.7.202)安装好mysql并修改配置文件:yum -y install mysql-*service mysqld startchkconfig mysqld onvi /etc/f:添加如下内容:[mysqld]log-bin=MySQL-bin //启用二进制日志server-id=1 //数据库ID号,为1时表示为Master,其中master_id必须为1到231之间的一个正整数值,每个同步服务器都必须设定一个唯一的编号,否则同步就不能正常运行了;##在server2上配置为server-id=2修改后在server1和server2主机上重启mysqld服务2)server1和server2相互设置为主从同步(双主)在Server1主机上的设置://建立一个帐户cluster,并且允许从任何地址上来登陆,密码是cluster。

在Server2主机上的设置:在server2和server1上执行相反的操作,使其互为主从,具体操作如下图所示:在Server2主机上的设置:在Server1主机上的设置:可以在f文件中添加“binlog_do_db=数据库名”配置项(可以添加多个)来指定要同步的数据库,有关f中有关其他同步的配置项请自行查看相关文档。

若主MYSQL服务器已经存在,只是后期才搭建从MYSQL服务器,在置配数据同步前应先将主MYSQL服务器的要同步的数据库拷贝到从MYSQL服务器上(如先在主MYSQL上备份数据库,再用备份在从MYSQL服务器上恢复)2、MYSQL高可性群集(主/从模式)在server1和server2上安装软件包keepalived安装keepalived软件包与服务控制在编译安装Keepalived之前,必须先安装内核开发包kernel-devel以及openssl-devel、popt-devel等支持库。

编译安装Keepalived使用指定的linux内核位置对keepalived进行配置,并将安装路径指定为根目录,这样就无需额外创建链接文件了,配置完成后,依次执行make、make install进行安装。

使用keepalived服务执行make install操作之后,会自动生成/etc/init.d/keepalived脚本文件,但还需要手动添加为系统服务,这样就可以使用service、chkconfig工具来对keepalived服务程序进行管理了。

4)修改server1/server2配置文件Server1主机上的配置文件如下图:vi /etc/keepalived/keepalived.conf:! Configuration File for keepalivedglobal_defs {router_id MYSQL-HA}vrrp_instance VI_1 {state BACKUP 注: BACKUP将根据优先级决定主或从;MASTER指定为主;SLAVE指定为从.若一方为MASTER,另一方为SLAVE,则表示双机热备(即一主一从).interface eth0virtual_router_id 51 ##确保和server2相同,同网内不同集群此项必须不同,否则发生冲突priority 100 ##此处server2上设置为50advert_int 1nopreempt ##不抢占,只在priority高的server1上设置,server2上此项注释掉authentication {auth_type PASSauth_pass 1111}virtual_ipaddress {192.168.7.200}}virtual_server 192.168.7.200 3306 {delay_loop 2lb_algo wrrlb_kind DRpersistence_timeout 60protocol TCPreal_server 192.168.7.201 3306 {##server2上此处改为192.168.7.202(即server2本机ip) weight 3notify_down /etc/keepalived/mysql.shTCP_CHECK {connect_timeout 10nb_get_retry 3delay_before_retry 3connect_port 3306}}}Server1主机上有关keepalived.conf文件的具体配置如下:Server2主机的keepalived.conf参考上面的描述修改。

可以使用scp命令把server1主机上配置好的keepalived.conf文件拷贝到server2主机,只要做简单修改即可,如下图所示:5)server1和server2上都添加此检测脚本,作用是当mysql停止工作时自动关闭本机的keepalived,从而实现将故障机器踢出(因每台机器上keepalived只添加了本机为realserver). 当mysqld正常启动起来后,要手动启动keepalived服务。

vi /etc/keepalived /mysql.sh,内容如下:注:如果mysql.sh脚本不能正常执行的话,可以编写一个检测mysqld服务的是否正在运行的脚本,如果mysqld服务停止,则在脚本中停掉keepalived服务,实现故障切换。

并设置一个cron计划任务定期执行检测脚本。

在企业网络内配置cacti 或nagios对mysqld服务进行监控,能在第一时间通知管理员mysqld服务出现异常。

vi /etc/rc.local:modprobe ip_vs ##此模块如果无法自动加载则需手动加载server1和server2启动keepalived守护进程./etc/init.d/keepalived start6)测试在server1上创建一个测试数据库并在数据库中创建一个表,此时在server2上就会自动同步在server1上已创建好的库和表,同样在server2上对数据库或表做任何修改也会同步到server1上。

这说明mysql的主从同步实现了在server1和server2分别执行ip addr show dev eth0命令查看server1和server2对VIP(群集虚拟IP)的控制权。