环境描述:
OS:CentOS6.5_X64
MySQL-VIP:192.168.1.200
MySQL-master1:192.168.1.201
MySQL-master2:192.168.1.202
1、配置两台Mysql主主同步
<code></code>
1
2
3
4
5
6
7
8
9
10
11
12
<code>[root@master ~]</code><code># yum install mysql-server mysql -y</code>
<code>[root@master ~]</code><code># service mysqld start</code>
<code>[root@master ~]</code><code># mysqladmin -u root password 123.com</code>
<code>[root@master ~]</code><code># vi /etc/my.cnf #开启二进制日志,设置id</code>
<code>[mysqld]</code>
<code>server-</code><code>id</code> <code>= 1 </code><code>#backup这台设置2</code>
<code>log-bin = mysql-bin</code>
<code>binlog-ignore-db = mysql,information_schema </code><code>#忽略写入binlog日志的库</code>
<code>auto-increment-increment = 2 </code><code>#字段变化增量值</code>
<code>auto-increment-offset = 1 </code><code>#初始字段ID为1</code>
<code>slave-skip-errors = all </code><code>#忽略所有复制产生的错误 </code>
<code>[root@master ~]</code><code># service mysqld restart</code>
安装mysql,参考文章:
# mysql -uroot -p'密码'
先查看下log bin日志和pos值位置
master配置如下:
<code>[root@ master ~]</code><code># mysql -u root -p123.com</code>
<code>mysql> GRANT REPLICATION SLAVE ON *.* TO </code><code>'replication'</code><code>@</code><code>'192.168.0.%'</code> <code>IDENTIFIED BY </code><code>'replication'</code><code>;</code>
<code>mysql> flush privileges;</code>
<code>mysql> change master to</code>
<code> </code><code>-> master_host=</code><code>'192.168.0.203'</code><code>,</code>
<code> </code><code>-> master_user=</code><code>'replication'</code><code>,</code>
<code> </code><code>-> master_password=</code><code>'replication'</code><code>,</code>
<code> </code><code>-> master_log_file=</code><code>'mysql-bin.000002'</code><code>,</code>
<code> </code><code>-> master_log_pos=106; </code><code>#对端状态显示的值</code>
<code>mysql> start slave; </code><code>#启动同步</code>
backup配置如下:
<code>[root@backup ~]</code><code># mysql -u root -p123.com</code>
<code> </code><code>-> master_host=</code><code>'192.168.0.202'</code><code>,</code>
<code> </code><code>-> master_log_pos=106;</code>
<code>mysql> start slave;</code>
#主主同步配置完毕,查看同步状态Slave_IO和Slave_SQL是YES说明主主同步成功。
在master插入数据测试下:
在backup查看是否同步成功:
可以看到已经成功同步过去,同样在backup插入到user表数据,一样同步过去,双主就做成功了。
2、配置keepalived实现热备
[root@backup ~]# yum install -y pcre-devel openssl-devel popt-devel #安装依赖包
<code>[root@master ~]</code><code># wget http://www.keepalived.org/software/keepalived-1.2.7.tar.gz </code>
<code>[root@master ~]</code><code># tar -xf keepalived-1.2.7.tar.gz -C /usr/local/src/</code>
<code>[root@master ~]</code><code># cd /usr/local/</code>
<code>[root@master ~]</code><code># ln -sv /usr/local/src/keepalived-1.2.7/ keepalived #根据实际情况修改 </code>
<code>[root@master ~]</code><code># cd keepalived</code>
<code>[root@master ~]</code><code>#./configure --prefix=/usr/local/keepalived</code>
<code>make</code> <code>&& </code><code>make</code> <code>install</code>
#将keepalived配置成系统服务
<code>[root@master ~]</code><code># cp /usr/local/etc/rc.d/init.d/keepalived /etc/init.d/</code>
<code>chmod</code> <code>+x </code><code>/etc/init</code><code>.d</code><code>/keepalived</code>
<code>[root@master ~]</code><code># cp /usr/local/etc/sysconfig/keepalived /etc/sysconfig/</code>
<code>[root@master ~]</code><code># chkconfig --add keepalived </code>
<code>[root@master ~]</code><code># chkconfig keepalived on </code>
<code>[root@master ~]</code><code># mkdir /etc/keepalived</code>
<code>[root@master ~]</code><code># cp /usr/local/etc/keepalived/keepalived.conf /etc/keepalived/</code>
<code>[root@master ~]</code><code># cp /usr/local/sbin/keepalived /usr/sbin/ #或者ln -s /usr/local/sbin/keepalived /usr/sbin/</code>
配置keepalived
我们自己在新建一个配置文件,默认情况下keepalived启动时会去/etc/keepalived目录下找配置文件
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
<code>[root@master ~]</code><code># vi /etc/keepalived/keepalived.conf </code>
<code>global_defs { </code>
<code> </code><code>notification_email { </code>
<code> </code><code>[email protected]</code>
<code> </code><code>} </code>
<code> </code><code>notification_email_from [email protected] </code>
<code> </code><code>smtp_server 127.0.0.1 </code>
<code> </code><code>smtp_connect_timeout 30 </code>
<code> </code><code>router_id MYSQL_HA </code><code>#标识,双主相同 </code>
<code>} </code>
<code> </code>
<code>vrrp_instance VI_1 { </code>
<code> </code><code>state BACKUP </code><code>#两台配置此处均是BACKUP </code>
<code> </code><code>interface eth0 </code>
<code> </code><code>virtual_router_id 51 </code><code>#主备相同</code>
<code> </code><code>priority 100 </code><code>#优先级,另一台backup改为90 </code>
<code> </code><code>advert_int 1 </code>
<code> </code><code>nopreempt </code><code>#不抢占,只在优先级高master的机器上设置即可,优先级低backup的机器不设置 </code>
<code> </code><code>authentication { </code>
<code> </code><code>auth_type PASS </code>
<code> </code><code>auth_pass 1111 </code>
<code> </code><code>virtual_ipaddress { </code>
<code> </code><code>192.168.1.200 </code>
<code>virtual_server 192.168.1.200 3306 { </code>
<code> </code><code>delay_loop 2 </code><code>#每个2秒检查一次real_server状态 </code>
<code> </code><code>#lb_algo wrr #LVS算法,用不到,我们就关闭了 </code>
<code> </code><code>#lb_kind DR #LVS模式,如果不关闭,备用服务器不能通过VIP连接主MySQL </code>
<code> </code><code>persistence_timeout 60 </code><code>#会话保持时间,同一IP的连接60秒内被分配到同一台真实服务器 </code>
<code> </code><code>protocol TCP </code>
<code> </code><code>real_server 192.168.1.201 3306 { </code><code>#检测本地mysql,backup也要写检测本地mysql </code>
<code> </code><code>weight 3 </code>
<code> </code><code>notify_down </code><code>/usr/local/keepalived/mysql</code><code>.sh </code><code>#当mysq服down时,执行此脚本,杀死keepalived实现切换 </code>
<code> </code><code>TCP_CHECK { </code>
<code> </code><code>connect_timeout 10 </code><code>#连接超时时间 </code>
<code> </code><code>nb_get_retry 3 </code><code>#重连次数 </code>
<code> </code><code>delay_before_retry 3 </code><code>#重连间隔时间 </code>
<code> </code><code>connect_port 3306 </code><code>#健康检查端口</code>
<code> </code><code>}</code>
<code> </code><code>} </code>
<code>}</code>
<code>编写检测服务down后所要执行的脚本</code>
<code>[root@master ~]</code><code># vi /usr/local/keepalived/mysql.sh</code>
<code>#!/bin/bash</code>
<code>pkill keepalived</code>
<code>[root@master ~]</code><code># chmod +x /usr/local/keepalived/mysql.sh</code>
<code>[root@master ~]</code><code># /etc/init.d/keepalived start</code>
注:此脚本是上面配置文件notify_down选项所用到的,keepalived使用notify_down选项来检查real_server 的服务状态,当发现real_server服务故障时,便触发此脚本;我们可以看到,脚本就一个命令,通过pkill keepalived强制杀死keepalived进程,从而实现了MySQL故障自动转移。另外,我们不用担心两个MySQL会同时提供数据更新操作, 因为每台MySQL上的keepalived的配置里面只有本机MySQL的IP+VIP,而不是两台MySQL的IP+VIP
启动keepalived
<code>[root@master ~]</code><code># /usr/local/keepalived/sbin/keepalived –D 或者/etc/init.d/keepalived start</code>
<code>[root@master ~]</code><code># ps -aux | grep keepalived</code>
测试
找一台局域网PC,然后去ping MySQL的VIP,这时候MySQL的VIP是可以ping的通的
停止MySQL服务,看keepalived健康检查程序是否会触发我们编写的脚本
#backup服务器只修改priority为90、nopreempt不设置、real_server设置本地IP。
#授权两台Mysql服务器允许root远程登录,用于在其他服务器登陆测试!
mysql> grant all on *.* to'root'@'192.168.0.%' identified by '123.com';
mysql> flush privileges;
3、测试高可用性
1、通过Mysql客户端通过VIP连接,看是否连接成功。
2、停止master这台mysql服务,是否能正常切换过去,可通过ip addr命令来查看VIP在哪台服务器上。
3、可通过查看/var/log/messges日志,看出主备切换过程
4、master服务器故障恢复后,是否主动抢占资源,成为活动服务器。
本文转自 Mr_sheng 51CTO博客,原文链接:http://blog.51cto.com/sf1314/2073383