注册
【每周技术分享】—— 数据库安装部署
技术分享/ 文章详情 /

【每周技术分享】—— 数据库安装部署

DM_sms 2022/03/09 7269 25 5

一、前期沟通内容

1.1 硬件环境

  • 明确部署架构:单机/集群。需要与用户进行沟通,如果是正式版可以参照软件授权许可证。
  • 是否安装操作系统:建议不要最小化安装。
  • 是否安装nmon、perf和tar等操作系统工具:建议安装系统时安装nmon、perf和tar等操作系统工具。
  • CPU信息:CPU架构、颗数、核心数,通过lscpu查询。
  • 存储划分及挂载:原则建议分3块盘符,分别是dmdata实例盘、dmbak备份盘和dmarch归档盘。
    原则盘符分配建议:
    例:数据总量50G dmdata=100G(涉及temp和ROLL的扩展),dmbak=200G(涉及两次全量+多次增量),dmarch=50G
    数据库软件安装可以默认到系统盘符,建议空间不要低于200G,应考虑core文件、日志文件的使用情况。若不具备条件,可以使用一块盘符。
    查询方式有以下几种:
---查看所有盘符信息,明确盘符使用是否正确
fdisk -l

---查看盘符uuid
blkid /dev/sd?

---查看盘符故障点,应通过盘符uuid进行挂载
cat /etc/fstab
  • UPS和read卡电池情况。衡量标准:机房有没有UPS、存储read卡是否有电池,是否可以保障服务器持续工作、关闭服务器前是否能正常关闭数据库服务。如果满足的话,建议磁盘缓存开启,因为开启可以提高硬盘的读写速度如果不满足要求,为了数据的完整性和安全性,建议关闭。通常在沟通过程中,还是建议用户能够满足服务器持续服务的要求。
  • 端口确定:确定是否可用。通过 telnet ip port 查询。
  • 网络环境是否具备:检查网卡个数及带宽,通过 ifconfig 或 ethtool 网卡设备 进行查询。
    集群环境原则要求提供不低于1000M的心跳网络。
    网卡个数要求2个或以上,具备条件的心跳地址做bond,可1 3 2 4做绑定,规划情况如下图:图片1.png

1.2 软件环境

  • 操作系统版本:通过 cat /etc/os-release 命令查看;
  • 数据库版本标识:查看软件授权许可证。

1.3 实例参数确认

应用已经与达梦数据库做过适配的,可以通过以下查询方式查询适配库中相关配置参数;若是初次适配测试,应根据源应用使用后台库的情况,进行查询确认。

  • 字符集
---DM 查询方式
SELECT '字符集',DECODE(UNICODE,'0','GB18030','1','UTF-8','2','EUC-KR');

---Oracle 查询方式
select userenv('language') from dual;

---Mysql 查询方式
show variables like '%character%';
  • 大小写是否敏感
---DM 查询方式
SELECT '大小写敏感',DECODE(SF_GET_CASE_SENSITIVE_FLAG,'0','不敏感','1','敏感');

---Mysql 查询方式(1,大小写不敏感;0,大小写敏感)
SHOW GLOBAL VARIABLES LIKE "%lower%"; 
  • varchar 以字符为单位
---DM 查询方式
SELECT 'char是否以字符为单位',DECODE(PARA_VALUE,0,'否',1,'是') FROM V$DM_INI WHERE "V$DM_INI".PARA_NAME='LENGTH_IN_CHAR';
  • 页大小(达梦建议32K)
---DM 查询方式
select '页大小',page()/1024||'KB';

---Mysql 查询方式
SHOW GLOBAL STATUS like 'Innodb_page_size';
  • 兼容性要求
---DM 查询方式
select '数据库兼容',DECODE(PARA_VALUE,0,'不兼容',1,'SQL92',2,'Oracle',3,'MS SQL Server',4,'MySQL',5,'DM6',6,'Teradata') from v$dm_ini where para_name='COMPATIBLE_MODE';
  • 其他要求(例如:关键字/特殊参数)
---DM 查询方式
select '关键字过滤',PARA_VALUE from v$dm_ini where para_name ='EXCLUDE_RESERVED_WORDS';

---同时核实dm_svc.conf
cat /etc/dm_svc.conf grep KEYWORDS

二、环境检查及修改

2.1 操作系统时间检查

2.1.1 影响范围

若操作系统时间不正确会有以下问题:
(1)试用授权产品,会导致试用授权过期,无法使用;
(2)集群自动切换场景时,可能导致集群检测节点服务异常,引发误切换;
(3)数据库运行日志、数据库服务日志、归档日志、备份集等时间记录错误,导致相关分析、排查工作难度增大。

2.1.2 修改命令

--手动修改时间方法
date -s "yyyy-mm-dd HH:MM:SS"

---修改后需要复核,执行以下语句查看
date -s

2.2 安全防护软件

2.2.1 影响范围

不同防护软件影响的情况不同,常见如下:
(1)360软件,会将达梦数据库后台服务判断为非法的服务,会自动清理该数据库服务(windows环境)。
(2)奇安信网神终端安全管理系统,会自动防护端口。

2.2.2 修改方法

沟通添加白名单或直接卸载、关闭软件。

2.3 防火墙、SELinux检查

2.3.1 防火墙影响范围

端口对应服务外部无法访问,无法安装集群产品。

2.3.2 修改命令

--关闭防火墙
[root@~]# systemctl stop firewalld 
--关闭开机自启
[root@~]# systemctl disable firewalld

2.3.3 添加端口到白名单

  • 查看防火墙端口开放情况
--redhat 7/8
firewall-cmd --zone=public --list-ports
--redhat 6
iptables -L
  • Redhat6 添加端口到防火墙(iptables)
---修改系统文件,永久更改,需重启防火墙服务:
[root@~]# vi /etc/sysconfig/iptables
  -A INPUT -p tcp -m tcp --dport 5236 -j ACCEPT --添加5236端口到防火墙
[root@~]# service iptables save;service iptables restart; --保存后重启防火墙

---命令行添加端口,永久更改,需重启防火墙服务:
[root@~]# iptables -A INPUT -s 0.0.0.0/0.0.0.0 -p tcp --dport 5236 -j ACCEPT 
[root@~]# service iptables save;service iptables restart; --保存后重启防火墙

-Redhat7/8 添加端口到防火墙(Firewall)

--添加(--permanent永久生效,没有此参数重启后失效)
firewall-cmd --zone=public --add-port=5236/tcp --permanent 
--重新载入
firewall-cmd --reload
--查看
firewall-cmd --zone=public --query-port=5236/tcp
--删除
firewall-cmd --zone=public --remove-port=5236/tcp --permanent

2.3.4 关闭 SELinux 的意义

selinux:是用来加强安全性的一个组件,但非常容易出错且难以定位,它在本来已经很安全的 Linux 环境中,凌驾于 root 权限之上,设置了很多额外的条条框框。
如果了解这些条条框框,就可以进行相应设置;但如果不了解,那 SELinux 可能并没有帮什么忙,还会带来很多不确定因素。

2.3.5 具体命令

SELinux一共有3种状态,分别是Enforcing,Permissive和Disabled状态。
(1)Enforcing:强制模式。代表SELinux在运行中,且已经开始限制domain/type之间的验证关系;
(2)Permissive:宽容模式。代表SELinux在运行中,不过不会限制domain/type之间的验证关系,即使验证不正确,进程仍可以对文件进行操作,但如果验证不正确会发出警告;
(3)Disabled:关闭模式。SELinux并没有实际运行。
可以通过setenforce命令来设置前面两种状态,而如果想修改为disable状态,需要修改配置文件,同时重启系统。
Enforcing状态的值是1,permissive状态是0,因此设置为permissive,命令就是:setenforce 0|1

---临时关闭SELinux
[root@localhost ~]# setenforce 0

---临时开启SELinux
[root@localhost ~]# setenforce 1

---查看当前状态命令
[root@localhost ~]# getenforce 
Permissive

---永久关闭SELinux需修改配置文件/etc/selinux/config,修改 SELINUX=disabled
[root@localhost ~]# cat /etc/selinux/config 
# This file controls the state of SELinux on the system.
# SELINUX= can take one of these three values:
# enforcing - SELinux security policy is enforced.
# permissive - SELinux prints warnings instead of enforcing.
# disabled - No SELinux policy is loaded.
SELINUX=disabled      #修改为disabled
# SELINUXTYPE= can take one of three two values:
# targeted - Targeted processes are protected,
# minimum - Modification of targeted policy. Only selected processes are protected. 
# mls - Multi Level Security protection.
SELINUXTYPE=targeted 

注意:修改 SELinux 永久关闭,必须重启服务器,才能生效。且永久关闭后,就不能通过 setenforce 1 命令临时打开了。

2.4 网络

2.4.1 检测的意义

对于单机数据库,主要是业务网络。业务网络主要作用是应用服务器到数据库服务器连接数据库时,请求数据库进行相应的操作。如果业务网络带宽较低、丢包或延迟较大,会降低应用请求数据库效率。
对于集群,为确保集群的稳定性,原则要求单独的心跳局域网络,不低于1000M带宽。心跳网络是对mal系统的影响非常大,如果网络丢包或者延迟较大,则会严重影响mal系统的处理能力,从而导致整个集群出现响应服务请求慢的情况。

2.4.2 具体命令

---拷贝一个文件到远程服务器的/opt目录下
[root@~]# scp -r xxx dmdba@ip:/opt/
 
--拷贝一个文件,指定端口到远程服务器的/opt目录下
[root@~]# scp -r -P端口 xxx dmdba@ip:/opt/
 
--网络配置以及速度是否正常
ethtool eth1
 
--查看网络信息
sar -n DEV 1 100
备注:
#IFACE 本地网卡接口的名称
#rxpck/s 每秒钟接受的数据包
#txpck/s 每秒钟发送的数据库
#rxKB/S 每秒钟接受的数据包大小,单位为KB
#txKB/S 每秒钟发送的数据包大小,单位为KB
#rxcmp/s 每秒钟接受的压缩数据包
#txcmp/s 每秒钟发送的压缩包
#rxmcst/s 每秒钟接收的多播数据包

2.4.3 Netperf简介

Netperf 是一种网络性能的测量工具,测试结果所反映的是一个系统能够以多快的速度向另外一个系统发送数据,以及另外一个系统能够以多快的速度接收数据。Netperf 工具以 client/server 方式工作。server 端是 netserver,用来侦听来自 client 端的连接,client 端是 netperf,用来向 server 发起网络测试。

2.4.4 netperf使用

(1)服务器大于1台时使用,测试服务器间网络性能情况,上传 netperf、netserver 文件至服务器,并增加执行权限,其中 netserver 需复制到每台服务器。

chmod +x netperf netserver

(2)在每台服务器均启动 netserver 服务并确认进程存在

./netserver -p 12306
ps -ef|grep netserver

(3)在其中一台服务器使用 netperf 测试至所有服务器,并记录测试结果。

[root@localhost ~]# ./netperf -H 172.16.93.12 -p 12306 -f M -l 60
MIGRATED TCP STREAM TEST from 0.0.0.0 (0.0.0.0) port 0 AF_INET to 172.16.93.12 (172.16.93.12) port 0 AF_INET
Recv   Send    Send                          
Socket Socket  Message  Elapsed              
Size   Size    Size     Time     Throughput  
bytes  bytes   bytes    secs.    MBytes/sec  
 
87380  16384  16384    60.00    3965.21(查所有服务器此值是否存在明显异常)   

2.5 磁盘规划及挂载

2.5.1 磁盘规划

在项目启动前期,规划数据库磁盘是比较重要的一项,不仅涉及系统上线的运行效果,也会影响后期的运维扩展操作。
因此当条件有限只能使用单块盘的情况下,建议通过创建不同的 LV 搞多个挂载点。如果使用多块盘,则尽量一块盘一个挂载点,多块磁盘对于数据目录有利于磁盘空间的分配,而且可以数据分离处理,不会占用彼此资源。
如果数据量较大,对于数据交互分析 sql 有比较大要求的,可以根据 IO 等判断是否为数据目录配置固态磁盘(推荐)。对于处理数据量不算大的业务项目,不牵扯大数据分析的大可以使用全机械磁盘。
其中归档、备份和数据分开存储,备份也可以存放到 nas 上,实现异地备份。
(1)磁盘写入数据时会产生较少的资源占用和冲突,有利于提高数据库的性能。
(2)可以很容易的监测各类的使用和剩余空间。
(3)避免减少误删或者磁盘毁坏造成的损失。
(4)不会抢占数据库的磁盘使用空间。

2.5.2 磁盘格式

针对磁盘格式主要常用的为 ext4、xfs,以下为优缺点:

  • 数据完全性
    采用 XFS 文件系统,当意想不到的宕机发生后,首先,由于文件系统开启了日志功能,所以磁盘上的文件不再会意外宕机而遭到破坏了。
    不论目前文件系统上存储的文件与数据有多少,文件系统都可以根据所记录的日志在很短的时间内迅速恢复磁盘文件内容。相比 ext4 更能保证数据完整。
  • 传输特性
    XFS 文件系统采用优化算法,日志记录对整体文件操作影响非常小。XFS 查询与分配存储空间非常快。xfs 文件系统能连续提供快速的反应时间。
  • 可扩展性
    XFS 是一个全 64-bit 的文件系统,可以支持上百万T字节的存储空间。对特大文件及小尺寸文件的支持都表现出众,支持特大数量的目录。最大可支持的文件大小为 263 = 9 x 1018 = 9 exabytes,最大文件系统尺寸为 18 exabytes。
    XFS 使用高的表结构(B +树),保证了文件系统可以快速搜索与快速空间分配。相比 ext4,XFS 能够持续提供高速操作,文件系统的性能不受目录中目录及文件数量的限制。
  • 传输带宽
    XFS 能以接近裸设备 I/O 的性能存储数据。在单个文件系统的测试中,其吞吐量最高可达 7GB 每秒,对单个文件的读写操作,其吞吐量可达 4GB 每秒。相比 ext4,XFS 传输速度更快。
  • 缺点
    XFS 格式有个缺点,xfs 的 lvm 不能直接在线缩减空间,所以一定注意,xfs 文件系统的 lvm 分区,尽量往小了分,一旦上线,已分配的空间就只扩不减。

2.5.3 磁盘挂载

---是否自动挂载
cat /etc/fstab
---查看实际挂载盘
lsblk	

要注意磁盘是否使用uuid挂载

2.6 磁盘 IO

2.6.1 测试的意义

传统关系型数据库的最大瓶颈之一就在于磁盘的读写速率上,因此检测磁盘的 IO 速率是十分必要的。
磁盘的运作是磁盘读写前寻找磁道的过程。磁盘自带的读写缓存大小,对于磁盘读写速度至关重要。读写速度快的磁盘,通常都带有较大的读写缓存。测试服务器读写性能,以此来判断是否存在性能瓶颈。

2.6.2 具体命令

---真实模拟 20K 次磁盘写入(IO)
dd bs=32k count=20k if=/dev/zero of=test oflag=dsync
---nmon测试工具
---部署nmon
tar xvfz nmon.tar.gz
chmod 777 nmon
---应用
./nmon
# c        查看CPU相关信息
# m        查看内存相关信息
# d        查看磁盘相关信息
# n        查看网络相关信息
# t        查看相关进程信息
# h        查看帮助相关信息
./nmon -f -s 30 -c 60 -m /data/nmon/data_nmon 
# 参数说明 
-f   监控结果以文件形式输出,默认机器名+日期.nmon格式 
-F   指定输出的文件名,比如test.nmon 
-s   指的是采样的频率,单位为秒 
-c   指的是采样的次数,即以上面的采样频率采集多少次 
-m   指定生成的文件目录 

使用nmon analyser工具
打开.xlsm文件,点击Analyze nmon data,打开你需要进行分析的nmon监控文件:
!!如果宏不能运行,需要做以下操作:
工具 -> 宏 -> 安全性 -> 中,然后再打开文件并允许运行宏。

---OSW测试工具
--部署osw
tar -xvf osw.tar
---应用
./startOSWbb.sh 60 10           这个命令每隔60秒收集一次,数据保留10个小时。
---数据分析
[root@prd-t005-ap-26-42 oswbb]# java -jar oswbba.jar -i /data/oswbb/archive
---参数 -i表示处理的数据目录。此外,如果你只想生成某个时间段的报表,你可以使用参数-B  -E 
java -jar oswbba.jar -i /data/oswbb/archive -B Dec 7 15:30:00 2021 -E Dec 7 17:00:00 2021

2.7 磁盘调度算法

2.7.1 调度算法介绍

每当进程需要进行磁盘 I/O 操作时,它就向操作系统发出一个系统调用。如果所需的磁盘驱动器和控制器空闲,则立即处理请求。如果磁盘驱动器或控制器忙,则任何新的服务请求都会添加磁盘驱动器的待处理请求队列。对于具有多个进程的一个多道程序系统,磁盘队列可能有多个待处理的请求。因此操作系统如何选择待处理请求的服务便是磁盘调度算法。

  • CFQ(完全公平排队I/O调度程序)
    CFQ全称 Completely Fair Scheduler ,中文名称完全公平调度器,CFQ 是内核默认选择的 I/O 调度器。它将由进程提交的同步请求放到多个进程队列中,然后为每个队列分配时间片以访问磁盘。
    CFQ 对于很多 IO 压力较大的场景就并不是很适应,尤其是 IO 压力集中在某些进程上的场景。因为这种场景我们需要更多的满足某个或者某几个进程的 IO 响应速度,而不是让所有的进程公平的使用 IO,比如数据库应用。

  • NOOP(电梯式调度程序)
    NOOP全称 No Operation,中文名称电梯式调度器,该算法实现了最简单的 FIFO 队列,所有 I/O 请求大致按照先来后到的顺序进行操作。NOOP 实现了一个简单的先入先出(FIFO)队列,它像电梯的工作方式一样对 I/O 请求进行组织。它是基于先入先出(FIFO)队列概念的 Linux 内核里最简单的 I/O 调度器。此调度程序最适合于固态硬盘。
    NOOP 倾向饿死读而利于写,因为写请求比读请求更容易,写请求通过文件系统cache,不需要等一次写完成,就可以开始下一次写操作,写请求通过合并,堆积到 I/O 队列中。读请求需要等到它前面所有的读操作完成,才能进行下一次读操作,在读操作之间有几毫秒时间,而写请求在这之间就到来,饿死了后面的读请求。对于数据库应用磁盘 IO 读写都高频的进程而言NOOP也是不适合的。

  • Deadline(截止时间调度程序)
    deadline 实现了四个队列,其中两个分别处理正常 read 和 write,另外两个处理超时 read 和 write 的队列,按请求创建时间排序,如果有超时的请求出现,就放进这两个队列,调度算法保证超时(达到最终期限时间)的队列中的请求会优先被处理,防止请求被饿死。Deadline 确保了在一个截止时间内服务请求,这个截止时间是可调整的,而默认读期限短于写期限,这样就防止了写操作因为不能被读取而饿死的现象。
    因此,Deadline 对数据库环境是最好的选择。

  • AS(预料I/O调度程序)
    AS(预料I/O调度程序)是基于预测的 I/O 算法。顾名思义有 I/O发生时,如果又有进程请求 I/O 操作,则将产生一个默认的 6 毫秒猜测时间,猜测下一个进程请求 I/O 是要干什么的。这个 I/O 调度器对读操作优化服务时间,在提供一个 I/O 的时候进行短时间等待,使进程能够提交到另外的 I/O。AS 算法从 Linux 2.6.33 版本后被删除了。
    AS 适合于写入较多的环境,AS对数据库环境表现很差。

综上:达梦数据库的稳定运行,需要将磁盘的调度算法设置为deadline,特别是arm平台,必须要设置为deadline。如存储为 nvme 等高性能的设备时,此类设备IO调度算法只有none,则无需设置。

2.7.2 检查及修改

---通过lsblk命令找到数据盘对应的物理盘
[root@~]# lsblk

注意下图中数据盘对应的物理盘是 vdc,则应检查 vdc 磁盘的调度算法。
图片2.png

--检查sda磁盘的调度算法
[root@~]# cat /sys/block/vdc/queue/scheduler

注意下图选中的调度算法是[bfq],需要修改调度算法为 deadline。
图片3.png

更改I/O调度方法:

  • 临时更改
--临地更改I/O调度方法,重启后失效
[root@~]# echo deadline > /sys/block/vdc/queue/scheduler

-永久修改

--修改内核引导参数,加入elevator= deadline
[root@~]# vi /boot/grub/menu.lst
 
--更改到如下内容
[root@~]# kernel /boot/vmlinuz-2.6.32-504.el6 ro root=LABEL=/ elevator=deadline rhgb quiet
 
--重新确认调度算法
[root@~]# cat /sys/block/vdc/queue/scheduler

查看调度结果如下:
图片4.png

2.8 关闭 swap

2.8.1 关闭的意义

在 Linux 下,SWAP 的作用类似 Windows 系统下的“虚拟内存”。当物理内存不足时,拿出部分硬盘空间当 SWAP 分区(虚拟成内存)使用,从而解决内存容量不足的情况。
数据库系统一般都对响应延迟比较敏感,如果使用 swap 代替内存,数据库服务性能必然不可接受。对于响应延迟极其敏感的系统来讲,延迟太大和服务不可用没有任何区别,比服务不可用更严重的是,swap 场景下进程就是不死,这就意味着系统一直不可用,再想想如果不使用 swap 直接 oom,是不是一种更好的选择。
注:swap 的关闭需要视情况而定,内存充裕(较大)关闭,内存太小不关闭。

2.8.2 具体命令

  • 临时修改
---临地关闭 swap 分区,重启后失效
[root@~]# swapoff  -a
  • 永久修改
---永久关闭 swap 分区
[root@~]# sed -ri 's/.*swap.*/#&/' /etc/fstab  

---重启操作系统
[root@~]# reboot

---再次确认
[root@~]# free -m

2.9 关闭 numa

2.9.1 关闭的意义

NUMA(Non-Uniform Memory Access)架构是为了解决多 CPU 下内存访问冲突,简单来说不在将整个物理内存作为一个整体,而是根据不同的 CPU 区分不同的内存块儿,如 2 颗 CPU 每颗 CPU 使用 64G 内存。
当 NUMA 参数 zone_reclaim_mode 在设置为 1 时,内核将要求多路 CPU 尽量从距离较近的系统内存节点(服务器的整体内存在 numa 架构下将被分成若干个节点)分配内存而不是在整个服务器可访问内存的范围内进行内存分配,因此在较高内存占用压力下内存申请会触发内存频繁回收整理的机制严重影响了系统整体性能(长期处于内核态 sys 很高)。进而可能导致 SQL 卡顿问题的发生。

2.9.2 具体命令

---编辑 grub 文件,如下图所示加上:numa=off
[root@~]# vi /etc/default/grub

图片5.png

---重新生成/etc/grub2.cfg 配置文件:
[root@~]# grub2-mkconfig -o /etc/grub2.cfg

图片6.png

---重启操作系统
[root@~]# reboot

---重启之后进行确认,如下图:
[root@~]# dmesg | grep -i numa

图片7.png

---再次确认,如下图:
[root@~]# cat /proc/cmdline

图片8.png

2.10 禁用透明大页

2.10.1 禁用的意义

为什么 Transparent HugePages(透明大页)对系统的性能会产生影响?
在 khugepaged 进行扫描进程占用内存,并将 4kPage 交换为 Huge Pages 的这个过程中,对于操作的内存的各种分配活动都需要各种内存锁,直接影响程序的内存访问性能。并且,这个过程对于应用是透明的,在应用层面不可控制,对于专门为 4k page 优化的程序来说,可能会造成随机的性能下降现象。

2.10.2 具体命令

2.10.2.1 Centos 系统

  • 临时修改
---查看是否启用透明大页,[always]表示透明大页启用  [never]表示透明大页禁用
[root@~]# cat /sys/kernel/mm/transparent_hugepage/enabled	

---禁用透明大页
[root@~]# echo never > /sys/kernel/mm/transparent_hugepage/enabled

---再次确认
[root@~]# cat /sys/kernel/mm/transparent_hugepage/enabled
  • 永久修改
--编辑 grub 文件,如下图所示加上:transparent_hugepage=never
[root@~]# vi /etc/default/grub

图片9.png

--重新生成/etc/grub2.cfg 配置文件:
[root@~]# grub2-mkconfig -o /etc/grub2.cfg

--重启操作系统
[root@~]# reboot

--再次确认
[root@~]# cat /sys/kernel/mm/transparent_hugepage/enabled

2.10.2.2 鲲鹏 arm+l 银河麒麟操作系统 V10SP1 环境永久修改

  • 查看透明大页内存
    使用下图中命令查看当前操作系统透明大页内存配置。
[root@~]# grep -i huge /proc/meminfo
[root@~]# cat /sys/kernel/mm/transparent_hugepage/enabledabled

图片10.png

从上面输出可以看到,每个页的大小为 2MB(Hugepagesize),并且系统中目前有 0 个“大内存页”(HugePages_Total)。而当前的透明大页内存配置是开启的(always)。

  • 关闭透明大页内存
    通过修改 grub 配置,在“GRUB_CMDLINE_LINUX=”配置参数结尾加入“transparent_hugepage=never”,可以永久关闭透明大页内存。
[root@~]# vim /etc/default/grub

图片11.png

  • 重新生成 grub 配置
    如果操作系统安装时,使用 Legacy 模式引导安装,则使用以下命令重新生成 grub。
[root@~] # grub2-mkconfig -o /boot/grub2/grub.cfg

图片12.png

如果操作系统安装时,使用 UEFI 模式引导安装,则使用以下命令重新生成 grub。

[root@~]# grub2-mkconfig -o /boot/efi/EFI/kylin/grub.cfg 

图片13.png

  • 生成 grub 后,重启操作系统查看配置
    图片14.png
    可以看到系统中目前透明大页内存为0,并且禁用透明大页内存(never)。
    查看/sys/kernel/mm/transparent_hugepage/defrag配置文件缺省配置为“madvise”。

图片15.png

如需永久修改配置为“never”,需在/etc/rc.local 中添加如下内容。

if test -f /sys/kernel/mm/transparent_hugepage/defrag; then
   echo never > /sys/kernel/mm/transparent_hugepage/defrag
fi

2.11 调整 sysctl.conf 参数

2.11.1 参数文件介绍

/etc/sysctl.conf 是一个允许改变正在运行中的 Linux 系统的接口,它包含一些 TCP/IP 堆栈和虚拟内存系统的高级选项,修改内核参数永久生效。/proc/sys 下内核文件与配置文件 sysctl.conf 中变量存在着对应关系。

2.11.2 调整项介绍

配置参数 overcommit_memory 表示系统的内存分配策略可以选值为 0,1,2。
0:表示内核将检查是否有足够的可用内存供应用进程使用;如果有足够的可用内存,内存申请允许;否则,内存申请失败,并把错误返回给应用进程。
1:表示内核允许分配所有的物理内存,而不管当前的内存状态如何。
2:表示内核允许分配超过所有物理内存和交换空间总和的内存。

2.11.3 具体命令

  • 临时生效
---使用root执行命令
[root@dm~]# echo 0 > /proc/sys/vm/overcommit_memory
---查看执行结果
[root@dm~]# cat /proc/sys/vm/overcommit_memory
  • 永久生效
---用root用户编辑配置文件编辑/etc/sysctl.conf,修改vm.overcommit_memory=0 
[root@dm~]# vim /etc/sysctl.conf

图片16.png

然后执行 sysctl -p 使配置文件生效。

2.12 调整 limits.conf 参数

2.12.1 参数文件介绍

在 Linux、Solaris、AIX 和 HP-UNIX 等系统中,操作系统默认会对程序使用操作系统资源进行限制。如果不取消对应的限制,那么数据库的性能将会受到影响。

2.12.2 调整项介绍

(1)core file size 建议设置为 unlimited。并将 core 文件目录放到大的空间目录存放。
(2)data seg size 建议设置为 1048576 以上或 unlimited,此参数过小将导致数据库启动失败。
(3)file size 建议设置 unlimited(无限制),此参数过小导致数据库安装或初始化失败。
(4)open files 建议设置为 65536 以上或 unlimited。
(5)virtual memory 建议设置为 1048576 以上或 unlimited,此参数过小将导致数据库启动失败。
(6)max user processes 最大线程数这个参数建议修改为 10240。

2.12.3 具体命令

  • 临时修改
--查到当前系统资源限制
[dmdba@~]# ulimit -a

--设置open files 65536 以上或 unlimited、设置max user processes为10240
[dmdba@~]# ulimit -n 65535   ##临时修改open files 为65535
[dmdba@~]# ulimit -u 10240   ##临时修改max user processes为10240
[dmdba@~]#  ulimit -a ##查看修改是否生效
  • 永久修改
--编辑 limits.conf 文件
[root@~]# vi /etc/security/limits.conf
在最后面添加以下内容
* soft nproc 10240
* hard nproc 10240
 
dmdba soft nproc 10240
dmdba hard nproc 10240
dmdba soft nofile 65536
dmdba hard nofile 65536
dmdba hard data unlimited
dmdba soft data unlimited
dmdba hard fsize unlimited
dmdba soft fsize unlimited
dmdba soft core unlimited
dmdba hard core unlimited
[dmdba@~]# ulimit -a ##确认是否生效

--重启操作系统
[root@~]# reboot
--再次确认
[dmdba@~]# ulimit -a

2.13 调整 system.conf 参数

2.13.1 参数文件介绍

system.conf 为系统和服务管理的配置文件,当运行系统实例时,systemd 将读取这个配置文件 system.conf,相反读取 user.conf。这些配置文件获得一些设置基本管理控制的操作。
达梦数据库服务注册为系统服务的进程,如通过 systemctl 或者 service 方式设定随机自启动的数据库服务,其能打开的最大文件描述符、proc 数量等不受 limits.conf 控制,需要修改/etc/systemd/system.conf 文件才有效果。

2.13.2 调整项介绍

(1)DefaultLimitNOFILE:用户默认最大打开文件数;
(2)DefaultLimitNPROC:用户默认最大进程数。

2.13.3 具体命令

---编辑配置文件/etc/systemd/system.conf
[root@dm~]# vim /etc/systemd/system.conf
---添加配置(保存退出后需要重启服务器才能生效):
DefaultLimitNOFILE=65536
DefaultLimitNPROC=10240

添加配置如下图:
图片17.png

2.14 调整 nproc.conf 参数

2.14.1 参数文件介绍

nproc 是操作系统级别对每个用户创建的进程数的限制。文件路径为/etc/security/limits.d 文件名略有不同,其中麒麟 10 是 nproc.conf;centos6 是 90-nproccentos,centos7 是 20-nproc.conf。
/etc/security/limits.conf 可配置限制文件打开数,系统进程等资源在该文件配置中写的最大用户进程数是受/etc/security/limits.d/proc.conf 配置上限影响的。

2.14.2 调整项介绍

(1)soft表示软限制;
(2)hard表示硬限制;
(3)nproc进程数;
(4)nofile文件数。

2.14.3 具体命令

---编辑配置文件/etc/security/limits.d/nproc.conf
[root@dm~]# vi /etc/security/limits.d/nproc.conf
---添加配置:
dmdba soft nproc 65536
dmdba hard nproc 65536
---确定是否生效:
[dmdba@~]# ulimit -u
65536

如果是在/etc/security/limits.conf 修改最大用户进程数,那就注释掉/etc/security/limits.d/90-nproc.conf 文件中的内容即可。

2.15 调整 profile 参数

2.15.1 参数文件介绍

/etc/profile 文件与环境变量相关,修改后对所有用户起作用。登录 Linux 时,会首先启动 /etc/profile 文件,然后再启动用户目录下的~/.bash_profile、 ~/.bash_login 或 ~/.profile 文件中的其中一个。/etc/profile 为全局(公有)配置,不管是哪个用户登录时都会读取该文件。
(1)若 bash 是以 login 方式执行时,则读取~/.bash_profile文件;
(2)若它不存在,则读取~/.bash_login;
(3)若前两者不存在,读取~/.profile。

###2.15.2调整项介绍
调整 dmdba 用户下的环境变量文件.bash_profile。

  1. LD_LIBRARY_PATH 主要用于指定查找共享库(动态链接库)时除了默认路径之外的其他路径;
  2. PATH 环境变量定义了用于进行命令和程序查找的目录。 PATH 中的目录使用冒号分隔;
  3. DM_HOME 定义达梦数据库的软件目录。

image.png

2.15.3 具体命令

su - dmdba
vi .bash_profile
export DM_HOME="/dm8"
export LD_LIBRARY_PATH="$LD_LIBRARY_PATH:/dm8/bin"
export PATH=$PATH:$DM_HOME/bin:$DM_HOME/tool

保存文件后执行 source .bash_profile 生效。

2.16 创建数据库用户

2.16.1 创建数据库用户的意义

  1. 数据库运行依赖该用户。
  2. 普通用户不能修改系统关键配置文件,若要查看其他用户的文件则需要相应的权限。
  3. 防止使用 root 权限过大导致的误操作及一些纠纷。

2.16.2 创建用户组和用户

[root@~]# groupadd dinstall -g 2001
[root@~]# useradd -g dinstall dmdba -u 1001
[root@~]# passwd dmdba
[root@~]# <输入密码>
[root@~]# <再次输入密码>

2.16.3 变更目录用户及组

[root@~]# chown dmdba.dinstall /opt/dmdbms  -R
[root@~]# chmod 777 /opt/dmdbms -R

2.17 CPU 超线程检查

2.17.1 超线程简介

超线程技术把多线程处理器内部的两个逻辑内核模拟成两个物理芯片,让单个处理器就能使用线程级的并行计算,进而兼容多线程操作系统和软件。超线程技术充分利用空闲 CPU 资源,在相同时间内完成更多工作。

2.17.2 超线程

需根据数据库本身是否需要开启或关闭来决定如何操作,一般在 BIOS 中进行开启/关闭操作。

2.17.3 检查命令

通过解析 /proc/cpuinfo 文件内容来判定是否开启超线程,如服务器开启了超线程则下述公式计算结果等于 2,否则等于 1。
系统的 cpu 线程数/(物理 CPU 个数*每个物理 CPU 的逻辑核数)

##系统的cpu线程数:
cat /proc/cpuinfo | grep "processor" | wc -l

##物理CPU个数:
cat /proc/cpuinfo | grep "physical id" | sort|uniq | wc -l

##每个物理CPU的逻辑核数:
cat /proc/cpuinfo |grep "core id"|sort -u|wc -l

2.18 内存池管理调整

2.18.1 简介

达梦数据库针对从操作系统申请的内存资源进行内存池管理,所有的数据库线程从自己的内存池中进行处理。但是若 glibc 版本大于 2.10,操作系统会给数据库线程再分配一个内存池,这个内存池数据库是无法管理和释放的,所以导致数据库进程的 VIRT(虚拟内存)占用过高。
可通过添加操作系统参数 MALLOC_ARENA_MAX 禁止操作系统额外为数据库线程分配内存,数据库相关线程只从数据库已申请的内存池中进行资源分配,从而有效控制内存资源使用大小。

2.18.2 查询 glibc 版本命令

[dmdba@~]#rpm -qa|grep glibc

2.18.3 修改操作系统参数命令

[dmdba@~]#cd /home/dmdba/dmdbms/bin
[dmdba@~]#vim DmServicexxx
export MALLOC_ARENA_MAX=4

2.19 麒麟 v10 SP1 版本检查 RemoveIPC 参数设置

2.19.1 参数介绍

RemoveIPC 参数会控制当前用户在完全注销时,是否删除属于用户自己的 Systemd V 和 POSIX IPC 对象,接受布尔参数。如果启用该参数,则在用户的最后一个会话终止后,用户可能不会使用 IPC 资源。这包括 System V 信号量、共享内存和消息队列,以及 POSIX 共享内存和消息队列。请注意,根用户和其他系统用户的 IPC 对象不受此设置的影响。RemoveIPC 默认值要根据操作系统版本情况而定。
/etc/systemd/logind.conf 配置文件是 Systemd 的一部分,Systemd 是自由软件,用户可以重新分发或修改,该文件在编译时会携带默认值,可通过编译 logind.conf 来满足需求。

2.19.2 参数检查

检查 RemoveIPC 参数设置,要求为no。

systemctl show systemd-logind  | grep -i removeipc

2.19.3 参数修改

如果 RemoveIPC 参数不是 no,用以下方法调整:
修改/etc/systemd/logind.conf 配置文件中的 RemoveIPC 参数,将 # 注释去掉,并修改 yes 为 no,重启服务。

systemctl daemon-reload;
systemctl restart systemd-logind

2.20 调整 login

2.20.1 简介

limits.conf 文件实际是 Linux PAM(插入式认证模块,Pluggable Authentication Modules 中 pam_limits.so 的配置文件),突破系统的默认限制,对系统访问资源有一定保护作用,当用户访问服务器时,服务程序将请求发送到 PAM 模块,PAM 模块根据服务名称在/etc/pam.d 目录下选择一个对应的服务文件,然后根据服务文件的内容选择具体的 PAM 模块进行处理。
limits.conf 和 sysctl.conf 区别在于 limits.conf 是针对用户,而 sysctl.conf 是针对整个系统参数配置。

2.20.2 修改命令

[root@~]# vi /etc/pam.d/login
session  required  /lib64/security/pam_limits.so
session  required  pam_limits.so
评论
后发表回复

作者

文章

阅读量

获赞

扫一扫
联系客服