mysql基於mysql-proxy和amoeba的讀寫分離以及tcpdump+wireshark工具驗證(上)

mysql基於mysql-proxy和amoeba的讀寫分離

以及tcpdump+wireshark工具驗證



【實驗部署準備

1,首先對後端節點部署主從關係。

2,然後前端MySQL-proxy對後端進行讀寫分離。

3.後端各節點都要授權

4.

三個節點保持時間一致

[root@node3 ~]# crontab -e          #####時間一致性

 

*/3 * * * * /usr/sbin/ntpdate 172.16.0.1 &> /dev/null

 wKioL1TGeSvQ4ZV8AADCn56DkgE923.jpg


###############################對後端節點做主從複製#################################################

############注意對於mysql的安裝這裏不再介紹,直接進入配置。

###########################修改主節點配置文件########################################################

[root@director2 ~ ]#vim /etc/mysql/my.cn
[mysqld]
 42 thread_concurrency= 8
 43 innodb_file_per_table = on
 44 datadir = /mydata                ###############庫目錄
 45 skip_name_resolve = on           ###############不反解主機名
 59 log-bin=mysql-bin                ###############啓用二進制日誌
 67 server-id   = 1                  ###############唯一ID
 
[root@director2 ~ ]# chkconfig --list mysqld            #####保證mysqld的開啓自啓動
mysqld  0:off        1:off        2:on        3:on        4:on        5:on        6:off

############################授權一個有複製權限的用戶給從節點######################################

mysql>grant replication client,replication slave on *.* to 'cpuser'@'172.16.249.141' identified by "magedu";
Query OK, 0 rows affected (0.08 sec)
mysql> flush privileges;
Query OK, 0 rows affected (0.01 sec)

###########################從節點準備##############################################################

[root@node2 ~ ]# groupadd -g 306 mysql
[root@node2 ~ ]# useradd -g 306 -u 306 mysql
[root@node2 ~ ]# mkdir /mydata
[root@node2 ~ ]# cd /mydata/
[root@node2 / ]# chown -R mysql:mysql /mydata/
[root@node2 / ]# chmod -R a+w /mydata/

###########################mysql文件傳輸給從節點#################################################

[root@node2 mysql ]#mkdir /etc/mysql
[root@node2 mysql ]# scripts/mysql_install_db --user=mysql--datadir=/mydata ###初始化
[root@director2 ~ ]# scp /etc/mysql/my.cnf 172.16.249.141:/etc/mysql/   ###把主節點的配置文件拷貝過來
[root@node2 / ]# vim /etc/mysql/my.cnf       ####編輯從節點的配置文件
 59 #log-bin=mysql-bin                       ####從節點不啓用二禁止日誌
 67 server-id   = 20                         ##server-id保持唯一
 68 relay-log = relay-bin                    ####從節點開啓中繼日誌
 69 read-only =on                            ####只讀模式開啓(注意:這個只能限制普通用戶)

方法二:此處也可以直接施加讀鎖。在mysql> lock tables testdb read; 

mysql> show variables like 'relay%';        #####中繼日誌開啓了
+-----------------------+---------------------+
| Variable_name         | Value               |
+-----------------------+---------------------+
|relay_log              | relay-bin           |
|relay_log_index        |                     |
|relay_log_info_file    | relay-log.info      |
|relay_log_purge        | ON                  |
|relay_log_recovery     | OFF                 |
|relay_log_space_limit  | 0                   |
+-----------------------+---------------------+
mysql> show variables like "read%";    
#############只讀模式開啓
+----------------------+-----------------------+
|Variable_name         | Value                 |
+----------------------+-----------------------+
|read_buffer_size      | 1048576               |
|read_only             | ON                    |
|read_rnd_buffer_size  | 4194304               |
+----------------------+-----------------------+

#############################至此主從各單個節點配置結束#####################################

#############################配置從連接主節點################################################

#####主節點查看二進制文件的存儲位置

mysql> show
master status;
+----------------------+----------------+--------------+------------------------------+
| File                 | Position       | Binlog_Do_DB |Binlog_Ignore_DB              |
+----------------------+----------------+--------------+------------------------------+
| mysql-bin.000003     |      501       |              |                              |
+----------------------+----------------+--------------+------------------------------+
1 row in set (0.04
sec)
#######################建立主從連接######################################################
mysql>
change master to master_host='172.16.11.3',master_user='cpuser',master_password='magedu',master_log_file='mysql-bin.000003',master_log_pos=501;
 
mysql> show slave status\G;              #####查看當前從節點狀態
***************************1. row ***************************
Slave_IO_State:
Waiting for master to send event
Master_Host:
172.16.249.141
Master_User: cpuser
Master_Port: 3306
Connect_Retry: 60
Master_Log_File:
mysql-bin.000003
Read_Master_Log_Pos:
501
Relay_Log_File:
relay-bin.000002
Relay_Log_Pos: 529
Relay_Master_Log_File:
mysql-bin.000003
Slave_IO_Running: Yes               ###IO線程啓用
Slave_SQL_Running: Yes            ###SQL線程已經啓用

#########################測試結果#########################################

######主節點創建庫

mysql> create database testdb;
Query OK, 1 row affected (0.03 sec) 
mysql> use testdb;
Database changed
從節點已經同步了:

wKioL1TGfOqA9_JnAADQRIF4s8E235.jpg

#################################創建一個表###############################################

mysql> create table students(id tinyint unsigned not null auto_increment unique key);
Query OK, 0 rows affected (0.25 sec)

wKiom1TGfD-DJMlIAACj8t--Q7s792.jpg

#######################主從配置測試完畢#####################################

#####################開始配置mysql-proxy####################################

wKioL1TGfYHDydCUAADfh7G-vkI005.jpg

##但是要注意,因爲這個文件是不包含讀寫分離腳本的。因此,我們還需要下載一個mysql-proxy把裏面的讀寫分離腳本複製過來就好了.

[root@node2 ~ ]# yuminstall mysql-proxy -y
[root@node2 lua ]#tar xf mysql-proxy-0.8.3-linux-glibc2.3-x86-64bit.tar.gz
[root@node2mysql-proxy ]# pwd
/root/mysql-proxy-0.8.3-linux-glibc2.3-x86-64bit/share/doc/mysql-proxy
[root@node2mysql-proxy ]# cp rw-splitting.lua /usr/lib64/mysql-proxy/lua/
[root@node2mysql-proxy ]# cd /usr/lib64/mysql-proxy/lua/   
[root@node2 lua ]# chown -R root:mysql-proxy *        ## ####修改文件屬主屬組
[root@node2 lua ]# chmod a+x rw-splitting.lua         ###給腳本執行權限
[root@node2 ~ ]# vim /etc/mysql-proxy.cnf             ###修改配置文件
  1 [mysql-proxy]
  2 daemon = true
  3 pid-file = /var/run/mysql-proxy.pid
  4 log-file = /var/log/mysql-proxy.log
  5 log-level = debug
  6 max-open-files = 1024
  7 plugins = admin,proxy
  8 user = mysql-proxy
  9 #
 10 #Proxy Configuration
 11 proxy-address =0.0.0.0:3306                    ####用於連接後端msyql的賬號和端口
 12 proxy-backend-addresses = 172.16.11.3:3306     ####後端寫節點
 13 proxy-read-only-backend-addresses =172.16.249.141:3306 ####後端讀節點,多個用逗號分隔
 14 proxy-lua-script =/usr/lib64/mysql-proxy/lua/rw-splitting.lua ####讀寫分離用到的腳本
 15 #proxy-skip-profiling = true
 16 #
 17 # Admin Configuration
 18 admin-address =0.0.0.0:4041                     ####管理端口和地址
 19 admin-lua-script =/usr/lib64/mysql-proxy/lua/admin.lua  ####管理端口用到的腳本
 20 admin-username = admin                          ####管理的賬號
 21 admin-password = admin                          ####管理的密碼

#############################啓動mysql-proxy#######################################

[root@node2 lua ]#netstat -tunlp
tcp        0     0 0.0.0.0:4041               
0.0.0.0:*                   LISTEN      2019/mysql-proxy   
tcp        0     0 0.0.0.0:3306               
0.0.0.0:*                   LISTEN      2019/mysql-proxy

注意:如果先要前端的代裏可以連入後端還要求各後端都給予授權。

######master

mysql> grant all on *.* to 'admin'@'%' identified by 'admin';
Query OK, 0 rows affected (0.11 sec)
mysql> flush privileges;
Query OK, 0 rows affected (0.01 sec)
######slave:
mysql> grant all on *.* to 'admin'@'%' identified by 'admin';
Query OK, 0 rows affected (0.01 sec)
mysql> flush privileges;
Query OK, 0 rows
affected (0.00 sec)

##############################這時連入測試#####################################

[root@node2 ~ ]# mysql -uadmin -padmin -h172.16.249.106 --port=3306

##########測試寫

wKiom1TGfbnQ-_xyAACB3S3XynU802.jpg

#########主節點已經有了

wKioL1TGfrDDG1k6AADD2VlshQk303.jpg

##########測試讀

[root@node2 ~ ]#mysql -uadmin -padmin -h172.16.249.106 -e 'show databases;'
[root@node2 ~ ]#mysql -uadmin -padmin -h172.16.249.106 --port=4041

######UP就說明讀寫已經全部啓用了##################################################

wKiom1TGfibT94I2AADWHLpAPSc617.jpg

################################或者我們可以抓包驗證###########################

[root@node3 ~]# tcpdump -i eth0 -w ~/mysql.pkg port 3306

wKioL1TGfz7yLqtuAADn4s8qL80825.jpg

wKiom1TGfoiC6GwPAADboXka3sA694.jpg

wKioL1TGf6CCv422AAClS20EK04023.jpg






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