天天看點

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伺服器故障恢複後,是否主動搶占資源,成為活動伺服器。

繼續閱讀