溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

mysql5.7的主從復制+讀寫分離

發布時間:2020-06-01 23:19:27 來源:網絡 閱讀:3272 作者:咖啡貓Mr 欄目:建站服務器

Mysql主從復制與讀寫分離

目錄:

  1、mysql主從復制工作原理

  2、mysql讀寫分離原理,使用Amoeba中間代理層實現讀寫分離

  3、在vmware中實現mysql主從復制+讀寫分離

  

一、Mysql主從復制的工作原理:

  1、mysql支持的復制類型:

   1)、基于語句的復制。在服務器上執行sql語句,在從服務器上執行同樣的語句,mysql默認采用基于語句的復制,執行效率高。

  2)、 基于行的復制。把改變的內容復制過去,而不是把命令在從服務器上執行一遍。

  3)、混合類型的復制。默認采用基于語句的復制,一旦發現基于語句無法精確復制時,就會采用基于行的復制。

2、主從復制的原理


mysql5.7的主從復制+讀寫分離

根據上圖說明mysql的主從復制原理:

1)、在mysql_master上更新數據,寫入二進制日志(Binary log,并通知存儲引擎提交事務

2)、mysql_slave啟用I/O線程將masterbinary log復制到slave的中繼日志(Relay log),

3)、mysql_slave啟用SQL線程從Relay log中讀取事件,并重放其中的事件從而更新slave數據,使其與master中的數據一致,只要該線程與I/O線程保持一致,中繼日志通常會位于os緩存中,所以中繼日志的開銷很小。

3、mysql讀寫分離原理:

  在主從復制的基礎上,master更新數據同步到slave服務器中,master只負責寫入數據,slave只提供讀取數據,從而實現了數據庫性能的優化,以及提升了服務器的安全性。

mysql5.7的主從復制+讀寫分離

實現mysql讀寫分離的方法:

1)基于程序代碼內部實現

在代碼中根據select 、insert進行路由分類,這類方法也是目前生產環境下應用最廣泛的。優點是性能較好,因為程序在代碼中實現,不需要增加額外的硬件開支,缺點是需要開發人員來實現,運維人員無從下手。

 

2)、基于中間代理層實現

代理一般介于應用服務器和數據庫服務器之間,代理數據庫服務器接收到應用服務器的請求后根據判斷后轉發到,后端數據庫,有以下代表性的程序。

1mysql_proxy。mysql_proxyMysql的一個開源項目,通過其自帶的lua腳本進行sql判斷。

2Atlas。是由 Qihoo 360, Web平臺部基礎架構團隊開發維護的一個基于MySQL協議的數據中間層項目。它是在mysql-proxy 0.8.2版本的基礎上,對其進行了優化,增加了一些新的功能特性。360內部使用Atlas運行的mysql業務,每天承載的讀寫請求數達幾十億條。支持事物以及存儲過程。

3Amoeba。由阿里巴巴集團在職員工陳思儒使用序java語言進行開發,阿里巴巴集團將其用戶生產環境下,但是他并不支持事物以及存數過程。

 

不是所有的應用都能夠在基于程序代碼中實現讀寫分離,像一些大型的java應用,如果在程序代碼中實現讀寫分離對代碼的改動就較大,所以,像這種應用一般會考慮使用代理層來實現,那么今天就使用Amoeba為例,完成主從復制和讀寫分離。

 

二、實驗案例

1、實驗拓撲:

mysql5.7的主從復制+讀寫分離

2、實驗環境:

OScentos7

mysql-5.7.13

ip規劃如拓撲環境

mysql5.7的主從復制+讀寫分離

mysql5.7的主從復制+讀寫分離

3、實驗步驟:

  首先部署主從復制架構,再實現讀寫分離,使用client測試讀寫分離;

3-1

1)、主從復制:

配置ntp,在master上搭建時間同步服務器,確保主從服務器時間同步

配置本地yum

mysql5.7的主從復制+讀寫分離

安裝ntp

  yum -y install ntp

2)、配置NTP時間服務器:

vim  /etc/ntp.conf

添加如下配置:

mysql5.7的主從復制+讀寫分離

3)、重啟ntpd服務:

mysql5.7的主從復制+讀寫分離

4)、防火墻添加例外:

mysql5.7的主從復制+讀寫分離

5)分別slave1slave2執行時間同步:

分別在slave1 slave2安裝ntp  ntpdate

mysql5.7的主從復制+讀寫分離

mysql5.7的主從復制+讀寫分離

salve1slave2執行命令同步時間:

mysql5.7的主從復制+讀寫分離

3-2

1)、分別在masterslave1,slave2安裝Mysql,安裝步驟略:

mysql版本如下:

mysql5.7的主從復制+讀寫分離

2)、mysql_master配置:

修改/etc/my.cnf配置文件:


mysql5.7的主從復制+讀寫分離


注釋:

server-id=1  ##注意主從server-id不可一樣

log-slave-updates=true:一般用于聯機復制中,

log-bin=master-bin:指定binlog日志名

重啟mysqld服務

mysql5.7的主從復制+讀寫分離

master創建用于復制數據用戶,并授權,查看masterbinlog日志信息。

mysql5.7的主從復制+讀寫分離

4、配置從服務器(slave1slave2配置一樣)

1)、修改/etc/my.cnf主配置文件:

mysql5.7的主從復制+讀寫分離

注釋:

server-id=2:  server-id修改為2

log-bin=mysql-bin:  slave的二進制日志

relay-log=relay-log-bin  :中繼日志文件名

relay-log-index=slave-relay-bin.index : 中繼日志的索引文件名

重啟mysqld服務

systemctl restart mysqld

注意:

  slave2也執行以上操作

3)、在salve1salve2分別執行change master to操作,用于同步數據:

master上開啟防火墻的3306端口例外:

mysql5.7的主從復制+讀寫分離

注意要記住在master上執行show master statusbinlog的二進制名,與位置信息,下面需要指定:

mysql5.7的主從復制+讀寫分離

slave2也執行相同操作:

4)、啟動slaveslave1slave2都執行此操作)

mysql>  start slave;

5)、查看slave狀態,確保以下兩個值為YES

mysql5.7的主從復制+讀寫分離

當前Slave_IO_Running:值為No,向下查看錯誤信息:

mysql5.7的主從復制+讀寫分離

根據上述信息,可以判斷,我的環境為克隆狀態,所以mysqlUUID值一樣,使用以下方法解決:

mysql5.7的主從復制+讀寫分離

修改auto.cnf中的UUID值,隨意更改一個值即可。(slave2也一樣)

重啟mysqld服務:

systemctl restart mysqld

再次登錄mysql,查看主從復制的狀態:

  根據Slave_SQL_Running  Slave_IO_Running值是否為Yes狀態

 salve1

mysql5.7的主從復制+讀寫分離

 slave2

mysql5.7的主從復制+讀寫分離


5、驗證從是否同步數據:

1)、在主服務器上新建數據庫”IT

mysql5.7的主從復制+讀寫分離

創建test表,并插入數據:

mysql5.7的主從復制+讀寫分離

slave1slave2上查看是否更新數據:

slave1

mysql5.7的主從復制+讀寫分離

slave2

mysql5.7的主從復制+讀寫分離

主從復制配置完畢,接下來配置讀寫分離:

四、讀寫分離:

1、在Amoeba上安裝java環境:

因為Amoeba基于是jdk1.5開發的,所以官方推薦使用jdk1.51.6版本,高版本不建議使用

1)、下載jdk的執行程序:

mysql5.7的主從復制+讀寫分離

2)、添加x權限,并執行

chmod +x  jdk-6u14-linux-x64.bin

cp  jdk-6u14-linux-x64.bin  /usr/local/

./jdk-6u14-linux-x64.bin  ##執行此程序

安裝過程中提示(yes/no),選擇yes安裝即可,

mv  jdk1.6.0_14/  /usr/local/jdk1.6

3)、修改/etc/profile配置文件,增加以下配置:

export JAVA_HOME=/usr/local/jdk1.6  //設置jdk的根目錄

export CLASSPATH=$CLASSPATH:$JAVA_HOME/lib:$JAVA_HOME/jre/lib   //jdk的程序文件賦予CLASSPATH變量

export PATH=$JAVA_HOME/lib:$JAVA_HOME/jre/bin:$PATH:$HOME

/bin  //jdk的程序文件賦予PATH變量

export AMOEBA_HOME=/usr/local/amoeba //定義AMOEBA的根目錄

export PATH=$PATH:$AMOEBA_HOME/bin  amoeba的程序文件復制給PATH變量

如:

mysql5.7的主從復制+讀寫分離

4)、立即生效

mysql5.7的主從復制+讀寫分離

2、安裝并配置Amoeba軟件:

#mkdir  /usr/local/amoeba    //創建amoeba目錄

#tar zxf  amoeba-mysql-binary-2.2.0.tar.gz -C  /usr/local/amoeba/

#chmod -R 755 /usr/local/amoeba/

#/usr/local/amoeba/bin/amoeba    

mysql5.7的主從復制+讀寫分離

顯示以上內容說明amoeba安裝成功。

3、配置amoeba,實現讀寫分離,master負責寫,slave負責讀,負載均衡

1)、在主從三臺服務器上登錄mysql,創建amoeba用戶并授權

用戶amoeba,密碼amoeba(因為之前配置了主從復制,所以在slave1 slave2也會存在授權用戶,可以查看)

mysql5.7的主從復制+讀寫分離

2)、修改amoeba.xml文件:

定義兩個配置,第一是應用程序使用什么用戶連接amoeba訪問到后端的mysql數據庫,第二個是定義默認寫池以及讀池。

Amoeba上操作:

vim  /usr/local/conf/amoeba.xml

1)、修改連接amoeba的用戶和密碼

mysql5.7的主從復制+讀寫分離

2)、定義讀寫池

mysql5.7的主從復制+讀寫分離

3)、編輯dbServers.xml配置文件

mysql5.7的主從復制+讀寫分離

1)、修改連接mysql的用戶和密碼:

 用戶amoeba 密碼amoeba    ###注意刪除注釋   -->

mysql5.7的主從復制+讀寫分離

指定master slave1 slave2主機地址:

mysql5.7的主從復制+讀寫分離

定義slave的負載均衡:

mysql5.7的主從復制+讀寫分離

4)、啟動amoeba

mysql5.7的主從復制+讀寫分離

4、測試讀寫分離:

1)、在client上安裝mysql,用于遠程連接數據庫測試  (安裝過程略,可以使用yum -y install mysql

2)、在master salve1 slave2分別開啟3306端口,防火墻添加例外

mysql5.7的主從復制+讀寫分離


Amoeba上開啟8066端口:

firewall-cmd  --permanent  --add-port=8066/tcp;

firewall-cmd  --reload

3)、在client上執行mysql命令登錄amoeba

mysql5.7的主從復制+讀寫分離

 1)、創建數據庫test

mysql5.7的主從復制+讀寫分離

 2)、創建表student;

mysql5.7的主從復制+讀寫分離

查看主從同步情況:

master

mysql5.7的主從復制+讀寫分離

slave1

mysql5.7的主從復制+讀寫分離

slave2:

mysql5.7的主從復制+讀寫分離

client上插入數據到student表中,查看從是否同步:

mysql5.7的主從復制+讀寫分離

slave1

mysql5.7的主從復制+讀寫分離

slave2

mysql5.7的主從復制+讀寫分離

2)、將slave1 slave2執行 stop slave,停止主從復制

     分別在slave1 salve2 student表中插入不同的數據,用于在client上測試讀的負載均衡:

slave1

mysql5.7的主從復制+讀寫分離


slave2:

mysql5.7的主從復制+讀寫分離

client上進行查詢:

mysql5.7的主從復制+讀寫分離

可以看到,第一次查詢的數據是slave2的數據庫,第二次查詢是slave1的數據庫,實現了輪詢算法的負載均衡

 3)、在client上寫入數據,測試寫數據只有在master上會寫入:

mysql5.7的主從復制+讀寫分離

從上面可以看出,在client上向student表寫入數據,查詢時,沒有此數據,因為寫操作只在master上生效,讀是在slave

master上查看是否有剛寫入的數據:

mysql5.7的主從復制+讀寫分離

通過以上測試,mysql的主從復制與讀寫分離部署已完成。


向AI問一下細節

免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

AI

亚洲午夜精品一区二区_中文无码日韩欧免_久久香蕉精品视频_欧美主播一区二区三区美女