微前端架构如何改变企业的开发模式与效率提升
534
2023-11-24
一、背景介绍
自从阿里于2010年发动了IOE运动,2013年因美国一起安全事件,将去IOE重要性重新推上另一个高度。政府部门、银行、电信行业、制造业等各类企业纷纷进行各自的去IOE试点。近些年国内数据库软件越来越成熟,数据库国产化成了热门话题。企业都开始选择成熟国产数据库软件来国产化,让自己的业务数据库不再对现有的数据库软件有更强的依赖性。
本次某省移动信息技术部门挑选了一个业务系统做国产化数据库试点上线,最终选用了高度兼容Oracle的阿里云Polardb-O数据库。此次国产化试点上线本人有幸重度参与项目其中。接下来的分享会为各位读者精心挑选阿里云Polardb-O数据库运维场景并续集的形式来介绍, 高可用部署、软件版本升级、功能维护性测试、高可用测试、日常巡检、性能监控、应急演练、应急保障、备库与恢复、备份策略、Polardb常见问题等常见场景。
二、数据库系统规划
本方案高可用部署采用阿里云Poardb-O 11.2版本部署搭建1主1备高可用集群。主备节点之间采用流复制将pg_wal日志文件进行主备数据库实时同步,确保主从节点数据一致性。同时通过 Cluster Mangaer集群管控软件来管理主从数据库节点,实现主备库之间能自动与手动切换,确保主备数据库切换数据不丢失情况,还能提供数据库高可用服务。
2.1 主机信息
2.2 网卡配置需求
考虑到备份、高可用方面的需要,建议万兆网及以上。
2.3 架构图
2.4 安装部署规划
三、 基础软件部署
3.1 环境准备
1 关闭OS透明大页
# 通过参数关闭大页
echo never > /sys/kernel/mm/transparent_hugepage/enabled
echo echo never > /sys/kernel/mm/transparent_hugepage/enabled >> /etc/rc.d/rc.local
# 验证是否关闭了透明大页
grep HugePages_Total /proc/meminfo
cat /proc/sys/vm/nr_hugepages
2 内核参数调优
修改内核参数谁的 /etc/sysctl.conf ,增加以下内容后,执行 sudo sysctl -p 生效。
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
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 = 329853488332
kernel.shmall=80530636
kernel.shmmni = 4096
kernel.msgmax = 65536
kernel.msgmni = 2005
kernel.msgmnb = 65536
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-dev_max_backlog=10000
vm.zone_reclaim_mode=0
net.ipv4.tcp_tw_reuse=1
vm.nr_hugepages=192000
vm.nr_overcommit_hugepages=1000000
vm.overcommit_memory = 2
创建 /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
3 关闭防火墙和selinux
-- 关闭防火墙
systemctl stop firewalld
systemctl disable firewalld
-- 关闭 selinux
vi /etc/selinux/config
SELINUX=disabled -- 修改为disabled
4 创建polardb用户和组
groupadd polardb;useradd -g polardb polardb
echo " 密码 " | passwd polardb --stdin
5 设置polardb用户使用sudo权限
1 先查看系统是否安装sudo,可以使用命令 rpm -qa sudo 查看,若没有安装,可以使用yum安装 yum -y install sudo
#rpm -qa sudo
sudo-1.8.6p7-16.el7.x86_64
2、把polardb用户加入wheel组,加入此组才有sudo权限
#usermod -aG wheel polardb
# id polardb
uid=1002(polardb) gid=1005(polardb) groups=1005(polardb),10(wheel)
3 、把如下 polardb用户加入配置文件/etc/sudoers
polardb ALL=(ALL) NOPASSWD: ALL
4 、远程sudo ssh 开启( 这一项特别注意不操作会影响后面节点加入 CM )
sudo sed -i s/Defaults requiretty/#Defaults requiretty/g /etc/sudoers
sudo cat /etc/sudoers | grep requiretty
3.2 安装polardb软件
这里软件包是用 rpm 二进制方式安装
s udo rpm -ivh t-polarstore-pfsd-san-1.1.41-20200830160257.alios7.x86_64.rpm
sudo rpm -ivh PolarDB-O-0200-2.0.0-20200902034114.alios7.x86_64.rpm
3.3 配置polardb用户环境变量
为 polardb 用户配置环境变量,切换 polardb 用户,在 .bash_profile 文件中添加如下内容,最后使用命令 source .bash_profile 生效环境变量。
3.4 安装与配置PFS软件
PFS 文件系统用于存储 Polardb-O 数据库数据,本方案提供了四块 sd* 裸盘,采集 LVM 磁盘管理方式来管理这 4 块盘,后续磁盘扩容直接使用 LVM 扩容,创建逻辑卷方式用于 PFS 磁盘配置。这里详细描述如何裸盘如何采用 LVM 来创建逻辑卷,详细配置过程请参考方案《 Polardb-O linux LVM 逻辑卷管理配置》。 这里以创建好的逻辑卷 /vda/data 为例来配置 PFS 文件系统。配置安装 PFS 时需要占用名称为 $PFSDISK 的设备。在安装过程中过程中会格式化该设备,如果 /dev/$PFSDISK 已经挂载过了,要 umount 该设备。依次执行以下命令进行初始化:
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
3.5 配置polardb数据库
3.5.1 初始化数据库集群
PolarDB-O 在数据库启动之前需要执行初始化数据库集群,请用 polardb 用户登录,执行如下初始化数据库命令:
initdb -D $PGDATA -E UTF8 --locale=C -U polardb
3.5.2 初始化PFS数据
如下命令请用 polardb 用户操作,下面命令用途是将本地 $PGDATA 下面的数据拷贝到 PFS 磁盘上。后续数据库加载直接读写 PFS 磁盘文件。
sudo /usr/local/polardb_o_current/bin/polar-initdb.sh $PGDATA/ $PFSDIR/ disk
3.5.3 调整参数文件
初始化数据库集群后,数据库的参数文件 postgresql.conf 文件中都是默认参数,用户可以根据自身需要进行修改,如下以内存 100 规格为例,需要修改的核心配置参数如下:
参数名
参数值
说明
autovacuum_max_workers
8
指定同时运行的 最大的 autovacuum 进程,默认为3 个。
autovacuum_work_mem
8G
每个worker 可使用的最大内存数
effective_cache_size
220GB
提供可用于磁盘高速缓存的内存量的估计值
maintenance_work_mem
4GB
用于维护任务的内存设置。默认值为64MB 。
max_connections
36100
数据库最大连接数
max_parallel_maintenance_workers
16
支持内建的过程使用并行的方式工作,例如建立索引,默认设置为2
max_parallel_workers
32
数据库允许的最大并行进程数
max_parallel_workers_per_gather
24
支持并行的查询使用的线程数
max_sync_workers_per_subscription
32
每个订阅者的最大同步模式的工作线程数
max_wal_size
128GB
在自动WAL 检查点使得WAL 增长到最大尺寸。
min_wal_size
64GB
只要WAL 磁盘使用率低于这个设置,旧的WAL 文件总数被回收,以供将来检查点使用
shared_buffers
220GB
数据库服务使用的共享内存缓冲区
wal_buffers
16MB
将其WAL (预写日志)记录写入缓冲区,然后将这些缓冲区刷新到磁盘
work_mem
64MB
每个进程可以使用的工作内存空间
特别注意:
如果在修改 Polardb 数据库参数文件 postgresql.conf 之前启动过数据库,请先确认文件 $PGDATA/polar_node_static.conf 是否存在,若存在请将其 $PGDATA/polar_node_static.conf 文件删除后再启动数据库,否则会影响 Polardb-O 数据库正常启动。
为了实现其他机器对 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
3.5.4 启停数据库软件
在修改完配置文件之后, polardb 用户可以执行命令如下,启动数据库:
pg_ctl start -D $PGDATA
pg_ctl stop -D $PGDATA
3.6 检查数据库安装
3.6.1 数据库检查
数据库启动之后,使用 polardb 用户可以通过 PolarDB-O 内核二进制包中自带的 psql 客户端进行连通测试,执行如下命令:
psql -h$PGDATA -p$PGPOR T -c “select 1”
psql -h$PGDATA -p$PGPORT -c"select version()"
3.6.2 服务进程检查
数据库启动成功之后,会在数据库目录下生成一个 postmaster.pid ,其中第一行是 PolarDB forO 守护进程 pid ,用户可以通过 ps -a|grep 守护进程 pid 检查 PolarDB-O 进程情况,如需要检查 polar-postgres 、logger 、checkpoin ter 、 walwriter 、 autovacuum … 等进程
四、Polardb主备高可用部署安装
4.1 初始化主节点
初化主节点需要进行如下操作:
主库初始化操作需要完成以上第三章节的3.2~3.6章节内容。
4.2 创建主库流复制账号
使用 polardb 用户可以通过 psql 客户端创建流复制用户 。
psql -h$PGDATA -p$PGPORT -c"create user replicator password 密码 superuser; "
4.3 备库初始化
初化化备节点需要进行如下操作:
1、对软硬件环境进行安装配置,请完成第3章节,3.1环境准备、3.2polardb-O数据库软件安装、3.3配置用户环境、3.4配置安装PFS。
2、在备份执行pg_basebackup命令,使用主库数据目录和PFS初始化备库数据目录。(注意$PGDATA目录不能提前创建,只创建前缀目录/app)
polar_basebackup -h< 主库 IP> -p5432 -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
3、修改备库postgresql.conf文件中的参数 $PFSDISK 替换成 PFS 实际文件目录, $PFSIR 替换成实际的设备盘名称
polar_hostid = 2
polar_disk_name = $PFSDISK
polar_datadir = $PFSDIR
polar_storage_cluster_name = disk
4、 启动和检查备库节
点 启动与检查备节点可验证数据库是否连接成功。具体操作如下:
pg_ctl -c start -D $PGDATA
psql -h$PGDATA -p$PGPORT
如果能连通,则证明数据库安装成功,并且启动成功。
4.4 检查主库流复制状态
备节点启动之后,可使用psql 连接主节点,检查流复制状态。在主库使用如下sql 确认流复制建立成功:
psql -h$PGDATA -p$PGPORT -c"select * from pg_stat_replication;"
如果看到standby1 节点建立的流复制节点,则说明主备搭建成功。
4.5 cluster manager 集群管控部署
4.5.1 CM主机初始化配置
安装 CM 软件前需要对 CM 主机进程操作系统预配置准备,请参考第 三 章节,配置完成 3.1 小节下面的环境准备。
4.5.2 集群节点主机互信关系创建
CM 需要远程管理主备节点,需要打通CM 到主备两台主机之间户型关系。这里统一用polardb 用户来建立户信关系,polardb 用户执行如下命令
ssh-keygen -t rsa
ssh-copy-id -i ~/.ssh/id_rsa.pub polardb 节点 1
ssh-copy-id -i ~/.ssh/id_rsa.pub polardb 节点 2
# 测试互信关系是否配置好,执行如下命令不需要输密码,说明互信已打通。
ssh polardb 节点 1 date;ssh polardb 节点 2 date;
4.5.3 CM软件安装
在cm 节点上安装cluster_manager ,如下所示:
rpm -ivh polardb_cluster_manager-1.0.0-1.x86_64.rpm
4.5.4 CM服务配置
1 、配置探针用户
在主库主机上创建aurora 探测用户:
/usr /local/polardb_o_current/bin/createuser -p $PGPORT -h $PGDATA --login
aurora -P -s
# 这里密码配置为“ 密码 ”
2 、创建配置文件
在CM 服务器上面,使用polardb 用户创建一个配置目录
mkdir -p /app/polardb_cluster_manager/ /conf
#polardb_cluster_manager.conf 文件中添加如下内容:
vi /app/polardb_cluster_manager/ conf/polardb_cluster_manager.conf
{
"work_mode":"PolarPure", "consensus":{ "port":5001 },
"account_info":{ "aurora_user":"aurora", "aurora_password":" 密码 ",
"replica_user":"replicator", "replica_password":" 密码 " },
"cluster_info":{ "port":5000 } }
4.5.5 CM服务管理
1、 启动服务
在CM 主机上使用polardb 用户启动CM 服务
/usr/local/polardb_cluster_manager/bin/polardb_cluster_manager_control.py /app/polardb_cluster_manager start
2、 停止服务
/usr/local/polardb_cluster_manager/bin/polardb_cluster_manager_control.py /app/polardb_cluster_manager stop
3、 查看服务
/usr/local/polardb_cluster_manager/bin/polardb_cluster_manager_control.py /app/polardb_cluster_manager status
4.6 CM集群管理
4.6.1 配置数据库节点信息
在Cluster Manager 节点将主库节点加入CM管控
curl -H "Content-Type:application/json" -X POST --data "{\"user\":\"polardb\",\"dataPath\":\"/app/polardb_data\",\"ip\":\" < 主库 IP>\",\"port\":\"5432\",\"type\":\" Master\",\"storage_type\":\"local_ssd\",\"sync\":\"SYNC\"} "
在 Cluster Manager 节点将备库节点加入CM管控
curl -H "Content-Type:application/json" -X POST --data "{\"user\":\"polardb\",\"dataPath\":\"/app/polardb_data\",\"ip\":\" < 备 IP>\",\"port\":\"5432\",\"type\":\" Standby \",\"storage_type\":\"local_ssd\",\"sync\":\"SYNC\"}"
4.6.2 配置HA VIP地址
在高可用方式下,对外提供数据库服务器的主机除了有一个真实 IP 外还有一个虚拟 IP ,使用这两个 IP 都可以连接到该主机,所有项目中数据库链接配置的都是到虚拟 IP ,当服务器发生故障无法对外提供服务时,动态将这个虚 IP 切换到备用主机。
curl -H "Content-Type:application/json" -X POST --data "{\"vip\":\" <VIP 地址 >\",\"mask\":\"255.255.255.0\",\"interface\":\"team0\"} "
4.6.3 集群状态检查
使用如下命令可以检查主备库在活状态,VIP 漂流具体节点。
curl -H "Content-Type:application/json"
4.6.4 手动切换主从关系
在CM 主机上通过如下命令可以完成手动主备切换
curl -H "Content-Type:application/json" -X POST --data "{\"from\":\" < 主库 IP>:5432\",\"to\":\"< 备库 IP>:5432\"}"
五、总结
经过此次国产化数据库项目实践经验总结,我们在软件功能性测试、业务改造和高可用等功能场景上花了很多时间来研究与测试,测试过程中碰到了很多坑,也积累了很多国产化数据库经验,避免国产化数据库新手踩坑,有兴趣的朋友可以一起来交流与探讨。
有需要的朋友可以关注我的公众号,文章每日一更
来自 “ ITPUB博客 ” ,链接:http://blog.itpub-/28833846/viewspace-2728303/,如需转载,请注明出处,否则将追究法律责任。
版权声明:本文内容由网络用户投稿,版权归原作者所有,本站不拥有其著作权,亦不承担相应法律责任。如果您发现本站中有涉嫌抄袭或描述失实的内容,请联系我们jiasou666@gmail.com 处理,核实后本网站将在24小时内删除侵权内容。
发表评论
暂时没有评论,来抢沙发吧~