Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
4 changes: 2 additions & 2 deletions 4/bookworm/Dockerfile
Original file line number Diff line number Diff line change
Expand Up @@ -21,7 +21,7 @@ RUN mkdir /docker-entrypoint-initdb.d

# Set environment variables for IvorySQL
ENV IVORY_MAJOR 4
ENV IVORY_VERSION 4.5
ENV IVORY_VERSION 4.6
ARG USE_CHINA_MIRROR=false

# Use China mirror if specified
Expand Down Expand Up @@ -116,7 +116,7 @@ COPY --from=builder /var/local/ivorysql /var/local/ivorysql/
COPY --from=builder /usr/local/bin/gosu /usr/local/bin/gosu

ENV IVORY_MAJOR 4
ENV IVORY_VERSION 4.5
ENV IVORY_VERSION 4.6
ARG USE_CHINA_MIRROR=false
RUN mkdir /docker-entrypoint-initdb.d

Expand Down
4 changes: 2 additions & 2 deletions 4/trixie/Dockerfile
Original file line number Diff line number Diff line change
Expand Up @@ -21,7 +21,7 @@ RUN mkdir /docker-entrypoint-initdb.d

# Set environment variables for IvorySQL
ENV IVORY_MAJOR 4
ENV IVORY_VERSION 4.5
ENV IVORY_VERSION 4.6
ARG USE_CHINA_MIRROR=false

# Use China mirror if specified
Expand Down Expand Up @@ -116,7 +116,7 @@ COPY --from=builder /var/local/ivorysql /var/local/ivorysql/
COPY --from=builder /usr/local/bin/gosu /usr/local/bin/gosu

ENV IVORY_MAJOR 4
ENV IVORY_VERSION 4.5
ENV IVORY_VERSION 4.6
ARG USE_CHINA_MIRROR=false
RUN mkdir /docker-entrypoint-initdb.d

Expand Down
4 changes: 2 additions & 2 deletions 4/ubi8/Dockerfile
Original file line number Diff line number Diff line change
Expand Up @@ -19,7 +19,7 @@ RUN groupadd -g 1000 ivorysql; \
RUN mkdir /docker-entrypoint-initdb.d

ENV IVORY_MAJOR 4
ENV IVORY_VERSION 4.5
ENV IVORY_VERSION 4.6

RUN curl -o /etc/yum.repos.d/CentOS-Base.repo http://mirrors.aliyun.com/repo/Centos-8.repo; \
sed -i -e '/mirrors.cloud.aliyuncs.com/d' -e '/mirrors.aliyuncs.com/d' /etc/yum.repos.d/CentOS-Base.repo
Expand Down Expand Up @@ -87,7 +87,7 @@ COPY --from=builder /var/local/ivorysql /var/local/ivorysql/
COPY --from=builder /usr/local/bin/gosu /usr/local/bin/gosu

ENV IVORY_MAJOR 4
ENV IVORY_VERSION 4.5
ENV IVORY_VERSION 4.6

RUN mkdir /docker-entrypoint-initdb.d

Expand Down
110 changes: 110 additions & 0 deletions docker-cluster/Dockerfile
Original file line number Diff line number Diff line change
@@ -0,0 +1,110 @@
FROM redhat/ubi8:latest as builder

# explicitly set user/group IDs
RUN groupadd -g 1000 ivorysql; \
useradd -u 1000 -g ivorysql -d /var/local/ivorysql -s /bin/sh ivorysql; \
mkdir -p /var/local/ivorysql; \
mkdir -p /usr/src/ivorysql; \
mkdir -p /var/lib/ivorysql; \
chown -R ivorysql:ivorysql /var/local/ivorysql; \
chown -R ivorysql:ivorysql /usr/src/ivorysql; \
chown -R ivorysql:ivorysql /var/lib/ivorysql

RUN mkdir /docker-entrypoint-initdb.d
# install ivorysql 4.6
ENV IVORY_MAJOR 4
ENV IVORY_VERSION 4.6

RUN curl -o /etc/yum.repos.d/CentOS-Base.repo http://mirrors.aliyun.com/repo/Centos-8.repo; \
sed -i -e '/mirrors.cloud.aliyuncs.com/d' -e '/mirrors.aliyuncs.com/d' /etc/yum.repos.d/CentOS-Base.repo

RUN mkdir -p /usr/src/ivorysql; \
dnf install -y https://dl.fedoraproject.org/pub/epel/epel-release-latest-8.noarch.rpm; \
dnf install -y epel-release;\
dnf install -y \
make \
readline-devel \
zlib-devel \
openssl-devel \
flex \
wget \
dpkg; \
dnf groupinstall -y "Development Tools";\
dnf install -y \
llvm-toolset llvm-devel lz4 lz4-devel lz4-libs clang-devel \
krb5-devel libselinux-devel libxml2-devel cyrus-sasl-gssapi \
libicu-devel e2fsprogs-devel selinux-policy systemd-devel \
libxslt-devel openldap-devel openssl-devel pam-devel \
libuuid-devel python3-devel readline-devel tcl-devel zlib-devel \
perl perl-devel perl-ExtUtils-Embed;\
dnf install -y --enablerepo=*ower*ools perl-IPC-Run perl-Time-HiRes perl-Test-Simple uuid-devel;\
wget -O ivorysql.tar.gz "https://github.com/IvorySQL/IvorySQL/archive/refs/tags/IvorySQL_$IVORY_VERSION.tar.gz"; \
tar \
--extract \
--file ivorysql.tar.gz \
--directory /usr/src/ivorysql \
--strip-components 1 \
; \
rm ivorysql.tar.gz; \
cd /usr/src/ivorysql; \
wget https://repo.almalinux.org/almalinux/8/PowerTools/$(arch)/os/Packages/bison-devel-3.0.4-10.el8.$(arch).rpm; \
dnf install -y bison-devel-3.0.4-10.el8.$(arch).rpm; \
wget https://repo.almalinux.org/almalinux/8/AppStream/$(arch)/os/Packages/bison-3.0.4-10.el8.$(arch).rpm; \
dnf install -y bison-3.0.4-10.el8.$(arch).rpm; \
./configure \
--prefix=/var/local/ivorysql/ivorysql-$IVORY_MAJOR \
--enable-cassert --enable-debug --enable-rpath --with-tcl \
--with-python --with-gssapi --with-pam --with-ldap \
--with-openssl --with-libedit-preferred --with-uuid=e2fs \
--with-ossp-uuid --with-libxml --with-libxslt --with-perl \
--with-icu \
; \
make && make install; \
rm -rf \
/usr/src/ivorysql \
/usr/local/share/doc \
/usr/local/share/man

FROM redhat/ubi8:latest

RUN useradd -u 1000 ivorysql

COPY --from=builder --chown=ivorysql:ivorysql /var/local/ivorysql /var/local/ivorysql/

ENV IVORY_MAJOR 4
ENV IVORY_VERSION 4.6

RUN dnf install -y \
lz4 lz4-devel lz4-libs krb5-devel libxslt-devel libicu-devel && dnf -y clean all

#install patroni 4.0.6
env PATRONI_VER 4.0.6

RUN dnf -y install --nodocs \
--setopt=skip_missing_names_on_install=False \
python3-pip \
python3-psutil \
python3-psycopg2 \
&& dnf -y clean all

RUN pip3 install --upgrade python-dateutil \
&& pip3 install patroni[etcd]=="${PATRONI_VER}"

ENV PGDATA /var/local/ivorysql/ivorysql-$IVORY_MAJOR/data
ENV PATRONICONF /var/local/ivorysql/ivorysql-$IVORY_MAJOR/patroni
# this 1777 will be replaced by 0700 at runtime (allows semi-arbitrary "--user" values)
RUN mkdir -p "$PGDATA" && chown -R ivorysql:ivorysql "$PGDATA" && chmod 750 "$PGDATA"
RUN mkdir -p "$PATRONICONF" && chown -R ivorysql:ivorysql "$PATRONICONF" && chmod 1777 "$PATRONICONF"

COPY docker-entrypoint.sh /
RUN chmod +x docker-entrypoint.sh

VOLUME $PGDATA $PATRONICONF

ENV PATH $PATH:/var/local/ivorysql/ivorysql-$IVORY_MAJOR/bin

EXPOSE 5432 5866 1521

USER ivorysql

ENTRYPOINT ["/bin/sh", "/docker-entrypoint.sh"]
17 changes: 17 additions & 0 deletions docker-cluster/docker-compose/docker-compose-etcd1.yml
Original file line number Diff line number Diff line change
@@ -0,0 +1,17 @@
services:
etcd:
image: quay.io/coreos/etcd:v3.5.8
container_name: etcd
environment:
- ETCD_NAME=etcd1
- ETCD_DATA_DIR=/etcd-data
- ETCD_INITIAL_ADVERTISE_PEER_URLS=http://<cluster1_ip>:2380
- ETCD_ADVERTISE_CLIENT_URLS=http://<cluster1_ip>:2379
- ETCD_LISTEN_PEER_URLS=http://<cluster1_ip>:2380
- ETCD_LISTEN_CLIENT_URLS=http://0.0.0.0:2379
- ETCD_INITIAL_CLUSTER=etcd1=http://<cluster1_ip>:2380,etcd2=http://<cluster2_ip>:2380,etcd3=http://<cluster3_ip>:2380
- ETCD_INITIAL_CLUSTER_STATE=new
- ETCD_INITIAL_CLUSTER_TOKEN=etcd-cluster
network_mode: host
volumes:
- /home/ivorysql/etcd:/etcd-data
17 changes: 17 additions & 0 deletions docker-cluster/docker-compose/docker-compose-etcd2.yml
Original file line number Diff line number Diff line change
@@ -0,0 +1,17 @@
services:
etcd:
image: quay.io/coreos/etcd:v3.5.8
container_name: etcd
environment:
- ETCD_NAME=etcd2
- ETCD_DATA_DIR=/etcd-data
- ETCD_INITIAL_ADVERTISE_PEER_URLS=http://<cluster2_ip>:2380
- ETCD_ADVERTISE_CLIENT_URLS=http://<cluster2_ip>:2379
- ETCD_LISTEN_PEER_URLS=http://<cluster2_ip>:2380
- ETCD_LISTEN_CLIENT_URLS=http://0.0.0.0:2379
- ETCD_INITIAL_CLUSTER=etcd1=http://<cluster1_ip>:2380,etcd2=http://<cluster2_ip>:2380,etcd3=http://<cluster3_ip>:2380
- ETCD_INITIAL_CLUSTER_STATE=new
- ETCD_INITIAL_CLUSTER_TOKEN=etcd-cluster
network_mode: host
volumes:
- /home/ivorysql/etcd:/etcd-data
17 changes: 17 additions & 0 deletions docker-cluster/docker-compose/docker-compose-etcd3.yml
Original file line number Diff line number Diff line change
@@ -0,0 +1,17 @@
services:
etcd:
image: quay.io/coreos/etcd:v3.5.8
container_name: etcd
environment:
- ETCD_NAME=etcd3
- ETCD_DATA_DIR=/etcd-data
- ETCD_INITIAL_ADVERTISE_PEER_URLS=http://<cluster3_ip>:2380
- ETCD_ADVERTISE_CLIENT_URLS=http://<cluster3_ip>:2379
- ETCD_LISTEN_PEER_URLS=http://<cluster3_ip>:2380
- ETCD_LISTEN_CLIENT_URLS=http://0.0.0.0:2379
- ETCD_INITIAL_CLUSTER=etcd1=http://<cluster1_ip>:2380,etcd2=http://<cluster2_ip>:2380,etcd3=http://<cluster3_ip>:2380
- ETCD_INITIAL_CLUSTER_STATE=new
- ETCD_INITIAL_CLUSTER_TOKEN=etcd-cluster
network_mode: host
volumes:
- /home/ivorysql/etcd:/etcd-data
17 changes: 17 additions & 0 deletions docker-cluster/docker-compose/docker-compose-ivypatroni_1.yml
Original file line number Diff line number Diff line change
@@ -0,0 +1,17 @@
services:
ivypatroni1:
image: ivorysql/docker-compose-ha-cluster:4.6-4.0.6-ubi8
restart: always
container_name: ivyhac1
user: "ivorysql"
environment:
PATRONI_SCOPE: ivory-cluster
ETCD_HOSTS: <cluster1_ip>:2379,<cluster2_ip>:2379,<cluster3_ip>:2379
IVORYSQL_PASSWORD: 123456
IVORYSQL_HOST_AUTH_METHOD: md5
PATRONI_SERVICE_NAME: ivypatroni1
IVORYSQL_HOST: <cluster1_ip>
network_mode: host
volumes:
- /home/ivorysql/patroni:/var/local/ivorysql/ivorysql-4/patroni/
- /home/ivorysql/ivydata:/var/local/ivorysql/ivorysql-4/data/
17 changes: 17 additions & 0 deletions docker-cluster/docker-compose/docker-compose-ivypatroni_2.yml
Original file line number Diff line number Diff line change
@@ -0,0 +1,17 @@
services:
ivypatroni2:
image: ivorysql/docker-compose-ha-cluster:4.6-4.0.6-ubi8
restart: always
container_name: ivyhac2
user: "ivorysql"
environment:
PATRONI_SCOPE: ivory-cluster
ETCD_HOSTS: <cluster1_ip>:2379,<cluster2_ip>:2379,<cluster3_ip>:2379
IVORYSQL_PASSWORD: 123456
IVORYSQL_HOST_AUTH_METHOD: md5
PATRONI_SERVICE_NAME: ivypatroni2
IVORYSQL_HOST: <cluster2_ip>
network_mode: host
volumes:
- /home/ivorysql/patroni:/var/local/ivorysql/ivorysql-4/patroni/
- /home/ivorysql/ivydata:/var/local/ivorysql/ivorysql-4/data/
17 changes: 17 additions & 0 deletions docker-cluster/docker-compose/docker-compose-ivypatroni_3.yml
Original file line number Diff line number Diff line change
@@ -0,0 +1,17 @@
services:
ivypatroni3:
image: ivorysql/docker-compose-ha-cluster:4.6-4.0.6-ubi8
restart: always
container_name: ivyhac3
user: "ivorysql"
environment:
PATRONI_SCOPE: ivory-cluster
ETCD_HOSTS: <cluster1_ip>:2379,<cluster2_ip>:2379,<cluster3_ip>:2379
IVORYSQL_PASSWORD: 123456
IVORYSQL_HOST_AUTH_METHOD: md5
PATRONI_SERVICE_NAME: ivypatroni3
IVORYSQL_HOST: <cluster3_ip>
network_mode: host
volumes:
- /home/ivorysql/patroni:/var/local/ivorysql/ivorysql-4/patroni/
- /home/ivorysql/ivydata:/var/local/ivorysql/ivorysql-4/data/
92 changes: 92 additions & 0 deletions docker-cluster/docker-entrypoint.sh
Original file line number Diff line number Diff line change
@@ -0,0 +1,92 @@
if [ ! -f $PATRONICONF/patroni.yml ]; then
echo "there is no patroni.yml, will generate patroni.yml "
cat > $PATRONICONF/patroni.yml <<__EOF__
scope: ${PATRONI_SCOPE}
name: ${PATRONI_SERVICE_NAME}
namespace: /service/

restapi:
listen: 0.0.0.0:8008
connect_address: ${IVORYSQL_HOST}:8008

etcd3:
hosts: ${ETCD_HOSTS}
bootstrap:
dcs:
ttl: 30
loop_wait: 10
retry_timeout: 10
maximum_lag_on_failover: 1048576
master_start_timeout: 300
synchronous_mode: false
postgresql:
use_pg_rewind: true
parameters:
wal_level: replica
hot_standby: "on"
wal_keep_size: 100
max_wal_senders: 10
max_replication_slots: 10
wal_log_hints: "on"
archive_mode: "off"
archive_timeout: 1800s
logging_collector: "on"
initdb:
- encoding: 'UTF8'
- locale: 'C'
- auth: '${IVORYSQL_HOST_AUTH_METHOD}'

postgresql:
database: ivorysql
listen: 0.0.0.0:5432
connect_address: ${IVORYSQL_HOST}:5432
bin_dir: /var/local/ivorysql/ivorysql-$IVORY_MAJOR/bin
data_dir: $PGDATA
config_dir: $PGDATA
pgpass: /tmp/.pgpass


authentication:
replication:
username: ivorysql
password: '${IVORYSQL_PASSWORD}'
rewind:
username: ivorysql
password: '${IVORYSQL_PASSWORD}'
superuser:
username: ivorysql
password: '${IVORYSQL_PASSWORD}'

parameters:
ssl: 'off'
logging_collector: on
log_directory: 'log'
ivorysql.listen_addresses: '*'

pg_hba:
- local all all peer
- host all all 0.0.0.0/0 ${IVORYSQL_HOST_AUTH_METHOD}
- host all all ::1/128 ${IVORYSQL_HOST_AUTH_METHOD}
- local replication all peer
- host replication all 0.0.0.0/0 ${IVORYSQL_HOST_AUTH_METHOD}
- host replication all ::1/128 ${IVORYSQL_HOST_AUTH_METHOD}

tags:
nofailover: false
noloadbalance: false
clonefrom: false
nosync: false

log:
level: INFO
traceback_level: INFO
dir: $PATRONICONF
__EOF__

else
echo "will substitute patroni.yml with real value"
fi


echo "will start patroni......"
patroni $PATRONICONF/patroni.yml
Loading
Loading