基於docker的mysql叢集搭建
docker做主從複製
Docker 可以讓開發者打包他們的應用以及依賴包到一個輕量級、可移植的容器中,然後釋出到任何流行的 Linux 機器上,也可以實現虛擬化。
利用docker做宿主機和容器內部同步
主從複製介紹
mysql跟我我們設定的主從節點,將binlog對從資料庫中進行推送。根據上圖(網上偷的圖...)可以看到mysql主節點 只需要開啟binlog 對資料做binlog儲存
我們的從節點 就會有兩個執行緒 一個是通過io獲取主節點binlog,一個是將binlog轉化為sql
在slave節點中,它給我們提供了兩個執行緒:分別命名為:SLAVE_IO_RUNNING和SLAVE_SQL_RUNNING
準備工作
一般來說,mysql叢集做讀寫分離,一主多從,通過binlog日誌去同步資料。
僅僅模擬資料,我們準備兩臺虛擬機器(centos或ubantu),安裝docker環境:
- 首先檢視倉庫中所有docker版本
yum list docker-ce --showduplicates | sort -r
- 輸入命令安裝(前提是本機沒有其他版本docker)
sudo yum install docker-ce
- 等待幾分鐘完成之後,查詢是否安裝成功
docker version
docker安裝mysql
- 查詢docker倉庫中mysql的版本
docker search mysql
- 匯入mysql映象等待完成
docker pull mysql
- 啟動mysql資料庫其中123465是管理員密碼,請自行定義。
docker run --name mysql_demo -p 3306:3306 -e MYSQL_ROOT_PASSWORD=123456 -d mysql
- 使用命令進入
docker mysql docker exec -it dockerid /bin/bash
- 登陸mysql使用命令
mysql -uroot -p
- 輸入密碼
這時候 說明docker中的mysql 已經安裝成功並且啟動了
我們需要修改mysql外部對映檔案
[mysqld] skip-name-resolve server-id=1 log-bin=mysql-bin binog-do-db=test_db binlog-ignore-db=mysql
這裡設定了skip-name : 連線資料禁用dns 只用ip
server-id : id不重複節點
bin-log : 開啟binlog日誌
指定主從複製庫,忽略哪些庫
接著我們需要設定從機的複製許可權
CREATE USER 'slave'@'%' IDENTIFIED BY '123456';
grant replication slave,replication client on *.* to slave@'192.168.xx.xx' identified by "password" ;
flush privileges;
//master_host 主機
master-log-file master-log-pos在檢視狀態中獲取 retry是重試次數
change master to master_host='192.168.1.1',master_user='slave',master_password='123456',master_port='5555',master-log-file='mysql-bin.000002' ,master-log-pos=154,master_connect_retry=30;
啟動後 可以檢視主從複製狀態:
show master status
show slave status \G;
前面說過 從節點其實是有兩個執行緒我們需要啟動他們
start slave
這時,我們就可以給主節點修改資料、從節點資料也會同樣更新
思考
主從複製會執行io,如果批量操作crud會導致資料不一致的方式,這種方式該如何處理:
1.zookeeper、redis做分散式鎖
2.使用資料庫中介軟體進行解耦,如:mycat
多節點叢集mysql時,我們怎麼批量部署mysql叢集並管理:
如:springboot中我們可以支援動態資料來源、and.....