Docker中安裝ClickHouse,單機、集羣、分佈式

Docker中安裝ClickHouse

下文使用CH代替ClickHouse的稱呼。

單機版本

docker run -d \
--name clickhouse-server \
-p 9000:9000 \
-p 8123:8123 \
-p 9009:9009 \
--ulimit nofile=262144:262144 \
yandex/clickhouse-server

分佈式集羣版本

分佈式集羣結構圖

avatar

說明:

節點1和節點3爲備份數據

節點2和節點4爲備份數據

節點1和節點3爲分片1

節點2和節點4爲分片2

分片1和分片2爲分佈式

1、操作docker

每一臺電腦都有兩個節點,我這邊只演示了一臺機器的,請自行增加機器。

# 首先起一個單機的CH
docker run -d \
--name clickhouse-server \
-p 9000:9000 \
-p 8123:8123 \
-p 9009:9009 \
--ulimit nofile=262144:262144 \
yandex/clickhouse-server

# 將上面單機的CH中的配置文件複製到宿主機的目錄中。沒有/home/allspark/目錄的,請提前創建。
docker cp clickhouse-server:/etc/clickhouse-server/ /home/allspark/

# 停止單機CH
docker stop clickhouse-server
# 刪除單機CH
docker rm clickhouse-server

# 起一個CH,這裏是將配置、日誌、以及數據映射到宿主機
docker run --restart always \
-d \
--name clickhouse-server \
--ulimit nofile=262144:262144 \
--volume=/home/allspark/clickhouse/:/var/lib/clickhouse/ \
--volume=/home/allspark/clickhouse-server/:/etc/clickhouse-server/ \
--volume=/home/allspark/log/clickhouse-server/:/var/log/clickhouse-server/  \
-p 9000:9000 \
-p 8123:8123 \
-p 9009:9009 \
yandex/clickhouse-server

# 轉到以下目錄
cd /home/allspark/
# 複製配置文件一份,因爲一臺機器上面需要起兩個節點
cp -R clickhouse-server/ clickhouse-server2/

# 這裏名字,日誌、數據、配置都在不同的目錄,端口也加1
docker run --restart always \
-d \
--name clickhouse-server2 \
--ulimit nofile=262144:262144 \
--volume=/home/allspark/clickhouse2/:/var/lib/clickhouse/ \
--volume=/home/allspark/clickhouse-server2/:/etc/clickhouse-server/ \
--volume=/home/allspark/log/clickhouse-server2/:/var/log/clickhouse-server/  \
-p 9001:9000 \
-p 8124:8123 \
-p 9010:9009 \
yandex/clickhouse-server

# 起一個zookeeper,CH的集羣分佈式依賴與zookeeper
docker run --restart=always \
--name zookeeper -p 2181:2181 \
-v /home/allspark/zookeeper/conf/:/apache-zookeeper-3.5.6-bin/conf/ \
-v /home/allspark/zookeeper/data/:/data \
-v /home/allspark/zookeeper/datalog/:/datalog -v /home/allspark/zookeeper/logs/:/logs -d zookeeper

# 起一個ZKUI,便於查看zookeeper中的數據情況。
docker run --name zkui -p 9090:9090 --link zookeeper:zookeeper -e ZK_SERVER="zookeeper:2181" -d registry.cn-hangzhou.aliyuncs.com/wkaca7114/zkui

2、修改CH配置

每一個節點都需要配置,這裏一臺電腦兩個節點。

1、修改users.xml,用於修改CH的賬號密碼

1、找到users節點,找到下面的default節點,找到下面的password節點,這裏就是密碼

2、添加修改賬號明就是將default節點完整複製一個或者在其基礎修改,爲別的名字。例如將default節點名字改爲admin,下面的password節點改爲admin。就等於有了一個admin/admin的賬號。

在xusers.xml中默認情況在default下的密碼爲空。

2、修改config.xml

1、找到interserver_http_host節點,修改爲本機IP,不要使用127.0.0.1

2、listen_host修改爲本機IP,不要使用127.0.0.1

3、在該文件的最後的前面一行添加

<include_from>/etc/clickhouse-server/metrika.xml</include_from>

3、創建文件metrika.xml

在/home/allspark/clickhouse-server和/home/allspark/clickhouse-server2下分別創建文件metrika.xml文件,將下面的配置修改後複製到其中。路徑就是第1步中的路徑。

下面配置中有備註,請對應修改。

<yandex>
    <!--ck集羣節點-->
    <clickhouse_remote_servers>
<clickhouse_cluster_name>
<!--分片1-->
<shard>
    <internal_replication>true</internal_replication>
    <replica>
        <!--這裏寫節點1的IP4地址-->
        <host>192.168.1.1</host> 
        <!--這裏寫節點1的tcp端口-->
        <port>9000</port>
        <!--這裏寫節點1的賬號-->
        <user>default</user>
        <!--這裏寫節點1的賬號對應的密碼-->
        <password>default</password>
    </replica>
    <!--複製集1-->
    <replica>
        <!--這裏寫節點3的IP4地址-->
        <host>192.168.1.2</host>
         <!--這裏寫節點3的tcp端口-->
        <port>9000</port>
         <!--這裏寫節點3的賬號-->
        <user>default</user>
         <!--這裏寫節點3的賬號對應的密碼-->
        <password>default</password>
    </replica>
</shard>
<!--分片2-->
<shard>
    <internal_replication>true</internal_replication>
    <replica>
     	<!--這裏寫節點2的IP4地址-->
        <host>192.168.1.1</host>
        <!--這裏寫節點2的tcp端口-->
        <port>9001</port>
        <!--這裏寫節點2的賬號-->
        <user>default</user>
        <!--這裏寫節點2的賬號對應的密碼-->
        <password>default</password>
    </replica>
    <!--複製集2-->
    <replica>
    	<!--這裏寫節點4的IP4地址-->
        <host>192.168.1.2</host>
        <!--這裏寫節點4的tcp端口-->
        <port>9001</port>
        <!--這裏寫節點4的賬號-->
        <user>default</user>
         <!--這裏寫節點4的賬號對應的密碼-->
        <password>default</password>
    </replica>
</shard>
</clickhouse_cluster_name>
    </clickhouse_remote_servers>


<!--zookeeper相關配置-->
<zookeeper-servers>
  <node index="1">
 <!--這裏寫Zookeeper的IP-->
<host>192.168.1.1</host>
<!--這裏寫Zookeeper的端口-->
<port>2181</port>
  </node>
</zookeeper-servers>

<macros>
<layer>01</layer>
<shard>01</shard> <!--這個節點配置的分片號-->
<replica>192.168.1.1</replica> <!--當前節點IP-->
</macros>

<networks>
<ip>::/0</ip>
</networks>

<!--壓縮相關配置-->
<clickhouse_compression>
<case>
<min_part_size>10000000000</min_part_size>
<min_part_size_ratio>0.01</min_part_size_ratio>
<method>lz4</method> <!--壓縮算法lz4壓縮比zstd快, 更佔磁盤-->
</case>
    </clickhouse_compression>
</yandex>

4、重啓Docker,重新加載配置

docker restart $(docker ps -a) # 重啓當前機器docker中的所有容器,如果這個電腦不是專門給CH使用,請單獨重啓容器。

Docker可能遇到的問題

1、Error response from daemon: Get https://registry-1.docker.io/v2/yandex/clickhouse-server/manifests/latest: net/http: TLS handshake timeout

方法1:

vi /etc/docker/daemon.json
{
"registry-mirrors": ["http://hub-mirror.c.163.com"]
}
systemctl restart docker.service

方法2:

vi /etc/sysconfig/docker
OPTIONS='--selinux-enabled --log-driver=journald --registry-mirror=https://docker.mirrors.ustc.edu.cn'

Docker 官方中國區:https://registry.docker-cn.com

網易:http://hub-mirror.c.163.com

中國科技大學:https://docker.mirrors.ustc.edu.cn

阿里雲:https://pee6w651.mirror.aliyuncs.com

2、Error response from daemon: Get https://registry-1.docker.io/v2/: dial tcp: lookup registry-1.docker.io: no such host

DNS問題

vi /etc/resolv.conf

添加

nameserver 8.8.8.8
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章