├── .gitignore ├── palo-ns.yaml ├── docker ├── be │ ├── bin │ │ └── docker-entrypoint.sh │ ├── Dockerfile │ └── conf │ │ └── be.conf └── fe │ ├── bin │ └── docker-entrypoint.sh │ ├── Dockerfile │ └── conf │ └── fe.conf ├── README.md ├── palo-be.yaml └── palo-fe.yaml /.gitignore: -------------------------------------------------------------------------------- 1 | *.swp 2 | *.tar.gz 3 | docker/fe/fe/ 4 | docker/be/be/ 5 | docker/fs_brokers/apache_hdfs_broker/ 6 | -------------------------------------------------------------------------------- /palo-ns.yaml: -------------------------------------------------------------------------------- 1 | --- 2 | apiVersion: v1 3 | kind: Namespace 4 | metadata: 5 | name: ns-palo 6 | labels: 7 | app: palo 8 | --- 9 | -------------------------------------------------------------------------------- /docker/be/bin/docker-entrypoint.sh: -------------------------------------------------------------------------------- 1 | #!/bin/bash 2 | set -e 3 | 4 | # Files created by Palo should always be group writable too 5 | umask 0002 6 | 7 | run_as_other_user_if_needed() { 8 | if [[ "$(id -u)" == "0" ]]; then 9 | # If running as root, drop to specified UID and run command 10 | exec chroot --userspec=1000 / "${@}" 11 | else 12 | # Either we are running in Openshift with random uid and are a member of the root group 13 | # or with a custom --user 14 | exec "${@}" 15 | fi 16 | } 17 | 18 | run_as_other_user_if_needed /usr/share/palo/be/bin/start_be.sh 19 | -------------------------------------------------------------------------------- /docker/fe/bin/docker-entrypoint.sh: -------------------------------------------------------------------------------- 1 | #!/bin/bash 2 | set -e 3 | 4 | # Files created by Palo should always be group writable too 5 | umask 0002 6 | 7 | run_as_other_user_if_needed() { 8 | if [[ "$(id -u)" == "0" ]]; then 9 | # If running as root, drop to specified UID and run command 10 | exec chroot --userspec=1000 / "${@}" 11 | else 12 | # Either we are running in Openshift with random uid and are a member of the root group 13 | # or with a custom --user 14 | exec "${@}" 15 | fi 16 | } 17 | 18 | run_as_other_user_if_needed /usr/share/palo/fe/bin/start_fe.sh 19 | -------------------------------------------------------------------------------- /docker/be/Dockerfile: -------------------------------------------------------------------------------- 1 | FROM centos:7.6.1810 2 | 3 | LABEL maintainer="zhoufeng@hujiang.com" 4 | 5 | RUN rm -f /etc/localtime 6 | RUN ln -sf /usr/share/zoneinfo/Asia/Shanghai /etc/localtime 7 | RUN echo Asia/Shanghai > /etc/timezone 8 | 9 | ENV PALO_CONTAINER true 10 | 11 | RUN for iter in {1..10}; do yum update -y && \ 12 | yum install -y nc && \ 13 | yum clean all && exit_code=0 && break || exit_code=$? && echo "yum error: retry $iter in 10s" && sleep 10; done; \ 14 | (exit $exit_code) 15 | 16 | RUN groupadd -g 1000 palo && \ 17 | adduser -u 1000 -g 1000 -G 0 -d /usr/share/palo palo && \ 18 | chmod 0775 /usr/share/palo && \ 19 | chgrp 0 /usr/share/palo 20 | 21 | 22 | WORKDIR /usr/share/palo 23 | ADD be_v0.9.21.tar.gz /usr/share/palo 24 | COPY conf/be.conf be/conf/ 25 | RUN mkdir be/data 26 | RUN chown -R 1000:0 /usr/share/palo 27 | 28 | ENV PATH /usr/share/palo/be/bin:$PATH 29 | 30 | COPY --chown=1000:0 bin/docker-entrypoint.sh /usr/local/bin/docker-entrypoint.sh 31 | 32 | RUN chgrp 0 /usr/local/bin/docker-entrypoint.sh && \ 33 | chmod g=u /etc/passwd && \ 34 | chmod 0775 /usr/local/bin/docker-entrypoint.sh 35 | 36 | ENTRYPOINT ["/usr/local/bin/docker-entrypoint.sh"] 37 | -------------------------------------------------------------------------------- /README.md: -------------------------------------------------------------------------------- 1 | # palo-deploy-k8s 2 | 使用K8S部署Apache Doris (incubating)(原百度palo) 3 | 4 | ## 快速部署PALO集群 5 | 6 | 注:集群用到的所有二进制文件已打包好供下载 https://pan.baidu.com/s/11Hw7I6DnDj4GdftqzgUWRQ 7 | 8 | ```bash 9 | # 创建namespace 10 | kubectl apply -f palo-ns.yaml 11 | 12 | # 部署FE 13 | kubectl apply -f palo-fe.yaml 14 | 15 | # 部署BE 16 | kubectl apply -f palo-be.yaml 17 | ``` 18 | 19 | ## 配置PALO集群 20 | 21 | 通过mysql客户端连接FE控制台: 22 | 23 | ```bash 24 | # 配置BE 25 | mysql -h -P 29030 -uroot 26 | ``` 27 | 28 | 在FE控制台中配置palo集群: 29 | 30 | ```sql 31 | # 查看FE 32 | SHOW PROC '/frontends'; 33 | 34 | # 查看BE 35 | ALTER SYSTEM ADD BACKEND ":9050"; 36 | SHOW PROC '/backends'; 37 | ``` 38 | 39 | 通过浏览器访问Palo Web页面:http://:28030/ 40 | 41 | ## PALO镜像 42 | 43 | 有三种获取方式: 44 | 45 | 1. 下载镜像,载入本地 46 | 47 | ```bash 48 | docker load < image-palo-fe_.tar.gz 49 | docker load < image-palo-be_.tar.gz 50 | ``` 51 | 52 | 2. 下载编译好的压缩包,自己build镜像 53 | 54 | ```bash 55 | # FE 56 | cd palo-deploy-k8s/docker/fe/ 57 | wget fe_v0.9.21.tar.gz 58 | tar zxf fe_v0.9.21.tar.gz 59 | wget jdk-8u212-linux-x64.tar.gz 60 | docker build -t palo-fe: . 61 | 62 | # BE 63 | cd palo-deploy-k8s/docker/be/ 64 | wget be_v0.9.21.tar.gz 65 | tar zxf be_v0.9.21.tar.gz 66 | docker build -t palo-be: . 67 | ``` 68 | 69 | 3. 自己编译PALO、打镜像,编译过程略。 70 | -------------------------------------------------------------------------------- /docker/be/conf/be.conf: -------------------------------------------------------------------------------- 1 | # INFO, WARNING, ERROR, FATAL 2 | sys_log_level = INFO 3 | 4 | # ports for admin, web, heartbeat service 5 | be_port = 9060 6 | be_rpc_port = 9070 7 | webserver_port = 8040 8 | heartbeat_service_port = 9050 9 | brpc_port = 8060 10 | 11 | # Choose one if there are more than one ip except loopback address. 12 | # Note that there should at most one ip match this list. 13 | # If no ip match this rule, will choose one randomly. 14 | # use CIDR format, e.g. 10.10.10.0/24 15 | # Default value is empty. 16 | # priority_networks = 10.10.10.0/24;192.168.0.0/16 17 | 18 | # data root path, separate by ';' 19 | # you can specify the storage medium of each root path, HDD or SSD 20 | # you can add capacity limit at the end of each root path, seperate by ',' 21 | # eg: 22 | # storage_root_path = /home/disk1/palo.HDD,50;/home/disk2/palo.SSD,1;/home/disk2/palo 23 | # /home/disk1/palo.HDD, capacity limit is 50GB, HDD; 24 | # /home/disk2/palo.SSD, capacity limit is 1GB, SSD; 25 | # /home/disk2/palo, capacity limit is disk capacity, HDD(default) 26 | storage_root_path = /usr/share/palo/be/data 27 | 28 | # Advanced configurations 29 | # sys_log_dir = ${DORIS_HOME}/log 30 | # sys_log_roll_mode = SIZE-MB-1024 31 | # sys_log_roll_num = 10 32 | # sys_log_verbose_modules = 33 | # log_buffer_level = -1 34 | # palo_cgroups 35 | -------------------------------------------------------------------------------- /docker/fe/Dockerfile: -------------------------------------------------------------------------------- 1 | FROM centos:7.6.1810 2 | 3 | LABEL maintainer="zhoufeng@hujiang.com" 4 | 5 | RUN rm -f /etc/localtime 6 | RUN ln -sf /usr/share/zoneinfo/Asia/Shanghai /etc/localtime 7 | RUN echo Asia/Shanghai > /etc/timezone 8 | 9 | ENV PALO_CONTAINER true 10 | 11 | RUN for iter in {1..10}; do yum update -y && \ 12 | yum install -y nc && \ 13 | yum clean all && exit_code=0 && break || exit_code=$? && echo "yum error: retry $iter in 10s" && sleep 10; done; \ 14 | (exit $exit_code) 15 | 16 | ADD jdk-8u212-linux-x64.tar.gz /usr/java 17 | RUN ln -s /usr/java/jdk1.8.0_212/ /usr/java/jdk 18 | ENV JAVA_HOME /usr/java/jdk 19 | ENV CLASSPATH $JAVA_HOME/lib/dt.jar:$JAVA_HOME/lib/tools.jar 20 | ENV PATH $PATH:$JAVA_HOME/bin 21 | 22 | RUN groupadd -g 1000 palo && \ 23 | adduser -u 1000 -g 1000 -G 0 -d /usr/share/palo palo && \ 24 | chmod 0775 /usr/share/palo && \ 25 | chgrp 0 /usr/share/palo 26 | 27 | WORKDIR /usr/share/palo 28 | ADD fe_v0.9.21.tar.gz /usr/share/palo 29 | COPY conf/fe.conf fe/conf/ 30 | RUN mkdir fe/palo-meta 31 | RUN chown -R 1000:0 /usr/share/palo 32 | 33 | ENV PATH /usr/share/palo/fe/bin:$PATH 34 | 35 | COPY --chown=1000:0 bin/docker-entrypoint.sh /usr/local/bin/docker-entrypoint.sh 36 | 37 | RUN chgrp 0 /usr/local/bin/docker-entrypoint.sh && \ 38 | chmod g=u /etc/passwd && \ 39 | chmod 0775 /usr/local/bin/docker-entrypoint.sh 40 | 41 | ENTRYPOINT ["/usr/local/bin/docker-entrypoint.sh"] 42 | -------------------------------------------------------------------------------- /docker/fe/conf/fe.conf: -------------------------------------------------------------------------------- 1 | ##################################################################### 2 | ## The uppercase properties are read and exported by bin/start_fe.sh. 3 | ## To see all Frontend configurations, 4 | ## see fe/src/com/baidu/palo/common/Config.java 5 | ##################################################################### 6 | 7 | # the output dir of stderr and stdout 8 | LOG_DIR = ${DORIS_HOME}/log 9 | 10 | DATE = `date +%Y%m%d-%H%M%S` 11 | JAVA_OPTS="-Xmx2G -XX:+UseMembar -XX:SurvivorRatio=8 -XX:MaxTenuringThreshold=7 -XX:+PrintGCDateStamps -XX:+PrintGCDetails -XX:+UseConcMarkSweepGC -XX:+UseParNewGC -XX:+UseCMSCompactAtFullCollection -XX:CMSFullGCsBeforeCompaction=0 -XX:+CMSClassUnloadingEnabled -XX:-CMSParallelRemarkEnabled -XX:CMSInitiatingOccupancyFraction=80 -XX:SoftRefLRUPolicyMSPerMB=0 -Xloggc:$DORIS_HOME/log/fe.gc.log.$DATE" 12 | 13 | ## 14 | ## the lowercase properties are read by main program. 15 | ## 16 | 17 | # INFO, WARNING, ERROR, FATAL 18 | sys_log_level = INFO 19 | 20 | # store metadata, create it if it is not exist. 21 | meta_dir = ${DORIS_HOME}/palo-meta 22 | 23 | http_port = 8030 24 | rpc_port = 9020 25 | query_port = 9030 26 | edit_log_port = 9010 27 | 28 | # Choose one if there are more than one ip except loopback address. 29 | # Note that there should at most one ip match this list. 30 | # If no ip match this rule, will choose one randomly. 31 | # use CIDR format, e.g. 10.10.10.0/24 32 | # Default value is empty. 33 | # priority_networks = 10.10.10.0/24;192.168.0.0/16 34 | 35 | # Advanced configurations 36 | # sys_log_dir = ${DORIS_HOME}/log 37 | # sys_log_roll_mode = SIZE-MB-1024 38 | # sys_log_roll_num = 10 39 | # sys_log_verbose_modules = 40 | # audit_log_dir = 41 | # audit_log_modules = slow_query, query 42 | # audit_log_roll_mode = TIME-DAY 43 | # audit_log_roll_num = 10 44 | # meta_delay_toleration_second = 10 45 | # qe_max_connection = 1024 46 | # max_conn_per_user = 100 47 | # qe_query_timeout_second = 300 48 | # qe_slow_log_ms = 5000 49 | JAVA_HOME = /usr/java/jdk 50 | -------------------------------------------------------------------------------- /palo-be.yaml: -------------------------------------------------------------------------------- 1 | --- 2 | kind: Service 3 | apiVersion: v1 4 | metadata: 5 | name: palo-be-service 6 | namespace: ns-palo 7 | labels: 8 | app: palo-be 9 | spec: 10 | ports: 11 | - port: 9060 12 | name: be-port 13 | - port: 9070 14 | name: be-rpc-port 15 | - port: 8040 16 | name: webserver-port 17 | - port: 9050 18 | name: heartbeat-service-port 19 | - port: 8060 20 | name: brpc-port 21 | selector: 22 | app: palo-be 23 | --- 24 | kind: PersistentVolume 25 | apiVersion: v1 26 | metadata: 27 | name: pv-volume-palo-be 28 | namespace: ns-palo 29 | labels: 30 | type: local 31 | spec: 32 | storageClassName: manual 33 | capacity: 34 | storage: 100Gi 35 | accessModes: 36 | - ReadWriteOnce 37 | hostPath: 38 | path: "/data3/palo-be" 39 | --- 40 | kind: PersistentVolumeClaim 41 | apiVersion: v1 42 | metadata: 43 | name: pv-claim-palo-be 44 | namespace: ns-palo 45 | spec: 46 | storageClassName: manual 47 | accessModes: 48 | - ReadWriteOnce 49 | resources: 50 | requests: 51 | storage: 3Gi 52 | --- 53 | kind: StatefulSet 54 | apiVersion: apps/v1 55 | metadata: 56 | name: palo-be 57 | namespace: ns-palo 58 | labels: 59 | app: palo-be 60 | spec: 61 | replicas: 3 62 | selector: 63 | matchLabels: 64 | app: palo-be 65 | serviceName: palo-be-service 66 | template: 67 | metadata: 68 | labels: 69 | app: palo-be 70 | spec: 71 | volumes: 72 | - name: pv-storage-palo-be 73 | persistentVolumeClaim: 74 | claimName: pv-claim-palo-be 75 | containers: 76 | - name: palo-be 77 | image: palo-be:v0.9.21-3 78 | command: ["bash", "-c", "chown -R palo:palo /usr/share/palo/be && exec su palo docker-entrypoint.sh"] 79 | ports: 80 | - containerPort: 9060 81 | protocol: TCP 82 | - containerPort: 9070 83 | protocol: TCP 84 | - containerPort: 8040 85 | protocol: TCP 86 | - containerPort: 9050 87 | protocol: TCP 88 | - containerPort: 8060 89 | protocol: TCP 90 | volumeMounts: 91 | - mountPath: /usr/share/palo/be/data 92 | name: pv-storage-palo-be 93 | --- 94 | kind: Service 95 | apiVersion: v1 96 | metadata: 97 | labels: 98 | app: palo-be 99 | name: palo-be-web-service 100 | namespace: ns-palo 101 | spec: 102 | type: NodePort 103 | ports: 104 | - port: 8040 105 | targetPort: 8040 106 | nodePort: 28040 107 | selector: 108 | app: palo-be 109 | -------------------------------------------------------------------------------- /palo-fe.yaml: -------------------------------------------------------------------------------- 1 | --- 2 | kind: Service 3 | apiVersion: v1 4 | metadata: 5 | name: palo-fe-service 6 | namespace: ns-palo 7 | labels: 8 | app: palo-fe 9 | spec: 10 | ports: 11 | - port: 8030 12 | name: http-port 13 | - port: 9020 14 | name: rpc-port 15 | - port: 9030 16 | name: query-port 17 | - port: 9010 18 | name: edit-log-port 19 | selector: 20 | app: palo-fe 21 | --- 22 | kind: PersistentVolume 23 | apiVersion: v1 24 | metadata: 25 | name: pv-volume-palo-fe 26 | namespace: ns-palo 27 | labels: 28 | type: local 29 | spec: 30 | storageClassName: manual 31 | capacity: 32 | storage: 100Gi 33 | accessModes: 34 | - ReadWriteOnce 35 | hostPath: 36 | path: "/data3/palo-fe" 37 | --- 38 | kind: PersistentVolumeClaim 39 | apiVersion: v1 40 | metadata: 41 | name: pv-claim-palo-fe 42 | namespace: ns-palo 43 | spec: 44 | storageClassName: manual 45 | accessModes: 46 | - ReadWriteOnce 47 | resources: 48 | requests: 49 | storage: 3Gi 50 | --- 51 | kind: StatefulSet 52 | apiVersion: apps/v1 53 | metadata: 54 | name: palo-fe 55 | namespace: ns-palo 56 | labels: 57 | app: palo-fe 58 | spec: 59 | replicas: 1 60 | selector: 61 | matchLabels: 62 | app: palo-fe 63 | serviceName: palo-fe-service 64 | template: 65 | metadata: 66 | labels: 67 | app: palo-fe 68 | spec: 69 | volumes: 70 | - name: pv-storage-palo-fe 71 | persistentVolumeClaim: 72 | claimName: pv-claim-palo-fe 73 | containers: 74 | - name: palo-fe 75 | image: palo-fe:v0.9.21-3.4 76 | command: ["bash", "-c", "exec docker-entrypoint.sh"] 77 | ports: 78 | - containerPort: 8030 79 | protocol: TCP 80 | - containerPort: 9020 81 | protocol: TCP 82 | - containerPort: 9030 83 | protocol: TCP 84 | - containerPort: 9010 85 | protocol: TCP 86 | volumeMounts: 87 | - mountPath: /usr/share/palo/fe/palo-meta 88 | name: pv-storage-palo-fe 89 | --- 90 | kind: Service 91 | apiVersion: v1 92 | metadata: 93 | labels: 94 | app: palo-fe 95 | name: palo-fe-web-service 96 | namespace: ns-palo 97 | spec: 98 | type: NodePort 99 | ports: 100 | - port: 8030 101 | targetPort: 8030 102 | nodePort: 28030 103 | selector: 104 | app: palo-fe 105 | --- 106 | kind: Service 107 | apiVersion: v1 108 | metadata: 109 | labels: 110 | app: palo-fe 111 | name: palo-fe-query-service 112 | namespace: ns-palo 113 | spec: 114 | type: NodePort 115 | ports: 116 | - port: 9030 117 | targetPort: 9030 118 | nodePort: 29030 119 | selector: 120 | app: palo-fe 121 | --------------------------------------------------------------------------------