暂无图片
暂无图片
暂无图片
暂无图片
暂无图片

PolarDB-O数据库安装指南

北漂矿工 2020-11-11
6293

安装环境配置



1.1 系统和规划

系统类型

内核

角色

IP

CentOS Linux  release 7.7.1908 (Core)

3.10.0-1062.el7.x86_64

主库

192.168.199.31

192.168.199.103(VIP)

CentOS Linux  release 7.7.1908 (Core)

3.10.0-1062.el7.x86_64

备库

192.168.199.32

CentOS Linux  release 7.7.1908 (Core)

3.10.0-1062.el7.x86_64

Cluster Manager

192.168.199.101

1.2 安装介质准备

t-polarstore-pfsd-san-1.1.41-20200909132342.alios7.x86_64.rpm

PolarDB-O-0200-2.0.0-20200914083756.alios7.x86_64.rpm 

polardb-clustermanager-1.0.0-20200904155748.x86_64.rpm

1.3 存储空间

在主备库挂载一块磁盘作为polardbPFS存储空间。

本次安装使用磁盘名称为:/dev/sdb  大小20G

1.4 大页配置

配置系统的大页(HugePage)内存,确保透明大页关闭,确保Hugepagesize=2048 kB:

cat/sys/kernel/mm/transparent_hugepage/enabled

never

cat proc/meminfo

Hugepagesize:2048 kB

1.5 配置/etc/sysctl.conf

# vi etc/sysctl.conf      

vm.dirty_expire_centisecs=3000

net.ipv4.tcp_synack_retries=2

net.core.rmem_default=262144

vm.dirty_background_bytes=409600000

net.core.wmem_default=262144

kernel.shmall=107374182

vm.mmap_min_addr=65536

vm.overcommit_ratio=90

kernel.shmmni=819200

net.core.rmem_max=4194304

vm.dirty_writeback_centisecs=100

fs.file-max=76724600

net.core.somaxconn=4096

fs.aio-max-nr=1048576

net.ipv4.tcp_max_tw_buckets=262144

vm.swappiness=0

fs.nr_open=20480000

net.ipv4.tcp_fin_timeout=5

net.ipv4.ip_local_port_range=40000 65535

net.ipv4.tcp_keepalive_probes=3

net.ipv4.tcp_mem=8388608 12582912 16777216

kernel.shmmax=274877906944

kernel.sem=4096 2147483647 2147483646 512000

net.ipv4.tcp_keepalive_intvl=20

net.ipv4.tcp_keepalive_time=60

vm.overcommit_memory=0

net.ipv4.tcp_syncookies=1

net.ipv4.tcp_max_syn_backlog=4096

net.ipv4.tcp_timestamps=1

net.ipv4.tcp_rmem=8192 87380 16777216

net.ipv4.tcp_wmem=8192 65536 16777216

net.core.wmem_max=4194304

vm.dirty_ratio=80

net.core.netdev_max_backlog=10000

vm.zone_reclaim_mode=0

net.ipv4.tcp_tw_reuse=1

vm.nr_hugepages=0

vm.nr_overcommit_hugepages=1000000 

执行 sysctl -p使配置生效

1.6 配置limits参数

 创建/etc/security/limits.d/polardb_limits.conf ,内容如下:

* soft nofile 655360

* hard nofile 655360

* soft nproc 655360

* hard nproc 655360

* soft memlock unlimited

* hard memlock unlimited

* soft core unlimited

* hard core unlimited

 

1.7 系统组和用户创建

 PolarDB-O 要求polaruser用户(polaruser即非root 权限的用户)初始化数据库集群。创建polardb 用户组和polardb 用户的操作如下:

groupadd  polardb

useradd -g polardb polardb

若要以polardb这个用户执行下面的文件系统初始化步骤,需要给这个用户赋予sudo权限,

使用visudo命令,在sudo文件中,加入下行:

polardb ALL=(ALL) ALL

1.8 环境变量配置

export  PGPORT=5432  #PolarDB  将要占用的端口

export  PGDATA=/polardb #数据库的本地盘目录

export.utf8

export  PGHOME=/usr/local/polardb_o_current  #polardb-o软件安装目录

export  PFSHOME=/usr/local/polarstore/pfsd  #PFS安装目录

export  PFSDISK=sdb  #所使用的PFS磁盘名称,例如/dev/sdb,这里填写sdb即可

export  PFSDIR=/sdb/poldata   #所使用的PFS目录

export  LD_LIBRARY_PATH=$PGHOME/lib:$LD_LIBRARY_PATH

export  PATH=$PGHOME/bin:$PFSHOME/bin/:$PATH

export  PGHOST=$PGDATA

export  PGUSER=polardb

export  PGDATABASE=polardb

source .bash_profile


 单节点部署安装



2.1 安装PolarDB-O数据库

 sudo rpm -ivh  PolarDB-O-0200-2.0.0-20200914083756.alios7.x86_64.rpm 

2.2 安装PFS文件系统

sudo rpm -ivh  t-polarstore-pfsd-san-1.1.41-20200909132342.alios7.x86_64.rpm

2.3 PFS初始化配置

配置安装PFS时需要占用名称为$PFSDISK的设备。在安装过程中过程中会格式化该设备,如果/dev/$PFSDISK已经挂载过了,要umount该设备。本次安装为新添加的/dev/sdb盘。依次执行以下命令初始化

 

1. polardb用户登录,执行以下命令,格式化$PFSDISK设备。

sudo usr/local/bin/pfs -C disk mkfs -u 30 -l 1073741824 -f $PFSDISK

2. 等待一段时间,回显输出 pfs mkfs succeeds!  后,执行以下命令,启动PFS服务。

sudo /usr/local/polarstore/pfsd/bin/start_pfsd.sh -p $PFSDISK

3. 执行以下命令,创建PFS的数据库目录。

sudo /usr/local/bin/pfs -C disk mkdir $PFSDIR

 

:在创建完PFS数据库目录,进行后续操作时有可能会提示找不到$PFSDIR,此时需要重启PFS服务。

sudo /usr/local/polarstore/pfsd/bin/stop_pfsd.sh

sudo /usr/local/polarstore/pfsd/bin/start_pfsd.sh -p $PFSDISK

2.4 PolarDB-O初始化配置

su - polardb

initdb -D $PGDATA -E UTF8 --locale=C -U polardb

-E 参数指定数据库字符集,--locale 指定本地化参数,-U 指定初始化用户,其他的参数可以执行initdb --help 命令查看。

2.5 初始化PFS数据

sudo /usr/local/polardb_o_current/bin/polar-initdb.sh $PGDATA/$PFSDIR/ disk

该步骤会将$PGDATApolardb的一些初始化数据文件copy$PFSDIR文件系统中保存

2.6 修改PolarDB-O配置文件

初始化数据库集群后,数据库的参数文件 postgresql.conf 文件中都是默认参数,用户可以根据自身需要进行修改,常用修改的参数如下:

listen_addresses  = '*' # 监听所有连接

port  = 5432 # 监听端口  (后文成为$port)

max_connections  = 2048 # 最大连接数

unix_socket_directories  = '.' # socket文件地址目录

timezone  = 'UTC-8' # 时区

log_timezone  = 'UTC-8' # 日志时区

log_destination  = 'csvlog' # 日志文件格式

logging_collector  = on

log_directory  = 'polardb_log' # 日志存放目录

polar_enable_shared_storage_mode=on

polar_hostid=1

polar_datadir='  /sdb/poldata/' # PFS目录

polar_disk_name='sdb'  # PFS设备名称

polar_storage_cluster_name=disk  # PFS设备类型

wal_sender_timeout=30min  #初始化备库过程中拉取wal日志进程超时设置

若修改postgresql.conf文件之前启动过数据库,确认$PGDATA/polar_node_static.conf是否存在,若存在则删除后再启动数据库。以后每次修改postgresql.con文件中的polar_datadirpolar_disk_namepolar_hostid参数时,均需要删除$PGDATA/polar_node_static.conf文件再重启数据库确保修改后的参数生效。

2.7 修改pg_hba.conf访问控制文件

为了实现其他机器对PolarDB for O 数据库的访问,还需要修改访问控制文件,即

pg_hba.conf,一般是放开所有的ipv4 的访问,尾部添加如下配置:

vi $PGDATA/pg_hba.conf

host all all 0.0.0.0/0 md5

host replication all 0.0.0.0/0 md5

2.8 数据库启动和停止

pg_ctl start -D $PGDATA -l logfile

tail -f logfile  查看数据库启动日志

pg_ctl stop -D $PGDATA

2.9 进程检查

PolarDB-O 数据库启动成功之后,会在数据库目录下生成一个postmaster.pid,其中第一行是PolarDB forO 守护进程pid,用户可以通过ps -a|grep 守护进程pid 可以得到所有的PolarDB-O 进程,其中有如下几类

常见辅助进程。

/usr/local/polardb_o_current/bin/polar-postgres-D data  PolarDB for O 的守护进程。

postgres: logger                                PolarDB-O 的打印日志进程。

postgres: checkpointer                  PolarDB-O 的周期性检查点进程。

postgres: background writer       PolarDB-O 的周期性刷脏进程。

postgres: walwriter                         PolarDB-O 的定期WAL 日志刷盘进程。

postgres: autovacuum launcher  PolarDB-O 的自动清理调度进程。

postgres: stats collector                  PolarDB-O 的统计信息收集进程。

2.10 连接测试

psql -h$PGDATA -p$PGPORT

psql -h$PGDATA -p$PGPORT -c"selectversion()"   版本查看


 主备高可用部署安装


3.1 初始化主节点

见第二章单节点部署安装过程。

3.2 主节点创建复制用户

psql -h$PGDATA -p$PGPORT -c"create user replicator password'<replicat密码>' superuser;"

3.3 主节点创建流复制slot

psql -h$PGDATA -p$PGPORT -c"selectpg_create_physical_replication_slot('standby1');"

3.4 初始化备节点

3.4.1 安装过程

参照第一章及第二章2.1-2.3

3.4.2 初始化备库目录

polar_basebackup -h 192.168.199.31 -p 5432 -U replicator -D $PGDATA--polardata=$PFSDIR --polar_storage_cluster_name=disk--polar_disk_name=$PFSDISK --polar_host_id=2 -X stream --progress--write-recovery-conf -v

命令中各项参数解释如下:

-h  :主库ip地址。

-p  :主库polardb的端口号。

-U  :连接用户,这里使用上文创建的replicator

-D  备库的数据目录。

--polardata  pfsdata目录路径。

--polar_storage_cluster_name  polardb data目录的storage cluster name

--polar_disk_name  polardb data目录的disk home

--polar_host_id  可以任意取值,但需保证不能与主库的值相同。

-X  :拉取wal日志的方式。

--write-recovery-conf  :写recovery.conf文件。

-v  :显示详细过程。

在复制过程中报错或超时,请修改主库postgresql.conf  中的参数wal_sender_timeout

3.4.3 修改postgresql.conf配置文件

vi postgresql.conf

将原polar_hostid = 1改为polar_hostid = 2

3.4.4 修改recovery.conf配置文件

recovery.conf结尾处添加以下内容

recovery_target_timeline ='latest'

primary_slot_name ='standby1'

3.5 启动和连接测试

pg_ctl -c start -D $PGDATA -l logfile

psql -h$PGDATA -p$PGPORT

3.6 检查主库流复制状态

在主库执行以下命令确认流复制建立成功:

psql -h$PGDATA -p$PGPORT -c"select * frompg_stat_replication;"

3.7 Cluster Manager部署

3.7.1 SSH配置

CM节点root用户执行以下命令:

ssh-keygen -t rsa

ssh-copy-id -i ~/.ssh/id_rsa.pub root@<备节点IP>

ssh-copy-id -i ~/.ssh/id_rsa.pub root@<主节点IP>

3.7.2 禁用防火墙

systemctl disable firewalld.service

systemctl stop firewalld.service

3.7.3 端口说明

PolarDB5432/tcp

Cluster Manager5500,5501/tcp

3.7.4 RPM包安装

rpm -ivh polardb-clustermanager-1.0.0-20200904155748.x86_64.rpm

安装后会有三个文件,如下所示:

#/usr/local/polardb_cluster_manager/bin/polardb-cluster-manager

#/usr/local/polardb_cluster_manager/bin/polardb_cluster_manager_control.py

#/usr/local/polardb_cluster_manager/bin/supervisor.py

3.7.5 配置服务

1,在主库主机上创建aurora探测用户

/usr/local/polardb_o_current/bin/createuser -p $PGPORT -h $PGDATA–login aurora -P -s

2,CM主机上创建配置文件,如下所示:

mkdir-p /root/polardb_cluster_manager/conf

vi /root/polardb_cluster_manager/conf/polardb_cluster_manager.conf

{

"work_mode":"PolarPure",

"consensus":{ "port":5001 },

"account_info":{"aurora_user":"aurora",

                                  "aurora_password":" aurora ",

                                 "replica_user":"replicator",

                                 "replica_password":"replicator"},

"cluster_info":{ "port":5000 }

}

consensus是内置一致性服务端口,不对外服务。

cluster_infocm对外接口的服务端口。

aurora_user是刚创建的探测用户的账号、密码,权限为superuser

replica_user是刚创建的复制用户的账号密码,权限可以为replicationsuperuser

3.7.6 服务管理

1)查询服务

/usr/local/polardb_cluster_manager/bin/polardb_cluster_manager_control.py/root/polardb_cluster_manager/ status

输出结果为:

PolarDB ClusterManager Work ON/root/polardb_cluster_manager/ IS NOT RUNNING

2)启动服务

/usr/local/polardb_cluster_manager/bin/polardb_cluster_manager_control.py/root/polardb_cluster_manager/  start

3)停止服务

/usr/local/polardb_cluster_manager/bin/polardb_cluster_manager_control.py/root/polardb_cluster_manager/  stop

3.8 集群管理

3.8.1 CM节点上配置主库

[root@node1 ~]# curl -H "Content-Type:application/json"-X POST --data"{\"user\":\"polardb\",\"dataPath\":\"/polardb\",\"ip\":\"192.168.199.31\",\"port\":\"5432\",\"type\":\"Master\",\"storage_type\":\"local_ssd\",\"sync\":\"SYNC\"}"http://127.0.0.1:5000/v1/add_ins

{"code":200}

返回结果200为正常,500为错误。

user:部署数据库的账号,一般为postgres

dataPath:部署数据库的数据目录。即$PGDATA

ip/port: 数据库的物理IP地址及端口。

type: 数据库角色,Master为主库。

sync: SYNC表示同步复制,采用异步复制切换可能会丢数据

3.8.2 CM节点上配置备库

[root@node1 ~]#curl -H"Content-Type:application/json" -X POST --data "{\"user\":\"polardb\",\"dataPath\":\"/polardb\",\"ip\":\"192.168.199.32\",\"port\":\"5432\",\"type\":\"Standby\",\"storage_type\":\"local_ssd\",\"sync\":\"SYNC\"}

" http://127.0.0.1:5000/v1/add_ins

{"code":200}

返回结果200为正常,500为错误。

type: Standby表示备库。首次添加备库时会重启备库

3.8.3 CM节点上配置VIP

高可用方式下,对外提供数据库服务器的主机除了有一个真实IP外还有一个虚拟IP,使用这两个IP都可以连接到该主机,所有项目中数据库链接配置的都是到虚拟IP,当服务器发生故障无法对外提供服务时,动态将这个虚IP切换到备用主机。

 

[root@node1 ~]#curl -H"Content-Type:application/json" -X POST --data"{\"vip\":\"192.168.199.103\",\"mask\":\"255.255.255.0\",\"interface\":\"enp0s3\"}" http://127.0.0.1:5000/v1/add_vip

{"code":200}

返回结果200为正常,500为错误。

vip:虚拟IP地址,通过LinuxVirtual IP实现,因此需要和主备库在同一交换机下的网段,且不冲突。也不能与其他物理地址冲突

mask: vip的网关掩码。

interface: 主备库的物理IP所在的网卡。

3.8.4 集群状态查询

[root@node1 ~]#

curl -H "Content-Type:application/json" http://127.0.0.1:5000/v1/status?type=visual

{

         "phase":  "RunningPhase",

         "master": {

                   "endpoint":  "192.168.199.31:5432",

                   "data_path":  "/ polardb ",

                   "user":  "polardb",

                   "phase":  "RUNNING",

                   "start_at":  "2020-10-22 09:22:45"

         },

         "standby": [

                   {

                            "endpoint":  "192.168.199.32:5432",

                            "data_path":  "/polardb",

                            "user":  "polardb",

                            "phase":  "RUNNING",

                            "start_at":  "2020-10-22 09:22:46",

                            "sync_status":  "SYNC"

                   }

         ],

         "vip": [

                   {

                            "vip":  "192.168.199.103",

                            "interface":  "enp0s3",

                            "mask":  "255.255.255.0",

                            "endpoint":  "192.168.199.31:5432"

                   }

         ]

}

状态为running表示正常。

主库查询同步状态:

select * from pg_stat_replication;

3.8.5 主备切换

3.8.5.1 手动切换

[root@node1~]#curl -H "Content-Type:application/json" -XPOST --data"{\"from\":\"192.168.199.31:5432\",\"to\":\"192.168.199.32:5432\"}"http://127.0.0.1:5000/v1/switchover

{"code":200}

执行如下命令,验证主库是否手动切换成功。

curl -H "Content-Type:application/json" http://127.0.0.1:5000/v1/status?type=visual

{

         "phase":  "RunningPhase",

         "master": {

                   "endpoint":  "192.168.199.32:5432",

                   "data_path":  "/polardb",

                   "user":  "polardb",

                   "phase":  "RUNNING",

                   "start_at":  "2020-10-23 09:23:38",

                   "sync_status":  "SYNC"

         },

         "standby": [

                   {

                            "endpoint":  "192.168.199.31:5432",

                            "data_path":  "/polardb",

                            "user":  "polardb",

                            "phase":  "RUNNING",

                            "start_at":  "2020-10-23 09:23:43",

                            "sync_status":  "SYNC"

                   }

         ],

         "vip": [

                   {

                            "vip": "192.168.199.103",

                            "interface":  "enp0s3",

                            "mask":  "255.255.255.0",

                            "endpoint":  "192.168.199.32:5432"

                   }

         ]

}

 3.8.5.2     自动切换

1 停止主库

/usr/local/polardb_o_current/bin/pg_ctlstop -D /polardb –mi

2 查看切换状态

curl-H "Content-Type:application/json"http://127.0.0.1:5000/v1/status?type=visual

自动切换中:

{

         "phase":  "SwitchingPhase",

         "master":  {

                   "endpoint":  "192.168.199.32:5432",

                   "data_path":  "/polardb",

                   "user":  "polardb",

                   "phase":  "RUNNING",

                   "start_at":  "2020-10-23 09:23:38",

                   "sync_status":  "SYNC"

         },

         "standby":  [

                   {

                            "endpoint":  "192.168.199.31:5432",

                            "data_path":  "/polardb",

                            "user":  "polardb",

                            "phase":  "RUNNING",

                            "start_at":  "2020-10-23 09:23:43",

                            "sync_status":  "SYNC"

                   }

         ],

         "vip":  [

                   {

                            "vip":  "192.168.199.103",

                            "interface":  "enp0s3",

                            "mask":  "255.255.255.0",

                            "endpoint":  "192.168.199.32:5432"

                   }

         ]

}

自动切换

{

         "phase":  "RunningPhase",

         "master":  {

                   "endpoint":  "192.168.199.31:5432",

                   "data_path":  "/polardb",

                   "user":  "polardb",

                   "phase":  "RUNNING",

                   "start_at":  "2020-10-23 09:32:35",

                   "sync_status":  "SYNC"

         },

         "standby":  [

                   {

                            "endpoint":  "192.168.199.32:5432",

                            "data_path":  "/polardb",

                            "user":  "polardb",

                            "phase":  "RUNNING",

                            "start_at":  "2020-10-23 09:32:40",

                            "sync_status":  "SYNC"

                   }

         ],

         "vip":  [

                   {

                            "vip":  "192.168.199.103",

                            "interface":  "enp0s3",

                            "mask":  "255.255.255.0",

                            "endpoint":  "192.168.199.31:5432"

                   }

         ]

}

3 验证vip自动切换

psql-h 192.168.199.103 -p 5432 -Ureplicator -d/polardb -c "selectpg_is_in_recovery()";

pg_is_in_recovery

-------------------

 f

(1 row)

若显示此结果,表示vip切换成功。


文章转载自北漂矿工,如果涉嫌侵权,请发送邮件至:contact@modb.pro进行举报,并提供相关证据,一经查实,墨天轮将立刻删除相关内容。

评论