天天看点

MySQL高可用性之Keepalived+Mysql(双主热备)

环境描述:

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值位置

MySQL高可用性之Keepalived+Mysql(双主热备)

master配置如下:

<code>[root@ master ~]</code><code># mysql -u root -p123.com</code>

<code>mysql&gt; 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&gt; flush  privileges;</code>

<code>mysql&gt; change  master to</code>

<code>    </code><code>-&gt;  master_host=</code><code>'192.168.0.203'</code><code>,</code>

<code>    </code><code>-&gt;  master_user=</code><code>'replication'</code><code>,</code>

<code>    </code><code>-&gt;  master_password=</code><code>'replication'</code><code>,</code>

<code>    </code><code>-&gt;  master_log_file=</code><code>'mysql-bin.000002'</code><code>,</code>

<code>    </code><code>-&gt;  master_log_pos=106;  </code><code>#对端状态显示的值</code>

<code>mysql&gt; start  slave;         </code><code>#启动同步</code>

backup配置如下:

<code>[root@backup ~]</code><code>#  mysql -u root -p123.com</code>

<code>    </code><code>-&gt;  master_host=</code><code>'192.168.0.202'</code><code>,</code>

<code>    </code><code>-&gt;  master_log_pos=106;</code>

<code>mysql&gt; start  slave;</code>

#主主同步配置完毕,查看同步状态slave_io和slave_sql是yes说明主主同步成功。

MySQL高可用性之Keepalived+Mysql(双主热备)

在master插入数据测试下:

MySQL高可用性之Keepalived+Mysql(双主热备)

在backup查看是否同步成功:

MySQL高可用性之Keepalived+Mysql(双主热备)

可以看到已经成功同步过去,同样在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>&amp;&amp; </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&gt; grant all on *.* to'root'@'192.168.0.%' identified by '123.com';

mysql&gt; flush privileges;

3、测试高可用性

1、通过mysql客户端通过vip连接,看是否连接成功。

2、停止master这台mysql服务,是否能正常切换过去,可通过ip addr命令来查看vip在哪台服务器上。

MySQL高可用性之Keepalived+Mysql(双主热备)

3、可通过查看/var/log/messges日志,看出主备切换过程

4、master服务器故障恢复后,是否主动抢占资源,成为活动服务器。

继续阅读