Skip to content

Commit e9839af

Browse files
author
Andrey Kopylov
committed
MDB-47201: try using clickhouse-keeper instead of zookeeper (stable)
1 parent 76b7a7e commit e9839af

16 files changed

Lines changed: 520 additions & 48 deletions

Makefile

Lines changed: 14 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -4,16 +4,17 @@ PG_MAJOR=14
44

55
PGCONSUL_IMAGE=pgconsul:behave
66
PROJECT=pgconsul
7-
ZK_VERSION=3.7.2
8-
export ZK_VERSION
7+
# ZooKeeper replaced with ClickHouse Keeper
8+
# ZK_VERSION=3.9.5
9+
# export ZK_VERSION
910
INSTALL_DIR=$(DESTDIR)/opt/yandex/pgconsul
1011
REPLICATION_TYPE=quorum
1112

1213
clean_report:
1314
rm -rf htmlcov
1415

1516
clean: clean_report
16-
rm -rf ../yamail-pgconsul_*.build ../yamail-pgconsul_*.changes ../yamail-pgconsul_*.deb Dockerfile* docker/zookeeper/zookeeper-*.tar.gz test_ssh_key*
17+
rm -rf ../yamail-pgconsul_*.build ../yamail-pgconsul_*.changes ../yamail-pgconsul_*.deb Dockerfile* test_ssh_key*
1718
mv --force static/pgconsul.sudoers.d.orig static/pgconsul.sudoers.d 2>/dev/null || true
1819
mv --force static/pgconsul.init.d.orig static/pgconsul.init.d 2>/dev/null || true
1920
rm -rf .tox __pycache__ pgconsul.egg-info .mypy_cache
@@ -54,12 +55,18 @@ install_pgconsul:
5455
build:
5556
cp -f docker/base/Dockerfile .
5657
yes | ssh-keygen -m PEM -t rsa -N '' -f test_ssh_key -C jepsen || true
57-
wget https://dlcdn.apache.org/zookeeper/zookeeper-$(ZK_VERSION)/apache-zookeeper-$(ZK_VERSION)-bin.tar.gz -nc -O docker/zookeeper/zookeeper-$(ZK_VERSION).tar.gz || true
5858
docker compose -p $(PROJECT) down --rmi all --remove-orphans
5959
docker compose -p $(PROJECT) -f jepsen-compose.yml down --rmi all --remove-orphans
6060
docker build -t pgconsulbase:latest . --label pgconsul_tests
6161
docker compose -p $(PROJECT) build --build-arg replication_type=$(REPLICATION_TYPE) --build-arg pg_major=$(PG_MAJOR)
6262

63+
build_keeper:
64+
docker build -t pgconsul_keeper:latest ./docker/keeper
65+
66+
# Build only keeper containers (without postgresql)
67+
build_keeper_only:
68+
docker compose -p $(PROJECT) build zookeeper1 zookeeper2 zookeeper3
69+
6370
build_package:
6471
docker build -f ./docker/dpkg/Dockerfile . --tag pgconsul_package_build:1.0 && docker run -e VERSION=$(BUILD_VERSION) -e BUILD_NUMBER=$(BUILD_NUM) pgconsul_package_build:1.0
6572

@@ -76,9 +83,9 @@ jepsen_test:
7683
docker exec pgconsul_postgresql1_1 /usr/local/bin/generate_certs.sh
7784
docker exec pgconsul_postgresql2_1 /usr/local/bin/generate_certs.sh
7885
docker exec pgconsul_postgresql3_1 /usr/local/bin/generate_certs.sh
79-
docker exec pgconsul_zookeeper1_1 bash -c '/usr/local/bin/generate_certs.sh && supervisorctl restart zookeeper'
80-
docker exec pgconsul_zookeeper2_1 bash -c '/usr/local/bin/generate_certs.sh && supervisorctl restart zookeeper'
81-
docker exec pgconsul_zookeeper3_1 bash -c '/usr/local/bin/generate_certs.sh && supervisorctl restart zookeeper'
86+
docker exec pgconsul_zookeeper1_1 bash -c '/usr/local/bin/generate_certs.sh && clickhouse-keeper --config-file=/etc/clickhouse-keeper/keeper_config.xml'
87+
docker exec pgconsul_zookeeper2_1 bash -c '/usr/local/bin/generate_certs.sh && clickhouse-keeper --config-file=/etc/clickhouse-keeper/keeper_config.xml'
88+
docker exec pgconsul_zookeeper3_1 bash -c '/usr/local/bin/generate_certs.sh && clickhouse-keeper --config-file=/etc/clickhouse-keeper/keeper_config.xml'
8289
docker exec pgconsul_postgresql1_1 chmod +x /usr/local/bin/setup.sh
8390
docker exec pgconsul_postgresql2_1 chmod +x /usr/local/bin/setup.sh
8491
docker exec pgconsul_postgresql3_1 chmod +x /usr/local/bin/setup.sh

README.md

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -78,7 +78,7 @@ Here is configuration [example](./docs/en/CONFIG.md) with some explanations.
7878

7979
### External components
8080

81-
* [Kazoo](https://github.com/python-zk/kazoo) is used to interact with Zookeeper
81+
* [Kazoo](https://github.com/python-zk/kazoo) is used to interact with Zookeeper/ClickHouse Keeper (wire-compatible)
8282
* [Psycopg2](https://github.com/psycopg/psycopg2) is used to interact with Postgresql
8383

8484
#### Migration to a different prefix or address in ZK

development.md

Lines changed: 5 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -18,15 +18,17 @@ TEST_ARGS='-i archive.feature' make check_test
1818
```shell
1919
export DEBUG=true
2020

21-
TEST_ARGS='-i cascade.feature -t @fail_replication_source' make check_test
22-
```
21+
## Debug logs
22+
- `logs/debug/test_execution.log`test execution details, timing, retries
23+
- Per-scenario logs: `test_execution_<scenario_name>.log`
24+
- Failed step logs: `logs/<feature_file>/<line_number>/<hostname>/` — container logs (pgconsul, postgresql, pgbouncer, clickhouse-keeper)
2325

2426
## Manual test
2527
```shell
2628
TEST_ARGS='-i manual_test.feature' make check_test
2729
```
2830
After launch this command you have 10 hours for manual test with setup:
29-
- 3 zookeeper
31+
- 3 clickhouse-keeper (zookeeper1..3 containers)
3032
- 3 postgresql + pgconsul + pgbouncer
3133

3234
## Run local on Linux

docker-compose.yml

Lines changed: 3 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -3,9 +3,7 @@ version: '2.2'
33
services:
44
zookeeper1:
55
build:
6-
context: ./docker/zookeeper
7-
args:
8-
- VERSION=${ZK_VERSION}
6+
context: ./docker/keeper
97
privileged: true
108
hostname: pgconsul_zookeeper1_1
119
domainname: pgconsul_pgconsul_net
@@ -15,9 +13,7 @@ services:
1513
ipv4_address: 192.168.233.10
1614
zookeeper2:
1715
build:
18-
context: ./docker/zookeeper
19-
args:
20-
- VERSION=${ZK_VERSION}
16+
context: ./docker/keeper
2117
privileged: true
2218
hostname: pgconsul_zookeeper2_1
2319
domainname: pgconsul_pgconsul_net
@@ -27,9 +23,7 @@ services:
2723
ipv4_address: 192.168.233.11
2824
zookeeper3:
2925
build:
30-
context: ./docker/zookeeper
31-
args:
32-
- VERSION=${ZK_VERSION}
26+
context: ./docker/keeper
3327
privileged: true
3428
hostname: pgconsul_zookeeper3_1
3529
domainname: pgconsul_pgconsul_net

docker/keeper/Dockerfile

Lines changed: 37 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,37 @@
1+
FROM clickhouse/clickhouse-keeper:26.5
2+
3+
# Install openssl for certificate generation (runtime)
4+
RUN apk add --no-cache openssl
5+
6+
# Copy pre-startup script (handles server_id + SSL cert generation at runtime)
7+
COPY pre.sh /opt/clickhouse-keeper/pre.sh
8+
RUN chmod +x /opt/clickhouse-keeper/pre.sh
9+
10+
# Copy SSL certificate generation script (contains embedded CA cert/key)
11+
COPY generate_certs.sh /opt/clickhouse-keeper/generate_certs.sh
12+
RUN chmod +x /opt/clickhouse-keeper/generate_certs.sh
13+
14+
# Create log directory
15+
RUN mkdir -p /var/log/clickhouse-keeper && chown clickhouse:clickhouse /var/log/clickhouse-keeper
16+
17+
# Create data directories and set ownership
18+
RUN mkdir -p /var/lib/clickhouse-keeper/coordination/log \
19+
/var/lib/clickhouse-keeper/coordination/snapshots \
20+
/var/lib/clickhouse-keeper/coordination/preprocessed_configs \
21+
/etc/clickhouse-keeper \
22+
/etc/zk-ssl && \
23+
chown -R clickhouse:clickhouse /var/lib/clickhouse-keeper
24+
25+
# Copy keeper config
26+
COPY keeper_config.xml /etc/clickhouse-keeper/keeper_config.xml
27+
28+
# Generate CA certificate and key at build time (embedded in generate_certs.sh)
29+
# Server certificates are generated at runtime in pre.sh when hostname is known
30+
RUN /opt/clickhouse-keeper/generate_certs.sh && \
31+
chown -R clickhouse:clickhouse /etc/zk-ssl
32+
33+
# Override base image ENTRYPOINT to run our pre.sh
34+
ENTRYPOINT ["/opt/clickhouse-keeper/pre.sh"]
35+
36+
# Run clickhouse-keeper with config
37+
CMD ["clickhouse-keeper", "--config-file=/etc/clickhouse-keeper/keeper_config.xml"]

docker/keeper/generate_certs.sh

Lines changed: 99 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,99 @@
1+
#!/bin/bash
2+
set -ex
3+
4+
# This script generates the CA certificate and CA private key (embedded below).
5+
# Server certificates are generated at runtime by pre.sh when the container
6+
# hostname is known (needed for proper CN/SAN in the certificate).
7+
8+
mkdir -p /etc/zk-ssl
9+
10+
# Skip if CA cert already exists
11+
if [ -f /etc/zk-ssl/ca.cert.pem ] && [ -f /etc/zk-ssl/ca.key ]; then
12+
echo "CA certificate and key already exist, skipping"
13+
exit 0
14+
fi
15+
16+
echo "-----BEGIN CERTIFICATE-----
17+
MIIE/TCCAuWgAwIBAgIUU9e6chP84r3iZk3JtvnWb1V2N1YwDQYJKoZIhvcNAQEL
18+
BQAwDTELMAkGA1UEBhMCUlUwIBcNMjMwMzEwMDgzNTUzWhgPMzAyMjA3MTEwODM1
19+
NTNaMA0xCzAJBgNVBAYTAlJVMIICIjANBgkqhkiG9w0BAQEFAAOCAg8AMIICCgKC
20+
AgEAwJuy394cK127yT8nGHVPKF6TG6xL0WpxahyaKwIYp5lbv9wDvzjMPE7KmONU
21+
8GhCFUdEJTRqBkaRdZNYxnOUxufU3+jIf1hq1Csg8q1NXICVWVwfFL2F5mKHgeHQ
22+
n3FaJM2pZQ5iIWFY1c18MgV8qqNWbtyLeppcyZOL9duLM9A8XpYb0JOZis82d+lh
23+
kcxzE1XM+MZEgZfHImh0zod9OMtSAOwQzVXpiA3JO/eHkLQGYcy6KNTm42mubVlX
24+
kBcu/BplnP7gXGOYDt/JyRhGSLAfn762+jRbAlAvbPzOy67hc4pW7aloU5zPBhYf
25+
BaTxM9UPqPtyp7Lxkp9HL68QXtm5MobDuDtZ6ePQtHgHrl7P7PXvEUPwK7BZzgZy
26+
MerVhxIssutA2yBCuu5T7dMSwIsUdvXtgdHRdHDwn1D/V1CxnujDv9l6/T3sCmRv
27+
tWPwTOCUf5BLLw6N6TnSsVR5I9NALKCLYE8LsfCuLdyi363JZqubkdJr1Ro8yI5J
28+
m0GX5pypwZJPV2Ivt6kKVTQiN2hoWNe+3TNPS+7ysqit37s71YRDajZaZ55DopmF
29+
+oIYdA3MqUZEVZyKFifWvo/l2gYarlEtcEJl++OwydirWLAjCPHh9UvDhjKS43bQ
30+
zSlRC+d4CfRqXftmETHVAxMokai3WvAdUpJrW2RrjiuR0MkCAwEAAaNTMFEwHQYD
31+
VR0OBBYEFJGDr6xmoKJFU6cgS90aFg6lUGbhMB8GA1UdIwQYMBaAFJGDr6xmoKJF
32+
U6cgS90aFg6lUGbhMA8GA1UdEwEB/wQFMAMBAf8wDQYJKoZIhvcNAQELBQADggIB
33+
ACj87ymjBlgY9UZTUbudHREPPXfqMi2TgWt5hygQSiTrNeQOodnq+Swp86qX/y8w
34+
xtnvc+iILfFnh9ZevHKmLx+JziN4kD4ywEpHW7zS7c3+2QEjIZUwj5qlIg0ByOBd
35+
0M/kpimmuTwlDylBaY12GcFlZcsbuezzm4hU+0qoCV/zi2DvSdAPKXMAeZ3lOkde
36+
PUYJUpRz/QkkxEhSdM3BQYI51mUiltCHMhe6COoN4MHV7tix0Pj9vPjhAVN/4sot
37+
2PgUiCwY8eNQugZhpTosMTSBLZvg/EKG+4slY75/voNTIxWHAHmnPMOAzVgNTya0
38+
/eP6NB3MCjFuY2E+fGox9YTomjI5oxBr+1LlwVy7wbwXTrgBz9Z4izScAsVbPrk6
39+
jSrqNeNWK1f+JVnYZkjgPGgPaQVCJ22vdLmkW7U/ATdeedQS3RCApMnb9VCRTUaO
40+
eY4ccuEvj0huhdcUguw6fBjrhPjoPxKMn6S93ginW8Wz9vo8qLkEg2NtQDFu1Omb
41+
cJM5F8uLRr8NotPV5QPg1koHeBv/N2WTRZiUoavAogR9XdyOtrB8+MBu1nsp4Goi
42+
7/suv9XzMJ7IpgXiQfCM++1x7oooyWWdeFTCzqNDJ1IbQDeOCc9cQgeOAPWcIqWO
43+
nAWt08+eToI1YUvjl6UT0bpVaJEACv+/HfBr1T26u4Jh
44+
-----END CERTIFICATE-----" > /etc/zk-ssl/ca.cert.pem
45+
46+
echo "-----BEGIN RSA PRIVATE KEY-----
47+
MIIJKAIBAAKCAgEAwJuy394cK127yT8nGHVPKF6TG6xL0WpxahyaKwIYp5lbv9wD
48+
vzjMPE7KmONU8GhCFUdEJTRqBkaRdZNYxnOUxufU3+jIf1hq1Csg8q1NXICVWVwf
49+
FL2F5mKHgeHQn3FaJM2pZQ5iIWFY1c18MgV8qqNWbtyLeppcyZOL9duLM9A8XpYb
50+
0JOZis82d+lhkcxzE1XM+MZEgZfHImh0zod9OMtSAOwQzVXpiA3JO/eHkLQGYcy6
51+
KNTm42mubVlXkBcu/BplnP7gXGOYDt/JyRhGSLAfn762+jRbAlAvbPzOy67hc4pW
52+
7aloU5zPBhYfBaTxM9UPqPtyp7Lxkp9HL68QXtm5MobDuDtZ6ePQtHgHrl7P7PXv
53+
EUPwK7BZzgZyMerVhxIssutA2yBCuu5T7dMSwIsUdvXtgdHRdHDwn1D/V1CxnujD
54+
v9l6/T3sCmRvtWPwTOCUf5BLLw6N6TnSsVR5I9NALKCLYE8LsfCuLdyi363JZqub
55+
kdJr1Ro8yI5Jm0GX5pypwZJPV2Ivt6kKVTQiN2hoWNe+3TNPS+7ysqit37s71YRD
56+
ajZaZ55DopmF+oIYdA3MqUZEVZyKFifWvo/l2gYarlEtcEJl++OwydirWLAjCPHh
57+
9UvDhjKS43bQzSlRC+d4CfRqXftmETHVAxMokai3WvAdUpJrW2RrjiuR0MkCAwEA
58+
AQKCAgAgemC4RTDE00J2FfMWublGWmQ991i1kFhdh0Mr22ei40ZIXOY42W/+/15E
59+
V5kcDMiP4/uGtobmVgHzLIx8skK1I6SOuScN6i/hZQBiS3zPC1OjxNfs3GR2y8iD
60+
yzstl6SWriNRShKcBFlBfCvkF27FK1PIz+GpI9xflUS1iXa4nvV/EZrRGgJ7GKPb
61+
pnvwZORGr2In1O76V0iZ8bk4ljo0WHyUcToIFeOSMJjtRrkSWnj1BtuhRP1F/a0O
62+
/VC5mF8w3Zai2YulqJmccHoLMc+wNBqxCiy6lhd+lVzZ6OtKB0w2+m3cF4PjDX8P
63+
TK2gewa9McE5QmU8B/2aNsd/L+r3eGEvWAF/1vRq6NcrFwigq8uCTtgw9edRlDnm
64+
RvICkfAbrwhNaixWwqBVQHoy53H29TohxGNNKa6TTKeJvYEdYKgHx55TxkB9X9jc
65+
iSisqb3fgEl4Yh1Izpu+6nULOqdlldfkKPgKJqVB1AT/avR8J09zmMvW5fPa6fFx
66+
alZ1iVahR5bIFEu1lXygsrBP6N+K/ogyztg7ZKLTIN/FguwMKnXMaUbN/Y/ZZXV1
67+
oGil9vHKnDrRnUGfcm9tyH2Ddcy6RDoDz+O4cYgMGxDhHran2cicVY1q+Yi08q5h
68+
Napk1phNra5HIHnNHwMxQ75ZKZZ3TOGJL+HMF4yRDj19C/6sAQKCAQEA8a9ZQhWw
69+
0vhZENmSYZgGZLa7RZLSbBzQOX/cetdI6/kvmZVcMvNz4q0/UI9XLkqokL1wJiku
70+
O0zXkaVrBVAsgozp4I3oFqwtcAAGw0KwF4FDAS36k4gkE4SmIUl2eI0XMZCPQIKp
71+
3TB81+XdBITtwfPl5yG+IZDkXNu16qUHEhnhvs/kKhMr8flhFC1J4gdrrQhfuRHY
72+
Jv8e1RLJzMhu/ErRjh82LkzB6m3jp0YxBeIA+9Kkw+OX6SlzRbJPirKxJTaZnB8o
73+
wQmzOy1kTRG4qjKswjdTbzf6549721i8QHwSpwPI3NZQhlSkfsvZ5QL4qPW0nRta
74+
m76YeLlS12yQSQKCAQEAzAQz6OcE6yS2q5UfTZluGaU54Zkm0YSnS394pitJpHoh
75+
JSZlvkL1DzpacquDxa3uQLDikai5TqpNnkuufeMJf7I2ygg4n/v4OFaE+/qj5uNA
76+
3QnL3BVT9DCJ0JvQ1qA5Q/6P5WpUHYB7JHBM9BpaE8e4xocJyWSdcSJDaEXns4Hx
77+
WzhpBdVpPSamqB0VHYg1bv6OGFPfwUaRafWhNzljtxbY8RYcz7IfPmnLImFePTtZ
78+
AjzIoAwUIRFzvmoduda0kQKogRVoEeaW1q6ebPUjYjIZvohnpe27EvgCiTNkcaSf
79+
C96uIxHrSvI8114z9CBXer60xQ0Kz+ds18LtY6w8gQKCAQEAkP/JxlsrHje/f9t4
80+
9jJ2S4BSNLiUpCZZStYKWmzFJEX5J+SzTyI+uZWFcfi9rlk+brApE8wLH6rHfmtH
81+
HQXv3ldajc21m7yq+hIZ/JYK/d8gaxnBxzebpVYlMb1YZZUIgEUhnOuHq9vGWuVe
82+
x7JUztNccGIPJyY9y/RJXUCrUFHU3Vzun8umxuL+OlO9iu02zbZDb85j52mSfvVp
83+
uwHZjGX6+ZCCOh71DIfnWFlFWikwu+Sx05C9eDbVINCM5kK1AwWR/Ve4ZLBEJtHh
84+
5lcmen4ypcb5uLVWRA0SmxPOxcVqj2c24D94Sk+H7UayMLKqqvvW45cgsmYUJgHR
85+
0MsieQKCAQB9goBk4erWtmliuYTeemuPf2RSc6O79b3t5mfU4oCVnUTS1AJ3wD1+
86+
tsl6DiYs8MnIJoncTk5iJMdHgQvCCnCHjJ3EQLaFRb/4+NErK5C1tEztLt+pb72M
87+
VmgSXCloQH26ZNslqfpBhA895ZCSA7wyuwXjrKPKsAlj1k5d0dOvTVusYNHLcvUh
88+
V6vjdLDO0EL/G79THBZlkwJWi3Q4wyejNX0VJCNpaw1pmjAL4JbXWLFzfO13+LZR
89+
eakZFbNf5sSDCX2cnAzAJnnZbOet5El2WZgY7VXGcLBMBSOaQHGksD/gT4gVrypv
90+
mwLvA9c2cscejkArkdB7AsalHhho30cBAoIBAFJBO0RU7o0S+F6KHIP5aFbItcUd
91+
NfUgoJTAFUD3EnBirvDv0pu8T8zkgKf7PRFkZQIOXocvpX0Zy6N7fiPbvzTA/vH3
92+
mFqias89pTUAgv43R8ZsAC/qlozUuByegigEz2zeVd34w7MdkgGo1jnqmijAIXZE
93+
INBo0swkxAbix+W1Pur/yvGUpC6xu3ISmdrn0p20B7QhyuoqC3ea/az7ePwx+Pu9
94+
Jl8tzMujbHNHhw+OQAQOPHi6EUPs/H37euj3G7oBaVUwXJq3Tbwg95W5Jih+CgTB
95+
Sbe6eYpR/j/SYGwbS6/DbHi3IjvblN+2pSPI05JvXMhLC/lAeqcdVJAgTvw=
96+
-----END RSA PRIVATE KEY-----" > /etc/zk-ssl/ca.key
97+
98+
chmod 644 /etc/zk-ssl/ca.cert.pem
99+
chmod 600 /etc/zk-ssl/ca.key

docker/keeper/keeper.conf

Lines changed: 26 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,26 @@
1+
[program:keeper_pre]
2+
command=/opt/clickhouse-keeper/pre.sh
3+
process_name=%(program_name)s
4+
autostart=true
5+
autorestart=true
6+
stdout_logfile=/proc/self/fd/1
7+
stdout_logfile_maxbytes=0
8+
stderr_logfile=/proc/self/fd/2
9+
stderr_logfile_maxbytes=0
10+
priority=100
11+
user=root
12+
13+
[program:keeper]
14+
command=/usr/bin/clickhouse-keeper --config-file=/etc/clickhouse-keeper/keeper_config.xml
15+
environment=CLICKHOUSE_LOG="/var/log/clickhouse-keeper/clickhouse-keeper.log"
16+
process_name=%(program_name)s
17+
autostart=true
18+
autorestart=true
19+
stopsignal=TERM
20+
log_level=debug
21+
user=clickhouse
22+
stdout_logfile=/proc/self/fd/1
23+
stdout_logfile_maxbytes=0
24+
stderr_logfile=/proc/self/fd/2
25+
stderr_logfile_maxbytes=0
26+
priority=200

docker/keeper/keeper_config.xml

Lines changed: 72 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,72 @@
1+
<?xml version="1.0"?>
2+
<clickhouse_keeper>
3+
<!-- Logger settings -->
4+
<logger>
5+
<level>information</level>
6+
<log>/var/log/clickhouse-keeper/clickhouse-keeper.log</log>
7+
<errorlog>/var/log/clickhouse-keeper/clickhouse-keeper.err.log</errorlog>
8+
<size>1000M</size>
9+
<count>10</count>
10+
</logger>
11+
12+
<!-- Listen on all interfaces (not just localhost) -->
13+
<listen_host>0.0.0.0</listen_host>
14+
15+
<!-- Keeper server configuration (new format for 24.x) -->
16+
<keeper_server>
17+
<!-- TCP port for ZooKeeper-compatible client connections (non-SSL) -->
18+
<tcp_port>2181</tcp_port>
19+
20+
<!-- TCP port for SSL-encrypted ZooKeeper-compatible client connections -->
21+
<tcp_port_secure>2281</tcp_port_secure>
22+
23+
<!-- Server ID - will be set by pre.sh based on hostname -->
24+
<server_id>1</server_id>
25+
26+
<!-- Data directories -->
27+
<log_storage_path>/var/lib/clickhouse-keeper/coordination/log</log_storage_path>
28+
<snapshot_storage_path>/var/lib/clickhouse-keeper/coordination/snapshots</snapshot_storage_path>
29+
30+
<!-- Raft configuration - equivalent to ZooKeeper's server.N entries -->
31+
<raft_configuration>
32+
<!-- Server 1: zookeeper1 (192.168.233.10) -->
33+
<server>
34+
<id>1</id>
35+
<hostname>192.168.233.10</hostname>
36+
<port>9234</port>
37+
</server>
38+
<!-- Server 2: zookeeper2 (192.168.233.11) -->
39+
<server>
40+
<id>2</id>
41+
<hostname>192.168.233.11</hostname>
42+
<port>9234</port>
43+
</server>
44+
<!-- Server 3: zookeeper3 (192.168.233.12) -->
45+
<server>
46+
<id>3</id>
47+
<hostname>192.168.233.12</hostname>
48+
<port>9234</port>
49+
</server>
50+
</raft_configuration>
51+
<coordination_settings>
52+
<quorum_reads>true</quorum_reads>
53+
</coordination_settings>
54+
</keeper_server>
55+
56+
<!-- SSL/TLS configuration for secure client connections (tcp_port_secure) -->
57+
<openSSL>
58+
<server>
59+
<certificateFile>/etc/zk-ssl/server.crt</certificateFile>
60+
<privateKeyFile>/etc/zk-ssl/server.key</privateKeyFile>
61+
<caConfig>/etc/zk-ssl/ca.cert.pem</caConfig>
62+
<verificationMode>relaxed</verificationMode>
63+
<loadDefaultCAFile>false</loadDefaultCAFile>
64+
<cacheSessions>true</cacheSessions>
65+
<disableProtocols>sslv2,sslv3</disableProtocols>
66+
<preferServerCiphers>true</preferServerCiphers>
67+
</server>
68+
</openSSL>
69+
70+
<!-- Four-letter commands configuration -->
71+
<four_letter_word_white_list>*</four_letter_word_white_list>
72+
</clickhouse_keeper>

0 commit comments

Comments
 (0)