安装环境配置
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 存储空间
在主备库挂载一块磁盘作为polardb的PFS存储空间。
本次安装使用磁盘名称为:/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
该步骤会将$PGDATA中polardb的一些初始化数据文件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_datadir、polar_disk_name、polar_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 :pfs的data目录路径。
--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 端口说明
PolarDB:5432/tcp
Cluster Manager:5500,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_info是cm对外接口的服务端口。
aurora_user是刚创建的探测用户的账号、密码,权限为superuser。
replica_user是刚创建的复制用户的账号密码,权限可以为replication或superuser。
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切换成功。




