mysql5.6主主複製及keepalived 高可用

mushou發表於2018-08-09

1.實驗目的

 mysql伺服器作為生產環境中使用最廣泛的資料庫軟體,以其開源性,穩定性而廣泛使用,但同時由於資料儲存,讀寫頻率高,極易造成資料庫出錯,從而給企業造成不可挽回的損失,我們除了做好資料庫的備份工作外,同時,還應該解決資料庫伺服器的單點故障問題。

2.搭建環境

兩臺 mysql 伺服器

172.16.1.2     mysql   + keepalived

172.16.1.12   mysql  + keepalived

一臺測試機

172.16.1.1

3.環境部署

一臺 mysql 伺服器 + keepalived

1)對於mysql原始碼安裝或者yum 安裝均可,此處不多講。

2) 主MySQL配置

主MySQL安裝時間同步器,yum  -y  install ntp

vim   /etc/ntpd.conf

新增

server 127.127.1.0
fudge 127.127.1.0 startum 8

啟動service   ntpd  start

配置mysql目錄下的 my.cnf檔案

vim my.cnf

[mysqld]
log-slave-updates=true                            #開啟從伺服器的日誌更新
server-id = 11                                          #主伺服器的ID ,這個可以隨便定,但是與從伺服器要不同

log-bin=mysql-bin                                    #開啟二進位制日誌

登入mysql,   mysql   -uroot   -p123456  

建立myslave 賬號,並授權可以複製

grant   replication slave   on  *.*  to  `myslave`@`172.16.1.12`     identified   by  `123456`;

flush   privileges;

顯示主服務的狀態;

 show   master  status;

記住file 及position位置的字串,在配置從服務時候會用到。

至此,主 mysql 配置完成,重啟service mysqld   restart

3)從mysql服務配置

MySQL安裝時間同步器,yum  -y  install ntpdate

ntpdate  172.16.1.2      時間同步

配置mysql目錄下的 my.cnf檔案

在其中新增

[mysqld]

relay-log=relay-log-bin                                     # 傳遞日誌,字首為 relay-log-bin

relay-log-index=slave-relay-bin.index             # 傳遞日誌的索引檔案

log-bin=mysql-bin                                            #開啟二進位制日誌

server-id = 12                                                  #伺服器的ID ,這個可以隨便定,但是與主伺服器要不同

重啟服務   service  mysqld restart

登入mysql,   mysql   -uroot   -p123456  

change  master  to  master_host =`172.16.1.2`,master_user=`myslave`,master_password=`123456`,master_log_file=`此處為主服務show  master 命令顯示的 file`,master_log_pos=`此處為主服務show  master 命令顯示的 pos“;

此處 master_host =`172.16.1.2`,為主mysql的ip

start   slave;                       #開啟從服務

show slave statusG;         #顯示從服務狀態

如果

Slave_IO_Running: Yes
Slave_SQL_Running: Yes

兩項為yes,則代表啟動從服務成功。

如果Slave_IO_Running: No

可能的問題一是主服務和從服務的server-id,不能為重複;二是授權時一定要準確。grant   replication slave   on  *.*  to  `myslave`@`172.16.1.12`     identified   by  `123456`;

此處172.16.1.12為從伺服器的ip

4)以上兩步實現了mysql主從複製,我們要實現主主,也就是兩臺mysql ,一臺既是主,也是從,另一臺既是主也是從,所以我們按照上面的配置在兩臺mysql上做相反的從主配置。

主mysql上,做從配置 

配置mysql目錄下的 my.cnf檔案

在其中新增

[mysqld]

relay-log=relay-log-bin                                     # 傳遞日誌,字首為 relay-log-bin

relay-log-index=slave-relay-bin.index             # 傳遞日誌的索引檔案

log-bin=mysql-bin                                            #開啟二進位制日誌

重啟服務   service  mysqld restart

登入mysql,   mysql   -uroot   -p123456  

change  master  to  master_host =`172.16.1.12`,master_user=`myslave`,master_password=`123456`,master_log_file=`此處為主服務show  master 命令顯示的 file`,master_log_pos=`此處為主服務show  master 命令顯示的 pos“;

此處的master_host =`172.16.1.12`  為從mysql伺服器的ip

start   slave;                       #開啟從服務

show slave statusG;         #顯示從服務狀態

如果

Slave_IO_Running: Yes Slave_SQL_Running: Yes

兩項為yes,則代表啟動從服務成功。

 

從mysql上,做主配置

配置mysql目錄下的 my.cnf檔案

vim my.cnf

[mysqld] log-slave-updates=true                            #開啟從伺服器的日誌更新

登入mysql,   mysql   -uroot   -p123456  

建立myslave 賬號,並授權可以複製

grant   replication slave   on  *.*  to  `myslave`@`172.16.1.12`     identified   by  `123456`;

flush   privileges;

顯示主服務的狀態;

 show   master  status;

記住file 及position位置的字串,在配置從服務時候會用到。

至此,兩臺MySQL伺服器的分別配置了主從,即一臺既是主又是從,另一臺既是從也是主。

5)mysql主主複製測試

mysql  -uroot  -p123456 任意登入一臺mysql伺服器,

create  database  test  default  character  set  utf8;

create  table  test;

 到另一臺MySQL上show   databases;  show   tables;

顯示了資料庫和資料表都已建好,可以看到已經同步成功

6)配置keepalived,實現高可用

在主mysql伺服器配置 

yum  -y install  keepalived

cp  /etc/keepalived/keepalived.conf    /etc/keepalived/keepalived.conf.bak

vim  /etc/keepalived.conf

vrrp_instance VI_1 {                                         #例項1
    state MASTER                                             #狀態為主
    interface ens33                                            #繫結網路卡
    virtual_router_id 11                                      #   id 號,主從一致
    priority 100                                                   #優先順序為100
    advert_int 1
    #nopreempt                                                  #非搶佔模式
    authentication {
        auth_type PASS
        auth_pass 1111
    }
    virtual_ipaddress {                                         #虛擬ip地址
        172.16.1.199
    }
}
virtual_server 172.16.1.199 3306  {                 
     delay_loop 2                                                  #間隔2秒檢查真實伺服器狀態 
     lb_algo wrr                                                     #LVS   arithmetic
     lb_kind DR                                                     #LVS model
     persistence_timeout 60                                  #k
     protocol TCP 
     real_server 172.16.1.2 3306  {                        #真實伺服器 ,也就是主mysql伺服器
         weight 3 
         #notify_down /usr/local/mysql/bin/mysql.sh  # 可執行指令碼路徑 
         TCP_CHECK { 
             connect_timeout 10    #timeout
             nb_get_retry 3       #conect times to try to connect
             delay_before_retry 3   #interval of retry
             connect_port 3306    # check mysql port
         }
     } 
}

啟動服務,service  keepalived  start

在從mysql伺服器上配置

yum  -y install  keepalived

cp  /etc/keepalived/keepalived.conf    /etc/keepalived/keepalived.conf.bak

vim  /etc/keepalived.conf

本處只寫與主mysql伺服器不同處

 

    #備用伺服器上為SLAVE
    state SLAVE
    #繫結vip的網路卡為ens33,根據自己伺服器網路卡
    interface ens33
    virtual_router_id 11                     #與主伺服器  id號碼一樣
    #備用伺服器上為90
    priority 90                                   #優先順序比主mysql伺服器小
}
virtual_server 172.16.1.199 3306 {  
     real_server 172.16.1.12 3306 {               #真實伺服器 ,也就是從mysql伺服器
}

其他與主mysql伺服器上配置檔案相同

啟動服務,service  keepalived  start

可以在主mysql伺服器上看到一個VIP地址,172.16.1.199

4.測試

 停止主mysql伺服器上的keepalived服務,  service  keepalived  stop

同時檢視另一臺的從mysql  的ip,ip a

可以看到有一vip ,172.16.1.199

我們在測試機172.16.1.1上登入從mysql ,    mysql   -uroot   -p123456  -P 3306   -h  172.16.1.12

登入成功,我們做一個 插入資料實驗

use test;

insert into  test   values();

到兩臺的資料庫下檢視,select   *  from  test;

資料同步成功。

啟動  主mysql伺服器上的keepalived服務,  service  keepalived  start

停止從mysql伺服器上的keepalived服務,  service  keepalived  stop

檢視另一臺的主mysql  的ip,ip a

可以看到有一vip ,172.16.1.199

做同樣的操作 insert into  test   values();

到兩臺的資料庫下檢視,select   *  from  test;

資料同步成功,從而實現兩臺mysql資料庫伺服器的高可用及主主資料同步。

                                           

 

相關文章