Оглавление
1. Настройка одного узла
1. Скачать
2. Установка
3. Старт
4. Проверка
2. Импортируйте образец набора данных.
1. Загрузите и извлеките данные таблицы.
2. Создайте библиотечную таблицу.
3. Импортируйте данные
4. Оптимизация таблиц
5. Пример запроса
3. Развертывание кластера
0. Подготовка перед установкой
1. Установите и настройте ClickHouse Keeper.
(1) Установите сервер ClickHouse и клиент ClickHouse.
(3) Перезапустите ClickHouse.
(4) Убедитесь, что экземпляр Keeper запущен.
(5) Подтвердите системную таблицу Zookeeper.
2. Настройте кластер ClickHouse
(1) Установите сервер ClickHouse и клиент ClickHouse на новый хост (узел 4).
(2) Измените файл конфигурации на новом хосте (узел 4).
(3) Обновление конфигурации
(4) Перезапустите ClickHouse и убедитесь, что кластер создан.
3. Создайте распределенную таблицу
(1) Создать базу данных
(2) Создайте локальную таблицу
(3) Добавьте две новые строки в сегментированный экземпляр (узел 1).
(4) Добавьте две новые строки в другой сегментированный экземпляр (узел3).
(5) Выполнять запросы SELECT для всех экземпляров отдельно.
(6) Создать распределенную таблицу
(7) Выполнять запросы SELECT для всех экземпляров отдельно.
4. Автоматическое сегментирование данных
(1) Создайте локальную таблицу с помощью сегментного ключа.
(2) Создайте распределенную таблицу, которая обеспечивает представление локальной таблицы кластера.
(3) Вставьте данные в распределенную таблицу.
(4) Выполнять запросы SELECT для всех экземпляров отдельно.
5. Используйте механизм таблиц ReplicationMergeTree для копирования данных.
(1) Определить макрос
(2) Создайте локальную таблицу
(3) Создать распределенную таблицу
(4) Вставьте данные в распределенную таблицу.
(5) Выполнять запросы SELECT для всех экземпляров отдельно.
ссылка:
ClickHouse Может использоваться на любом сервере с x86_64, AArch64. или PowerPC64LE CPU архитектурный Linux,FreeBSD или Mac OS X беги дальше. Официальные готовые двоичные файлы обычно предназначены для x86_64 Скомпилируйте и используйте SSE 4.2 набор команд, поэтому, если не указано иное, поддерживает свой CPU использование будет дополнительным системным требованием. Далее необходимо проверить текущий CPU Поддерживать ли SSE 4.2 Команда:
$ grep -q sse4_2 /proc/cpuinfo && echo "SSE 4.2 supported" || echo "SSE 4.2 not supported"
# Посмотреть версию
https://github.com/ClickHouse/ClickHouse/releases
# Последняя стабильная версия Установить адрес загрузки пакета
https://github.com/ClickHouse/ClickHouse/releases/download/v24.1.8.22-stable/clickhouse-client-24.1.8.22.x86_64.rpm
https://github.com/ClickHouse/ClickHouse/releases/download/v24.1.8.22-stable/clickhouse-common-static-24.1.8.22.x86_64.rpm
https://github.com/ClickHouse/ClickHouse/releases/download/v24.1.8.22-stable/clickhouse-server-24.1.8.22.x86_64.rpm
# Сначала установите пакет общих зависимостей.
rpm -ivh clickhouse-common-static-24.1.8.22.x86_64.rpm
# Установить сервер, обнаружено Enter password for default user Введите пароль при появлении запроса
rpm -ivh clickhouse-server-24.1.8.22.x86_64.rpm
# Удалить клиент командной строки
rpm -ivh clickhouse-client-24.1.8.22.x86_64.rpm
sudo service clickhouse-server start
Посмотрите прогресс после запуска:
[root@vvml-yz-hbase-test~]#ps -ef | grep clickhouse | grep -v grep
clickho+ 5322 1 0 08:49 ? 00:00:00 clickhouse-watchdog --config-file /etc/clickhouse-server/config.xml --pid-file /var/run/clickhouse-server/clickhouse-server.pid --daemon
clickho+ 5323 5322 6 08:49 ? 00:00:00 /usr/bin/clickhouse-server --config-file /etc/clickhouse-server/config.xml --pid-file /var/run/clickhouse-server/clickhouse-server.pid --daemon
[root@vvml-yz-hbase-test~]#
Посмотреть порт прослушивания
[root@vvml-yz-hbase-test~]#netstat -antpl | grep clickhouse
tcp 0 0 127.0.0.1:9004 0.0.0.0:* LISTEN 5323/clickhouse-ser
tcp 0 0 127.0.0.1:9005 0.0.0.0:* LISTEN 5323/clickhouse-ser
tcp 0 0 127.0.0.1:9009 0.0.0.0:* LISTEN 5323/clickhouse-ser
tcp 0 0 127.0.0.1:8123 0.0.0.0:* LISTEN 5323/clickhouse-ser
tcp 0 0 127.0.0.1:9000 0.0.0.0:* LISTEN 5323/clickhouse-ser
tcp6 0 0 ::1:9004 :::* LISTEN 5323/clickhouse-ser
tcp6 0 0 ::1:9005 :::* LISTEN 5323/clickhouse-ser
tcp6 0 0 ::1:9009 :::* LISTEN 5323/clickhouse-ser
tcp6 0 0 ::1:8123 :::* LISTEN 5323/clickhouse-ser
tcp6 0 0 ::1:9000 :::* LISTEN 5323/clickhouse-ser
[root@vvml-yz-hbase-test~]#
Местоположение журнала сервера по умолчанию: /var/log/clickhouse-server/. Когда сервер записывает в журнал Ready for connections сообщение, указывающее, что сервер готов обрабатывать клиентские соединения. один раз clickhouse-server запускать и бежать, может эксплуатировать clickhouse-client Подключитесь к серверу и запустите несколько тестов.
[root@vvml-yz-hbase-test~]#clickhouse-client --password="123456" --query "select version();"
24.1.8.22
[root@vvml-yz-hbase-test~]#clickhouse-client --password="123456" -n --query "select 1;select 2;"
1
2
[root@vvml-yz-hbase-test~]#
curl https://datasets.clickhouse.com/hits/tsv/hits_v1.tsv.xz | unxz --threads=`nproc` > hits_v1.tsv
curl https://datasets.clickhouse.com/visits/tsv/visits_v1.tsv.xz | unxz --threads=`nproc` > visits_v1.tsv
Создайте файл sample.sql со следующим содержимым (обратите внимание на определение вложенной таблицы):
create database if not exists tutorial;
CREATE TABLE tutorial.hits_v1
(
`WatchID` UInt64,
`JavaEnable` UInt8,
`Title` String,
`GoodEvent` Int16,
`EventTime` DateTime,
`EventDate` Date,
`CounterID` UInt32,
`ClientIP` UInt32,
`ClientIP6` FixedString(16),
`RegionID` UInt32,
`UserID` UInt64,
`CounterClass` Int8,
`OS` UInt8,
`UserAgent` UInt8,
`URL` String,
`Referer` String,
`URLDomain` String,
`RefererDomain` String,
`Refresh` UInt8,
`IsRobot` UInt8,
`RefererCategories` Array(UInt16),
`URLCategories` Array(UInt16),
`URLRegions` Array(UInt32),
`RefererRegions` Array(UInt32),
`ResolutionWidth` UInt16,
`ResolutionHeight` UInt16,
`ResolutionDepth` UInt8,
`FlashMajor` UInt8,
`FlashMinor` UInt8,
`FlashMinor2` String,
`NetMajor` UInt8,
`NetMinor` UInt8,
`UserAgentMajor` UInt16,
`UserAgentMinor` FixedString(2),
`CookieEnable` UInt8,
`JavascriptEnable` UInt8,
`IsMobile` UInt8,
`MobilePhone` UInt8,
`MobilePhoneModel` String,
`Params` String,
`IPNetworkID` UInt32,
`TraficSourceID` Int8,
`SearchEngineID` UInt16,
`SearchPhrase` String,
`AdvEngineID` UInt8,
`IsArtifical` UInt8,
`WindowClientWidth` UInt16,
`WindowClientHeight` UInt16,
`ClientTimeZone` Int16,
`ClientEventTime` DateTime,
`SilverlightVersion1` UInt8,
`SilverlightVersion2` UInt8,
`SilverlightVersion3` UInt32,
`SilverlightVersion4` UInt16,
`PageCharset` String,
`CodeVersion` UInt32,
`IsLink` UInt8,
`IsDownload` UInt8,
`IsNotBounce` UInt8,
`FUniqID` UInt64,
`HID` UInt32,
`IsOldCounter` UInt8,
`IsEvent` UInt8,
`IsParameter` UInt8,
`DontCountHits` UInt8,
`WithHash` UInt8,
`HitColor` FixedString(1),
`UTCEventTime` DateTime,
`Age` UInt8,
`Sex` UInt8,
`Income` UInt8,
`Interests` UInt16,
`Robotness` UInt8,
`GeneralInterests` Array(UInt16),
`RemoteIP` UInt32,
`RemoteIP6` FixedString(16),
`WindowName` Int32,
`OpenerName` Int32,
`HistoryLength` Int16,
`BrowserLanguage` FixedString(2),
`BrowserCountry` FixedString(2),
`SocialNetwork` String,
`SocialAction` String,
`HTTPError` UInt16,
`SendTiming` Int32,
`DNSTiming` Int32,
`ConnectTiming` Int32,
`ResponseStartTiming` Int32,
`ResponseEndTiming` Int32,
`FetchTiming` Int32,
`RedirectTiming` Int32,
`DOMInteractiveTiming` Int32,
`DOMContentLoadedTiming` Int32,
`DOMCompleteTiming` Int32,
`LoadEventStartTiming` Int32,
`LoadEventEndTiming` Int32,
`NSToDOMContentLoadedTiming` Int32,
`FirstPaintTiming` Int32,
`RedirectCount` Int8,
`SocialSourceNetworkID` UInt8,
`SocialSourcePage` String,
`ParamPrice` Int64,
`ParamOrderID` String,
`ParamCurrency` FixedString(3),
`ParamCurrencyID` UInt16,
`GoalsReached` Array(UInt32),
`OpenstatServiceName` String,
`OpenstatCampaignID` String,
`OpenstatAdID` String,
`OpenstatSourceID` String,
`UTMSource` String,
`UTMMedium` String,
`UTMCampaign` String,
`UTMContent` String,
`UTMTerm` String,
`FromTag` String,
`HasGCLID` UInt8,
`RefererHash` UInt64,
`URLHash` UInt64,
`CLID` UInt32,
`YCLID` UInt64,
`ShareService` String,
`ShareURL` String,
`ShareTitle` String,
`ParsedParams` Nested(
Key1 String,
Key2 String,
Key3 String,
Key4 String,
Key5 String,
ValueDouble Float64),
`IslandID` FixedString(16),
`RequestNum` UInt32,
`RequestTry` UInt8
)
ENGINE = MergeTree()
PARTITION BY toYYYYMM(EventDate)
ORDER BY (CounterID, EventDate, intHash32(UserID))
SAMPLE BY intHash32(UserID);
CREATE TABLE tutorial.visits_v1
(
`CounterID` UInt32,
`StartDate` Date,
`Sign` Int8,
`IsNew` UInt8,
`VisitID` UInt64,
`UserID` UInt64,
`StartTime` DateTime,
`Duration` UInt32,
`UTCStartTime` DateTime,
`PageViews` Int32,
`Hits` Int32,
`IsBounce` UInt8,
`Referer` String,
`StartURL` String,
`RefererDomain` String,
`StartURLDomain` String,
`EndURL` String,
`LinkURL` String,
`IsDownload` UInt8,
`TraficSourceID` Int8,
`SearchEngineID` UInt16,
`SearchPhrase` String,
`AdvEngineID` UInt8,
`PlaceID` Int32,
`RefererCategories` Array(UInt16),
`URLCategories` Array(UInt16),
`URLRegions` Array(UInt32),
`RefererRegions` Array(UInt32),
`IsYandex` UInt8,
`GoalReachesDepth` Int32,
`GoalReachesURL` Int32,
`GoalReachesAny` Int32,
`SocialSourceNetworkID` UInt8,
`SocialSourcePage` String,
`MobilePhoneModel` String,
`ClientEventTime` DateTime,
`RegionID` UInt32,
`ClientIP` UInt32,
`ClientIP6` FixedString(16),
`RemoteIP` UInt32,
`RemoteIP6` FixedString(16),
`IPNetworkID` UInt32,
`SilverlightVersion3` UInt32,
`CodeVersion` UInt32,
`ResolutionWidth` UInt16,
`ResolutionHeight` UInt16,
`UserAgentMajor` UInt16,
`UserAgentMinor` UInt16,
`WindowClientWidth` UInt16,
`WindowClientHeight` UInt16,
`SilverlightVersion2` UInt8,
`SilverlightVersion4` UInt16,
`FlashVersion3` UInt16,
`FlashVersion4` UInt16,
`ClientTimeZone` Int16,
`OS` UInt8,
`UserAgent` UInt8,
`ResolutionDepth` UInt8,
`FlashMajor` UInt8,
`FlashMinor` UInt8,
`NetMajor` UInt8,
`NetMinor` UInt8,
`MobilePhone` UInt8,
`SilverlightVersion1` UInt8,
`Age` UInt8,
`Sex` UInt8,
`Income` UInt8,
`JavaEnable` UInt8,
`CookieEnable` UInt8,
`JavascriptEnable` UInt8,
`IsMobile` UInt8,
`BrowserLanguage` UInt16,
`BrowserCountry` UInt16,
`Interests` UInt16,
`Robotness` UInt8,
`GeneralInterests` Array(UInt16),
`Params` Array(String),
`Goals` Nested(
ID UInt32,
Serial UInt32,
EventTime DateTime,
Price Int64,
OrderID String,
CurrencyID UInt32),
`WatchIDs` Array(UInt64),
`ParamSumPrice` Int64,
`ParamCurrency` FixedString(3),
`ParamCurrencyID` UInt16,
`ClickLogID` UInt64,
`ClickEventID` Int32,
`ClickGoodEvent` Int32,
`ClickEventTime` DateTime,
`ClickPriorityID` Int32,
`ClickPhraseID` Int32,
`ClickPageID` Int32,
`ClickPlaceID` Int32,
`ClickTypeID` Int32,
`ClickResourceID` Int32,
`ClickCost` UInt32,
`ClickClientIP` UInt32,
`ClickDomainID` UInt32,
`ClickURL` String,
`ClickAttempt` UInt8,
`ClickOrderID` UInt32,
`ClickBannerID` UInt32,
`ClickMarketCategoryID` UInt32,
`ClickMarketPP` UInt32,
`ClickMarketCategoryName` String,
`ClickMarketPPName` String,
`ClickAWAPSCampaignName` String,
`ClickPageName` String,
`ClickTargetType` UInt16,
`ClickTargetPhraseID` UInt64,
`ClickContextType` UInt8,
`ClickSelectType` Int8,
`ClickOptions` String,
`ClickGroupBannerID` Int32,
`OpenstatServiceName` String,
`OpenstatCampaignID` String,
`OpenstatAdID` String,
`OpenstatSourceID` String,
`UTMSource` String,
`UTMMedium` String,
`UTMCampaign` String,
`UTMContent` String,
`UTMTerm` String,
`FromTag` String,
`HasGCLID` UInt8,
`FirstVisit` DateTime,
`PredLastVisit` Date,
`LastVisit` Date,
`TotalVisits` UInt32,
`TraficSource` Nested(
ID Int8,
SearchEngineID UInt16,
AdvEngineID UInt8,
PlaceID UInt16,
SocialSourceNetworkID UInt8,
Domain String,
SearchPhrase String,
SocialSourcePage String),
`Attendance` FixedString(16),
`CLID` UInt32,
`YCLID` UInt64,
`NormalizedRefererHash` UInt64,
`SearchPhraseHash` UInt64,
`RefererDomainHash` UInt64,
`NormalizedStartURLHash` UInt64,
`StartURLDomainHash` UInt64,
`NormalizedEndURLHash` UInt64,
`TopLevelDomain` UInt64,
`URLScheme` UInt64,
`OpenstatServiceNameHash` UInt64,
`OpenstatCampaignIDHash` UInt64,
`OpenstatAdIDHash` UInt64,
`OpenstatSourceIDHash` UInt64,
`UTMSourceHash` UInt64,
`UTMMediumHash` UInt64,
`UTMCampaignHash` UInt64,
`UTMContentHash` UInt64,
`UTMTermHash` UInt64,
`FromHash` UInt64,
`WebVisorEnabled` UInt8,
`WebVisorActivity` UInt32,
`ParsedParams` Nested(
Key1 String,
Key2 String,
Key3 String,
Key4 String,
Key5 String,
ValueDouble Float64),
`Market` Nested(
Type UInt8,
GoalID UInt32,
OrderID String,
OrderPrice Int64,
PP UInt32,
DirectPlaceID UInt32,
DirectOrderID UInt32,
DirectBannerID UInt32,
GoodID String,
GoodName String,
GoodQuantity Int32,
GoodPrice Int64),
`IslandID` FixedString(16)
)
ENGINE = CollapsingMergeTree(Sign)
PARTITION BY toYYYYMM(StartDate)
ORDER BY (CounterID, StartDate, intHash32(UserID), VisitID)
SAMPLE BY intHash32(UserID);
Запустите файл sample.sql:
clickhouse-client --password="123456" --queries-file sample.sql
clickhouse-client --password="123456" --query "INSERT INTO tutorial.hits_v1 FORMAT TSV" --max_insert_block_size=100000 < hits_v1.tsv
clickhouse-client --password="123456" --query "INSERT INTO tutorial.visits_v1 FORMAT TSV" --max_insert_block_size=100000 < visits_v1.tsv
Самый простой способ узнать доступные настройки, их значения и значения по умолчанию — Запрос. system.settings поверхность:
vvml-yz-hbase-test.172.18.4.126 :) select name, value, changed, description
from system.settings
where name like '%max_insert_b%';
SELECT
name,
value,
changed,
description
FROM system.settings
WHERE name LIKE '%max_insert_b%'
Query id: 05bc6241-2d1f-432e-87b3-f35a3ad612c8
┌─name──────────────────┬─value───┬─changed─┬─description───────────────────────────────────────────────────────────────────────────────┐
│ max_insert_block_size │ 1048449 │ 0 │ The maximum block size for insertion, if we control the creation of blocks for insertion. │
└───────────────────────┴─────────┴─────────┴───────────────────────────────────────────────────────────────────────────────────────────┘
1 row in set. Elapsed: 0.002 sec.
vvml-yz-hbase-test.172.18.4.126 :)
Может OPTIMIZE Импортированная таблица. использовать MergeTree-family Таблицы движка Конфигурация всегда объединяют части данных в фоновом режиме, чтобы оптимизировать хранение данных (или хотя бы проверить, имеет ли это смысл). Эти Запросы заставляют движок таблиц немедленно выполнить оптимизацию хранилища (медленнее, осторожное ручное изучение):
clickhouse-client --password="123456" --query "OPTIMIZE TABLE tutorial.hits_v1 FINAL"
clickhouse-client --password="123456" --query "OPTIMIZE TABLE tutorial.visits_v1 FINAL"
vvml-yz-hbase-test.172.18.4.126 :) SELECT
StartURL AS URL,
AVG(Duration) AS AvgDuration
FROM tutorial.visits_v1
WHERE StartDate BETWEEN '2014-03-23' AND '2014-03-30'
GROUP BY URL
ORDER BY AvgDuration DESC
LIMIT 10;
SELECT
StartURL AS URL,
AVG(Duration) AS AvgDuration
FROM tutorial.visits_v1
WHERE (StartDate >= '2014-03-23') AND (StartDate <= '2014-03-30')
GROUP BY URL
ORDER BY AvgDuration DESC
LIMIT 10
Query id: fc2e8638-5081-496a-964b-a679eab63af9
┌─URL─────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────┬─AvgDuration─┐
│ http://itpalanija-pri-patrivative=0&ads_app_user │ 60127 │
│ http://renaul-myd-ukraine │ 58938 │
│ http://karta/Futbol/dynamo.kiev.ua/kawaica.su/648 │ 56538 │
│ https://moda/vyikroforum1/top.ru/moscow/delo-product/trend_sms/multitryaset/news/2014/03/201000 │ 55218 │
│ http://e.mail=on&default?abid=2061&scd=yes&option?r=city_inter.com/menu&site-zaferio.ru/c/m.ensor.net/ru/login=false&orderStage.php?Brandidatamalystyle/20Mar2014%2F007%2F94dc8d2e06e56ed56bbdd │ 51378 │
│ http://karta/Futbol/dynas.com/haberler.ru/messages.yandsearchives/494503_lte_13800200319 │ 49078 │
│ http://xmusic/vstreatings of speeds │ 36925 │
│ http://news.ru/yandex.ru/api.php&api=http://toberria.ru/aphorizana │ 36902 │
│ http://bashmelnykh-metode.net/video/#!/video/emberkas.ru/detskij-yazi.com/iframe/default.aspx?id=760928&noreask=1&source │ 34323 │
│ http://censonhaber/547-popalientLog=0&strizhki-petro%3D&comeback=search?lr=213&text │ 31773 │
└─────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────┴─────────────┘
10 rows in set. Elapsed: 0.080 sec. Processed 1.43 million rows, 112.12 MB (17.91 million rows/s., 1.40 GB/s.)
Peak memory usage: 45.07 MiB.
vvml-yz-hbase-test.172.18.4.126 :) SELECT
sum(Sign) AS visits,
sumIf(Sign, has(Goals.ID, 1105530)) AS goal_visits,
(100. * goal_visits) / visits AS goal_percent
FROM tutorial.visits_v1
WHERE (CounterID = 912887) AND (toYYYYMM(StartDate) = 201403) AND (domain(StartURL) = 'yandex.ru');
SELECT
sum(Sign) AS visits,
sumIf(Sign, has(Goals.ID, 1105530)) AS goal_visits,
(100. * goal_visits) / visits AS goal_percent
FROM tutorial.visits_v1
WHERE (CounterID = 912887) AND (toYYYYMM(StartDate) = 201403) AND (domain(StartURL) = 'yandex.ru')
Query id: 02df86cc-ef97-4cec-9892-6ba92dc87d2c
┌─visits─┬─goal_visits─┬──────goal_percent─┐
│ 10543 │ 8553 │ 81.12491700654462 │
└────────┴─────────────┴───────────────────┘
1 row in set. Elapsed: 0.014 sec. Processed 19.72 thousand rows, 3.45 MB (1.46 million rows/s., 255.24 MB/s.)
Peak memory usage: 5.01 MiB.
vvml-yz-hbase-test.172.18.4.126 :)
На этот раз развернутьиспользовать четыре хоста, построить два шарда, каждый шард имеет две копии. ClickHouse кластер,IP Имя хоста следующее:
172.18.4.126 node1
172.18.4.188 node2
172.18.4.71 node3
172.18.4.86 node4
Внимание, ClickHouse Требуется, чтобы каждая копия каждого шарда находилась на отдельном инстансе, то есть копий было столько, сколько есть во всем диапазоне существования. ClickHouse Пример. Лучшая практика — 3 осколка, 2 реплики и 6 экземпляров.
ClickHouse рекомендоватьиспользовать ClickHouse Keeper заменять Zookeeper(https://clickhouse.com/docs/knowledgebase/why_recommend_clickhouse_keeper_over_zookeeper)。 подиспользовать ClickHouse Keeper Конфигурация ClickHouse кластер. Ссылка на конкретные этапы работы ClickHouse Keeper Руководство пользователя(https://clickhouse.com/docs/en/guides/sre/keeper/clickhouse-keeper#clickhouse-keeper-user-guide)。
ClickHouse В комплекте на сервере кликхаус-хранитель. Если сервер «Установить» уже существует, вы не можете установить его по отдельности. clickhouse-keeper, вы получите конфликтную ошибку:
[root@vvml-yz-hbase-test~]#rpm -ivh clickhouse-keeper-24.1.8.22.x86_64.rpm
error: Failed dependencies:
clickhouse-server conflicts with clickhouse-keeper-0:24.1.8.22-1.x86_64
[root@vvml-yz-hbase-test~]#
Но если используется только clickhouse-keeper сервер, тогда только может быть установлен самостоятельно clickhouse-keeper。
# Посмотреть версию
https://github.com/ClickHouse/ClickHouse/releases
# Последняя стабильная версия Установить адрес загрузки пакета
https://github.com/ClickHouse/ClickHouse/releases/download/v24.1.8.22-stable/clickhouse-keeper-24.1.8.22.x86_64.rpm
На этот разразвертыватьсуществоватьза хост Установить clickhouse-сервер, не только Установить кликхаус-хранитель. Планы шардинга, реплики и хранителя следующие:
node1 Осколок 1 реплика 1 keeper
node2 Осколок 1 Реплика 2 keeper
node3 Осколок 2 Реплика 1 keeper
node4 Осколок 2 Реплика 2
Все четыре хоста служат сегментами данных, и каждый фрагмент данных имеет две копии. Кипер развертывается на трех экземплярах, причем нечетное количество экземпляров используется для достижения необходимого количества голосов в ClickHouse Keeper.
существующая Конфигурация кластера ClickHouse, вам необходимо выполнить следующие приготовления на всех четырех машинах:
Выполните следующие шаги на трех хостах: node1, node2 и node3.
rpm -ivh clickhouse-common-static-24.1.8.22.x86_64.rpm
rpm -ivh clickhouse-server-24.1.8.22.x86_64.rpm
rpm -ivh clickhouse-client-24.1.8.22.x86_64.rpm
(2) Модификация ClickHouse хозяин Конфигурационный файл
# Сделайте резервную копию перед загрузкой
cp /etc/clickhouse-server/config.xml /etc/clickhouse-server/config.xml.bak
Исправлять /etc/clickhouse-server/config.xml хозяин Конфигурационный файл,существоватькорневой узел <clickhouse> Добавьте следующее ниже:
<!-- Добавьте следующие записи, чтобы разрешить внешнюю связь через сетевой интерфейс. -->
<listen_host>0.0.0.0</listen_host>
<!-- Включить указанный экземпляр ClickHouse Keeper。Обновите каждый сервер<server_id>настраивать,узел1 равен 1, узел2 равен 2、node3для3。-->
<keeper_server>
<tcp_port>9181</tcp_port>
<server_id>1</server_id>
<log_storage_path>/var/lib/clickhouse/coordination/log</log_storage_path>
<snapshot_storage_path>/var/lib/clickhouse/coordination/snapshots</snapshot_storage_path>
<coordination_settings>
<operation_timeout_ms>10000</operation_timeout_ms>
<session_timeout_ms>30000</session_timeout_ms>
<raft_logs_level>warning</raft_logs_level>
</coordination_settings>
<raft_configuration>
<server>
<id>1</id>
<hostname>node1</hostname>
<port>9234</port>
</server>
<server>
<id>2</id>
<hostname>node2</hostname>
<port>9234</port>
</server>
<server>
<id>3</id>
<hostname>node3</hostname>
<port>9234</port>
</server>
</raft_configuration>
</keeper_server>
<!-- Указывает экземпляр использования ClickHouse Keeper -->
<zookeeper>
<node>
<host>node1</host>
<port>9181</port>
</node>
<node>
<host>node2</host>
<port>9181</port>
</node>
<node>
<host>node3</host>
<port>9181</port>
</node>
</zookeeper>
sudo service clickhouse-server restart
Выполните следующие команды на узлах node1, node2 и node3. Если Keeper работает нормально, команда ruok вернет imok:
[root@vvml-yz-hbase-test~]#echo ruok | nc localhost 9181; echo
imok
[root@vvml-yz-hbase-test~]#
В системной базе данных есть таблица Zookeeper, содержащая подробную информацию об экземпляре ClickHouse Keeper:
[root@vvml-yz-hbase-test~]#clickhouse-client --password="123456"
ClickHouse client version 24.1.8.22 (official build).
Connecting to localhost:9000 as user default.
Connected to ClickHouse server version 24.1.8.
vvml-yz-hbase-test.172.18.4.126 :) SELECT *
FROM system.zookeeper
WHERE path IN ('/', '/clickhouse');
SELECT *
FROM system.zookeeper
WHERE path IN ('/', '/clickhouse')
Query id: e713c446-26c5-4c3f-994c-db22eb68b9ad
┌─name───────┬─value─┬─path────────┐
│ keeper │ │ / │
│ clickhouse │ │ / │
│ task_queue │ │ /clickhouse │
│ sessions │ │ /clickhouse │
└────────────┴───────┴─────────────┘
4 rows in set. Elapsed: 0.002 sec.
vvml-yz-hbase-test.172.18.4.126 :)
rpm -ivh clickhouse-common-static-24.1.8.22.x86_64.rpm
rpm -ivh clickhouse-server-24.1.8.22.x86_64.rpm
rpm -ivh clickhouse-client-24.1.8.22.x86_64.rpm
# Сделайте резервную копию перед загрузкой
cp /etc/clickhouse-server/config.xml /etc/clickhouse-server/config.xml.bak
Исправлять /etc/clickhouse-server/config.xml хозяин Конфигурационный файл,существоватькорневой узел <clickhouse> Добавьте следующее ниже:
<!-- Добавьте следующие записи, чтобы разрешить внешнюю связь через сетевой интерфейс. -->
<listen_host>0.0.0.0</listen_host>
<!-- Указывает экземпляр использования ClickHouse Keeper -->
<zookeeper>
<node>
<host>node1</host>
<port>9181</port>
</node>
<node>
<host>node2</host>
<port>9181</port>
</node>
<node>
<host>node3</host>
<port>9181</port>
</node>
</zookeeper>
Затем выполните следующие шаги на всех четырех хостах.
Исправлять /etc/clickhouse-server/config.xml хозяин Конфигурационный файл,существоватькорневой узел <clickhouse> Добавьте следующее ниже:
<remote_servers>
<cluster_2S_2R>
<shard>
<replica>
<host>node1</host>
<port>9000</port>
<user>default</user>
<password>123456</password>
</replica>
<replica>
<host>node2</host>
<port>9000</port>
<user>default</user>
<password>123456</password>
</replica>
</shard>
<shard>
<replica>
<host>node3</host>
<port>9000</port>
<user>default</user>
<password>123456</password>
</replica>
<replica>
<host>node4</host>
<port>9000</port>
<user>default</user>
<password>123456</password>
</replica>
</shard>
</cluster_2S_2R>
</remote_servers>
sudo service clickhouse-server restart
Посмотреть кластер:
[root@vvml-yz-hbase-test~]#clickhouse-client --password="123456"
ClickHouse client version 24.1.8.22 (official build).
Connecting to localhost:9000 as user default.
Connected to ClickHouse server version 24.1.8.
vvml-yz-hbase-test.172.18.4.126 :) SHOW CLUSTERS;
SHOW CLUSTERS
Query id: 80e81978-d1f4-4721-85d8-7e7803230373
┌─cluster───────┐
│ cluster_2S_2R │
└───────────────┘
1 row in set. Elapsed: 0.001 sec.
vvml-yz-hbase-test.172.18.4.126 :) select cluster,shard_num,replica_num,host_name,is_local,user,database_shard_name,database_replica_name from system.clusters;
SELECT
cluster,
shard_num,
replica_num,
host_name,
is_local,
user,
database_shard_name,
database_replica_name
FROM system.clusters
Query id: 4b39d9ec-b4f7-4557-b76d-05f3893f4ef7
┌─cluster───────┬─shard_num─┬─replica_num─┬─host_name─┬─is_local─┬─user────┬─database_shard_name─┬─database_replica_name─┐
│ cluster_2S_2R │ 1 │ 1 │ node1 │ 1 │ default │ │ │
│ cluster_2S_2R │ 1 │ 2 │ node2 │ 0 │ default │ │ │
│ cluster_2S_2R │ 2 │ 1 │ node3 │ 0 │ default │ │ │
│ cluster_2S_2R │ 2 │ 2 │ node4 │ 0 │ default │ │ │
└───────────────┴───────────┴─────────────┴───────────┴──────────┴─────────┴─────────────────────┴───────────────────────┘
4 rows in set. Elapsed: 0.001 sec.
vvml-yz-hbase-test.172.18.4.126 :)
использовать node1 Создайте базу данных на. НА Предложение CLUSTER автоматически создает базы данных во всех экземплярах.
vvml-yz-hbase-test.172.18.4.126 :) CREATE DATABASE db1 ON CLUSTER 'cluster_2S_2R';
CREATE DATABASE db1 ON CLUSTER cluster_2S_2R
Query id: 7a8cd789-bcfb-4855-a131-ba7935cffcfb
┌─host──┬─port─┬─status─┬─error─┬─num_hosts_remaining─┬─num_hosts_active─┐
│ node1 │ 9000 │ 0 │ │ 3 │ 0 │
│ node3 │ 9000 │ 0 │ │ 2 │ 0 │
│ node4 │ 9000 │ 0 │ │ 1 │ 0 │
│ node2 │ 9000 │ 0 │ │ 0 │ 0 │
└───────┴──────┴────────┴───────┴─────────────────────┴──────────────────┘
4 rows in set. Elapsed: 0.099 sec.
vvml-yz-hbase-test.172.18.4.126 :)
Создайте таблицу в базе данных db1. Аналогично, предложение ON CLUSTER автоматически создаст таблицу во всех экземплярах.
vvml-yz-hbase-test.172.18.4.126 :) CREATE TABLE db1.table1 on cluster 'cluster_2S_2R'
(
`id` UInt64,
`column1` String
)
ENGINE = MergeTree
ORDER BY column1;
CREATE TABLE db1.table1 ON CLUSTER cluster_2S_2R
(
`id` UInt64,
`column1` String
)
ENGINE = MergeTree
ORDER BY column1
Query id: abb936ad-3618-4821-92f6-cfaa83fb4d51
┌─host──┬─port─┬─status─┬─error─┬─num_hosts_remaining─┬─num_hosts_active─┐
│ node3 │ 9000 │ 0 │ │ 3 │ 2 │
│ node1 │ 9000 │ 0 │ │ 2 │ 2 │
└───────┴──────┴────────┴───────┴─────────────────────┴──────────────────┘
┌─host──┬─port─┬─status─┬─error─┬─num_hosts_remaining─┬─num_hosts_active─┐
│ node4 │ 9000 │ 0 │ │ 1 │ 0 │
│ node2 │ 9000 │ 0 │ │ 0 │ 0 │
└───────┴──────┴────────┴───────┴─────────────────────┴──────────────────┘
4 rows in set. Elapsed: 0.158 sec.
vvml-yz-hbase-test.172.18.4.126 :)
vvml-yz-hbase-test.172.18.4.126 :) INSERT INTO db1.table1
(id, column1)
VALUES
(1, 'abc'),
(2, 'def');
INSERT INTO db1.table1 (id, column1) FORMAT Values
Query id: 959da99c-c473-4c3a-9381-fa65b447161c
Ok.
2 rows in set. Elapsed: 0.002 sec.
vvml-yz-hbase-test.172.18.4.126 :)
vvml-yz-hbase-test.172.18.4.71 :) INSERT INTO db1.table1
(id, column1)
VALUES
(3, 'ghi'),
(4, 'jkl');
INSERT INTO db1.table1 (id, column1) FORMAT Values
Query id: c8864197-ec82-4aba-8c2e-aaa2af468553
Ok.
2 rows in set. Elapsed: 0.002 sec.
vvml-yz-hbase-test.172.18.4.71 :)
Результаты Запроса на узлах node1 и node3 показывают две строки данных о локальном экземпляре:
# node1
vvml-yz-hbase-test.172.18.4.126 :) SELECT *
FROM db1.table1;
SELECT *
FROM db1.table1
Query id: 2f2fc679-9091-41ae-967b-4bd8e2ec7311
┌─id─┬─column1─┐
│ 1 │ abc │
│ 2 │ def │
└────┴─────────┘
2 rows in set. Elapsed: 0.001 sec.
vvml-yz-hbase-test.172.18.4.126 :)
# node3
vvml-yz-hbase-test.172.18.4.71 :) SELECT *
FROM db1.table1;
SELECT *
FROM db1.table1
Query id: 18843522-c678-45f0-901d-73e1bbfd4dbf
┌─id─┬─column1─┐
│ 3 │ ghi │
│ 4 │ jkl │
└────┴─────────┘
2 rows in set. Elapsed: 0.002 sec.
vvml-yz-hbase-test.172.18.4.71 :)
На узлах node2 и node4 данные не найдены, а это значит, что данные, записанные в локальную таблицу, не копируются в ее копию.
Может создавать распределенную таблицу для представления данных по двум шардам. Таблицы с механизмом распределенных таблиц не хранят никаких собственных данных, а вместо этого позволяют обрабатывать существующий распределенный Запрос на нескольких серверах. Чтение бьет по всем шардам, пишет "распределение существует среди шардов". существует любой экземпляр на Создать распределенную таблицу:
vvml-yz-hbase-test.172.18.4.126 :) CREATE TABLE db1.dist_table ON CLUSTER 'cluster_2S_2R'
(
id UInt64,
column1 String
)
ENGINE = Distributed(cluster_2S_2R,db1,table1);
CREATE TABLE db1.dist_table ON CLUSTER cluster_2S_2R
(
`id` UInt64,
`column1` String
)
ENGINE = Distributed(cluster_2S_2R, db1, table1)
Query id: 7c08e756-90cf-4014-9368-dc41fe7d06f4
┌─host──┬─port─┬─status─┬─error─┬─num_hosts_remaining─┬─num_hosts_active─┐
│ node4 │ 9000 │ 0 │ │ 3 │ 0 │
│ node2 │ 9000 │ 0 │ │ 2 │ 0 │
│ node1 │ 9000 │ 0 │ │ 1 │ 0 │
│ node3 │ 9000 │ 0 │ │ 0 │ 0 │
└───────┴──────┴────────┴───────┴─────────────────────┴──────────────────┘
4 rows in set. Elapsed: 0.095 sec.
vvml-yz-hbase-test.172.18.4.126 :)
Создано во всех экземплярах db1.dist_table стол, но SELECT * FROM db1.dist_table Запрос Результат оказался неожиданным. Ожидается, что существование будет иметь одинаковые результаты для Запроса во всех экземплярах, возвращая все четыре строки данных в обоих сегментах, но фактические результаты, возвращаемые четырьмя экземплярами, неопределенны: node1 Иногда возвращаются все 4 строки, иногда возвращаются только первые две строки node3; Иногда возвращаются все 4 строки, иногда возвращаются только две последние строки node2; Иногда возвращаются две последние строки, иногда данные не возвращаются; Иногда возвращаются первые две строки, иногда данные не возвращаются.
проиллюстрировать:
Первое, что приходит на ум, — можно ли это выполнить на распределенной таблице. DML заявление, оно может достичь Автоматического сегментирование Эффект данных.
vvml-yz-hbase-test.172.18.4.126 :) insert into db1.dist_table
(id, column1)
values
(5, 'mno'),
(6, 'pqr');
INSERT INTO db1.dist_table (id, column1) FORMAT Values
Query id: 78b4cc88-9b13-4078-a3f0-d405f4338cfb
Elapsed: 0.002 sec.
Received exception from server (version 24.1.8):
Code: 55. DB::Exception: Received from localhost:9000. DB::Exception: Method write is not supported by storage Distributed with more than one shard and no sharding key provided. (STORAGE_REQUIRES_PARAMETER)
vvml-yz-hbase-test.172.18.4.126 :)
В ошибке четко указано, что когда хранилище данных распределено более чем по одному шарду и ключ шарда не предоставлен, распределенная таблица не поддерживает запись. Для дальнейшей демонстрации ниже используйтеисоздавать hits_v1 таблица аналогичная CREATE TABLE Оператор создает новую локальную таблицу с тремя отличиями:
Выполните следующий оператор создания таблицы в любом экземпляре:
CREATE TABLE db1.hits_local ON CLUSTER 'cluster_2S_2R'
(
`WatchID` UInt64,
`JavaEnable` UInt8,
`Title` String,
`GoodEvent` Int16,
`EventTime` DateTime,
`EventDate` Date,
`CounterID` UInt32,
`ClientIP` UInt32,
`ClientIP6` FixedString(16),
`RegionID` UInt32,
`UserID` UInt64,
`CounterClass` Int8,
`OS` UInt8,
`UserAgent` UInt8,
`URL` String,
`Referer` String,
`URLDomain` String,
`RefererDomain` String,
`Refresh` UInt8,
`IsRobot` UInt8,
`RefererCategories` Array(UInt16),
`URLCategories` Array(UInt16),
`URLRegions` Array(UInt32),
`RefererRegions` Array(UInt32),
`ResolutionWidth` UInt16,
`ResolutionHeight` UInt16,
`ResolutionDepth` UInt8,
`FlashMajor` UInt8,
`FlashMinor` UInt8,
`FlashMinor2` String,
`NetMajor` UInt8,
`NetMinor` UInt8,
`UserAgentMajor` UInt16,
`UserAgentMinor` FixedString(2),
`CookieEnable` UInt8,
`JavascriptEnable` UInt8,
`IsMobile` UInt8,
`MobilePhone` UInt8,
`MobilePhoneModel` String,
`Params` String,
`IPNetworkID` UInt32,
`TraficSourceID` Int8,
`SearchEngineID` UInt16,
`SearchPhrase` String,
`AdvEngineID` UInt8,
`IsArtifical` UInt8,
`WindowClientWidth` UInt16,
`WindowClientHeight` UInt16,
`ClientTimeZone` Int16,
`ClientEventTime` DateTime,
`SilverlightVersion1` UInt8,
`SilverlightVersion2` UInt8,
`SilverlightVersion3` UInt32,
`SilverlightVersion4` UInt16,
`PageCharset` String,
`CodeVersion` UInt32,
`IsLink` UInt8,
`IsDownload` UInt8,
`IsNotBounce` UInt8,
`FUniqID` UInt64,
`HID` UInt32,
`IsOldCounter` UInt8,
`IsEvent` UInt8,
`IsParameter` UInt8,
`DontCountHits` UInt8,
`WithHash` UInt8,
`HitColor` FixedString(1),
`UTCEventTime` DateTime,
`Age` UInt8,
`Sex` UInt8,
`Income` UInt8,
`Interests` UInt16,
`Robotness` UInt8,
`GeneralInterests` Array(UInt16),
`RemoteIP` UInt32,
`RemoteIP6` FixedString(16),
`WindowName` Int32,
`OpenerName` Int32,
`HistoryLength` Int16,
`BrowserLanguage` FixedString(2),
`BrowserCountry` FixedString(2),
`SocialNetwork` String,
`SocialAction` String,
`HTTPError` UInt16,
`SendTiming` Int32,
`DNSTiming` Int32,
`ConnectTiming` Int32,
`ResponseStartTiming` Int32,
`ResponseEndTiming` Int32,
`FetchTiming` Int32,
`RedirectTiming` Int32,
`DOMInteractiveTiming` Int32,
`DOMContentLoadedTiming` Int32,
`DOMCompleteTiming` Int32,
`LoadEventStartTiming` Int32,
`LoadEventEndTiming` Int32,
`NSToDOMContentLoadedTiming` Int32,
`FirstPaintTiming` Int32,
`RedirectCount` Int8,
`SocialSourceNetworkID` UInt8,
`SocialSourcePage` String,
`ParamPrice` Int64,
`ParamOrderID` String,
`ParamCurrency` FixedString(3),
`ParamCurrencyID` UInt16,
`GoalsReached` Array(UInt32),
`OpenstatServiceName` String,
`OpenstatCampaignID` String,
`OpenstatAdID` String,
`OpenstatSourceID` String,
`UTMSource` String,
`UTMMedium` String,
`UTMCampaign` String,
`UTMContent` String,
`UTMTerm` String,
`FromTag` String,
`HasGCLID` UInt8,
`RefererHash` UInt64,
`URLHash` UInt64,
`CLID` UInt32,
`YCLID` UInt64,
`ShareService` String,
`ShareURL` String,
`ShareTitle` String,
`ParsedParams` Nested(
Key1 String,
Key2 String,
Key3 String,
Key4 String,
Key5 String,
ValueDouble Float64),
`IslandID` FixedString(16),
`RequestNum` UInt32,
`RequestTry` UInt8
)
ENGINE = MergeTree()
PARTITION BY toYYYYMM(EventDate)
ORDER BY (CounterID, EventDate, intHash32(UserID))
SAMPLE BY intHash32(UserID);
Выполните следующий оператор создания таблицы в любом экземпляре:
CREATE TABLE db1.hits_all ON CLUSTER 'cluster_2S_2R'
AS db1.hits_local
ENGINE = Distributed(cluster_2S_2R, db1, hits_local, rand());
Выполните следующий оператор вставки в любом экземпляре:
INSERT INTO db1.hits_all SELECT * FROM tutorial.hits_v1;
# node1
vvml-yz-hbase-test.172.18.4.126 :) select count(*) from db1.hits_local;
SELECT count(*)
FROM db1.hits_local
Query id: 10a10594-dad1-4693-96fa-a27e62256cc0
┌─count()─┐
│ 4437894 │
└─────────┘
1 row in set. Elapsed: 0.002 sec.
vvml-yz-hbase-test.172.18.4.126 :) select count(*) from db1.hits_all;
SELECT count(*)
FROM db1.hits_all
Query id: 4d825459-19fa-4f68-9326-cf6a9b7e113a
┌─count()─┐
│ 8873898 │
└─────────┘
1 row in set. Elapsed: 0.006 sec.
vvml-yz-hbase-test.172.18.4.126 :)
# node2
vvml-yz-hbase-test.172.18.4.188 :) select count(*) from db1.hits_local;
SELECT count(*)
FROM db1.hits_local
Query id: 7da679f4-4f0f-42e5-8c78-df6c9814c61f
┌─count()─┐
│ 4437894 │
└─────────┘
1 row in set. Elapsed: 0.003 sec.
vvml-yz-hbase-test.172.18.4.188 :) select count(*) from db1.hits_all;
SELECT count(*)
FROM db1.hits_all
Query id: 29594d92-e38e-473a-bc91-7a5fb37e0647
┌─count()─┐
│ 8873898 │
└─────────┘
1 row in set. Elapsed: 0.005 sec.
vvml-yz-hbase-test.172.18.4.188 :)
# node3
vvml-yz-hbase-test.172.18.4.71 :) select count(*) from db1.hits_local;
SELECT count(*)
FROM db1.hits_local
Query id: 2e5a0fca-9b13-4c4e-8cb9-f9ee60da6152
┌─count()─┐
│ 4436004 │
└─────────┘
1 row in set. Elapsed: 0.002 sec.
vvml-yz-hbase-test.172.18.4.71 :) select count(*) from db1.hits_all;
SELECT count(*)
FROM db1.hits_all
Query id: 85e6e7a4-eaab-4455-8c29-52ec0998a9b0
┌─count()─┐
│ 8873898 │
└─────────┘
1 row in set. Elapsed: 0.006 sec.
vvml-yz-hbase-test.172.18.4.71 :)
# node4
vvml-yz-hbase-test.172.18.4.86 :) select count(*) from db1.hits_local;
SELECT count(*)
FROM db1.hits_local
Query id: 9950210e-a4a4-4e1d-a449-4aefb2ea396f
┌─count()─┐
│ 4436004 │
└─────────┘
1 row in set. Elapsed: 0.002 sec.
vvml-yz-hbase-test.172.18.4.86 :) select count(*) from db1.hits_all;
SELECT count(*)
FROM db1.hits_all
Query id: 45777141-ff08-452f-93b8-1650265d4175
┌─count()─┐
│ 8873898 │
└─────────┘
1 row in set. Elapsed: 0.009 sec.
vvml-yz-hbase-test.172.18.4.86 :)
Посмотреть из Запроса Может результаты, что локальная таблица node1、node2 Результаты по Запросу те же, node3, node4 Результаты Запроса на распределенной таблице такие же. узел1 и node3 принадлежат разным шардам в кластере и существуют Создать распределенную Правила распределения, указанные в таблице, являются случайными, поэтому ожидается небольшая разница в объеме данных локальной таблицы, хранящихся в этих двух экземплярах. Вывод таков:
Согласно общепринятому пониманию, распределенная база данных должна отвечать как минимум следующим основным требованиям:
ClickHouse Рекомендуется Конфигурациядаиспользовать ReplicatedMergeTree Табличный движок автоматически выполняет репликацию данных между репликами. создавать ReplcatedMergeTree поверхность,обычно требуетсянастраиватьмакрос для идентификации каждогосоздаватьповерхностьосколковикопировать。
Выполните следующие шаги на всех четырех хостах.
Исправлять /etc/clickhouse-server/config.xml хозяин Конфигурационный файл,существование каждого узла <shard> Добавить под <internal_replication>true</internal_replication>:
<remote_servers>
<cluster_2S_2R>
<shard>
<internal_replication>true</internal_replication>
<replica>
<host>node1</host>
<port>9000</port>
<user>default</user>
<password>123456</password>
</replica>
<replica>
<host>node2</host>
<port>9000</port>
<user>default</user>
<password>123456</password>
</replica>
</shard>
<shard>
<internal_replication>true</internal_replication>
<replica>
<host>node3</host>
<port>9000</port>
<user>default</user>
<password>123456</password>
</replica>
<replica>
<host>node4</host>
<port>9000</port>
<user>default</user>
<password>123456</password>
</replica>
</shard>
</cluster_2S_2R>
</remote_servers>
в узле </remote_servers> Добавьте следующий контент позже:
<macros>
<shard>01</shard>
<replica>01</replica>
</macros>
node1 Конфигурациястановиться 01、01;node2 Конфигурациястановиться 01、02;node3 Конфигурациястановиться 02、01;node4 Конфигурациястановиться 02、02。
Затем перезапустите все экземпляры:
sudo service clickhouse-server restart
Выполните следующий оператор создания таблицы в любом экземпляре:
CREATE TABLE db1.hits_replica ON CLUSTER 'cluster_2S_2R'
(
`WatchID` UInt64,
`JavaEnable` UInt8,
`Title` String,
`GoodEvent` Int16,
`EventTime` DateTime,
`EventDate` Date,
`CounterID` UInt32,
`ClientIP` UInt32,
`ClientIP6` FixedString(16),
`RegionID` UInt32,
`UserID` UInt64,
`CounterClass` Int8,
`OS` UInt8,
`UserAgent` UInt8,
`URL` String,
`Referer` String,
`URLDomain` String,
`RefererDomain` String,
`Refresh` UInt8,
`IsRobot` UInt8,
`RefererCategories` Array(UInt16),
`URLCategories` Array(UInt16),
`URLRegions` Array(UInt32),
`RefererRegions` Array(UInt32),
`ResolutionWidth` UInt16,
`ResolutionHeight` UInt16,
`ResolutionDepth` UInt8,
`FlashMajor` UInt8,
`FlashMinor` UInt8,
`FlashMinor2` String,
`NetMajor` UInt8,
`NetMinor` UInt8,
`UserAgentMajor` UInt16,
`UserAgentMinor` FixedString(2),
`CookieEnable` UInt8,
`JavascriptEnable` UInt8,
`IsMobile` UInt8,
`MobilePhone` UInt8,
`MobilePhoneModel` String,
`Params` String,
`IPNetworkID` UInt32,
`TraficSourceID` Int8,
`SearchEngineID` UInt16,
`SearchPhrase` String,
`AdvEngineID` UInt8,
`IsArtifical` UInt8,
`WindowClientWidth` UInt16,
`WindowClientHeight` UInt16,
`ClientTimeZone` Int16,
`ClientEventTime` DateTime,
`SilverlightVersion1` UInt8,
`SilverlightVersion2` UInt8,
`SilverlightVersion3` UInt32,
`SilverlightVersion4` UInt16,
`PageCharset` String,
`CodeVersion` UInt32,
`IsLink` UInt8,
`IsDownload` UInt8,
`IsNotBounce` UInt8,
`FUniqID` UInt64,
`HID` UInt32,
`IsOldCounter` UInt8,
`IsEvent` UInt8,
`IsParameter` UInt8,
`DontCountHits` UInt8,
`WithHash` UInt8,
`HitColor` FixedString(1),
`UTCEventTime` DateTime,
`Age` UInt8,
`Sex` UInt8,
`Income` UInt8,
`Interests` UInt16,
`Robotness` UInt8,
`GeneralInterests` Array(UInt16),
`RemoteIP` UInt32,
`RemoteIP6` FixedString(16),
`WindowName` Int32,
`OpenerName` Int32,
`HistoryLength` Int16,
`BrowserLanguage` FixedString(2),
`BrowserCountry` FixedString(2),
`SocialNetwork` String,
`SocialAction` String,
`HTTPError` UInt16,
`SendTiming` Int32,
`DNSTiming` Int32,
`ConnectTiming` Int32,
`ResponseStartTiming` Int32,
`ResponseEndTiming` Int32,
`FetchTiming` Int32,
`RedirectTiming` Int32,
`DOMInteractiveTiming` Int32,
`DOMContentLoadedTiming` Int32,
`DOMCompleteTiming` Int32,
`LoadEventStartTiming` Int32,
`LoadEventEndTiming` Int32,
`NSToDOMContentLoadedTiming` Int32,
`FirstPaintTiming` Int32,
`RedirectCount` Int8,
`SocialSourceNetworkID` UInt8,
`SocialSourcePage` String,
`ParamPrice` Int64,
`ParamOrderID` String,
`ParamCurrency` FixedString(3),
`ParamCurrencyID` UInt16,
`GoalsReached` Array(UInt32),
`OpenstatServiceName` String,
`OpenstatCampaignID` String,
`OpenstatAdID` String,
`OpenstatSourceID` String,
`UTMSource` String,
`UTMMedium` String,
`UTMCampaign` String,
`UTMContent` String,
`UTMTerm` String,
`FromTag` String,
`HasGCLID` UInt8,
`RefererHash` UInt64,
`URLHash` UInt64,
`CLID` UInt32,
`YCLID` UInt64,
`ShareService` String,
`ShareURL` String,
`ShareTitle` String,
`ParsedParams` Nested(
Key1 String,
Key2 String,
Key3 String,
Key4 String,
Key5 String,
ValueDouble Float64),
`IslandID` FixedString(16),
`RequestNum` UInt32,
`RequestTry` UInt8
)
ENGINE = ReplicatedMergeTree(
'/clickhouse/tables/{shard}/hits',
'{replica}'
)
PARTITION BY toYYYYMM(EventDate)
ORDER BY (CounterID, EventDate, intHash32(UserID))
SAMPLE BY intHash32(UserID);
Выполните следующий оператор создания таблицы в любом экземпляре:
CREATE TABLE db1.hits_replica_all ON CLUSTER 'cluster_2S_2R'
AS db1.hits_replica
ENGINE = Distributed(cluster_2S_2R, db1, hits_replica, rand());
Выполните следующий оператор вставки в любом экземпляре:
INSERT INTO db1.hits_replica_all SELECT * FROM tutorial.hits_v1;
# node1
vvml-yz-hbase-test.172.18.4.126 :) select count(*) from db1.hits_replica;
SELECT count(*)
FROM db1.hits_replica
Query id: e4f08a9c-39be-48cf-a8f9-6caaa98b9fed
┌─count()─┐
│ 4438089 │
└─────────┘
1 row in set. Elapsed: 0.002 sec.
vvml-yz-hbase-test.172.18.4.126 :) select count(*) from db1.hits_replica_all;
SELECT count(*)
FROM db1.hits_replica_all
Query id: 765f0ea5-a199-4bfb-85c4-6fd31e23f1af
┌─count()─┐
│ 8873898 │
└─────────┘
1 row in set. Elapsed: 0.007 sec.
vvml-yz-hbase-test.172.18.4.126 :)
# node2
vvml-yz-hbase-test.172.18.4.188 :) select count(*) from db1.hits_replica;
SELECT count(*)
FROM db1.hits_replica
Query id: b464df00-4c1a-4fea-8f2f-70fd0c32569f
┌─count()─┐
│ 4438089 │
└─────────┘
1 row in set. Elapsed: 0.002 sec.
vvml-yz-hbase-test.172.18.4.188 :) select count(*) from db1.hits_replica_all;
SELECT count(*)
FROM db1.hits_replica_all
Query id: 19a77125-7e7e-4654-bb90-8884c3b0ed26
┌─count()─┐
│ 8873898 │
└─────────┘
1 row in set. Elapsed: 0.007 sec.
vvml-yz-hbase-test.172.18.4.188 :)
# node3
vvml-yz-hbase-test.172.18.4.71 :) select count(*) from db1.hits_replica;
SELECT count(*)
FROM db1.hits_replica
Query id: e021f13c-b980-4297-9c26-b94465503101
┌─count()─┐
│ 4435809 │
└─────────┘
1 row in set. Elapsed: 0.003 sec.
vvml-yz-hbase-test.172.18.4.71 :) select count(*) from db1.hits_replica_all;
SELECT count(*)
FROM db1.hits_replica_all
Query id: 80ebbda2-be03-445c-8c16-f67428a45572
┌─count()─┐
│ 8873898 │
└─────────┘
1 row in set. Elapsed: 0.005 sec.
vvml-yz-hbase-test.172.18.4.71 :)
# node4
vvml-yz-hbase-test.172.18.4.86 :) select count(*) from db1.hits_replica;
SELECT count(*)
FROM db1.hits_replica
Query id: 204f483d-3fcb-4758-8df4-20e79f78e42e
┌─count()─┐
│ 4435809 │
└─────────┘
1 row in set. Elapsed: 0.002 sec.
vvml-yz-hbase-test.172.18.4.86 :) select count(*) from db1.hits_replica_all;
SELECT count(*)
FROM db1.hits_replica_all
Query id: e3d28b81-50b7-46e6-a855-1b40ef9fe42a
┌─count()─┐
│ 8873898 │
└─────────┘
1 row in set. Elapsed: 0.007 sec.
vvml-yz-hbase-test.172.18.4.86 :)
Посмотреть из Запроса Может результаты, что локальная таблица node1、node2 Результаты по Запросу те же, node3, node4 Результаты Запроса на распределенной таблице такие же. узел1 и node3 принадлежат разным шардам в кластере и существуют Создать распределенную Правила распределения, указанные в таблице, являются случайными, поэтому ожидается небольшая разница в объеме данных локальной таблицы, хранящихся в этих двух экземплярах. Реплицированное дерево слияния Таблица может автоматически синхронизировать данные между разными репликами одного шарда.