gaussdb 数据库用户和安全管理【配置操作系统环境】【06】

1. 规划系统用户

修改用户名,把用户名 “gaussdba” 改名为 “gauss”。

usermod -l gauss gaussdba

锁定“gauss”用户,使其不能登录。

usermod -L gauss

解锁“gauss”用户帐号,使其可以登录。

usermod -U gauss

查看账号是否过期

chage -l gauss

设置账号永不过期

chage -M 99999 gauss

删除用户

userdel  -r gauss

说明:

  • userdel 命令可删除用户帐号与相关的文件。若不加参数,则仅删除用户帐号,而不删除相关文件。
  • 删除用户帐号前请确保GaussDB已经卸载。

2. 设置共享内存和信号灯

背景信息

  • GaussDB每个允许的连接使用一个信号灯max_connections,它以16个为一套,每套还包含第17个信号灯,里面存一个"magic number",用以检测是否和其他信号灯集冲突。
  • 如果缺少这个机制,服务器启动时会出现Illegal system call错误,这时只能重新配置内核。
  • GaussDB超出IPC资源的硬限制之一便会拒绝启动,并留下一条错误信息,告诉你它碰到了什么问题以及需要为它做些什么。
  • 需要重启机器或者重新编译内核来修改这些设置。
参数名字 参数描述 合理取值
SHMMAX 最大共享内存段尺寸(字节) 请参见本文参数说明。
SHMMIN 最小共享内存段尺寸(字节) 1
SHMALL 可用共享内存的总数量(字节或页面) 如果是字节,取值和SHMMAX一样,如果是页面,取值为ceil(SHMMAX/PAGESIZE)。

说明:
可以用getconf PAGESIZE命令查看一个页面的字节数。
SHMSEG 每个进程最大共享内存段数量 只需要1个段。
SHMMNI 系统范围最大共享内存段数量 类似SHMSEG加上用于其他应用程序的空间。
SEMMNI 信号集的最大数量 ceil(max_connections/16)。
SEMMNS 系统范围的最大信号灯数量 ceil(max_connections/16)*17加上用于其他应用程序的空间。
SEMMSL 每套信号灯的最大信号灯数量 17。
SEMMAP 信号灯映射里的记录数量 请参见本文参数说明。
SEMVMX 信号灯的最大值 缺省为32767。

参数说明

  • SHMMAX
    它是以字节记的最大共享内存段的尺寸,如果收到来自shmget的Invalid argument这样的错误信息,那很可能超过了这个参数的限制。

  • SHMALL
    该数值等于GaussDB加上其他使用共享内存段的应用的综合。

  • 说明:
    SHMALL在很多系统上使用页面数,而不是用字节数计算的。

  • SHMMIN
    这个参数对GaussDB来说大约是500KB左右。

  • SEMMNS
    这个参数设置系统里最大信号灯数目,这个值至少应和max_connections设置一样大,并且每16个连接还要加上一个(请参见表System V IPC参数)。

  • SEMMNI
    这个参数决定系统里一次可以存在的信号灯集的数目。至少应为 ceil(max_connections / 16)。

  • SEMMA
    这个参数决定存放信号灯映射空间的大小,每个信号灯在这个空间中都有一个映射,如果这个空间填满碎片,会导致可用的信号灯比应该可用的少。

  • SEMMSL
    这个参数决定一套信号灯里可以有多少信号灯,GaussDB中为17。

问题:缺省设置只适合小安装(缺省最大共享内存是 1024MB)。最大共享内存段可以用两种方法设置。比如,要将最大共享内存段设置为4G即1048576页,有如下两种方式。

方法一:用sysctl接口进行设置,操作步骤如下。

以root用户身份登录linux操作系统。用sysctl接口进行修改。

sysctl -w kernel.shmmax=4294967296
sysctl -w kernel.shmall=1048576

方法二:修改sysctl.conf文件,操作步骤如下。

以root用户身份登录linux操作系统。用vi编辑器打开sysctl.conf,并增加如下内核参数。

 vi  /etc/sysctl.conf
 kernel.shmmax = 4294967296
 kernel.shmall = 1048576

执行如下命令,使Linux启动时自动读取内核参数。

 /sbin/chkconfig boot.sysctl on

执行如下命令,使内核参数生效。

 /sbin/sysctl -p

3. 设置资源限制

Linux内核通常有一些系统范围的资源限制,这些限制会干扰GaussDB服务器的运行。

背景信息

  • 一些系统允许独立的进程打开非常多的文件,如果有许多进程同时打开很多文件,很快就会达到系统规定的上限。这时可以设置GaussDB的max_files_per_process配置参数来限制每个进程最多打开的文件数。
  • 系统最多可以打开的文件数是在编译Linux内核固定的,GaussDB服务器每个连接都使用一个进程,所以最多可以打开的文件数应该等于进程数加上系统其他部分所需要的数目。

问题:设置系统最大可以打开的文件的数目有如下两种方式。

方式一:修改file-max文件,操作步骤如下。

以root用户身份登录Linux操作系统。修改file-max文件。

 vi /proc/sys/fs/file-max 

方式二:在/etc/sysctl.conf里添加fs.file-max参数,操作步骤如下。

以root用户身份登录Linux操作系统。在内核配置文件“/etc/sysctl.conf”中添加此参数。

vi /etc/sysctl.conf
fs.file-max = 4866970

执行如下命令,使Linux启动时自动读取内核参数。

 /sbin/chkconfig boot.sysctl on

执行如下命令,使内核参数生效。

 /sbin/sysctl -p

4. 设置Linux内存的Overcommit

为避免虚拟内存用光导致GaussDB服务器进程的终止,需要设置 Linux 内存的过提交。

背景信息
如果内核因为内存的压力终止了GaussDB服务器进程,您会看到像下面这样的内核信息:Out of Memory: Killed process 12345 (gaussdb),此时,现有的数据连接将正常运转,但新的连接无法建立,重启GaussDB可以解决该问题。但要避免此问题需在有足够内存的机器上运行GaussDB ,或采取修改内存行为的方法来解决。

问题:修改内存的行为,有两种方法。

方法一:用sysctl选取一个严格的过提交模式,操作步骤如下。

以root用户身份登录linux操作系统。设置过提交的模式,命令如下。

 /sbin/sysctl  -w vm.overcommit_memory=2

方法二:在/etc/sysctl.conf里设置vm.overcommit_memory参数,操作步骤如下。

以root用户身份登录linux操作系统。用vi编辑器向sysctl.conf写入vm.overcommit_memory配置参数,命令如下:

vi /etc/sysctl.conf
vm.overcommit_memory = 2

执行如下命令,使Linux启动时自动读取内核参数。

 /sbin/chkconfig boot.sysctl on

执行如下命令,使内核参数生效。

 /sbin/sysctl -p

5. 例子

数据库无法启动,报错如下

**FATAL**: could not create semaphores: 设备上没有空间(pg_sema.c:123)
**DETAIL**: Failed system call was semget (5432129.17.03600)
**HINT**: This error does "not" mean that you have run out of disk...(SEMMNS)...(SEMMIN)...

解决方式

vim  /etc/sysctl.conf  
# 追加或修改
kernel.sem = 250 256000 32 1024

# 加载生效
sysctl -p

猜你喜欢

转载自blog.csdn.net/qq_42226855/article/details/109599388