1. 程式人生 > 其它 >基於docker的mysql叢集搭建

基於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環境:

  1. 首先檢視倉庫中所有docker版本
    yum list docker-ce --showduplicates | sort -r
  2. 輸入命令安裝(前提是本機沒有其他版本docker
    sudo yum install docker-ce
  3. 等待幾分鐘完成之後,查詢是否安裝成功
    docker version

docker安裝mysql

  1. 查詢docker倉庫中mysql的版本
    docker search mysql
  2. 匯入mysql映象等待完成
    docker pull mysql
  3. 啟動mysql資料庫其中123465是管理員密碼,請自行定義。
    docker run --name mysql_demo -p 3306:3306 -e MYSQL_ROOT_PASSWORD=123456 -d mysql
  4. 使用命令進入
    docker mysql docker exec -it dockerid /bin/bash
  5. 登陸mysql使用命令
     mysql -uroot -p
  6. 輸入密碼

  這時候 說明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.....