自己做的網(wǎng)站如何被百度檢索優(yōu)秀的軟文廣告案例
熟悉流程并且有真正部署需求可以看一下我的另一篇簡化部署的文章,因?yàn)槎喙?jié)點(diǎn)配置還是比較麻煩的先要jdk、zookeeper,再ck,還有各種配置文件登錄不同機(jī)器上手動改配置文件還挺容易出錯的。
clickhouse運(yùn)維篇(三):生產(chǎn)環(huán)境一鍵生成配置并快速部署ck集群
多機(jī)器手動部署ck集群
- 1、 安裝jdk
- 2、 zookeeper集群搭建(選舉機(jī)制,奇數(shù)節(jié)點(diǎn)部署)
- 3、 clickhouse集群規(guī)劃
- 4、 clickhouse集群搭建
- 5、 配置nginx代理
- 6、 集群驗(yàn)證
- 7、 分布式,本地表測試
1、 安裝jdk
上傳jdk安裝包到各節(jié)點(diǎn)
1、解壓安裝包 (這里舉例解壓到/opt/jdk8u333)
2、 執(zhí)行 sh setup.sh install
3、 修改環(huán)境變量
vi /etc/profile
vi /etc/profile
在文件末尾加
#java
export JAVA_HOME=/opt/jdk8u333
export CLASSPATH=.:${JAVA_HOME}/jre/lib/rt.jar:${JAVA_HOME}
export PATH=$PATH:${JAVA_HOME}/bin
4、 執(zhí)行指令生效
source /etc/profile
2、 zookeeper集群搭建(選舉機(jī)制,奇數(shù)節(jié)點(diǎn)部署)
舉例三個節(jié)點(diǎn):
172.168.1.206
172.168.1.207
172.168.1.208
上傳安裝包到各節(jié)點(diǎn)
解壓安裝包(這里舉例解壓到/opt/app/zookeeper-3.7.2)
1、創(chuàng)建目錄
mkdir /opt/app/zookeeper-3.7.2/zkData
2、 復(fù)制zoo_sample.cfg文件命名為 zoo.cfg
cp zoo_sample.cfg zoo.cfg
3、 在各個節(jié)點(diǎn)創(chuàng)建一個id(距離下邊在206、207、208三個節(jié)點(diǎn)的zkData目錄下分別創(chuàng)建)
echo 1 >/opt/app/zookeeper-3.7.2/zkData/myid
echo 2 >/opt/app/zookeeper-3.7.2/zkData/myid
echo 3 >/opt/app/zookeeper-3.7.2/zkData/myid
4、修改zoo.cfg文件
vi zoo.cfg
clientPort為16871
dataDir為上邊創(chuàng)建的zkData
server.后邊的1、2、3為機(jī)器節(jié)點(diǎn)id;
server.1=172.168.1.206:2888:3888
server.2=172.168.1.207:2888:3888
server.3=172.168.1.208:2888:3888
tickTime=2000
initLimit=10
syncLimit=5
dataDir=/opt/app/zookeeper-3.7.2/zkData
clientPort=16871
server.1=172.168.1.206:2888:3888
server.2=172.168.1.207:2888:3888
server.3=172.168.1.208:2888:3888
5、 在其余節(jié)點(diǎn)重復(fù)以上操作,在bin目錄下執(zhí)行啟動腳本
sh zkServer.sh start
6、 查看集群狀態(tài)
./zkServer.sh status
說明集群搭建完成,172.168.1.208是主節(jié)點(diǎn)
3、 clickhouse集群規(guī)劃
- 根據(jù)集群部署分配的服務(wù)器進(jìn)行預(yù)先考慮
a. 需要多少個分片 【多少臺機(jī)器多少個分片,最好一個機(jī)器不要多分片,會導(dǎo)致查詢的負(fù)載不平衡,導(dǎo)致短筒效應(yīng) (保證分片數(shù)<=機(jī)器數(shù)最佳)】
b. 每個分片多少個副本 【默認(rèn)同一個分片的副本不要在同一個機(jī)器上,不能起到容災(zāi)作用,一般情況一個分片內(nèi)兩個實(shí)例即可,一主一副】
-
同一個實(shí)例不能既是主分片又是副本分片,想要部署m分片每個分片內(nèi)n個實(shí)例的集群就需要部署 m*n 個clickhouse實(shí)例。
-
例如,所以如果只有三臺機(jī)器,想部署3分片每個分片2實(shí)例的集群就需要3*2=6個 實(shí)例【遵循上面1.a中 分片數(shù)<=機(jī)器數(shù)】。 如果機(jī)器1上有了shard1的分片,副本實(shí)例就最好啟動在機(jī)器2或者機(jī)器3上【遵循上面1.b中 同一分片副本不在相同機(jī)器】
4、 clickhouse集群搭建
舉例三個節(jié)點(diǎn):
172.168.1.206
172.168.1.207
172.168.1.208
上傳安裝包到各節(jié)點(diǎn)
1、解壓安裝包 (這里舉例解壓到/opt/app/clickhouse-23.4.2.9)
2、 修改配置文件,打開config目錄
cd config
vi config.xml
3、 修改config.xml文件
設(shè)置clickhouse端口16860
打開所有地址監(jiān)聽
tcp端口默認(rèn)9000(可以按需修改)
<http_port>16860</http_port>
<listen_host>::</listen_host>
<tcp_port>9000</tcp_port>
添加集群節(jié)點(diǎn)信息 【三機(jī)器兩分片、每個分片兩個實(shí)例的配置文件】
// clickhose xml需要修改的內(nèi)容<remote_servers><!-- 可自定義clickhouse集群名 --><ck_cluster><!-- 數(shù)據(jù)分片1 --><shard><internal_replication>true</internal_replication><!-- 副本1 --><replica><host>172.168.1.206</host><port>9000</port><user>default</user><password>my_password</password></replica><!-- 副本2 --><replica><host>172.168.1.207</host><port>9000</port><user>default</user><password>my_password</password></replica></shard><!-- 數(shù)據(jù)分片2 --><shard><internal_replication>true</internal_replication><replica><host>172.168.1.207</host><port>9001</port><user>default</user><password>my_password</password></replica><replica><host>172.168.1.208</host><port>9000</port><user>default</user><password>my_password</password></replica></shard></ck_cluster></remote_servers><macros><shard>02</shard><replica>replica_208</replica></macros><zookeeper><!-- index內(nèi)容為server.id --><node index="1"><host>172.168.1.206</host><port>16871</port></node><node index="2"><host>172.168.1.207</host><port>16871</port></node><node index="3"><host>172.168.1.208</host><port>16871</port></node></zookeeper><!-- 如果一個機(jī)器上部署多個實(shí)例這幾個端口不要沖突 --><http_port>16860</http_port><tcp_port>9000</tcp_port><interserver_http_host>172.168.1.208</interserver_http_host><interserver_http_port>9009</interserver_http_port><http><max_connections>1024</max_connections><async_insert>1</async_insert> <!-- 啟用異步插入 --></http><!-- vim下輸入 /clickhouse-23.4 查找path相關(guān)tag是否配置正確 --> <path>/opt/app/my_app-2.4/clickhouse-23.4.2.9/data/</path><format_schema_path>/opt/app/my_app-2.4/clickhouse-23.4.2.9/data/format_schemas/</format_schema_path><log>/opt/app/my_app-2.4/clickhouse-23.4.2.9/log/clickhouse-server/clickhouse-server.log</log><errorlog>/opt/app/my_app-2.4/clickhouse-23.4.2.9/log/clickhouse-server/clickhouse-server.err.log</errorlog><tmp_path>/opt/app/my_app-2.4/clickhouse-23.4.2.9/tmp/</tmp_path><user_files_path>/opt/app/my_app-2.4/clickhouse-23.4.2.9/data/user_files/</user_files_path>
4、修改users.xml文件
設(shè)置default賬號的密碼
<password>my_password</password>
5、其余節(jié)點(diǎn)重復(fù)以上步驟,然后啟動服務(wù)(注意修改config.xml中的值)
/opt/app/my_app-2.4/clickhouse-23.4.2.9/bin/clickhouse server --config-file /opt/app/my_app-2.4/clickhouse-23.4.2.9/config/config.xml --pid-file /opt/app/my_app-2.4/clickhouse-23.4.2.9/clickhouse.pid --daemon
5、 配置nginx代理
編輯nginx配置文件底部加入clickhouse反向代理供web服務(wù)調(diào)用
$ vim /opt/app/my_app-2.4/nginx/conf/my_app.confupstream clickhouse_cluster {server 172.168.1.206:16860;server 172.168.1.207:16860;server 172.168.1.207:16861; server 172.168.1.208:16860;
}# 新增的 ClickHouse 反向代理并配置相應(yīng)的黑白名單策略, 入的流量應(yīng)該是訪問ck集群的流量,
# 所以應(yīng)該是訪問源的網(wǎng)段也就是my_app對應(yīng)的網(wǎng)段或者ip
server {listen 1442;allow localhost;allow 192.168.13.0/24;allow 10.1.5.0/16; deny all;location / {proxy_pass http://clickhouse_cluster;}
}
● nginx反向代理驗(yàn)證
[root@localhost ~]# curl localhost:1442
Ok.
6、 集群驗(yàn)證
這里使用dbever工具驗(yàn)證
1、執(zhí)行sql,查看ck集群節(jié)點(diǎn)狀態(tài)
SELECT * from system.clusters;
2、執(zhí)行sql,查看zookeeper中/clickhouse的節(jié)點(diǎn)是否存在
SELECT * FROM system.zookeeper WHERE path = '/clickhouse';
如果截圖如上則表示分布式集群部署成功
查看各個節(jié)點(diǎn)狀態(tài),關(guān)注最后一列可以看出各個節(jié)點(diǎn)的與集群的連接狀況【比如第三行數(shù)字22就是實(shí)例與cluster連接有問題】
7、 分布式,本地表測試
- 語句加
on cluster ck_cluster
就是在所有實(shí)例上執(zhí)行
創(chuàng)建一個表
-- 刪除本地表
DROP TABLE IF EXISTS test_table_local on cluster ck_cluster SYNC;-- 創(chuàng)建本地表
CREATE TABLE test_table_local ON CLUSTER ck_cluster
(`tenantId` UInt64 CODEC (Delta(8), ZSTD(1)),`alarmId` String,`grade` Int32,
) ENGINE = ReplicatedMergeTree('/clickhouse/tables/{uuid}/{shard}/audit_log_local', '{replica}');-- 刪除分布式表
DROP TABLE IF EXISTS test_table_all on cluster ck_cluster SYNC;
-- 創(chuàng)建分布式表
CREATE TABLE test_table_all ON CLUSTER ck_cluster as test_table_local ENGINE = Distributed('ck_cluster', 'default', 'test_table_local', rand());
分布式表測試
SELECT count(*) FROM test_table_all;
本地表測試
INSERT INTO test_table_local (id, name, grade) VALUES (1,'jack',60);