安装过程 FAQ
设置防火墙白名单
(root 用户执行)
- 新增端口至防火墙白名单。
firewall-cmd --zone=public --permanent --add-port=5432/tcp
- 重新加载防火墙白名单。
firewall-cmd --reload
- 查看端口列表。
firewall-cmd --list-port
下列各 IP 端口均为各服务的默认端口,用户应根据实际的的规划做对应替换。服务名称 端口号 说明 VexDB 5432 数据库服务端口 5433(数据库服务端口+1) 数据库内部工具使用端口 ntp 123 ntp 默认端口 HAS 55434 集群本地监听端口 55435 集群心跳端口 55436 集群服务端口 8008 集群通讯端口
以数据库服务端口 5432 为例,开放端口的命令如下:
firewall-cmd --zone=public --permanent --add-port=5432/tcp
firewall-cmd -reload
firewall-cmd -list-ports
内核参数介绍
fs.aio-max-nr
该参数表示可以拥有的异步 IO 请求数目。
推荐值:1048576。
在 Linux 6 和 7 上使用 aio 时需要设置 fs.aio-max-nr 来适应异步 IO。
设置语句:
sysctl fs.aio-max-nr='1048576'
file-max
该参数表示每次登录会话可以打开的文件数。
在 Linux 6 和 7 上,file-max 的值与内核资源使用参数 max_files_per_process 对应。
设置语句:
sysctl fs.file-max='76724600'
kernel.sem
该参数包含 4 个参数(依次为 SEMMSL、SEMMNS、SEMOPM、SEMMNI)。
- SEMMSL:每个信号量 set 中信号量最大个数,最小取值 250。
- SEMMNS:Linux 系统中信号量最大个数,至少取值 32000,等于 SEMMSL*SEMMNI。
- SEMOPM:SEMOP 系统调用允许的信号量最大个数,至少取值 100;或者等于 SEMMSL。
- SEMMNI:Linux 系统信号量 set 最大个数,最少 128。
说明
- 使用
ipcs -l
或ipcs -u
查看信号量。- 每 16 个进程一组,每组信号量需要 17 个信号量。可根据需要修改 kernel.sem 值。
- SEMMSL 代表信号量,SEMMNI 代表组。
设置语句:
sysctl kernel.sem='4096 2097152000 4096 512000'
kernel.shmall
该参数用于控制共享内存页数,等于系统内存(建议设置为80%)/PAGE_SIZE
,该参数设置太小有可能导致数据库启动报错。
单位:byte
示例:物理内存为 128GB,PAGE 大小为 4096,则 kernel.shmall=128*1024*1024*1024*0.8/4096
=26843545
。
说明
- 使用
getconf PAGE_SIZE
命令查看 page_size 大小。- 内存大小需换算成 bytes。
设置语句:
sysctl kernel.shmall='26843545'
kernel.shmmax
该参数表示最大单个共享内存段大小(建议为大于 shared_buffer 值), 等于系统内存*0.5
。
单位:bytes
示例:物理内存为128GB,则:kernel.shmmax=128*1024*1024*1024*0.5
=68719476736
。
说明
内存大小需换算成 bytes。
设置语句:
sysctl kernel.shmmax='68719476736'
kernel.shmmni
该参数系统范围内共享内存段的最大数量。
默认值:4096。
说明
每个 VexDB 数据库集群至少 2 个共享内存段。
设置语句:
sysctl kernel.shmmni='819200'
net.core.netdev_max_backlog
该参数表示允许送到队列的数据包的最大数目。
说明
iptables 防火墙链表相关。
设置语句:
sysctl net.core.netdev_max_backlog='10000'
net.core.rmem_default
该参数表示预留用于接收缓冲的内存默认值。
单位:bytes。
设置语句:
sysctl net.core.rmem_default='262144'
net.core.rmem_max
该参数表示预留用于接收缓冲的内存最大值。
单位:bytes。
设置语句:
sysctl net.core.rmem_max='4194304'
net.core.wmem_default
该参数表示预留用于发送缓冲的内存默认值。
单位:bytes。
设置语句:
sysctl net.core.wmem_default='262144'
net.core.wmem_max
该参数表示预留用于发送缓冲的内存最大值。
单位:bytes。
设置语句:
sysctl net.core.wmem_max='4194304'
net.core.somaxconn
该参数表示 socket 监听的 backlog(队列)上限。
默认值:128
设置语句:
sysctl net.core.somaxconn='4096'
net.ipv4.tcp_fin_timeout
该参数表示 FIN_WAIT_2 状态的超时时长。
单位:秒。
说明
用于加快僵死进程回收速度。
设置语句:
sysctl net.ipv4.tcp_fin_timeout='5'
vm.dirty_background_bytes
该参数表示触发回刷的脏页数据量,超过该参数后脏页刷到磁盘。
单位:btyes。
设置语句:
sysctl vm.dirty_background_bytes='409600000'
vm.dirty_expire_centisecs
该参数表示脏数据的过期时间,超过该时间系统会将脏数据回写到磁盘上。
单位:百分之一秒。
说明
比 vm.dirty_expire_centisecs 值旧的脏页,将被刷到磁盘。
以下命令中 3000 代表 30 秒。
设置语句:
sysctl vm.dirty_expire_centisecs='3000'
vm.dirty_ratio
该参数表示脏数据百分比,超过这个百分比,新的 IO 请求将会被阻挡,直到脏数据被写进磁盘。
设置语句:
sysctl vm.dirty_ratio='80'
vm.dirty_writeback_centisecs
该参数表示多长时间,后台刷脏页进程会被唤醒一次,检查是否有缓存需要清理。
单位:百分之一秒。参数设置为 100 代表 1 秒,如下命令中 50 代表 0.5 秒。
设置语句:
sysctl vm.dirty_writeback_centisecs='50'
vm.overcommit_memory
该参数表示内存分配策略,可选值:0、1、2。
- 0:表示内核将检查是否有足够的可用内存供应用进程使用,如果有足够的可用内存,内存申请允许;否则,内存申请失败,并把错误返回给应用进程。
- 1:表示内核允许分配所有的物理内存,而不管当前的内存状态如何。
- 2:表示内核允许分配超过所有物理内存和交换空间总和的内存。
说明
在分配内存时 vm.overcommit_memory 设置为 0,vm.overcommit_ratio 参数可以不设置。
设置语句:
sysctl vm.overcommit_memory='0'
vm.swappiness
该参数表示激活交换之前可用内存的百分比。数值越低,使用的交换越少,并且物理内存中保留的内存页越多。
默认值:60
说明
设置为 0 时表示关闭交换分区,数据库服务器不建议使用 swap,0 值仅在极限测试时使用。
设置语句:
sysctl vm.swappiness='60'
net.ipv4.ip_local_port_range
该参数可以设置本地动态端口分配范围,防止占用监听端口。
设置语句:
sysctl net.ipv4.ip_local_port_range='40000 65535'
fs.nr_open
该参数表示单个进程可分配的最大文件数。对于有很多对象(表、视图、索引、序列和物化视图等)的数据库,建议设置为 2000 万。
单位:个
说明
建议设置为 2000 万。
设置语句:
sysctl fs.nr_open='20000000'
添加排序规则
在除凝思之外的其他 Linux 操作系统中,添加语言排序规则方法如下:
(root 用户执行)
- 执行如下命令安装 locales 包。
apt-get install locales
- 执行如下命令,安装新的语言排序规则。
dpkg-reconfigure locales
也可使用如下命令安装 en_US.utf8。localedef -v -c -i en_US -f UTF-8 en_US.UTF-8