目录
主节点数据库初始化完成后开始流复制主节点参数配置(数据库软件版本保持一致)
建立系统数据库安装用户组及用户,在所有的节点执行
root用户登陆服务器,创建用户组及用户并且设置密码
groupadd -g 2000 kingbase
useradd -G kingbase -g 2000 kingbase -m
passwd kingbase
备注:用户组及用户名称可以自定义,这里以kingbase用户为例
配置/etc/hosts文件
vim /etc/hosts
192.168.10.10 node1 #主库
192.168.10.20 node2 #备库
备注:/etc/hosts配置属于可选项目,这里配置主要是区分后续的复制槽,在一主多备的场景方便区分复制槽对应的主机
系统参数配置:所有节点都必须配置
系统内核参数/etc/sysctl.conf,详细配置请参考系统手册
示例 vim /etc/sysctl.conf
fs.aio-max-nr= 1048576
fs.file-max= 6815744
kernel.shmall= 2097152
kernel.shmmax= 2174483648
kernel.shmmni= 4096
kernel.sem= 5010 641280 5010 256
net.ipv4.ip_local_port_range= 9000 65500
net.core.rmem_default= 262144
net.core.rmem_max= 4194304
net.core.wmem_default= 262144
net.core.wmem_max= 1048576
net.ipv4.tcp_rmem=8192 87380 16777216
net.ipv4.tcp_wmem=8192 65536 16777216
vm.dirty_background_ratio = 5
vm.dirty_ratio = 10
vm.dirty_background_bytes=25
参数说明:
fs.aio-max-nr参数决定了系统中所允许的文件句柄最大数目,文件句柄设置代表linux系统中可以打开的文件的数量
fs.file-max参数表示进程(比如一个worker进程)可以同时打开的最大句柄数,这个参数限制最大并发连接数。
kernel.shmall参数表示系统一次可以使用的共享内存总量(以页为单位)缺省值就是2097152,通常不需要修改
kernel.sshmmax参数定义了共享内存段的最大尺寸(以字节为单位)
kernel.shmmni参数用于设置系统范围内共享内存段的最大数量。该参数的默认值是 4096
kernel.sem参数表示设置的信号量
# 5010是参数semmsl的值,表示一个信号量集合中能够包含的信号量最大数目。
# 641280是参数semmns的值,表示系统内可允许的信号量最大数目。
# 5010是参数semopm的值,表示单个semopm()调用在一个信号量集合上可以执行的操作数量。
# 256是参数semmni的值,表示系统信号量集合总数
net.ipv4.ip_local_port_range参数表示应用程序可使用的IPv4端口范围
net.core.rmem_default参数表示套接字接收缓冲区大小的缺省值
net.core.rmem_max参数表示套接字接收缓冲区大小的最大值
net.core.wmem_default参数表示套接字发送缓冲区大小的缺省值
net.core.wmem_max=参数表示套接字发送缓冲区大小的最大值
数据库的推荐设置,提高网络性能
net.ipv4.tcp_rmem=8192 87380 16777216
net.ipv4.tcp_wmem=8192 65536 16777216
NUMA设置
大多数情况,可以在BIOS层面关闭NUMA支持,并且在OS启动参数中设置numa off参数,那么我们再OS上就可以不用关注NUMA问题了。
grubby --update-kernel=/boot/vmlinuz-$(uname -r) --args="numa=off"
如果在OS上没有关闭NUMA,也可以通过下面的手段让数据库在分配内存的时候不理会NUMA的远程内存。
vm.zone_reclaim_mode=0
vm.numa_balancing=0
numactl-interleave=all
避免OOM发生
m.swappiness = 0 # 建议设置为0
vm.overcommit_memory = 2 # 允许一定程度的Overcommit
vm.overcommit_ratio = 50 # 允许的Overcommit:$((($mem - $swap) * 100 / $mem))
文件缓存脏块回写策略
vm.dirty_background_ratio = 5(10–>5)
vm.dirty_ratio = 10~15
vm.dirty_background_bytes=25
当pagecache变脏了,需要将脏页刷出内存。linux中通过一些参数来控制何时进行内存回写。
vm.dirty_background_ratio/vm.dirty_background_bytes
内存中允许存在的脏页比率或者具体值。达到该值,后台刷盘。取决于外存读写速度的不同,通常将vm.dirty_background_ratio设置为5,而vm.dirty_background_bytes设置为读写速度的25%。
vm.dirty_ratio/vm.dirty_bytes
前台刷盘会阻塞读写,一般vm.dirty_ratio设置的比vm.dirty_background_ratio大,设置该值确保系统不会再内存中保留过多数据,避免丢失。
vm.dirty_expire_centisecs
脏页在内存中保留的最大时间。
vm.dirty_writeback_centisecs
刷盘进程(pdflush/flush/kdmflush)周期性启动的时间
预留足够的物理内存,用于文件的读写CACHE
根据业务系统的特点与硬件的IO能力调整脏块刷新频率
如果物理IO性能很强,则降低刷新频率,减少脏块比例,如果物理IO性能较弱,则往反方向调整。
设置完成后使用root用户执行 sysctl -p 使参数生效
系统资源限制
/etc/security/limits.conf
/etc/security/limits.d/20-nproc.conf
如果系统只有/etc/security/limits.conf文件,没有/etc/security/limits.d/20-nproc.conf文件,只需修改/etc/security/limits.conf文件,如果全部都有,那么2个文件都要修改
vim /etc/security/limits.conf
kingbase soft nofile 65536
kingbase hard nofile 65535
kingbase soft nproc 65536
kingbase hard nproc 65535
kingbase soft core unlimited
kingbase hard core unlimited
设置完成后,切换到kingbase用户使用ulimit -a进行查看
# 使用unlimited ,是最大数量则表示无限制
# * 表示所有用户,这里也可只设置root 和要安装的kingbase 用户设置其值
# nofile 是打开文件最大数目,nproc 为进程最大数目,core 为生成内核文件大小的上限
# soft 代表一个警告值,hard 为真正的阈值,超过就会报错,可以适当继续往高调
# PAM 的调整针对单个会话生效,调整后需重新登录root 和kingbase,用ulimit -n 查看生效情况
# 注意:设置nofile 的hard limit 不能大于/proc/sys/fs/nr_open,否则注销后将无法正常登陆
查看磁盘IO调度
查看当前I/O 调度策略cat /sys/block/{DEVICE-NAME}/queue/scheduler
• 修改I/O 调度策略为deadline(最后期限算法,根据算法保证请求不饿死)
• {DEVICE-NAME} = 硬盘名称
机械硬盘,推荐deadline 调度算法,较为适合业务单一并且IO 比较重的业务,比如数据库。
固态硬盘,推荐noop 调度算法。
查看系统支持IO 调度算法:
dmesg | grep -i scheduler
[ 1.203287] io scheduler noop registered
[ 1.203289] io scheduler deadline registered (default) [ 1.203311]
io scheduler cfq registered
[ 1.203314] io scheduler mq-deadline registered [ 1.203316] io
scheduler kyber registered
查看某块盘的IO 调度算法
cat /sys/block/{DEVICE-NAME}/queue/scheduler
如果是普通的机械硬盘建议修改磁盘IO调度策略为:deadline (最后期限算法,根据算法保证请求不饿死)
修改IO磁盘调度策略为deadline,示例如下:
linux6版本:
# echo deadline > /sys/block/sda/queue/scheduler
也可以写在grub中:
kernel /vmlinuz-2.6.18-274.3.1.el5 ro root=LABEL=/
elevator=deadline crashkernel=128M@16M quiet console=tty1
console=ttyS1,115200 panic=30 transparent_hugepage=never
initrd /initrd-2.6.18-274.3.1.el5.img
linux7版本
grubby --update-kernel=ALL --args="elevator=deadline"
暂时不建议使用透明大页,并且在一些高负载的大型数据库系统中建议关闭操作系统的透明大页功能
grubby --update-kernel=ALL --args="transparent_hugepage=never"
磁盘阵列一般都用write-back cache,因为他配置了电池,一般称为battery-backed write cache(BBC or BBWC)
安装kingbaseES数据库软件:
-
主库安装数据库软件,备库无需安装
浏览器输入以下网址,在安装包选择对应的CPU版本进行下载,然后在授权窗口下载license-企业版授权文件 https://www.kingbase.com.cn/rjcxxz/index.htm
-
下载完成后进行数据库软件的安装
修改下载的license_V8R6-企业版-365天.dat 为license.dat mv license_V8R6-企业版-365天.dat license.dat 上传下载完成的软件安装包ISO镜像和lisence授权文件:
-
安装路径规划:主库备库路径尽量都保持一致(表空间/数据目录/归档日志目录...)
-
使用kingbase用户创建软件安装目录及数据存放目录:
kingbaseES数据库软件安装地址:mkdir -p /home/kingbase/KingbaseES/V8/ kingbaseES数据库数据存放地址:mkdir -p /home/kingbase/data
备注:如果使用root用户进行创建,创建完成后需要手动进行权限更改chown -R kingbase:kingbase /home/kingbase/
-
root用户进行安装包ISO文件挂载
mount /home/kingbase/KingbaseES_V008R006C006B0021_Lin64_install.iso /mnt/
-
切换到kingbase用户进行软件安装
cd /mnt 命令行安装输入 ./setup.sh -i console 根据提示进行软件安装。 图形界面安装,直接点击setup可执行文件进行安装,路径选择前面创建的路径
-
主节点安装完成后,将安装后的目录打包
tar cvf KingbaseES.tar KingbaseES/ 主库第一次安装软件会进行数据库初始化。
备注:如果安装的时候没有初始化数据库操作,需要在软件安装完成后进行数据库初始化操作(只在主库节点操作,备库节点不用做)
-
打包完成后传送到备库节点kingbase用户目录
scp KingbaseES.tar kingbase@192.168.57.20:~ kingbase用户登陆备库节点解压发送的tar包
-
配置系统kingbase用户环境变量:所有节点都配置(先只需配置主库节点,备库节点后面在进行配置)
vim .bash_profile export KDBHOME=/home/kingbase/KingbaseES/V8/Server export KDBDATA=/home/kingbase/data export LANG=zh_CN.UTF-8 export PATH=$PATH:$HOME/.local/bin:$HOME/bin:$KDBHOME/bin source .bash_profile使环境变量生效
初始化数据库命令,安装完主节点数据库软件,并且配置了kingbase用户环境变量
initdb -Usystem -Eutf8 -D /home/kingbase/data/ -mpg
initdb 初始化一个 Kingbase 数据库簇. 使用方法: initdb [选项]... [DATADIR] 选项: -A, --auth=METHOD default authentication method for local connections --auth-host=METHOD default authentication method for local TCP/IP connections --auth-local=METHOD default authentication method for local-socket connections -c, --config-protect enable encrypted config file, default is false [-D, --kingbase_data=]DATADIR 数据库路径 -E, --encoding=ENCODING set default encoding for new databases -g, --allow-group-access allow group read/execute on data directory --locale=LOCALE set default locale for new databases --lc-collate=, --lc-ctype=, --lc-messages=LOCALE --lc-monetary=, --lc-numeric=, --lc-time=LOCALE set default locale in the respective category for new databases (default taken from environment) --no-locale equivalent to --locale=C --enable-ci 是否大小写敏感,默认为敏感。off为敏感 on为不敏感 --pwfile=FILE read password for the new superuser from file -T, --text-search-config=CFG default text search configuration -U, --username=NAME 数据库超级用户名称 -W, --pwprompt prompt for a password for the new superuser -X, --waldir=WALDIR 指定wal日志路径,默认为DATADIR/sys_wal --wal-segsize=SIZE size of WAL segments, in megabytes -m, --dbmode=MODE 数据库兼容模式oracle/pg。默认为oracle(兼容oracle存储过程/函数/视图/类型...语法),pg模式为原生postgresql数据库 -e, --encrypt-algorithm=METHOD Specify encryption method -t,