Windows通過虛擬機的Ubuntu系統安裝、配置、管理、遠程訪問ClickHouse
- 1. 安裝虛擬機
- 2. 使用Ubuntu的官方預編譯deb軟體包
- 2.1 apt-get命令
- 2.2 密鑰管理
- 2.3 將特定地址添加到source.list的串列中并更新apt
- 2.4 安裝clickhouse-server和clickhouse-client
- 2.5 啟動clickhouse-server服務登錄命令列客戶端
- 3. ClickHouse提供的介面
- 4. 訪問控制和用戶管理
- 4.1 用戶組態檔users.xml
- 4.2 profile配置詳解
- 4.3 users配置詳解
- 4.4 quotas配置詳解
- 5. ClickHouse遠程連接
- 5.1 修改config.xml組態檔
- 5.2 測驗遠程登陸
1. 安裝虛擬機
ClickHouse可以在任何具有x86_64, AArch64或PowerPC64LE CPU架構的Linux,FreeBSD或Mac OS X上運行,無法在Windows上運行,所以我推薦首先要在Windows系統安裝Linux的虛擬機,MAC OS X的安裝與配置我會放在下一篇(或有)寫,
我選擇的是vmware16 Pro,虛擬機系統Ubuntu20.04.3 LTS,這樣系統要求就滿足了,
2. 使用Ubuntu的官方預編譯deb軟體包
以下安裝與編譯的內容可以直接參考ClickHouse官方檔案:ClickHouse Getting Started
2.1 apt-get命令
打開終端Terminal視窗,輸入命令
sudo apt-get install apt-transport-https ca-certificates dirmngr
apt-get是一條linux命令,適用于deb包管理式的作業系統,主要用于自動從互聯網的軟體倉庫中搜索、安裝、升級、卸載軟體或作業系統,使用apt-get的主流Linux系統包括Debian和Ubuntu變異版本,更多關于apt-get的資訊可以參考:apt-get命令
用apt來替換apt-get命令也可以,事實上,我認為應該推薦直接使用apt,二者的區別要從這兩個命令的背景和目的說起,簡單來講就是
apt = apt-get、apt-cache 和 apt-config 中最常用命令選項的集合,
但apt并不能完全向下兼容 apt-get 命令,兼容的命令可以參考 Linux中apt與apt-get的區別
那至于是否還可以繼續用apt-get呢?目前還沒有任何 Linux 發行版官方放出 apt-get 將被停用的訊息,至少它還有比 apt 更多、更細化的操作功能,對于低級操作,仍然需要 apt-get,
所以我的建議是對于apt-get install這種apt可以兼容的命令,盡量選擇直接使用apt替代apt-get,對于apt無法使用的操作再使用apt-get,
2.2 密鑰管理
繼續在Terminal輸入命令
sudo apt-key adv --keyserver hkp://keyserver.ubuntu.com:80 --recv E0C56BD4
apt-key用于管理Debian Linux系統中的軟體包密鑰,每個發布的deb包,都是通過密鑰認證的,apt-key用來管理密鑰,-recv -key可以下載并添加到受信任密鑰環中(不做安全檢查,有風險),關于密鑰管理與驗證測驗可以參考 apt-key密鑰管理
2.3 將特定地址添加到source.list的串列中并更新apt
繼續在Terminal輸入命令
echo "deb https://repo.clickhouse.com/deb/stable/main/" | sudo tee /etc/apt/sources.list.d/clickhouse.list
sudo apt-get udpate
注意這里不是運行deb命令,而是將這行命令添加到地址為source.list.d/clickhouse.list的檔案中,tee命令會從標準輸入設備讀取資料,將其內容輸出到標準輸出設備,同時保存成檔案,
第一行運行成功后,會輸出deb https://repo.clickhouse.com/deb/stable/main/,并且切換到root用戶(sudo -i)后
cd etc/apt/sources.list.d
vim clickhouse.d
你會發現存在一個叫做clickhouse.d的檔案,并且打開后第一行就是剛剛寫入的命令

然后輸入第二行命令,更新apt-get,
2.4 安裝clickhouse-server和clickhouse-client
繼續在Terminal輸入命令
sudo apt-get install -y clickhouse-server clickhouse-client
2.5 啟動clickhouse-server服務登錄命令列客戶端
繼續在Terminal輸入命令
sudo service clickhouse-server start
clickhouse-client
第一行打開了服務,所以需要加sudo,第二行就可以啟動命令列客戶端了,啟動后你會通過默認的default用戶進入安裝好的ClickHouse,界面如下:

關于Default用戶的初始配置,clickhouse組態檔的修改,訪問權限和賬戶管理,我會在4.訪問控制和用戶管理寫到,
到這里已經就完成了clickhouse在Windows系統上的安裝與使用,撒花!!尤其是看到退出clickhouse的命令列客戶端的時候,她會說一句Happy new year. 不知道是因為年末臨近所以這么說,還是會隨著臨近節日的不同而更改祝福,anyway有被暖到,
3. ClickHouse提供的介面
ClickHouse提供了兩個網路介面
- HTTP,包含檔案,易于使用,
- Native TCP,簡單,方便使用,
考慮到實際需要,我建議你使用工具庫,Yandex官方支持的專案有:
- 命令列客戶端
- JDBC驅動
- ODBC驅動
- C++客戶端
還有一些廣泛的第三方庫可以使用:
- 第三方開發庫(Python、PHP、Go、Swift、R、Java等)
- 第三方集成庫(關系型資料庫、訊息佇列、流處理、物件存盤等)
- 可視化UI(Tabix、HouseOps等)
關于介面的說明檔案,可以在 客戶端介面 中查詢,
4. 訪問控制和用戶管理
初次登陸會默認使用ClickHouse提供的default賬號,這個賬號有所有的權限,但是不能使用SQL驅動方式的訪問權限和賬戶管理,default主要用于在其他用戶還沒有設定的情況從客戶端登陸或者執行分布式查詢,如果已經設定了開發者賬戶和管理員賬戶,我不建議繼續使用default賬戶了,default賬戶的登錄資訊如下(密碼為空):
clickhouse-client --host 127.0.0.1 --user default --port 9000
本段內容參考的官方檔案:Access Control and Account Management
官方提供的3個步驟【命令列客戶端快速新建用戶】
- 為 default 用戶開啟 SQL驅動方式的訪問權限和賬戶管理;
- 使用 default 用戶登錄并且創建所需要的所有用戶, 不要忘記創建管理員賬戶 (GRANT ALL ON . WITH GRANT OPTION TO admin_user_account);
- 關閉 default 用戶的權限并且禁用SQL驅動方式的訪問權限和賬戶管理;
這里要說明的是,上面第2步從我的測驗結果來看是行不通的,我無法通過default用戶啟用SQL驅動的方式來訪問控制和管理賬戶,只能通過修改組態檔進行賬戶管理,在目前我還不知道為什么,如果我知道了我會回來更改,
ClickHouse支持使用兩種方式配置訪問物體:
- 通過sql直接設定,這也是官方推薦的,但是需要至少一個用戶帳戶啟用SQL驅動的訪問控制和帳戶管理,這需要使用第二種方式設定access_management的值為1(相當于開放SQL驅動方式的訪問管理權限)

- 通過組態檔users.xml,默認位置在/etc/clickhouse-server目錄下,ClickHouse使用它來定義用戶相關的配置項,
下面通過第二種方式,先對用戶組態檔詳解,再使用它定義新的用戶與權限管理,
4.1 用戶組態檔users.xml
打開Terminal,切換成root用戶的根目錄
cd etc/clickhouse-server
clickhouse-server檔案夾下存放兩個組態檔,config.xml和users.xml, 若想開放遠程訪問,則需要修改config.xml的配置引數,修改方法可以直接跳至5.ClickHouse遠程連接
users.xml存盤的是所有用戶的配置,主要有三部分組成:profile,users,quotas
- profiles:類似于用戶角色,可以預先在這里定義多組profile,并為每組profile定義不同的配置項,可以實作配置的復用;
- users:定義用戶與設定權限;
- quotas:限制一段時間內的資源使用等
配置引數詳解有官方檔案:Server Configuration Parameters
推薦幾個我看過的總結文章:
- clickhouse用戶組態檔詳解
- clickhouse配置項users.xml詳解
- Clickhouse訪問控制和賬號管理
4.2 profile配置詳解
<yandex>
<!-- Profiles of settings. -->
<profiles>
<!-- Default settings. -->
<default>
<!-- Maximum memory usage for processing single query, in bytes. -->
<max_memory_usage>10000000000</max_memory_usage>
<!-- Use cache of uncompressed blocks of data. Meaningful only for processing many of very short queries. -->
<use_uncompressed_cache>0</use_uncompressed_cache>
<load_balancing>random</load_balancing>
</default>
<developer>
<max_memory_usage>10000000000</max_memory_usage>
<use_uncompressed_cache>0</use_uncompressed_cache>
<load_balancing>random</load_balancing>
<force_index_by_date>0</force_index_by_date>
<distributed_product_mode>allow</distribute_product_mode>
<readonly>0</readonly>
</developer>
<inherit>
<profile>developer</profile>
<distributed_product_mode>deny</distributed_product_mode>
</inherit>
<readonly>
<readonly>1</readonly>
</readonly>
<readwrite>
<readonly>0</readonly>
<allow_ddl>1</allow_ddl>
</readwrite>
這是我的users.xml的profile定義,有五組profile配置:default、developer、inherit、readonly、readwrite
其中inherit是個繼承示例,profile配置支持繼承,實作繼承的方式是在profile配置中先引入其他的profile名稱,但若有沖突,后面的配置會覆寫之前繼承的配置,
每個引數的具體含義和數值范圍可以參考我推薦的幾篇文章,readonly設為1表明所有查詢類Querry權限是開放的,但無法做寫入類的Querry操作,例如可以SELECT但不能INSERT INTO,readonly設為0表明查詢和寫入的權限都有,allow_ddl設為1表示DDL類命令是可以操作的,例如可以CREATE TABLE,不過這個默認值就是1,不設定應該也可以,
4.3 users配置詳解
<users>
<!-- If user name was not specified, 'default' user is used. -->
<default>
<password></password>
<access_manegement>1</access_management>
<!-- List of networks with open access.
To open access from everywhere, specify:
<ip>::/0</ip>
To open access only from localhost, specify:
<ip>::1</ip>
<ip>127.0.0.1</ip>
-->
<networks incl="networks" replace="replace">
<ip>::/0</ip>
</networks>
<!-- Setting profile for user. -->
<profile>default</profile>
<!-- Quota for user. -->
<quota>default</quota>
</default>
<admin>
<password_sha256_hex>YOURPASSWORD</password_sha256_hex>
<networks incl="networks" replace="replace">
<ip>::/0</ip>
</networks>
<profile>developer</profile>
<quota>default</quota>
</admin>
<!-- Example of user with readonly access. -->
<readonly>
<password></password>
<networks incl="networks" replace="replace">
<ip>::1</ip>
<ip>127.0.0.1</ip>
</networks>
<profile>readonly</profile>
<quota>default</quota>
</readonly>
</users>
我的users定義了三個用戶:default、admin、readonly
- readonly是只讀用戶,并且ip的設定是只允許本地訪問;
- admin是管理員賬戶,允許非本地訪問,并且profile選擇的是開發者profile,password的設定方式有三種:明文、SHA256加密、SHA1加密,明文不被推薦,可以選擇SHA256加密的方式,打開Terminal,加密方法如下:
PASSWORD=$(base64 < /dev/urandom | head -c8); echo "PASSWORD"; echo -n $"PASSWORD" | sha256sum | tr -d '-'
運行后第一行會顯示你的密碼PASSWORD,第二行會顯示加密后的一串SHA256加密后的密文,
關于用戶設定的配置引數在官方檔案里做了很好的解釋:User Settings
4.4 quotas配置詳解
quotas標簽是限制了單位時間內的系統資源使用量,而不是限制單個查詢的系統資源使用量,值為0表示不限制,我的配置中只有一個quotas設定,
<quotas>
<default>
<interval>
<!-- Length of interval. -->
<duration>3600</duration>
<!-- No limits. Just calculate resource usage for time interval. -->
<queries>0</queries>
<errors>0</errors>
<result_rows>0</result_rows>
<read_rows>0</read_rows>
<execution_time>0</execution_time>
</interval>
</default>
</quotas>
恭喜你看到這里,用戶配置基本就結束了,你可以任意增加profile組,然后給任意用戶配置不同的profiles,再賦予這些用戶不同的權限,下面我要進行另一項作業了,申請遠程登陸,
5. ClickHouse遠程連接
我參考的是ClickHouse:允許遠程連接 allow remote access
5.1 修改config.xml組態檔
還記得在4.1節我提過,存在用戶組態檔users.xml的地方,還有另外一個組態檔叫做config.xml, 在這里面可以修改ClickHouse服務端監聽埠的配置,如果你用命令
sudo -i
cd /.
cd var/lib/clickhouse
lsof -i :8123
查看監聽埠的狀態,你可能會發現,ClickHouse默認監聽的是本地埠,因此需要修改config.xml中的配置,同樣還是vim打開
cd /.
cd etc/clickhouse-server
vim config.xml
把配置中原本被注釋掉的 <listen_host>::</listen_host> 取消注釋就可以了,
<!-- Listen specified host. use :: (wildcard IPv6 address), if you want to accept connection both with IPv4 and IPv6 from everywhere. -->
<!-- Listen_host>::</listen_host> -->
<!-- Same for hosts with disabled ipv6: -->
<!-- <listen_host>0.0.0.0</listen_host> -->
<!-- Default values - try listen localhost on ipv4 and ipv6: -->
<!--
<listen_host>::1</listen_host>
<listen_host>127.0.0.1</listen_host>
-->
<!-- Don't exit if ipv6 or ipv4 unavailable, but listen_host with this protocal specified -->
<!-- <listen_try>0</listen_try> -->
5.2 測驗遠程登陸
虛擬機外,我使用Python的clickhouse_driver介面,虛擬機地址為HOSTIP,埠為9000,測驗default用戶的遠程連接,
from clickhouse_driver import connect
conn = connect(host=HOSTIP, user='default', password='', port=9000)
cursor = conn.cursor()
cursor.execute("SELECT * FROM tutorial.test)
cursor.fetchall()
回傳了test表的全部資料,遠程訪問測驗成功,
轉載請註明出處,本文鏈接:https://www.uj5u.com/qita/392291.html
標籤:其他
下一篇:Linux系統配置(系統啟動)
