天天看點

MyCat入門篇-使用案例1:讀寫分離(part1)

前置文章:MyCat入門篇-下載下傳安裝

文章目錄

      • MyCat的使用案例
        • 需求背景描述
        • 容器節點資訊
        • 啟動MySQL容器
          • 拉取MySQL鏡像
          • 準備MySQL配置檔案
          • 準備虛拟網段
          • 啟動MySQL容器
          • 連接配接MySQL服務

MyCat的使用案例

需求背景描述

想對mycat進行實踐操作,結合一個資料庫叢集是必不可少的,因為它是一款資料庫中間件産品,如果沒有資料庫作為基礎,它的存在如同空中樓閣。

是以我們在進行實踐mycat案例之前,需要搭建一個資料庫叢集,我們這裡選擇比較輕量級的MySQL資料庫來作為mycat資料庫中間件的底層資料庫叢集環境。

那麼如何快速搭建一個MySQL叢集環境呢?

使用docker容器技術将是最佳的選擇。接下來我将帶領大家使用docker容器技術快速的搭建一個MySQL的主從複制的叢集環境。

完成了MySQL組從複制的搭建之後,我會把資料庫中間件mycat也內建到MySQL叢集環境中來,結合mycat中間件來對MySQL實作讀寫分離、垂直拆分、水準拆分等操作。

容器節點資訊

使用docker啟動如下容器

  • 6個MySQL容器,3主3從;
  • 2個mycat容器,1主1備;
  • 2個搭建mycat高可用的HAProxy+Keepalive容器,在每台伺服器上面都安裝上HAProxy和Keepalive;

具體資訊如下:

序号 主機名稱 IP位址 角色 簡稱 MySQL使用者名 MySQL密碼 容器内端口 容器外映射端口
1 master1.mysql 172.19.0.11 主節點1 M1 root root 3306 3311
2 slave1.mysql 172.19.0.12 從節點1 S1 root root 3306 3312
3 master2.mysql 172.19.0.21 主節點2 M2 root root 3306 3321
4 slave2.mysql 172.19.0.22 從節點2 S2 root root 3306 3322
5 master3.mysql 172.19.0.31 主節點3 M3 root root 3306 3331
6 slave3.mysql 172.19.0.32 從節點3 S3 root root 3306 3332
7 mycat1.mycat 172.19.0.41 mycat主節點1 MY1 mycat mycat 8066,9066 8041,9041
8 mycat2.mycat 172.19.0.42 mycat備用節點 MY2 mycat mycat 8066,9066 8042,9042
9 haproxy1.mysql 172.19.0.51 節點1 HK1
10 keepalive1.mysql 172.19.0.51 節點1 HK1
11 haproxy2.mysql 172.19.0.52 節點2 HK2
12 keepalive2.mysql 172.19.0.52 節點2 HK2

整體網絡拓撲如下所示:

MyCat入門篇-使用案例1:讀寫分離(part1)

啟動MySQL容器

拉取MySQL鏡像

我們實驗的時候是基于MySQL5.7.31的版本,是以我們從docker hub上拉取的時候,指定拉取的MySQL版本号。

  • 使用如下指令拉取并檢視拉取結果:
docker pull mysql:5.7.31
docker images
           
  • 具體示例如下所示:
➜  Data docker pull mysql:5.7.31
5.7.31: Pulling from library/mysql
bb79b6b2107f: Downloading [==>              ]  1.089MB/27.09MB
49e22f6fb9f7: Download complete
842b1255668c: Downloading [===================>]  1.609MB/4.178MB
9f48d1f43000: Downloading
c693f0615bce: Waiting
8a621b9dbed2: Waiting
0807d32aef13: Waiting
6d2fc69dfa35: Waiting
56153548dd2c: Waiting
3bb6ba940303: Waiting
3e1888da91a7: Waiting
5.7.31: Pulling from library/mysql
bb79b6b2107f: Pull complete
49e22f6fb9f7: Pull complete
842b1255668c: Pull complete
9f48d1f43000: Pull complete
c693f0615bce: Pull complete
8a621b9dbed2: Pull complete
0807d32aef13: Pull complete
6d2fc69dfa35: Pull complete
56153548dd2c: Pull complete
3bb6ba940303: Pull complete
3e1888da91a7: Pull complete
Digest: sha256:b3dc8d10307ab7b9ca1a7981b1601a67e176408be618fc4216d137be37dae10b
Status: Downloaded newer image for mysql:5.7.31
docker.io/library/mysql:5.7.31
➜  Data docker images
REPOSITORY          TAG                 IMAGE ID            CREATED             SIZE
mysql               5.7.31              42cdba9f1b08        10 days ago         448MB
➜  Data
           
準備MySQL配置檔案

因為我們是使用容器啟動MySQL服務,是以在啟動MySQL服務之前,先準備好MySQL的配置檔案,然後把配置檔案挂載到容器當中,友善在後面配置主從同步的時候直接在本地挂載的目錄下面修改配置檔案。

我在本地的家目錄下面,建立了一個docker_mysql_conf檔案夾,這個檔案夾下面分了6個子目錄檔案夾,如下所示:

  • MySQL的配置檔案目錄如下:
➜  docker_mysql_conf ll
total 0
drwxr-xr-x  3 fengwenjian  staff    96B 10 19 14:31 master1
drwxr-xr-x  3 fengwenjian  staff    96B 10 19 14:32 master2
drwxr-xr-x  3 fengwenjian  staff    96B 10 19 14:32 master3
drwxr-xr-x  3 fengwenjian  staff    96B  9 29 15:49 slave1
drwxr-xr-x  3 fengwenjian  staff    96B  9 29 15:50 slave2
drwxr-xr-x  3 fengwenjian  staff    96B 10 18 12:17 slave3
           
  • MySQL的配置檔案如下:
➜  docker_mysql_conf pwd
/Users/fengwenjian/docker_mysql_conf
➜  docker_mysql_conf ll */my.cnf
-rw-r--r--@ 1 fengwenjian  staff   1.3K 10 19 14:31 master1/my.cnf
-rw-r--r--  1 fengwenjian  staff   1.1K 10 19 14:32 master2/my.cnf
-rw-r--r--  1 fengwenjian  staff   1.1K 10 19 14:32 master3/my.cnf
-rw-r--r--  1 fengwenjian  staff   1.2K  9 29 15:49 slave1/my.cnf
-rw-r--r--  1 fengwenjian  staff   1.2K  9 29 15:50 slave2/my.cnf
-rw-r--r--  1 fengwenjian  staff   1.2K 10 18 12:17 slave3/my.cnf
➜  docker_mysql_conf
           

具體每一個節點的配置檔案,下面分别貼出各自my.cnf的内容

  • master1的my.cnf配置如下:
➜  docker_mysql_conf cat master1/my.cnf
[mysqld]

# 主伺服器唯一ID,使用主機IP位址的最後一個域值來作為MySQL叢集中的serverid
server-id=11

# 啟用二進制日志
log-bin=mysql-bin

# 設定不要複制的資料庫(可設定多個)
#binlog-ignore-db=mysql
#binlog-ignore-db=information_schema

# 設定需要複制的資料庫
#binlog-do-db=test_slave

# 設定logbin格式
#binlog_format=STATEMENT
binlog_format=row
binlog_row_image=minimal

# 在作為從資料庫的時候,有寫入操作也要更新二進制日志檔案
#log-slave-updates
log_slave_updates=on

# 表示自增長字段每次遞增的量,指自增字段的起始值,其預設值是1,取值範圍是1 .. 65535
auto-increment-increment=2

# 表示自增長字段從哪個數開始,指字段一次遞增多少,他的取值範圍是1 .. 65535
auto-increment-offset=1

# 資料庫編碼設定
character-set-server=utf8mb4
collation-server=utf8mb4_general_ci
#collation-server=utf8mb4_unicode_ci

# 開啟記錄日志位置的方式為表的方式,而不是使用檔案的方式。
master_info_repository=TABLE
relay_log_info_repository=TABLE

# 從庫需要配置下面的選項
#read_only=on

# 慢查詢日志
slow_query_log=ON
#log_output=table
slow_query_log_file=/var/lib/mysql/master1-slow.log
#slow_query_log_file=/opt/mysql-5.7.29/data/slow.log
long_query_time=3

# 配置從庫同步資料的線程數
slave_parallel_type='logical_clock'
slave_parallel_workers=6

➜  docker_mysql_conf
           
  • slave1的my.cnf配置如下:
➜  docker_mysql_conf cat slave1/my.cnf
[mysqld]

# 主伺服器唯一ID,使用主機IP位址的最後一個域值來作為MySQL叢集中的serverid
server-id=12

# 啟用二進制日志
#log-bin=mysql-bin

# 設定不要複制的資料庫(可設定多個)
#binlog-ignore-db=mysql
#binlog-ignore-db=information_schema

# 設定需要複制的資料庫
#binlog-do-db=test_slave

# 設定logbin格式
#binlog_format=STATEMENT
#binlog_format=row
#binlog_row_image=minimal

# 在作為從資料庫的時候,有寫入操作也要更新二進制日志檔案
#log-slave-updates
#log_slave_updates=on

# 表示自增長字段每次遞增的量,指自增字段的起始值,其預設值是1,取值範圍是1 .. 65535
#auto-increment-increment=2

# 表示自增長字段從哪個數開始,指字段一次遞增多少,他的取值範圍是1 .. 65535
#auto-increment-offset=1

# 資料庫編碼設定
character-set-server=utf8mb4
collation-server=utf8mb4_general_ci
#collation-server=utf8mb4_unicode_ci

# 開啟記錄日志位置的方式為表的方式,而不是使用檔案的方式。
master_info_repository=TABLE
relay_log_info_repository=TABLE

# 從庫需要配置下面的選項
read_only=on

# 啟用中繼日志
relay-log=mysql-relay


# 配置從庫同步資料的線程數
slave_parallel_type='logical_clock'
slave_parallel_workers=6

➜  docker_mysql_conf
           
  • master2的my.cnf配置如下:
➜  docker_mysql_conf cat master2/my.cnf
[mysqld]

# 主伺服器唯一ID,使用主機IP位址的最後一個域值來作為MySQL叢集中的serverid
server-id=21

# 啟用二進制日志
log-bin=mysql-bin

# 設定不要複制的資料庫(可設定多個)
#binlog-ignore-db=mysql
#binlog-ignore-db=information_schema

# 設定需要複制的資料庫
#binlog-do-db=test_slave

# 設定logbin格式
#binlog_format=STATEMENT
binlog_format=row
binlog_row_image=minimal

# 在作為從資料庫的時候,有寫入操作也要更新二進制日志檔案
#log-slave-updates
log_slave_updates=on

# 表示自增長字段每次遞增的量,指自增字段的起始值,其預設值是1,取值範圍是1 .. 65535
auto-increment-increment=2

# 表示自增長字段從哪個數開始,指字段一次遞增多少,他的取值範圍是1 .. 65535
auto-increment-offset=2

# 資料庫編碼設定
character-set-server=utf8mb4
collation-server=utf8mb4_general_ci
#collation-server=utf8mb4_unicode_ci

# 開啟記錄日志位置的方式為表的方式,而不是使用檔案的方式。
master_info_repository=TABLE
relay_log_info_repository=TABLE

# 從庫需要配置下面的選項
#read_only=on

# 配置從庫同步資料的線程數
slave_parallel_type='logical_clock'
slave_parallel_workers=6

➜  docker_mysql_conf
           
  • slave2的my.cnf配置如下:
➜  docker_mysql_conf cat slave2/my.cnf
[mysqld]

# 主伺服器唯一ID,使用主機IP位址的最後一個域值來作為MySQL叢集中的serverid
server-id=22

# 啟用二進制日志
#log-bin=mysql-bin

# 設定不要複制的資料庫(可設定多個)
#binlog-ignore-db=mysql
#binlog-ignore-db=information_schema

# 設定需要複制的資料庫
#binlog-do-db=test_slave

# 設定logbin格式
#binlog_format=STATEMENT
#binlog_format=row
#binlog_row_image=minimal

# 在作為從資料庫的時候,有寫入操作也要更新二進制日志檔案
#log-slave-updates
#log_slave_updates=on

# 表示自增長字段每次遞增的量,指自增字段的起始值,其預設值是1,取值範圍是1 .. 65535
#auto-increment-increment=2

# 表示自增長字段從哪個數開始,指字段一次遞增多少,他的取值範圍是1 .. 65535
#auto-increment-offset=1

# 資料庫編碼設定
character-set-server=utf8mb4
collation-server=utf8mb4_general_ci
#collation-server=utf8mb4_unicode_ci

# 開啟記錄日志位置的方式為表的方式,而不是使用檔案的方式。
master_info_repository=TABLE
relay_log_info_repository=TABLE

# 從庫需要配置下面的選項
read_only=on

# 啟用中繼日志
relay-log=mysql-relay


# 配置從庫同步資料的線程數
slave_parallel_type='logical_clock'
slave_parallel_workers=6

➜  docker_mysql_conf
           
  • master3的my.cnf配置如下:
➜  docker_mysql_conf cat master3/my.cnf
[mysqld]

# 主伺服器唯一ID,使用主機IP位址的最後一個域值來作為MySQL叢集中的serverid
server-id=31

# 啟用二進制日志
log-bin=mysql-bin

# 設定不要複制的資料庫(可設定多個)
#binlog-ignore-db=mysql
#binlog-ignore-db=information_schema

# 設定需要複制的資料庫
#binlog-do-db=test_slave

# 設定logbin格式
#binlog_format=STATEMENT
binlog_format=row
binlog_row_image=minimal

# 在作為從資料庫的時候,有寫入操作也要更新二進制日志檔案
#log-slave-updates
log_slave_updates=on

# 表示自增長字段每次遞增的量,指自增字段的起始值,其預設值是1,取值範圍是1 .. 65535
auto-increment-increment=2

# 表示自增長字段從哪個數開始,指字段一次遞增多少,他的取值範圍是1 .. 65535
auto-increment-offset=1

# 資料庫編碼設定
character-set-server=utf8mb4
collation-server=utf8mb4_general_ci
#collation-server=utf8mb4_unicode_ci

# 開啟記錄日志位置的方式為表的方式,而不是使用檔案的方式。
master_info_repository=TABLE
relay_log_info_repository=TABLE

# 從庫需要配置下面的選項
#read_only=on

# 配置從庫同步資料的線程數
slave_parallel_type='logical_clock'
slave_parallel_workers=6

➜  docker_mysql_conf
           
  • slave3的my.cnf配置如下:
➜  docker_mysql_conf cat slave3/my.cnf
[mysqld]

# 主伺服器唯一ID,使用主機IP位址的最後一個域值來作為MySQL叢集中的serverid
server-id=32

# 啟用二進制日志
#log-bin=mysql-bin

# 設定不要複制的資料庫(可設定多個)
#binlog-ignore-db=mysql
#binlog-ignore-db=information_schema

# 設定需要複制的資料庫
#binlog-do-db=test_slave

# 設定logbin格式
#binlog_format=STATEMENT
#binlog_format=row
#binlog_row_image=minimal

# 在作為從資料庫的時候,有寫入操作也要更新二進制日志檔案
#log-slave-updates
#log_slave_updates=on

# 表示自增長字段每次遞增的量,指自增字段的起始值,其預設值是1,取值範圍是1 .. 65535
#auto-increment-increment=2

# 表示自增長字段從哪個數開始,指字段一次遞增多少,他的取值範圍是1 .. 65535
#auto-increment-offset=1

# 資料庫編碼設定
character-set-server=utf8mb4
collation-server=utf8mb4_general_ci
#collation-server=utf8mb4_unicode_ci

# 開啟記錄日志位置的方式為表的方式,而不是使用檔案的方式。
master_info_repository=TABLE
relay_log_info_repository=TABLE

# 從庫需要配置下面的選項
read_only=on

# 啟用中繼日志
relay-log=mysql-relay


# 配置從庫同步資料的線程數
slave_parallel_type='logical_clock'
slave_parallel_workers=6

➜  docker_mysql_conf
           
準備虛拟網段

做這一步的原因主要是避免容器再次啟動的時候,容器的IP位址變動導緻,進而導緻MySQL主從同步的時候出現主從節點混亂問題的發生。

一開始的時候我沒有指定MySQL各個容器的IP位址和hostname,後來我驗證mycat讀寫分離和自動切換的時候,不斷的啟動和停止MySQL的容器,導緻同一個容器鏡像重新開機的IP位址和第一次建立的時候IP位址不一緻,進而導緻MySQL主從複制的關系混亂了。是以在建立容器的時候,指定好每一個容器的IP位址和hostname。

  • 使用下面指令建立虛拟網段
docker network create --subnet=172.19.0.0/24 mysql-cluster-network
           

參數解釋說明:

  1. –subnet=172.19.0.0/24:指定網段
  2. mysql-cluster-network:網段的名字
  • 使用下面指令檢視網段内容:
docker inspect mysql-cluster-network
docker network ls
           
  • 網段建立示例:
➜  docker_mysql_conf docker network ls
NETWORK ID          NAME                DRIVER              SCOPE
c2c0f3ce99ae        bridge              bridge              local
20a529083ab9        host                host                local
e550bcb69d18        none                null                local
➜  docker_mysql_conf
➜  docker_mysql_conf docker network create --subnet=172.19.0.0/24 mysql-cluster-network
3192d3b2360eedf304023e616a7256254622031368d215146e6b28a09a11932f
➜  docker_mysql_conf
➜  docker_mysql_conf docker network ls
NETWORK ID          NAME                    DRIVER              SCOPE
c2c0f3ce99ae        bridge                  bridge              local
20a529083ab9        host                    host                local
3192d3b2360e        mysql-cluster-network   bridge              local
e550bcb69d18        none                    null                local
➜  docker_mysql_conf
           
啟動MySQL容器

使用docker run指令啟動容器,具體指令參考如下。

  • 啟動MySQL容器的指令如下:
docker run --net=mysql-cluster-network --hostname master1.mysql --ip 172.19.0.11 --name mysql-master1 -d -v /Users/fengwenjian/docker_mysql_conf/master1:/etc/mysql/conf.d -e MYSQL_ROOT_PASSWORD=root -e TZ="Asia/Shanghai" -p 3311:3306 mysql:5.7.31

docker run --net=mysql-cluster-network --hostname slave1.mysql --ip 172.19.0.12 --name mysql-slave1 -d -v /Users/fengwenjian/docker_mysql_conf/slave1:/etc/mysql/conf.d -e MYSQL_ROOT_PASSWORD=root -e TZ="Asia/Shanghai" -p 3312:3306 mysql:5.7.31

docker run --net=mysql-cluster-network --hostname master2.mysql --ip 172.19.0.21 --name mysql-master2 -d -v /Users/fengwenjian/docker_mysql_conf/master2:/etc/mysql/conf.d -e MYSQL_ROOT_PASSWORD=root -e TZ="Asia/Shanghai" -p 3321:3306 mysql:5.7.31

docker run --net=mysql-cluster-network --hostname slave2.mysql --ip 172.19.0.22 --name mysql-slave2 -d -v /Users/fengwenjian/docker_mysql_conf/slave2:/etc/mysql/conf.d -e MYSQL_ROOT_PASSWORD=root -e TZ="Asia/Shanghai" -p 3322:3306 mysql:5.7.31

docker run --net=mysql-cluster-network --hostname master3.mysql --ip 172.19.0.31 --name mysql-master3 -d -v /Users/fengwenjian/docker_mysql_conf/master3:/etc/mysql/conf.d -e MYSQL_ROOT_PASSWORD=root -e TZ="Asia/Shanghai" -p 3331:3306 mysql:5.7.31

docker run --net=mysql-cluster-network --hostname slave3.mysql --ip 172.19.0.32 --name mysql-slave3 -d -v /Users/fengwenjian/docker_mysql_conf/slave3:/etc/mysql/conf.d -e MYSQL_ROOT_PASSWORD=root -e TZ="Asia/Shanghai" -p 3332:3306 mysql:5.7.31
           
  • 建立示例如下:
➜  docker_mysql_conf docker run --net=mysql-cluster-network --hostname master1.mysql --ip 172.19.0.11 --name mysql-master1 -d -v /Users/fengwenjian/docker_mysql_conf/master1:/etc/mysql/conf.d -e MYSQL_ROOT_PASSWORD=root -e TZ="Asia/Shanghai" -p 3311:3306 mysql:5.7.31
f3a642b89001be6c066c293721a4024dcc3ad4ebc65a4e3076ebfc0ec8077d6f
➜  docker_mysql_conf
➜  docker_mysql_conf docker run --net=mysql-cluster-network --hostname slave1.mysql --ip 172.19.0.12 --name mysql-slave1 -d -v /Users/fengwenjian/docker_mysql_conf/slave1:/etc/mysql/conf.d -e MYSQL_ROOT_PASSWORD=root -e TZ="Asia/Shanghai" -p 3312:3306 mysql:5.7.31
cb5c2dbb291b7e25756b4ed2b2851aa8ca4ac312992955db88454e46b0059b98
➜  docker_mysql_conf
➜  docker_mysql_conf docker run --net=mysql-cluster-network --hostname master2.mysql --ip 172.19.0.21 --name mysql-master2 -d -v /Users/fengwenjian/docker_mysql_conf/master2:/etc/mysql/conf.d -e MYSQL_ROOT_PASSWORD=root -e TZ="Asia/Shanghai" -p 3321:3306 mysql:5.7.31
0756b65f118821f80cc396d4e80b7c7aa14c5a07a82637022a927dbef93e892e
➜  docker_mysql_conf
➜  docker_mysql_conf docker run --net=mysql-cluster-network --hostname slave2.mysql --ip 172.19.0.22 --name mysql-slave2 -d -v /Users/fengwenjian/docker_mysql_conf/slave2:/etc/mysql/conf.d -e MYSQL_ROOT_PASSWORD=root -e TZ="Asia/Shanghai" -p 3322:3306 mysql:5.7.31
87e4940f6e2c8acafcdb42d673de2b55986870ebaaa779613480c5479dfaae6a
➜  docker_mysql_conf
➜  docker_mysql_conf docker run --net=mysql-cluster-network --hostname master3.mysql --ip 172.19.0.31 --name mysql-master3 -d -v /Users/fengwenjian/docker_mysql_conf/master3:/etc/mysql/conf.d -e MYSQL_ROOT_PASSWORD=root -e TZ="Asia/Shanghai" -p 3331:3306 mysql:5.7.31
5841f97bc021358ab9d355521749d6c905a49ff6ac79e7617da910d8b1d6f1ef
➜  docker_mysql_conf
➜  docker_mysql_conf docker run --net=mysql-cluster-network --hostname slave3.mysql --ip 172.19.0.32 --name mysql-slave3 -d -v /Users/fengwenjian/docker_mysql_conf/slave3:/etc/mysql/conf.d -e MYSQL_ROOT_PASSWORD=root -e TZ="Asia/Shanghai" -p 3332:3306 mysql:5.7.31
8a54ec54de08f7c3fb5e8771ded7195d6593fbb633269a51f72e46f6c9970c71
➜  docker_mysql_conf
           
  • 容器啟動後的結果如下所示:
➜  docker_mysql_conf docker ps
CONTAINER ID        IMAGE               COMMAND                  CREATED              STATUS              PORTS                               NAMES
8a54ec54de08        mysql:5.7.31        "docker-entrypoint.s…"   About a minute ago   Up About a minute   33060/tcp, 0.0.0.0:3332->3306/tcp   mysql-slave3
5841f97bc021        mysql:5.7.31        "docker-entrypoint.s…"   About a minute ago   Up About a minute   33060/tcp, 0.0.0.0:3331->3306/tcp   mysql-master3
87e4940f6e2c        mysql:5.7.31        "docker-entrypoint.s…"   About a minute ago   Up About a minute   33060/tcp, 0.0.0.0:3322->3306/tcp   mysql-slave2
0756b65f1188        mysql:5.7.31        "docker-entrypoint.s…"   About a minute ago   Up About a minute   33060/tcp, 0.0.0.0:3321->3306/tcp   mysql-master2
cb5c2dbb291b        mysql:5.7.31        "docker-entrypoint.s…"   About a minute ago   Up About a minute   33060/tcp, 0.0.0.0:3312->3306/tcp   mysql-slave1
f3a642b89001        mysql:5.7.31        "docker-entrypoint.s…"   About a minute ago   Up About a minute   33060/tcp, 0.0.0.0:3311->3306/tcp   mysql-master1
➜  docker_mysql_conf
           
  • 檢視各個容器啟動後的主機名稱和IP位址,結果如下所示:

從下面的結果可以看出,每一個MySQL資料庫執行個體的IP位址和主機名稱和我們前面規劃的IP位址和主機名稱是可以對上的。

➜  docker_mysql_conf docker exec mysql-master1 /bin/cat /etc/hosts
127.0.0.1	localhost
::1	localhost ip6-localhost ip6-loopback
fe00::0	ip6-localnet
ff00::0	ip6-mcastprefix
ff02::1	ip6-allnodes
ff02::2	ip6-allrouters
172.19.0.11	master1.mysql master1
➜  docker_mysql_conf
➜  docker_mysql_conf docker exec mysql-slave1 /bin/cat /etc/hosts
127.0.0.1	localhost
::1	localhost ip6-localhost ip6-loopback
fe00::0	ip6-localnet
ff00::0	ip6-mcastprefix
ff02::1	ip6-allnodes
ff02::2	ip6-allrouters
172.19.0.12	slave1.mysql slave1
➜  docker_mysql_conf
➜  docker_mysql_conf docker exec mysql-master2 /bin/cat /etc/hosts
127.0.0.1	localhost
::1	localhost ip6-localhost ip6-loopback
fe00::0	ip6-localnet
ff00::0	ip6-mcastprefix
ff02::1	ip6-allnodes
ff02::2	ip6-allrouters
172.19.0.21	master2.mysql master2
➜  docker_mysql_conf
➜  docker_mysql_conf docker exec mysql-slave2 /bin/cat /etc/hosts
127.0.0.1	localhost
::1	localhost ip6-localhost ip6-loopback
fe00::0	ip6-localnet
ff00::0	ip6-mcastprefix
ff02::1	ip6-allnodes
ff02::2	ip6-allrouters
172.19.0.22	slave2.mysql slave2
➜  docker_mysql_conf
➜  docker_mysql_conf docker exec mysql-master3 /bin/cat /etc/hosts
127.0.0.1	localhost
::1	localhost ip6-localhost ip6-loopback
fe00::0	ip6-localnet
ff00::0	ip6-mcastprefix
ff02::1	ip6-allnodes
ff02::2	ip6-allrouters
172.19.0.31	master3.mysql master3
➜  docker_mysql_conf
➜  docker_mysql_conf docker exec mysql-slave3 /bin/cat /etc/hosts
127.0.0.1	localhost
::1	localhost ip6-localhost ip6-loopback
fe00::0	ip6-localnet
ff00::0	ip6-mcastprefix
ff02::1	ip6-allnodes
ff02::2	ip6-allrouters
172.19.0.32	slave3.mysql slave3
➜  docker_mysql_conf
           
連接配接MySQL服務

在本地使用mysql指令來連接配接MySQL服務,測試是否可以正常連接配接到各個MySQL執行個體。

各個MySQL服務執行個體,用端口号來區分開來。

  • 使用如下指令來連接配接MySQL服務
# 登入master1
mysql -uroot -proot -P3311 -h127.0.0.1
# 登入slave1
mysql -uroot -proot -P3312 -h127.0.0.1

# 登入master2
mysql -uroot -proot -P3321 -h127.0.0.1
# 登入slave2
mysql -uroot -proot -P3322 -h127.0.0.1

# 登入master3
mysql -uroot -proot -P3331 -h127.0.0.1
# 登入slave3
mysql -uroot -proot -P3332 -h127.0.0.1
           

到此為止,MySQL叢集各個容器已經成功啟動,并且能夠正常通路各個容器。

後續會配置他們的主從同步和驗證主從同步的效果。敬請期待…​

微信搜尋“coder-home”或掃一掃下面的二維碼,

關注公衆号,第一時間了解更多幹貨分享,還有各類視訊教程資源。掃描它,帶走我。

MyCat入門篇-使用案例1:讀寫分離(part1)