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