#配置操做系統html
1.配置/etc/hostsnode
2.關閉防火牆和 SElinuxpython
3.配置網絡linux
4.配置yum git
5.配置用戶和相關目錄github
for ip in `tail -4 /etc/hosts | awk '{print $1}'`;sql
doapi
ssh ${ip} "useradd postgres;mkdir -p /data/;chown postgres.postgres -R /data;echo postgres | passwd --stdin postgres";bash
done服務器
for ip in `tail -4 /etc/hosts | awk '{print $1}'`;
do
ssh ${ip} "mkdir pack";
done
6.配置互信
#部署PostgreSQL
for ip in `tail -4 /etc/hosts | awk '{print $1}'`;
do
ssh ${ip} "yum install -y \
icu.x86_64 \
libicu-devel.x86_64 \
perl-ExtUtils-Embed.noarch \
readline-devel.x86_64 \
zlib-devel.x86_64 \
globus-gssapi-gsi.x86_64 \
globus-gssapi-gsi-devel.x86_64 \
pam-devel.x86_64 \
libxml++-devel.x86_64 \
libxslt-devel.x86_64 \
openldap-devel.x86_64 \
systemd-devel.x86_64 \
tcl-devel.x86_64 \
python-devel \
flex-devel.x86_64 flex.x86_64
";
done
for ip in `tail -4 /etc/hosts | awk '{print $1}'`;
do
ssh ${ip} "cd /home/postgres/pack/postgresql-12.4;./configure \
--prefix=/data/pg12 \
--bindir=/data/pg12/bin \
--sysconfdir=/data/pg12/etc \
--libdir=/data/pg12/lib \
--includedir=/data/pg12/include \
--datarootdir=/data/pg12/share \
--datadir=/data/pg12/share \
--localedir=/data/pg12/share/locale \
--mandir=/data/pg12/share/man \
--docdir=/data/pg12/share/doc/postgresql \
--htmldir=/data/pg12/share/html \
--enable-nls='zh_CN' \
--with-pgport=10001 \
--with-perl \
--with-python \
--with-tcl \
--with-gssapi
--with-icu \
--with-openssl \
--with-pam \
--with-ldap \
--with-systemd \
--with-readline \
--with-libxml \
--with-libxslt \
--with-zlib \
--with-segsize=1 \
--with-blocksize=8 \
--with-wal-blocksize=8";
done
#配置 PostgreSQL 環境變量
for ip in `tail -8 /etc/hosts | awk '{print $1}'`;
do
ssh ${ip} "cat > /data/pg12/postgresql.env<<EOF
export PGHOME=/data/pg12
export PGDATA=\${PGHOME}/pgdata
export PGDATABASE=postgres
export PGUSER=postgres
export PGPORT=10001
export PATH=\${PGHOME}/bin:/usr/bin:/usr/sbin:/bin:/sbin:/usr/local/bin:/usr/local/sbin:\$PATH
export LD_LIBRARY_PATH=\${PGHOME}/lib:/usr/lib:/usr/lib64:/lib:/lib64:/usr/local/lib:/usr/local/lib64:\$LD_LIBRARY_PATH
export MANPATH=\${PGHOME}/share/man:\$MANPATH
EOF"
ssh ${ip} "echo ". /data/pg12/postgresql.env" >> /home/postgres/.bashrc";
done
#啓用監聽和pg_hba.conf
#部署Citus
上傳 citus 包
https://github.com/citusdata/citus
解壓
安裝依賴
yum install -y libcurl-devel
#執行 ./autogen.sh
#執行./configure
#編譯安裝 make -j24 && make install
#啓動 PostgreSQL 服務器
pg_ctl start -D $PGDATA -l /tmp/logfile
#給每一個數據都須要建立擴展
#能夠給 template1 建立擴展便可
psql -U postgres -d template1 -c "create extension citus"
#添加 dn 節點
SELECT master_add_node('pgcmdn02',10001);
SELECT master_add_node('pgcmdn03',10001);
SELECT master_add_node('pgcmdn04',10001);
#查看節點添加是否成功
postgres=# SELECT * FROM master_get_active_worker_nodes();
node_name | node_port
-----------+-----------
pgcmdn03 | 10001
pgcmdn02 | 10001
pgcmdn04 | 10001
#citus 分佈表分兩步走
1.建立符合 PostgreSQL 規則的普通表
2.對須要分佈的表進行函數分佈鍵進行分發
CREATE TABLE tab_dist(
id integer primary key,
name varchar not null,
age integer,
carrer varchar,
create_time timestamp default now() not null
);
postgres=# SELECT * FROM create_distributed_table('tab_dist','id');
create_distributed_table
--------------------------
(1 row)
#數據分佈的列
SELECT a.*,b.*
FROM pg_dist_placement AS a,
pg_dist_node b
WHERE a.groupid = b.groupid
AND b.noderole = 'primary'
AND a.sharedid = (
SELECT get_shard_id_for_distribution_column('tab_dist','id'));