环境描述:
os:centos6.5_x64
master:192.168.0.202
backup:192.168.0.203
vip:192.168.0.204
1、配置两台mysql主主同步
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>
#先查看下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 zxvf keepalived-1.2.7.tar.gz</code>
<code>[root@master ~]</code><code># cd keepalived-1.2.7</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/keepalived/etc/rc.d/init.d/keepalived /etc/init.d/</code>
<code>[root@master ~]</code><code># cp /usr/local/keepalived/etc/sysconfig/keepalived /etc/sysconfig/</code>
<code>[root@master ~]</code><code># mkdir /etc/keepalived/</code>
<code>[root@master ~]</code><code># cp /usr/local/keepalived/etc/keepalived/keepalived.conf /etc/keepalived/</code>
<code>[root@master ~]</code><code># cp /usr/local/keepalived/sbin/keepalived /usr/sbin/</code>
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
<code>[root@master ~]</code><code># vi /etc/keepalived/keepalived.conf</code>
<code>! configuration file forkeepalived</code>
<code>global_defs {</code>
<code>notification_email {</code>
<code>test</code><code>@sina.com</code>
<code> </code><code>}</code>
<code>notification_email_from admin@</code><code>test</code><code>.com</code>
<code>smtp_server 127.0.0.1</code>
<code>smtp_connect_timeout 30</code>
<code>router_id mysql_ha </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.0.204</code>
<code>}</code>
<code>virtual_server 192.168.0.204 3306 {</code>
<code> </code><code>delay_loop 2</code>
<code> </code><code>#lb_algo rr #lvs算法,用不到,我们就关闭了</code>
<code> </code><code>#lb_kind dr #lvs模式,如果不关闭,备用服务器不能通过vip连接主mysql</code>
<code> </code><code>persistence_timeout 50 </code><code>#同一ip的连接60秒内被分配到同一台真实服务器</code>
<code> </code><code>protocol tcp</code>
<code> </code><code>real_server 192.168.0.202 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 3 </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>}</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>
#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服务器故障恢复后,是否主动抢占资源,成为活动服务器。