基於Kubernetes搭建MySQL主從叢集
願你,忠於自己,活得像自己。
清單:
Name | Version |
---|---|
CentOS | 7 |
Kubernetes | 1.9.0 |
Docker | 17.09.1-ce |
MySQL | 5.7 |
前言
令我始料不及的出差活動中,開始接觸Kubernetes並被要求搭建基於此的MySQL主從叢集,由於筆者在Linux、Kubernetes等方面都是小白,故此展開了填坑活動,寫本文目的只是為了讓其他程式猿少踩坑,下面簡單介紹下MySQL主從叢集。
我們用MySQL叢集的分散式部署來實現MySQL主從模式,在MySQL叢集中,Master節點主要負責資料的分發和slave節點的管理。因此Master節點主要負責資料的寫入和分發(包括insert、update、delete)。而slave節點主要負責資料的讀取(包括select)。基本的master和slave的分工作業,如下圖所示。
MySQL叢集架構
MySQL叢集在主從模式下實現一臺服務充當主伺服器,其他一臺或者多臺伺服器充當從伺服器。下面我們開始搭建。
一、安裝MySQL
二、構建Docker映象
- 構建映象需要以下操作,先簡單說明後面步驟將此部分內容寫入Dockerfile中
master配置
- 檔案/etc/my.cnf中[mysqld]下新增配置
log-bin=mysql-bin
server-id=1
- 重啟MySQL
# service mysqld restart
- 建立同步賬號
# mysql -u root -p
# create user 'sync'@'%' identified by 'MySQL@lipuan.2018';
- 賦予同步賬號遠端許可權
# grant replication slave on *.* to 'sync'@'%' identified by '[email protected]';
slave配置
- 檔案/etc/my.cnf中[mysqld]下新增配置
log-bin=mysql-bin
server-id=2
- 重啟MySQL
# service mysqld restart
- 配置主機IP
# mysql -u root -p
# change master to master_host='x.x.x.x',master_user='sync',master_password='MySQL@lipuan .2018';
注意: server-id為主機標識,不能重複。x.x.x.x'為master伺服器IP
- 下面我們將以上的配置寫入Dockerfile中
準備master映象
- 下載MySQL官方Docker映象檔案,並解壓
# wget https://codeload.github.com/docker-library/mysql/zip/master
# unzip master
# mkdir /home/lipuan/mysqlDockerFile
# cp -Rf mysql-master/5.7/Dockerfile /home/lipuan/mysqlDockerFile
# cp -Rf mysql-master/5.7/docker-entrypoint.sh /home/lipuan/mysqlDockerFile
# rm -rf mysql-master
# chmod +x docker-entrypoint.sh
- Dockerfile中新增,位置如下圖所示
RUN sed -i '/\[mysqld\]/a server-id=1\nlog-bin' /etc/mysql/mysql.conf.d/mysqld.cnf
Dockerfile-master- docker-entrypoint.sh中新增,位置如下圖所示
echo "CREATE USER '$MYSQL_REPLICATION_USER'@'%' IDENTIFIED BY '$MYSQL_REPLICATION_PASSWORD' ;" | "${mysql[@]}"
echo "GRANT REPLICATION SLAVE ON *.* TO '$MYSQL_REPLICATION_USER'@'%' IDENTIFIED BY '$MYSQL_REPLICATION_PASSWORD' ;" | "${mysql[@]}"
echo 'FLUSH PRIVILEGES ;' | "${mysql[@]}"
entrypoint-master準備slave的映象
- 下載MySQL官方Docker映象檔案
# wget https://codeload.github.com/docker-library/mysql/zip/master
# unzip master
# mkdir /home/lipuan/mysqlDockerFile
# cd ~
# cp -Rf mysql-master/5.7/Dockerfile /home/lipuan/mysqlDockerFile
# cp -Rf mysql-master/5.7/docker-entrypoint.sh /home/lipuan/mysqlDockerFile
# rm -rf mysql-master
# chmod +x docker-entrypoint.sh
- Dockerfile中新增,位置如下圖所示
RUN RAND="$(date +%s | rev | cut -c 1-2)$(echo ${RANDOM})" && sed -i '/\[mysqld\]/a server-id='$RAND'\nlog-bin' /etc/mysql/mysql.conf.d/mysqld.cnf
此處server-id用的是隨機數
Dockerfile-slave
2.3 docker-entrypoint.sh中新增,位置如下圖所示
echo "STOP SLAVE;" | "${mysql[@]}"
echo "CHANGE MASTER TO master_host='$MYSQL_MASTER_SERVICE_HOST', master_user='$MYSQL_REPLICATION_USER', master_password='$MYSQL_REPLICATION_PASSWORD' ;" | "${mysql[@]}"
echo "START SLAVE;" | "${mysql[@]}"
slave配置中,master_host一項用的是$MYSQL_MASTER_SERVICE_HOST,這個環境變數(enviromnent variable)是由k8s生成的。
entrypoint-slave.png
- 構建master映象
# cd /home/lipuan/mysqlDockerFile/
# docker build -t paulliu/mysql-master:0.1 .
- 構建slave映象
# cd /home/lipuan/mysqlDockerFile/
# docker build -t paulliu/mysql-slave:0.1 .
- 上傳映象
# docker login
# docke push paulliu/mysql-master:0.1
# docke push paulliu/mysql-slave:0.1
三、MySQL叢集部署
# cd /home/lipuan/DockerBuild
此後內容若無指出均在此目錄下執行- 此部分操作,所有yaml檔案縮排空格必須嚴格,否則無法構建成功
master
- 新建mysql-master-rc.yaml檔案
# touch mysql-master-rc.yaml
新增內容
apiVersion: v1
kind: ReplicationController
metadata:
name: mysql-master
labels:
name: mysql-master
spec:
replicas: 1
selector:
name: mysql-master
template:
metadata:
labels:
name: mysql-master
spec:
containers:
- name: master
image: paulliu/mysql-master:0.1
ports:
- containerPort: 3306
env:
- name: MYSQL_ROOT_PASSWORD
value: "[email protected]"
- name: MYSQL_REPLICATION_USER
value: "sync"
- name: MYSQL_PASSWORD
value: "[email protected]"
- 新建mysql-master-service.yaml檔案
# touch mysql-master-service.yaml
新增內容
apiVersion: v1
kind: Service
metadata:
name: mysql-master
labels:
name: mysql-master
spec:
ports:
- port: 3306
targetPort: 3306
selector:
name: mysql-master
- 部署MySQL master服務
# kubectl create -f mysql-master-rc.yaml
# kubectl create -f mysql-master-service.yaml
- 檢視執行情況
# kubectl get pods,service,rc
slave
- 新建mysql-slave-rc.yaml檔案
# touch mysql-slave-rc.yaml
新增內容
apiVersion: v1
kind: ReplicationController
metadata:
name: mysql-slave
labels:
name: mysql-slave
spec:
replicas: 1
selector:
name: mysql-slave
template:
metadata:
labels:
name: mysql-slave
spec:
containers:
- name: master
image: paulliu/mysql-slave:0.1
ports:
- containerPort: 3306
env:
- name: MYSQL_ROOT_PASSWORD
value: "[email protected]"
- name: MYSQL_REPLICATION_USER
value: "sync"
- name: MYSQL_PASSWORD
value: "[email protected]"
- 新建mysql-slave-service.yaml檔案
# touch mysql-slave-service.yaml
新增內容
apiVersion: v1
kind: Service
metadata:
name: mysql-slave
labels:
name: mysql-slave
spec:
ports:
- port: 3306
targetPort: 3306
selector:
name: mysql-slave
- 部署MySQL slave服務
# kubectl create -f mysql-slave-rc.yaml
# kubectl create -f mysql-slave-service.yaml
- 檢視執行情況
# kubectl get pods,service,rc
寫在文末
寫到這裡基於Kubernetes的MySQL主從叢集就搭建成功了,如果有哪位朋友對於其中步驟不是很清楚,歡迎互相學習。
本文是筆者首次寫技術部落格,如有錯漏等問題,還望各位大大指出批評!
更新日誌
- 2018.01.13 在準備映象部分添加了對於docker-entrypoint.sh檔案授予可執行許可權,若無此步驟可能導致映象無法執行;
相關推薦
基於Kubernetes搭建MySQL主從叢集
願你,忠於自己,活得像自己。清單:NameVersionCentOS7Kubernetes1.9.0Docker17.09.1-ceMySQL5.7前言令我始料不及的出差活動中,開始接觸Kubernetes並被要求搭建基於此的MySQL主從叢集,由於筆者在Linux、Kubernetes等方面都是小白,故此展
基於Docker搭建MySQL主從復制
效果 重啟 conn chang eve iter cli 配置 bin 摘要: 本篇博文相對簡單,因為是初次使用Docker,MySQL的主從復制之前也在Centos環境下搭建過,但是也忘的也差不多了,因此本次嘗試在Docker中搭建。 本篇博文相對簡單,因為是初次使
基於Docker搭建MySQL主從複製
搭建環境Centos 7.2 64位MySQL 5.7.13Docker 1.13.1接下來,我們將會在一臺伺服器上安裝docker,並使用docker執行三個MySQL容器,分別為一主兩從。安裝docker執行命令[root@VM_0_17_centos ~]# yum install docker如果有提
基於docker搭建mysql主從+haproxy負載均衡
使用容器對於部署來說省了不少事情,容器也有利於自己做各種分散式的架構實驗。這裡說一下使用docker搭建mysql主從以及通過haproxy做從庫的負載均衡。 一、mysql主從主節點 1、建立使用者,授權create user 'repl'@'172.2
Docker搭建MySQL主從叢集
關於MySQL主從模式,如果我們直接在本機上搭建的話,是沒法搭建的,只能藉助於虛擬機器,但有的時候我們又需要搭建一
使用innobackupex基於從庫搭建mysql主從架構
oot word info conf over found upgrade datadir 參數 使用innobackupex基於從庫搭建mysql主從架構 現有的架構是一主一從,版本為Mysql5.6.37。實施要求是:利用從庫,搭建第二個從庫,版本為5.7.21 1、備
Docker Compose搭建MySQL主從複製叢集
前言 隨著應用業務資料不斷的增大,應用的 響應速度不斷下降,在檢測過程中我們不難發現大多數的請求都是 查詢操作。此時,我們可以將資料庫擴充套件成 主從複製模式,將 讀操作 和 寫操作 分離開來,多臺資料庫 分攤請求,從而 減少單庫 的 訪問壓力,進而應用得到優
基於keepalived搭建MySQL的高可用叢集
MySQL的高可用方案一般有如下幾種: keepalived+雙主,MHA,MMM,Heartbeat+DRBD,PXC,Galera Cluster 比較常用的是keepalived+雙主,MHA和PXC。 對於小公司,一般推薦使用keepalived+雙主,簡單。 下面來部署一下 配置環境:
基於Docker的MYSQL PXC叢集搭建
pxc叢集是Percona XtraDB Cluster的縮寫,是基於percona資料庫和galera中介軟體一種特殊MYSQL資料庫,而且據說percona資料庫的效能要比mysql還要好一些,並且是基於mysql,可以使用mysql的jdbc和客戶端進行連線的。pxc叢
基於Dokcer搭建Redis叢集搭建(主從叢集)
最近陸陸續續有不少園友加我好友諮詢 redis 叢集搭建的問題,我覺得一定是之前寫的這篇 《基於Docker的Redis叢集搭建》 文章有問題了,所以我花了幾分鐘瀏覽之前的文章總結了下面幾個問題: redis 數量太少,只建立了 3 個例項; 由於只有 3 個例項,所以全部只能是主節點,無法體現叢集主從關係
搭建mysql主從集群的步驟
pass msyql pos 主服務器 繼續 服務器 usr ast col 前提條件是:須要在linux上安裝4個mysql數據庫,都須要配置完對應的信息。 須要搭建: mysql 01: 主數據庫 master mysql 0
在CentOS7中搭建MySQL主從
mysql主從 linux centos mysql 筆記內容:17.1 MySQL主從介紹17.2 準備工作17.3 配置主17.4 配置從17.5 測試主從同步筆記日期:2017-11-0817.1 MySQL主從介紹 Mysql Replication(MySQL主從復制)是MySQL數
基於Mycat的MySQL主從讀寫分離配置詳解與示例
welcome 語句 port nodes false max Language sel 檢查 1.mycat二進制包安裝 tar -zxvf Mycat-server-1.6.5-release-20180122220033-linux.tar.gzcd mycatmv
搭建MySql主從復制與讀寫分離
單向 replicate from 命令 bec 方便 命令行 balance 之前 一、實驗名稱:?mysql主從復制讀寫分離二、實驗目的:??熟悉mysql主從復制的原理?熟悉mysql讀寫分離的原理?學會配置mysql主從復制?學會配置mysql讀寫分離三、實驗環境:
搭建 MySQL主從復制與讀寫分離
ast round running mysql配置 一個表 mysql主從 安全性 配置 tab 搭建 MySQL主從復制與讀寫分離 案例概述 : 在實際環境中 ,如果對數據庫的讀和寫都在同一個數據庫服務中操作 ,無論實在安全性、高可用性, 還是高並發等各個方面都是完全不
基於bind搭建DNS主從
red 語法錯誤 directory 冗余 錯誤 chan transfer ria eve 使用bind的主從復制功能可以實現的功能:提供冗余,避免單點故障;均衡負載查詢需求,從而提高系統可用性。 一、安裝 #bind-chroot 負責DNS安全作用,將bind
社交網站部署——Nginx服務器+PHP服務器搭建+MySQL主從集群
安裝環境 nginx服務器 環境 tar.gz fast vim tex use nginx 案例概述 某公司的社交網站采用PHP語言開發,為了管理PHP程序員開發的代碼,上級領導要求搭建SVN服務器進行版本控制。社交網站的第一個版本部署在LNMP平臺之上,前端為Nginx
Docker搭建mysql主從
文章目錄 Dockerfile製作mysql主從映象 mysql-master映象製作 mysql-slave映象製作 搭建mysql主從 獲取映象 宿主機建立目錄用來掛載 啟動主從mysql容器
基於CM搭建的CDH叢集之hive元件升級過程(hive0.13.1升級到hive-1.2.1且確保納入CM管理)
1、在hive0.13.1版本下建立lib121目錄 cd /opt/cloudera/parcels/CDH/lib/hive;mkdir lib121 2、下載hive1.2.1版本,並將該版本lib下所有檔案拷貝到lib121中 3、修改/opt/cloudera/par
基於keepalived搭建mysql雙主高可用
目錄 概述 環境準備 keepalived搭建 mysql搭建 mysql雙主搭建 mysql雙主高可用搭建 概述 傳統(不借助中介軟體)的資料庫主從搭建,如果主節點掛掉了,從節點只能讀取無法寫