雖然 kubernetes 社區(qū)一直在努力使得有狀態(tài)應(yīng)用成為一等公民,也推出了 statefulset 控制器支持 pod 的順序部署,穩(wěn)定的域名訪問和存儲(chǔ)訪問。但鑒于 MySQL 部署運(yùn)維的多樣性和復(fù)雜性,在 kubernetes 上部署 MySQL 仍然要面臨眾多挑戰(zhàn)。
邊壩ssl適用于網(wǎng)站、小程序/APP、API接口等需要進(jìn)行數(shù)據(jù)傳輸應(yīng)用場景,ssl證書未來市場廣闊!成為創(chuàng)新互聯(lián)建站的ssl證書銷售渠道,可以享受市場價(jià)格4-6折優(yōu)惠!如果有意向歡迎電話聯(lián)系或者加微信:18980820575(備注:SSL證書合作)期待與您的合作!
1、業(yè)務(wù)流量入口的配置方式
傳統(tǒng)虛擬機(jī)環(huán)境下,我們通過虛IP的方式,讓業(yè)務(wù)應(yīng)用都配置事先定義的一個(gè)虛IP為鏈接數(shù)據(jù)庫的地址,然后由高可用服務(wù)保證虛IP始終能被路由到master數(shù)據(jù)庫。在kubernetes中,出現(xiàn)了一層網(wǎng)絡(luò)插件屏蔽了底層網(wǎng)絡(luò)拓?fù)洌呖捎梅?wù)管理虛IP的方式需要隨之適應(yīng)調(diào)整,比如通過service結(jié)合標(biāo)簽完成虛IP的漂移,但service本身是kubernetes提供的一項(xiàng)功能,其可靠性和性能都取決于kubernetes服務(wù)的穩(wěn)定。以性能來說,service是kubeproxy組件通過配置iptables實(shí)現(xiàn)的,當(dāng)iptables規(guī)則較多時(shí)不可避免的會(huì)產(chǎn)生時(shí)延,需要我們針對(duì)性的解決。
2、容器隔離帶來的監(jiān)控視野問題
在 kubernetes 中,如果將 MySQL 制作為 container 運(yùn)行在一個(gè) pod 中,container 會(huì)將 MySQL 進(jìn)程和運(yùn)行環(huán)境隔離在一個(gè)單獨(dú)的 namespace 中。監(jiān)控組件在獲取 MySQL 的一些 metirc 時(shí),可能不得不進(jìn)入與 MySQL 同一個(gè) namespace 中,在部署和設(shè)計(jì)監(jiān)控組件時(shí)需要考慮到這些限制。
3、存儲(chǔ)在 kubernetes 中,支持配置各種不同的存儲(chǔ)。
如果使用本地存儲(chǔ) local persistent volume,則需要綁定 MySQL 在一個(gè)固定的節(jié)點(diǎn),這就完全浪費(fèi)了 kubernetes 靈活調(diào)度的天然優(yōu)勢;而如果使用遠(yuǎn)程共享存儲(chǔ),確實(shí)是將 MySQL 進(jìn)程與其存儲(chǔ)完全解耦,使得 MySQL 進(jìn)程可以在任意節(jié)點(diǎn)調(diào)度,然而考慮到高 I/O 吞吐量的情況,就不是那么美好了。設(shè)計(jì)時(shí)需要考量遠(yuǎn)程存儲(chǔ)是否能夠滿足 MySQL 的帶寬要求。
4、高可用/備份恢復(fù)
kubernetes 提供的 statefulset 控制器只能提供最基本的部署,刪除功能,無法實(shí)現(xiàn)完善的 MySQL 集群高可用/備份恢復(fù)操作。對(duì)于有狀態(tài)應(yīng)用的部署,仍需要定制開發(fā),所以多數(shù)公司提供了定制的 operator 來完成應(yīng)用容器的管理。比如 etcd operator,MySQL operator,后文將為大家詳述我測試使用 MySQL operator 的一些記錄。
1、主要解決針對(duì)大型網(wǎng)站架構(gòu)中持久化部分中,大量數(shù)據(jù)存儲(chǔ)以及高并發(fā)訪問所帶來是數(shù)據(jù)讀寫問題。分布式是將一個(gè)業(yè)務(wù)拆分為多個(gè)子業(yè)務(wù),部署在不同的服務(wù)器上。集群是同一個(gè)業(yè)務(wù),部署在多個(gè)服務(wù)器上。
2、著重對(duì)數(shù)據(jù)切分做了細(xì)致豐富的講解,從數(shù)據(jù)切分的原理出發(fā),一步一步深入理解數(shù)據(jù)的切分,通過深入理解各種切分策略來設(shè)計(jì)和優(yōu)化我們的系統(tǒng)。這部分中我們還用到了數(shù)據(jù)庫中間件和客戶端組件來進(jìn)行數(shù)據(jù)的切分,讓廣大網(wǎng)友能夠?qū)?shù)據(jù)的切分從理論到實(shí)戰(zhàn)都會(huì)有一個(gè)質(zhì)的飛躍。
通過分布式+集群的方式來提高io的吞吐量,以及數(shù)據(jù)庫的主從復(fù)制,主主復(fù)制,負(fù)載均衡,高可用,分庫分表以及數(shù)據(jù)庫中間件的使用。
Ambari是Apache的開源項(xiàng)目,它幫助用戶在GUI頁面上簡單的部署、管理、監(jiān)控Hadoop集群環(huán)境。Ambari支持的Hadoop組件包括HDFS、Hive、HBase、Spark、Yarn等,HortonWorks官方也是采用Ambari來完成自家HDP套件的安裝、管理及監(jiān)控的。除了預(yù)置的組件之外,Ambari還支持自定義組件的安裝,同時(shí),支持RESTful的API,繼而可以通過命令行等方式調(diào)用Ambari來完成一些自動(dòng)化的任務(wù)。
本文共分為兩部分,第一部分介紹如何在Docker虛擬化環(huán)境中部署Ambari;第二部分介紹如何基于Ambari來部署和管理Hadoop集群。
### 環(huán)境信息
* Docker發(fā)行版:Docker for Mac
* Docker版本:17.06.2-ce
* Docker容器OS:Ubuntu 14.04
* Ambari版本:2.5.2.0
Docker環(huán)境準(zhǔn)備
拉取Docker鏡像:在宿主機(jī)上執(zhí)行命令docker pull ubuntu:14.04從遠(yuǎn)端倉庫中獲取Ubuntu的鏡像,也可以獲取其他OS的鏡像,本文以Ubuntu為例
啟動(dòng)Docker容器:執(zhí)行如下命令,以u(píng)buntu:14.04鏡像為基礎(chǔ)啟動(dòng)容器:
docker run -itd --name ambari_new -p 8080:8080 -p 3306:3306 -v /Users/yuxiaolei/Workspace/dockerShared:/dockerShared ubuntu:14.04 /bin/bash
由于Ambari啟動(dòng)Web程序的時(shí)候占用8080端口,因此要從Docker宿主機(jī)上訪問Ambari頁面,需要通過參數(shù) -p 來制定端口映射;
作為新手,筆者在容器內(nèi)部署好Ambari之后,才發(fā)現(xiàn)Web頁面的8080端口和MySQL的3306端口(可選)沒有暴露給Docker宿主機(jī),也就沒法從宿主機(jī)上通過瀏覽器來登陸Ambari,因此必須想辦法在已有容器上開放端口。
有兩個(gè)方法:
1)如果宿主機(jī)為Linux系統(tǒng),則修改iptables防火墻來指定端口映射規(guī)則;
2)如果是非Linux系統(tǒng),可以將已裝Ambari的容器commit為新的鏡像,再基于該鏡像創(chuàng)建新的容器。此時(shí),就可以在docker run命令中添加參數(shù) -p 來指定端口映射了。
還有一個(gè)問題,Ambari將其數(shù)據(jù)存儲(chǔ)在數(shù)據(jù)庫中,支持MySQL、PostgreSQL等數(shù)據(jù)庫;容器內(nèi)安裝MySQL之后,基于上一步創(chuàng)建的新容器里,會(huì)發(fā)現(xiàn)MySQL啟動(dòng)不起來,執(zhí)行命令/etc/init.d/mysql restart啟動(dòng)失敗,在/var/log/mysql/error.log日志文件中打印有170802 14:02:59 [ERROR] Fatal error: Can't open and lock privilege tables: Got error 140 from storage engine的錯(cuò)誤,經(jīng)過網(wǎng)上查資料,需要在創(chuàng)建容器的時(shí)候添加參數(shù)-v /var/lib/mysql將MySQL數(shù)據(jù)存儲(chǔ)路徑聲明為數(shù)據(jù)卷,即可解決問題。
啟動(dòng)容器之后,執(zhí)行命令docker exec -it ambari /bin/bash進(jìn)入容器內(nèi)部。
Ambari安裝
配置Ubuntu的軟件倉庫源:
國內(nèi)建議采用阿里云的軟件源,在root賬號(hào)下用vim打開/etc/apt/sources.list文件,刪除文件所有內(nèi)容,粘貼如下內(nèi)容:
deb trusty main restricted universe multiverse
deb trusty-security main restricted universe multiverse
deb trusty-updates main restricted universe multiverse
deb trusty-proposed main restricted universe multiverse
deb trusty-backports main restricted universe multiverse
deb-src trusty main restricted universe multiverse
deb-src trusty-security main restricted universe multiverse
deb-src trusty-updates main restricted universe multiverse
deb-src trusty-proposed main restricted universe multiverse
deb-src trusty-backports main restricted universe multiverse
執(zhí)行命令apt-get update完成軟件列表更新
安裝Ambari所依賴的軟件
apt-get install software-properties-common
sudo add-apt-repository ppa:webupd8team/java
sudo apt-get update
sudo apt-get install oracle-java8-installer
sudo apt-get install oracle-java8-set-default
完成安裝之后,在 ~/.bashrc 文件末尾添加命令 `export JAVA_HOME=/usr/lib/jvm/java-8-oracle ` 以配置JAVA\_HOME 環(huán)境變量。
create database ambari;use ambari;GRANT ALL PRIVILEGES ON *.* TO 'root'@'%' IDENTIFIED BY 'root_password' WITH GRANT OPTION;FLUSH PRIVILEGES;exit;
由于Ambari的數(shù)據(jù)存儲(chǔ)在MySQL數(shù)據(jù)庫中,這里為Ambari單獨(dú)創(chuàng)建了database,并為其賦了完全控制權(quán)限;說明:假設(shè)MySQL數(shù)據(jù)庫root用戶的密碼為:root\_password
修改 `/etc/mysql/my.conf`,將`skip-external-locking`注釋掉,并確保 `bind-address = 0.0.0.0` 配置,以使MySQL可被遠(yuǎn)程主機(jī)訪問。
執(zhí)行命令`/etc/init.d/mysql restart`重啟MySQL 服務(wù)。
時(shí)間同步服務(wù)器ntp:執(zhí)行命令apt-get install ntp安裝ntp時(shí)間同步服務(wù)器,以便于集群環(huán)境中各節(jié)點(diǎn)的時(shí)鐘一致;執(zhí)行命令sudo service ntp restart重啟ntp服務(wù)。
MySQL:執(zhí)行命令apt-get install mysql-server安裝MySQL服務(wù)器,安裝完成后執(zhí)行命令mysql -uroot -proot進(jìn)入MySQL客戶端,執(zhí)行如下SQL代碼:
Oracle JDK:逐條執(zhí)行如下命令,以添加WebUpd8團(tuán)隊(duì)()提供的Oracle JDK倉庫源,并從該倉庫安裝JDK:
下載Ambari倉庫文件
進(jìn)入cd /etc/apt/sources.list.d目錄,執(zhí)行命令wget 從HortonWorks倉庫中下載Ambari源文件,下載后切勿修改list文件名;
執(zhí)行命令apt-key adv --recv-keys --keyserver keyserver.ubuntu.com B9733A7A07513CAD以信任遠(yuǎn)端倉庫的GPG簽名
執(zhí)行命令apt-get update更新Ambari軟件源
執(zhí)行命令apt-get install ambari安裝Ambari套件,由于軟件包較大(700多MB),這里情耐心等待,不過apt-get支持?jǐn)帱c(diǎn)下載,網(wǎng)絡(luò)終端后重新執(zhí)行命令時(shí)不會(huì)從零開始下載
配置Ambari:
執(zhí)行命令mysql -uroot -proot進(jìn)入MySQL客戶端,執(zhí)行命令source ambari進(jìn)入ambari的數(shù)據(jù)庫,并執(zhí)行命令source /var/lib/ambari-server/resources/Ambari-DDL-MySQL-CREATE.sql來完成Ambari的數(shù)據(jù)庫表初始化操作;
執(zhí)行命令ambari-server setup啟動(dòng)Ambari的引導(dǎo)式配置操作,根據(jù)指導(dǎo)做配置即可。需要注意的是,JDK不要選擇由Ambari從網(wǎng)絡(luò)下載,應(yīng)該選擇自定義路徑,然后輸入/usr/lib/jvm/java-8-oracle即可;
啟動(dòng)Ambari:執(zhí)行命令ambari-server start,啟動(dòng)日志存儲(chǔ)路徑為/var/log/ambari-server/ambari-server.log
啟動(dòng)之后,由于我們之前做了Docker容器的端口映射,因此可以在宿主機(jī)上打開瀏覽器輸入即可訪問Ambari登陸頁面
登陸用戶名和密碼均為admin,登陸之后就可以看到Ambari的首頁了,如下圖:
{% asset_img
文章題目:mysql集群怎么訪問,mysql怎么訪問數(shù)據(jù)庫
本文地址:http://chinadenli.net/article24/hegcce.html
成都網(wǎng)站建設(shè)公司_創(chuàng)新互聯(lián),為您提供搜索引擎優(yōu)化、網(wǎng)站維護(hù)、網(wǎng)站制作、做網(wǎng)站、小程序開發(fā)、網(wǎng)站收錄
聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶投稿、用戶轉(zhuǎn)載內(nèi)容為主,如果涉及侵權(quán)請(qǐng)盡快告知,我們將會(huì)在第一時(shí)間刪除。文章觀點(diǎn)不代表本網(wǎng)站立場,如需處理請(qǐng)聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內(nèi)容未經(jīng)允許不得轉(zhuǎn)載,或轉(zhuǎn)載時(shí)需注明來源: 創(chuàng)新互聯(lián)