mysql雙機熱備+amoeba讀寫分離實驗

Mysql讀寫分離是爲了提高網站的訪問速度,提高數據庫的併發負載能力。


但在實際的生產環境中,由單臺Mysql作爲獨立的數據庫是完全不能滿足實際需求的,無論是在安全性,高可用性以及高併發等各個方面


因此,一般來說都是通過 主從複製(Master-Slave)的方式來同步數據,再通過讀寫分離來提升數據庫的併發負載能力 這樣的方案來進行部署與實施的



注意:先做主從複製,再度讀寫分離。



MySQL主從複製結構是基於mysql bin-log日誌基礎上,從庫通過打開IO進程收到主庫的bin-log日誌增量信息,並保存到本地relay log,而後再通過打開MYSQL進程從relay log上獲取的增量信息並翻譯成SQL語句後寫到從數據庫。



實驗環境:

主:10.8.0.150

從:10.8.0.151

amoeba:10.8.0.160

PS:爲了方便實驗,可直接yum mysql 或者直接腳本執行lnmp。

拓撲圖如下:

232123111.jpg


實驗第一步:

登陸主服務器操作命令

mysql> GRANT REPLICATION CLIENT,REPLICATION SLAVE ON *.* TO 'cong151'@'10.8.0.151' IDENTIFIED BY "123456";

mysql> show master status;

+------------------+----------+--------------+------------------+

| File | Position | Binlog_Do_DB | Binlog_Ignore_DB |

+------------------+----------+--------------+------------------+

| mysql-bin.000008 | 5722410 | | |

+------------------+----------+--------------+------------------+

記住file和Position。

登陸從服務器操作命令

1、編輯my.ini 文件 ,修改 server-id = 2 (默認爲1,因做mysql的主從複製,需要修改ID和主服務器上不一樣即可,也不可和同內網mysql服務器其他的ID一樣)

2、登入mysql

mysql> change master to master_host='10.8.0.150',master_user='cong151',master_password='123456',master_log_file='mysql-bin.000008',master_log_pos=5722410;

mysql> start slave;

mysql> show slave status\G

*************************** 1. row ***************************

Slave_IO_State: Waiting for master to send event

Master_Host: 10.8.0.150

Master_User: cong151

Master_Port: 3306

Connect_Retry: 60

Master_Log_File: mysql-bin.000008

Read_Master_Log_Pos: 5722410

Relay_Log_File: localhost-relay-bin.000061

Relay_Log_Pos: 251

Relay_Master_Log_File: mysql-bin.000008

Slave_IO_Running: Yes

Slave_SQL_Running: Yes

Replicate_Do_DB:

Replicate_Ignore_DB:

Replicate_Do_Table:

Replicate_Ignore_Table:

Replicate_Wild_Do_Table:

Replicate_Wild_Ignore_Table:

Last_Errno: 0

Last_Error:

Skip_Counter: 0

Exec_Master_Log_Pos: 5722410

Relay_Log_Space: 3466785

Until_Condition: None

Until_Log_File:

Until_Log_Pos: 0

Master_SSL_Allowed: No

Master_SSL_CA_File:

Master_SSL_CA_Path:

Master_SSL_Cert:

Master_SSL_Cipher:

Master_SSL_Key:

Seconds_Behind_Master: 0

Master_SSL_Verify_Server_Cert: No

Last_IO_Errno: 0

Last_IO_Error:

Last_SQL_Errno: 0

Last_SQL_Error:


這樣說明從服務器複製主服務器的數據是正常的了,且可以指定複製的庫,可以在my.ini裏面修改即可。

爲了做主從複製,即從複製主且主複製從。

繼續在從服務器上操作。

mysql> GRANT REPLICATION CLIENT,REPLICATION SLAVE ON *.* TO 'zhu150'@'10.8.0.150' IDENTIFIED BY "123456";

mysql> show master status;

+------------------+----------+--------------+------------------+

| File | Position | Binlog_Do_DB | Binlog_Ignore_DB |

+------------------+----------+--------------+------------------+

| mysql-bin.000006 | 786 | | |

+------------------+----------+--------------+------------------+


登陸主服務器

mysql> change master to master_host='10.8.0.151',master_user='zhu150',master_password='123456',master_log_file='mysql-bin.000006',master_log_pos=786;

mysql> start slave;

mysql> show slave status\G

*************************** 1. row ***************************

Slave_IO_State: Waiting for master to send event

Master_Host: 10.8.0.151

Master_User: zhu150

Master_Port: 3306

Connect_Retry: 60

Master_Log_File: mysql-bin.000006

Read_Master_Log_Pos: 786

Relay_Log_File: localhost-relay-bin.000003

Relay_Log_Pos: 251

Relay_Master_Log_File: mysql-bin.000006

Slave_IO_Running: Yes

Slave_SQL_Running: Yes

Replicate_Do_DB:

Replicate_Ignore_DB:

Replicate_Do_Table:

Replicate_Ignore_Table:

Replicate_Wild_Do_Table:

Replicate_Wild_Ignore_Table:

Last_Errno: 0

Last_Error:

Skip_Counter: 0

Exec_Master_Log_Pos: 786

Relay_Log_Space: 935

Until_Condition: None

Until_Log_File:

Until_Log_Pos: 0

Master_SSL_Allowed: No

Master_SSL_CA_File:

Master_SSL_CA_Path:

Master_SSL_Cert:

Master_SSL_Cipher:

Master_SSL_Key:

Seconds_Behind_Master: 0

Master_SSL_Verify_Server_Cert: No

Last_IO_Errno: 0

Last_IO_Error:

Last_SQL_Errno: 0

Last_SQL_Error:

這樣,mysql的主從複製實驗OK。


Amoeba的安裝:

安裝Amoeba前要先安裝JDK,因爲Amoeba是用java開發的所要有JDK支持。

下載jdk-6u15-linux-i586.bin (sh jdk-6u15-linux-i586.bin 執行程序)

編輯/etc/profile 添加如下代碼

export JAVA_HOME=/usr/local/jdk1.6.0_15

export CLASSPATH=.:$JAVA_HOME/jre/lib/rt.jar:$JAVA_HOME/lib/dt.jar:$JAVA_HOME/lib/tools.jar

export PATH=$PATH:$JAVA_HOME/bin

[root@localhost ~]# source /etc/profile

[root@localhost ~]# java -version

java version "1.6.0_15"

Java(TM) SE Runtime Environment (build 1.6.0_15-b03)

Java HotSpot(TM) Client VM (build 14.1-b02, mixed mode, sharing)


下載amoeba-mysql-binary-2.0.1-BETA.tar.gz

[root@localhost ~]# mkdir /usr/local/amoeba && cd /usr/local/amoeba/ && tar /root/amoeba-mysql-binary-2.0.1-BETA.tar.gz

那麼剩下來的就是如何配置amoeba(配置文件在conf目錄下,主要是dbServers.xml和amoeba.xml兩個文件)

先編輯dbServers.xml 文件

235709615.jpg

注意此時的用戶名和密碼,爲後端數據庫的用戶名和密碼,需要在兩臺數據庫服務器上開啓遠程,遠程的用戶名和密碼自己設置,我是爲了方便。

000021663.jpg

添加兩個節點,分別是master和slave,同時修改下一個虛擬組,將master和slave加入進去。後面會需要的。


在編輯amoeba.xml 文件


000319218.jpg

建議修改下IP爲AMOEBA的代理服務器的IP,不建議寫127.0.0.1 或者localhost。

下面的用戶名和密碼,是對外提供的數據庫用戶名和密碼,也就是AMOEBA登陸的用戶名和密碼,不需要在主從服務器上添加這個用戶名和密碼的,我這樣設置也是爲了方便。


000321280.jpg

默認的組是master,說明利用amoeba登陸後,其實是登陸到主服務器上的。

寫入組是master,說明數據寫入在主服務器上。

讀取組是我們之前設置的虛擬組(包括master和slave,帶來的效果是,查詢兩次,分別是在主上面查詢一次和從上面查詢一次)

以上,amoeba的服務器配置OK,剩下的是檢查配置,

直接利用 /usr/local/amoeba/bin/amoeba start 來檢查,如果出現問題,請立即解決。

001135717.jpg

如果沒發現問題,類似如此日誌,請ctrl+c 關閉進程。同時利用 /usr/local/amoeba/bin/amoeba start & 啓動並將程序放入後臺。

001138320.jpg

最後剩下的就是測試。

先需要測試通過amoeba連接服務器,

案例命令:mysql -uroot -pu2ktgshc#@dq -h10.8.0.160 -P8066

001430214.jpg


第二,直接操作數據庫,新建庫,新建表,表裏寫入數據,查看數據是否正常。主要是測試mysql的主從同步效果如何。

最後,關閉主從相互同步,命令:stop slave; 兩個後端的服務器都需要操作,這樣主從複製被停止,再次插入數據,查看兩次,看下對比即可。

如果發現了變化,那麼您的實驗OK了,沒發現效果,請檢查amoeba的兩個配置文件。

注意一點:<--! --> 這個表示註釋,之前我個人做實驗也是因爲這個問題導致第一次沒成功。

望各位好運。



如有成功者,且切實弄到測試環境中(搭建網站測試),請告知如何php調用amoeba,個人沒搞定。爲感!


後續的實驗,可通過兩個前端服務器來做amoeba,後端的mysql服務器和兩臺amoeba利用LVS+Keepalived來做集羣和熱備。

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