《RHEL6:mysql主从复制及高可用性.docx》由会员分享,可在线阅读,更多相关《RHEL6:mysql主从复制及高可用性.docx(8页珍藏版)》请在三一办公上搜索。
1、1、MYSQL复制概述Mysql内建的复制功能是构建大型,高性能应用程序的基础。将Mysql的数据分布到多个系 统上去,这种分布的机制,是通过将Mysql的某一台主机的数据复制到其它主机(slaves) 上,并重新执行一遍来实现的。复制过程中一个服务器充当主服务器,而一个或多个其它服 务器充当从服务器。主服务器将更新写入二进制日志文件,并维护文件的一个索引以跟踪日 志循环。这些日志可以记录发送到从服务器的更新。当一个从服务器连接主服务器时,它通 知主服务器从服务器在日志中读取的最后一次成功更新的位置。从服务器接收从那时起发生 的任何更新,然后封锁并等待主服务器通知新的更新。请注意当你进行复制时
2、,所有对复制中的表的更新必须在主服务器上进行。否则,你必须要 小心,以避免用户对主服务器上的表进行的更新与对从服务器上的表所进行的更新之间的冲mysql支持的复制类型:1. 基于语句的复制:在主服务器上执行的SQL语句,在从服务器上执行同样的语句。MySQL默认采用基于语句的复制,效率比较高。G 一旦发现没法精确复制时,会自动选着基于行的复制。2. 基于行的复制:把改变的内容复制过去,而不是把命令在从服务器上执行一遍.从mysql5.0开始支持、3. 混合类型的复制:默认采用基于语句的复制,一旦发现基于语句的无法精确的复制时,就 会采用基于行的复制。复制解决的问题MySQL复制技术有以下一些特
3、点: 数据分布(Data distribution )负载平衡(load balancing)1心。备份(Backups)A(4)高可用性和容错行 High availability and failover复制如何工作整体上来说,复制有3个步骤:master将改变记录到二进制日志(binary log)中 (这些记录叫做二进制日志事件,binary log events);北,/ slave 将 master 的 binary log events 拷贝到它的中继日志(relay log);slave重做中继日志中的事件,将改变反映它自己的数据。下图描述了复制的过程:麻MasterSlave
4、该过程的第一部分就是master记录二进制日志。在每个事务更新数据完成之前,master 在二日志记录这些改变。MySQL将事务串行的写入二进制日志,即使事务中的语句都是交 叉执行的。在事件写入二进制日志完成后,master通知存储引擎提交事务。下一步就是slave将master的binary log拷贝到它自己的中继日志。首先,slave开始一个 工作线程 I/O线程。I/O线程在master上打开一个普通的连接,然后开始binlog dump processo Binlog dump process从master的二进制日志中读取事件,如果已经跟上master, 它会睡眠并等待master
5、产生新的事件。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:
6、添加如下内容:mysqldlog-bin=MySQL-bin 启用二进制日志server-id=1 /数据库ID号,为1时表示为Master,其中master_id必须为1到231之间的一 个正整数值,每个同步服务器都必须设定一个唯一的编号,否则同步就不能正常运行了; #在 server2 上配置为 server-id=2修改后在serverl和server2主机上重启mysqld服务2) server1和server2相互设置为主从同步(双主)在Serverl主机上的设置:nysq1 grant rep 1icat ion slaue on *.* to 1clusterJ PJ ident
7、 if ied by f cluster1; uery OKj 0 rows affected (0.00 sec)nysq 1 shou master status:+! File1Position1Binlog_Do_DB1Binlog_Ignore_DB1+! MySQL-bin.800081 I 236 I!+ + _二+1 row in set (0.00 sec)nusq 1 建立一个帐户cluster,并且允许从任何地址上来登陆,密码是cluster。在Server2王机上的设置:mysq1 change- master- master- master- master- mast
8、ermaster tohost = f19Z.168.7.Z01J , user=cluster password = ,clusterJ 】 log_f i= f MySQL-bin.000001J . log_pos=Z36; iQuery OK f 0 rows affected (0.08 sec) mysq1 start slaue;Query OK 0 rows affected (0.0Z sec) mysq1 show slave status;在server2和serverl上执行相反的操作,使其互为主从,具体操作如下图所示:在Server2主机上的设置:nysql gran
9、t replication slave on *.* to f clusterJ 0 Query OK, 0 rows affected (0.00 sec)mysq 1 shou master status:ident if ied by J c lusterf ;MySQL-bin.000001106I Position 1 Binlog_Do_DB I Binlog_Ignore_DB I +hiysq 1 change- master- master- master- master- master1 rou in set (0.00 sec)在Serverl主机上Imaster toh
10、ost=JigZ-lBB-V-ZHZ1. user = J clusterJ password = J clusterJ 】log_f ile = J MySQL-bin.000001J, log_pos=106: (Query OK j 0 rows affected (0.07 sec) nysq 1 start s laue ;uery OK j 0 rows affected (0.01 sec)shcji-j slave status;可以在f文件中添加“binlog do db=数据库名”配置项(可以添加多个)来指定要同步的数据库,有关f中有关其他同步的配置项请自行查看相关文档。若
11、主MYSQL服务器已经存在,只是后期才搭建从MYSQL服务器,在置配数据同步前应先将 主MYSQL服务器的要同步的数据库拷贝到从MYSQL服务器上(如先在主MYSQL上备份数 据库,再用备份在从MYSQL服务器上恢复)2、MYSQL高可性群集(主/从模式)在server1和server2上安装软件包keepalived安装keepalived软件包与服务控制在编译安装Keepalived之前,必须先安装内核开发包kernel-devel以及openssl-devel、popt-devel等支持库。ErootOsur yum -y insta11 kerne 1-deue1 openss1-de
12、ue1 popt-deue1编译安装Keepalived使用指定的linux内核位置对keepalived进行配置,并将安装路径指定为根目录,这样就无 需额外创建链接文件了,配置完成后,依次执行make、make install进行安装。root(?seruer4 tar zxf keepa 1 iued-1. Z . Z . tar . gzErootPseruer4 lit cd keepaliued-l.Z.ZEroot0seruer4 keepa1iued-1.Z.2tt ./conf igure -pref ix=z -with-kerne1-dir=/usr/s rc/kernel
13、s/Z.6.3Z-71.el6.x86 64ErootPseruer4 keepa1iued-1.Z.Ztt make & make insta 11使用keepalived服务人执行make install操作之后,会自动生成/etc/init.d/keepalived脚本文件,但还需为系统服务,这样就可以使用service chkconfig工具来对keepalived服务程序昏要手动添加进行管理了。Eroot(?seruer4 -rwxr-xr-x. 1 root(?seruer4 Eroot(?seruer4 Eroot(?seruer4# Is -1 /etc/in it.d/kee
14、pa1iuedroot root 1288 Mar 14 13:26 /etc/in it.d/keepa1iued# chkconfig -add keepa1iued# chkconfig keepa1iued on4)修改serverl/serve配置文件Server1主机上的配置文件如下图:vi /etc/keepalived/keepalived.conf: ! Configuration File for keepalived global_defs router_id MYSQL-HA #确保和 vrrp_instance VI_1 state BACKUP注:BACKUP将根据
15、优先级决定主或从;MASTER指定为主;SLAVE指定为从. 若一方为MASTER,另interface eth0virtualrouterli冲突priority 100#此处 server2 上设置为 50advertint 1empt #不抢占,只在priority高的server1上设置,server2上此项注释掉 thentication auth_type PASS auth_pass 1111virtual_ipaddress 192.168.7.200virtual_server 192.168.7.200 3306 delay_loop 2今相同VE,则表示双机热备(即一主一
16、从).#确保和server2相同,同网内不同集群此项必须不同否则发生#lb_algo wrrIbkind DRpersistence_timeout 60 protocol TCPreal_server 192.168.7.201 3306 #server2 上此处改为 192.168.7.202(即 server2 本机 ip)weight 3notify_down /etcl/keepalived/bin/mysql.shTCP_CHECK connect_timeout 10 nb_get_retry 3 delay_before_retry connect_port 3306 Serv
17、er1主机上有关keepalived.conf文件的具体配置如下R Conf iqurat ion File f or keepa1ivedhlobal_defs router_id MYSQL-HAwrrp_instance UI_1 state BACKUP interface ethB uirtual_router_id 51 priority 100 aduert_int 1 nopreempt authentication auth_type PASS auth_pass 1111uirtua1_ipaddress 19Z.168.7.ZB0wirtual_seruer 13Z.16
18、8.7.Z00 3306 delay_loop 2 lb_aIgo wrr lb_kind DR persistence_timeout 60 protoco1 TCPreal_seruer 13Z.168.7.Z01 3306 ueight 3not ify_down /etc/keepa1ived/mysq1.sh TCP_CHECK connect_t imeout 10 nb_get_retry 3 delay_before_retry 3 connect_port 3306yServer2主机的keepalived.conf参考上面的描述修改。可以使用scp命令把serverl主机上
19、配置好的keepalived.conf文件拷贝到server2主机,只要 做简单修改即可,如下图所示:注:如果mysql.sh脚本不能正常执行的话,可以编写一个检测mysqld服务的是否正在运行 的脚本,# T/b in/bashrouter id MYSQL-HAuirtua1 router id 51advert int 1authentication rea1 seruer 19Z.168.7.Z0Z 3306 tTCP CHECK connect timeout 10c server上此检wrrlb kind DRstate BACKUPvi /etc/keepalivedConfig
20、uration File for keepa1xuedglobal_defs urrp_instance UI_1 priority 50 7? nopreemptauth_tupe PASSauth_pass 1111delau_loop Zpersistence_timeout 60protoco1 TCPue ight 3not if u_down /etc/keepa1ived/musq1 shnb_get_retru 3delau_before_retru 3/mysql.sh,内容如下:pk 111 keepa11vedmysqld服务停止,则在脚本中停掉keepalived服务,
21、实现故障切换。并设置 计划任务定期执行检测脚本。在企业网络内配置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)的控制权。