部署clickhouse cluster(基于docker+zookeeper)

安裝zookeeper

雖然不是必要的槐雾,但clickhouse官方建議使用zookeeper部署集群钓瞭,原因是ck的復(fù)制是用zk實(shí)現(xiàn)的:

ZooKeeper is not a strict requirement: in some simple cases you can duplicate the data by writing it into all the replicas from your application code. This approach is not recommended, in this case ClickHouse won't be able to guarantee data consistency on all replicas. This remains the responsibility of your application.
而且很重要的是迂尝,如果不安裝zookeeper嘉熊,那么副本表是無法實(shí)現(xiàn)的


1.準(zhǔn)備三臺機(jī)器(/etc/hosts):

192.168.11.100 ch100
192.168.11.101 ch101
192.168.11.102 ch102

2.下載zookeeper3.5.6
注意一定要下載帶有bin的版本陈惰,否則會
【報(bào)錯(cuò)】
Starting Zookeeper Cluster. Error: Could not find or load main class org.apache.zookeeper.server.quorum.QuorumPeerMain

3.解壓并修改配置文件北专,三機(jī)一致
目錄:/apps/

tar -zxvf apache-zookeeper-3.5.6-bin.tar.gz
mkdir -p /apps/apache-zookeeper-3.5.6-bin/data/zookeeper && mkdir -p /apps/apache-zookeeper-3.5.6-bin/log/zookeeper
cp /apps/apache-zookeeper-3.5.6-bin/conf/zoo-sample.cnf  /apps/apache-zookeeper-3.5.6-bin/conf/zoo.cnf
vi /apps/apache-zookeeper-3.5.6-bin/conf/zoo.cnf

配置文件主要改兩個(gè)地方:

dataDir=/apps/zookeeper-3.5.6/data/zookeeper
dataLogDir=/apps/zookeeper-3.5.6/log/zookeeper

server.1=ch100:2888:3888 #這里的.1 .2 .3實(shí)際上對應(yīng)了后面要?jiǎng)?chuàng)建的myid
server.2=ch101:2888:3888
server.3=ch102:2888:3888

4.每臺機(jī)器創(chuàng)建自己的myid文件
在剛剛配置文件中指定的dataDir目錄下創(chuàng)建myid文件
vi /apps/zookeeper-3.5.6/data/zookeeper/myid
三臺機(jī)器禀挫,分別寫上數(shù)字1,2拓颓,3

5.三臺機(jī)器按順序啟動(dòng)zk:

 ./bin/zkServer.sh start

啟動(dòng)后语婴,檢查:

 ./bin/zkServer.sh status

會看到一個(gè)leader,兩個(gè)follower:


follower

leader

如果這步出現(xiàn)錯(cuò)誤:
Error contacting service. It is probably not running.
請檢查防火墻:firewalld 或者 iptables

docker安裝clickhouse-server

單機(jī)安裝在這篇文章中有講述


1.先啟動(dòng)一個(gè)節(jié)點(diǎn)录粱,目的是將config目錄拷貝出來腻格,clickhouse的默認(rèn)配置目錄為:/etc/clickhouse-server/

docker run -d --name clickhouse-server --ulimit nofile=262144:262144 -p 8123:8123 --volume=$HOME/clickhouse:/var/lib/clickhouse  yandex/clickhouse-server
docker cp clickhouse-server :/etc/clickhouse-server/ /etc/clickhouse-server/
  1. 編輯配置
    vi /etc/clickhouse-server/config.xml
    修改以下配置:
 <listen_host>::</listen_host>  -- 去掉注釋

找到<remote_servers>標(biāo)簽?zāi)┪玻砑?lt;include_from>標(biāo)簽
<!-- If element has 'incl' attribute, then for it's value will be used corresponding substitution from another file.
         By default, path to file with substitutions is /etc/metrika.xml. It could be changed in config in 'include_from' element.
         Values for substitutions are specified in /yandex/name_of_substitution elements in that file.
      -->
<include_from>/etc/clickhouse-server/metrika.xml</include_from>
<!-- 修改時(shí)區(qū)-->
<timezone>Asia/Shanghai</timezone> 

然后增加metrika.xml:(注:這個(gè)配置只配置了分片啥繁,沒有配置副本)
這個(gè)配置中菜职,cluster_3s_1r就是集群的名字

<yandex>
 
    <!-- 集群配置 -->
    <clickhouse_remote_servers>
        <cluster_3s_1r>
 
            <!-- 數(shù)據(jù)分片1  -->
            <shard>
                <internal_replication>false</internal_replication>
                <replica>
                    <host>ch100</host>
                    <port>9000</port>
                    <user>default</user>
                    <password></password>
                </replica>
            </shard>
 
            <!-- 數(shù)據(jù)分片2  -->
            <shard>
                <internal_replication>false</internal_replication>
                <replica>
                    <host>ch101</host>
                    <port>9000</port>
                    <user>default</user>
                    <password></password>
                </replica>
            </shard>
 
            <!-- 數(shù)據(jù)分片3  -->
            <shard>
                <internal_replication>false</internal_replication>
                <replica>
                    <host>ch102</host>
                    <port>9000</port>
                    <user>default</user>
                    <password></password>
                </replica>
            </shard>
        </cluster_3s_1r>
    </clickhouse_remote_servers>
 
    <!-- ZK  -->
    <zookeeper-servers>
        <node index="1">
            <host>ch100</host>
            <port>2181</port>
        </node>
        <node index="2">
            <host>ch101</host>
            <port>2181</port>
        </node>
        <node index="3">
            <host>ch102</host>
            <port>2181</port>
        </node>
    </zookeeper-servers>
 
    <networks>
        <ip>::/0</ip>
    </networks>
 
    <!-- 數(shù)據(jù)壓縮算法  -->
    <clickhouse_compression>
        <case>
            <min_part_size>10000000000</min_part_size>
            <min_part_size_ratio>0.01</min_part_size_ratio>
            <method>lz4</method>
        </case>
    </clickhouse_compression>
 
</yandex>

3.重新啟動(dòng)三個(gè)節(jié)點(diǎn)的docker:clickhouse-server
啟動(dòng)命令在三個(gè)節(jié)點(diǎn)都要執(zhí)行,變化的參數(shù)為--hostname

docker run -d \
--name chserver \
--ulimit nofile=262144:262144 \
-p 9000:9000 \
-p 8123:8123 \
-p 9009:9009 \
--volume=/var/lib/clickhouse/:/var/lib/clickhouse/  \
--volume=/etc/clickhouse-server/:/etc/clickhouse-server/ \
--add-host ch100:192.168.11.100 \
--add-host ch101:192.168.11.101 \
--add-host ch102:192.168.11.102 \
--hostname ch102 \
yandex/clickhouse-server

其中旗闽,

--add-host參數(shù)作用相當(dāng)于容器內(nèi)的/etc/hosts
--hostname參數(shù)對每個(gè)容器配置自身的hostname酬核,用于識別is_local

4.啟動(dòng)clickhouse-client驗(yàn)證集群環(huán)境
在任意節(jié)點(diǎn)執(zhí)行,

docker run -it --rm   --add-host ch100:192.168.11.100 --add-host ch101:192.168.11.101 --add-host ch102:192.168.11.102 yandex/clickhouse-client --host ch101 --port 9000

其中适室,

--rm Automatically remove the container when it exits
因?yàn)閏lient也是用的docker嫡意,每次連接完畢需要自動(dòng)銷毀docker實(shí)例。
--host 就是連接的server

連接后捣辆,查詢集群可以看到:


system.clusters

測試分片


為簡單起見蔬螟,在三個(gè)節(jié)點(diǎn)上都創(chuàng)建了mysql引擎的數(shù)據(jù),創(chuàng)建方法是:

CREATE DATABASE  mysql_jiu_wen  \
ENGINE = MySQL('192.168.201.36:3306', 'jiu_wen', 'root', '84b405294fc45757e2a5e1fcf203593b')

接下來創(chuàng)建一個(gè)視圖汽畴,也就是分布表(Distributed table)

create table default.t_user_trade as mysql_jiu_wen.t_user_trade  ENGINE = Distributed(cluster_3s_1r, 'mysql_jiu_wen', 't_user_trade', rand());
-- Distributed(cluster_3s_1r, 'mysql_jiu_wen', 't_user_trade', rand()) 表示創(chuàng)建在集群cluster_3s_1r上旧巾,數(shù)據(jù)庫名是mysql_jiu_wen耸序,表名是t_user_trade,分片依據(jù)是 隨機(jī):rand() ;

這樣創(chuàng)建表以后鲁猩,實(shí)際上這張表包含了三個(gè)分片的總數(shù)據(jù)坎怪。二我的每個(gè)分片都加載了相同的mysql數(shù)據(jù)庫,所以表中的數(shù)據(jù)就是mysql數(shù)據(jù)重復(fù)三次廓握。
我只是為了方便測試才這么做搅窿,在實(shí)際生產(chǎn)中,每個(gè)分片當(dāng)然是存放不同的數(shù)據(jù)隙券,而不是存放相同的數(shù)據(jù)男应。

然后隨便group by 了一個(gè)數(shù)據(jù):

image.png

后記

(記一次斷電后集群的啟動(dòng))
斷電重啟后,docker 掛了是尔。
【報(bào)錯(cuò)】
chmod /var/lib/docker:read-only file system

image.png

mount -v

read only

發(fā)現(xiàn)根目錄是只讀的
【解決辦法】
先重載
sudo mount -o remount,rw /
在重啟
reboot

然后卸載docker重裝:
1.先用 yum list installed|grep docker 查看裝了哪些包

2.然后執(zhí)行卸載命令(后面三個(gè)包就是第一步中查詢出來的):yum -y remove containerd.io.x86_64 docker-ce.x86_64 docker-ce-cli.x86_64

3.刪除目錄 :rm -rf /var/lib/docker

4.重裝: yum install -y docker-ce

5.啟動(dòng):systemctl restart docker

然后再啟動(dòng)clickhouse
【報(bào)錯(cuò)】
這時(shí)候一直報(bào)錯(cuò)殉了,說連接不上mysql
因?yàn)橹霸賑lickhouse中使用了mysql引擎,現(xiàn)在這個(gè)mysql已經(jīng)斷開了拟枚,所以就一直報(bào)錯(cuò)薪铜。
最后通過修改metadata解決:
【解決辦法】
在/var/lib/clickhouse中有一個(gè)metadata文件夾,里面存放了建庫的sql腳本恩溅,修改那個(gè)mysql庫的鏈接為正掣艄浚可以訪問的即可(不知道直接刪掉可不可以。)

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末脚乡,一起剝皮案震驚了整個(gè)濱河市蜒滩,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌奶稠,老刑警劉巖俯艰,帶你破解...
    沈念sama閱讀 217,406評論 6 503
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場離奇詭異锌订,居然都是意外死亡竹握,警方通過查閱死者的電腦和手機(jī),發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 92,732評論 3 393
  • 文/潘曉璐 我一進(jìn)店門辆飘,熙熙樓的掌柜王于貴愁眉苦臉地迎上來啦辐,“玉大人,你說我怎么就攤上這事蜈项∏酃兀” “怎么了?”我有些...
    開封第一講書人閱讀 163,711評論 0 353
  • 文/不壞的土叔 我叫張陵紧卒,是天一觀的道長侥衬。 經(jīng)常有香客問我,道長,這世上最難降的妖魔是什么轴总? 我笑而不...
    開封第一講書人閱讀 58,380評論 1 293
  • 正文 為了忘掉前任贬媒,我火速辦了婚禮,結(jié)果婚禮上肘习,老公的妹妹穿的比我還像新娘。我一直安慰自己坡倔,他們只是感情好漂佩,可當(dāng)我...
    茶點(diǎn)故事閱讀 67,432評論 6 392
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著罪塔,像睡著了一般投蝉。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上征堪,一...
    開封第一講書人閱讀 51,301評論 1 301
  • 那天瘩缆,我揣著相機(jī)與錄音,去河邊找鬼佃蚜。 笑死庸娱,一個(gè)胖子當(dāng)著我的面吹牛,可吹牛的內(nèi)容都是我干的谐算。 我是一名探鬼主播熟尉,決...
    沈念sama閱讀 40,145評論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼洲脂!你這毒婦竟也來了舀武?” 一聲冷哼從身側(cè)響起太颤,我...
    開封第一講書人閱讀 39,008評論 0 276
  • 序言:老撾萬榮一對情侶失蹤,失蹤者是張志新(化名)和其女友劉穎,沒想到半個(gè)月后顽染,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 45,443評論 1 314
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡尊浪,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 37,649評論 3 334
  • 正文 我和宋清朗相戀三年典予,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片馅闽。...
    茶點(diǎn)故事閱讀 39,795評論 1 347
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡飘蚯,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出福也,到底是詐尸還是另有隱情局骤,我是刑警寧澤,帶...
    沈念sama閱讀 35,501評論 5 345
  • 正文 年R本政府宣布暴凑,位于F島的核電站峦甩,受9級特大地震影響,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜凯傲,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,119評論 3 328
  • 文/蒙蒙 一犬辰、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧冰单,春花似錦幌缝、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,731評論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至荒叼,卻和暖如春轿偎,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背被廓。 一陣腳步聲響...
    開封第一講書人閱讀 32,865評論 1 269
  • 我被黑心中介騙來泰國打工坏晦, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留,地道東北人嫁乘。 一個(gè)月前我還...
    沈念sama閱讀 47,899評論 2 370
  • 正文 我出身青樓昆婿,卻偏偏與公主長得像,于是被迫代替她去往敵國和親亦渗。 傳聞我的和親對象是個(gè)殘疾皇子挖诸,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 44,724評論 2 354

推薦閱讀更多精彩內(nèi)容