mysql主從複製配置操作以及主主配置宕機切換演練

主從複製目的:

主從服務器設置的穩健性得以提升,如果主服務器發生故障,可以把本來作爲備份的從服務器提升爲新的主服務器。在主從服務器上分開處理用戶的請求,讀的話,可以直接讀取備機數據,可獲得更短的響應時間。

主服務器:IP地址192.168.80.129,mysql已經安裝,無用戶數據。

從服務器:IP地址192.168.80.130,mysql已經安裝。

注:數據庫版本必須一致。

1.主從複製配置

修改從服務器的配置文件/etc/my.cnf,在mysqld裏添加一下屬性

[mysqld]

 log-bin=mysql-bin   //[必須]啓用二進制日誌
 server-id=129      //[必須]服務器唯一ID,默認是1,一般取IP最後一段,如IP:192.168.80.129

2.從服務器也做以上操作,添加完之後,重新啓動兩個數據庫。

主服務器上進行操作

(1)創建用戶並授權

1    mysql -u root -p    

2    mysql>grant replication slave on *.* to [email protected] identified by 'mysql';    

3    mysql>flush privileges;    


(2)查詢主數據庫的狀態

1    mysql> show master status; 


記下File以及Position的值,在後面進行從服務器操作的時候需要使用。


2.在從服務器上操作

(1)mysql登錄並執行同步的sql語句,最後並啓動slave

1    #mysql -uroot -p 

2     mysql> change master to master_host='192.168.80.129',master_user='root',master_password='123456',master_log_file='mysql-bin.000025',master_log_pos=990;



3    mysql> start slave;   

就啓動了slave同步功能

(2)主從同步檢查

執行如下語句

1    mysql>show slave status\G 


來檢查從服務器的同步情況,一個正常的輸出結果應該如下面的形式:

Slave_IO進程以及slave_SQL進程都必須正常運行,在狀態輸出中表現爲:“slave”;否則都是不正確的狀態(如一個值是Yes,另一個是No則不行)。

如果主數據庫服務器已經存在用戶數據,那麼在進行主從複製時,需要做以下處理。

(1)主數據庫鎖表操作,不讓數據再進行寫入動作。

1    mysql>flush tables withread lock;  

(2)查看主數據庫的狀態

1    mysql>show master status;  


記下File以及Position的值,以備從服務器使用。

(3)把主服務器的數據文件複製到從服務器,最好先用tar歸檔壓縮處理一下

(4)取消主數據庫鎖定

1    mysql>unlock tables; 

從服務器的操作和前面的步驟一樣,略過。

測試是否實現主從複製

在主數據庫服務器上創建庫和表,然後插入記錄,再登錄到從服務器,查看是否也建立相一致的庫和表以及記錄。

(1)主服務器上的操作

1    mysql>create database first_tb; 

①在主數據庫服務器創建庫first_tb;


2    mysql>create table first_db(idint(3)),name char (10));

②在主數據庫服務器創建表first_tb;

3    mysql>insert into first_tb values (001,'myself');


③在主數據服務器的表first_tb中插入記錄;

(2)從服務器上查看

1    mysql>show databases; 

①數據庫first_db自動生成

②表first_tb也自動生成,數據記也錄存在。

測試二

導入數據庫,在主庫上查看現在的數據庫

創建數據庫buy並且導入數據

在從庫上查看,數據庫已經完全導入。

2.mysql宕機切換演練

(1)高可用雙主熱備宕機自動切換演練

通常說的「雙機熱備」是指兩臺機器都在運行,但並不是兩臺機器都同時在提供服務。當提供服務的一臺出現故障的時候,另外一臺會馬上自動接管並且提供服務,而且切換的時間非常短。

Keepalived的工作原理是VRRP(Virtual Router Redundancy Protocol)虛擬路由冗餘協議。在VRRP中有兩組重要的概念:VRRP路由器和虛擬路由器,主控路由器和備份路由器。

VRRP路由器是指運行VRRP的路由器,是物理實體,虛擬路由器是指VRRP協議創建的,是邏輯概念。一組VRRP路由器協同工作,共同構成一臺虛擬路由器。 Vrrp中存在着一種選舉機制,用以選出提供服務的路由即主控路由,其他的則成了備份路由。當主控路由失效後,備份路由中會重新選舉出一個主控路由,來繼續工作,來保障不間斷服務。

環境描述:

  • OS:CentOS6.5_X64
  • MASTER:192.168.80.129
  • BACKUP:192.168.80.130
  • VIP:192.168.80.135      (虛擬IP)
1、配置兩臺Mysql主主同步

安裝mysql的步驟前面有講,我就不說了。不明白的可以看 http://blog.csdn.net/kjsayn/article/details/51320927

編輯my.cnf

# vi /etc/my.cnf  #開啓二進制日誌,設置id

[mysqld]
server-id = 1                                                         #backup這臺設置2
log-bin = mysql-bin
binlog-ignore-db = mysql,information_schema     #忽略寫入binlog日誌的庫
auto-increment-increment = 2                             #字段變化增量值
auto-increment-offset = 1                                    #初始字段ID爲1
slave-skip-errors = all                                            #忽略所有複製產生的錯誤


#./mysql start

#先查看MASTER下的log bin日誌和pos值位置


master配置如下:

mysql> GRANT  REPLICATION SLAVE ON *.* TO 'root'@'192.168.80.130' IDENTIFIED  BY 'root';          #130通過root遠程訪問到他自己
mysql> flush  privileges;
mysql> change  master to
    ->  master_host='192.168.80.130',
    ->  master_user='root',
    ->  master_password='123456',
    ->  master_log_file='mysql-bin.000009',
    ->  master_log_pos=1131;                            #對端狀態顯示的值
mysql> start  slave;                                             #啓動同步

backup配置如下:

mysql> GRANT  REPLICATION SLAVE ON *.* TO 'root'@'192.168.80.129' IDENTIFIED  BY 'root';
mysql> flush  privileges;
mysql> change  master to
    ->  master_host='192.168.80.129',
    ->  master_user='root',
    ->  master_password='root',
    ->  master_log_file='mysql-bin.000029',
    ->  master_log_pos=107;                                           #對端的狀態顯示值
mysql> start  slave;

#主主同步配置完畢,查看同步狀態Slave_IO和Slave_SQL是YES說明主主同步成功。(兩邊都要是yes,如果一邊yes另一邊識別不到pos就無法同步)


在master插入數據測試下:


在backup查看是否同步成功:


可以看到已經成功同步過去,同樣在backup插入到user表數據,一樣同步過去,雙主就做成功了。

主主配置常見報錯:

注:如果其中一邊提示連接中,關閉防火牆即,或者對應IP不對,請注意查看salve的IP。其中一個顯示NO,查底下報錯,顯示por值匹配不到的,則說明你其中一邊的bin-log不一致,關閉salve,重新配置即可。


2、配置keepalived實現熱備

keepalived安裝過程 我就不說了,網上很多,我是直接安裝編譯完成的。(源碼不會編譯的網上搜索一下)

keepalived編譯配置文件

# vi /etc/keepalived/keepalived.conf

! Configuration File forkeepalived
global_defs {
notification_email {
1111111@qq.com#接收報警郵箱地址
 }
notification_email_from  1111111@qq.com
smtp_server 127.0.0.1
smtp_connect_timeout 30
router_id MYSQL_HA       #標識,雙主相同
 }
vrrp_instance VI_1 {
 state  BACKUP          #兩臺都設置BACKUP
 interface eth0
 virtual_router_id 51        #主備相同
 priority 100            #優先級,backup設置90
 advert_int 1
 nopreempt              #不主動搶佔資源,只在master這臺優先級高的設置,backup不設置
 authentication {
 auth_type PASS
 auth_pass 1111
 }
 virtual_ipaddress {
 192.168.0.204
 }
}
virtual_server 192.168.0.204 3306 {
 delay_loop 2
 #lb_algo rr              #LVS算法,用不到,我們就關閉了
 #lb_kind DR              #LVS模式,如果不關閉,備用服務器不能通過VIP連接主MySQL
 persistence_timeout 50  #同一IP的連接60秒內被分配到同一臺真實服務器
 protocol TCP
 real_server 192.168.0.202 3306 {   #檢測本地mysql,backup也要寫檢測本地mysql
 weight 3
 notify_down /usr/local/keepalived/mysql.sh    #當mysq服down時,執行此腳本,殺死keepalived實現切換
 TCP_CHECK {
 connect_timeout 3     #連接超時
 nb_get_retry 3       #重試次數
 delay_before_retry 3 #重試間隔時間
  }
}


  • 採用keepalived作爲高可用方案時,兩個節點最好都設置成BACKUP模式,避免因爲意外情況下(比如腦裂)相互搶佔導致往兩個節點寫入相同數據而引發衝突;

#backup服務器只修改priority爲90、nopreempt不設置、real_server設置本地IP。

1 啓動keepalived

#./keepalived start 

3.測試高可用性

1、通過Mysql客戶端通過VIP連接,看是否連接成功。

2、停止master這臺mysql服務,是否能正常切換過去,可通過ip addr命令來查看VIP在哪臺服務器上。


master數據庫宕的時候,VIP就會自動切換到另一臺上,實現主主自動切換。遠程連接數據庫的虛擬IP是可以連接的,實現應用切換的效率。部署應用的時候配置VIP即可共享數據庫資源。

3.注意:當宕庫恢復的時候,要啓動keepalived,否則VIP無法自動切換回來。





發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章