【本文正在参与炫“库”行动-人大金仓有奖征文】
https://marketing.csdn.net/p/98bd30353e7cb998b6070a89e8b91edb
kingbaseV8R3安装部署
一、安装部署
1.安装前检查
1.1. 安装环境检查
检查内容 | 最低标准 | 检查命令 |
---|---|---|
CPU | 32或64位 | lscpu |
内存 | 1GB以上 | free -g |
硬盘 | 1GB以上空间 | df -h |
实际结果应>=项目规划值
1.2. 软件依赖检查
- uname -a
1.3. 数据库版本检查、是否安装有ksql
查看客户端版本:ksql --version
查看服务器端版本:
select version();
show server_version;
show server_version_num;
select current_setting('server_version_num');
注意事项: select current_setting(‘server_version_num’);返回类型为text,如果需要可以转换为
select current_setting(‘server_version_num’)::integer;
1.4. license检查
检查内容 | 要求 |
---|---|
商务确认 | 正式版、试用版 |
2. 安装步骤
2.1. 安装检查
- 操作系统时间、防火墙状态及SELINUX是否可以自行修改:
检查内容 | 实施命令 |
---|---|
操作系统时间 | 查看时间:date 修改正确时间:date -s 正确时间 同步到硬件:/sbin/hwclock --systohc 能连接外网的话,可以通过ntp来同步 |
防火墙状态 | centos6和redhat6版本 service iptables stop chkconfig iptables off iptables -L iptables -F |
centos7版本 systemctl stop firewalld systemctl disabled firewalld.service firewall-cmd -state iptables-save 只开放端口 firewall-cmd --zone=public --add-port=54321/tcp --permanent systemctl restart firewalld firewall-cmd --list-ports | |
selinux | vi /etc/selinux/config SELINUX=disabled |
2.2. 创建用户
useradd -m -U kingbase
passwd kingbase
2.3. 修改主机名
vi /etc/sysconfig/network
NETWORKING=yes
HOSTNAME=kb8.2
2.4.文件目录规划
安装包存放目录:/home/kingbase/kdb_install
mkdir -p /home/kingbase/kdb_install
安装目录:/home/kingbase/ES/V8
mkdir -p /home/kingbase/ES/V8
数据目录:/home/kingbase/ES/V8/data/
mkdir -p /home/kingbase/ES/V8/data/
备份目录:/home/kingbase/ES/backup/
mkdir -p /home/kingbase/ES/backup/
脚本目录:/home/kingbase/ES/V8/scripts/
mkdir -p /home/kingbase/ES/V8/scripts/
归档目录:/home/kingbase/ES/archive/
mkdir -p /home/kingbase/ES/archive/
授予权限 chown -R kingbase:kingbase /home/kingbase
2.5. 操作系统参数
1) 修改资源限制(以下操作需要root 权限)
vim /etc/security/limits.conf
增加如下内容:
kingbase hard nofile 65536
kingbase soft nofile 65536
kingbase hard nproc 65536
kingbase soft nproc 65536
kingbase soft core unlimited
kingbase hard core unlimited
如果limits.d 目录下有文件,则它的优先级更高:
vim /etc/security/limits.d/20-nproc.conf
kingbase soft nproc 65536
'''
username|@groupname:设置需要被限制的用户名,组名前面加@和用户名区别。也可以用通配符*来做所有用户的限制。
type:有 soft,hard 和 -,soft 指的是当前系统生效的设置值。hard 表明系统中所能设定的最大值。soft 的限制不能比har 限制高。用 - 就表明同时设置了 soft 和 hard 的值。
resource:
core - 限制内核文件的大小
date - 最大数据大小
fsize - 最大文件大小
memlock - 最大锁定内存地址空间
nofile - 打开文件的最大数目
rss - 最大持久设置大小
stack - 最大栈大小
cpu - 以分钟为单位的最多 CPU 时间
noproc - 进程的最大数目
as - 地址空间限制
maxlogins - 此用户允许登录的最大数目
// 后面的数字为限制数
'''
2)修改内核参数:(以下操作需要root 权限)
vim /etc/sysctl.conf
增加如下内容(#号后面为注释内容):
'''带解析'''
kernel.sem = 5010 641280 5010 256 -- 该文件包含4个值:
-- 1.同一类信号的最多数量(semmsl)
-- 2.系统中信号的最多数目,=semmni*semmsl (semmns)
-- 3.每个semop系统调用所包含的最大的操作数(能调用的信号量的最多次数) (semopm)
-- 4.系统中信号类型的数目的最大值,一个信号量标识符代表一个类型(semmni)
fs.aio-max-nr = 1048576 -- 最大允许aio请求数量(会涉及到数据库的aio请求)
fs.file-max = 6815744 -- 系统中所有进程能够同时打开的文件句柄数量
kernel.shmall = 2097152 -- 系统上可以使用的共享内存的总量(以字节为单位)。
kernel.shmmax = 4294967295 -- 系统所允许的最大共享内存段的大小(以字节为单位)。
kernel.shmmni = 4096 -- 整个系统共享内存段的最大数量。
net.ipv4.ip_local_port_range = 9000 65500 -- 本地发起连接时使用的端口范围,tcp初始化时会修改此值
net.core.rmem_default = 262144 -- 设置接收socket的缺省缓存大小(字节)
net.ipv4.tcp_fin_timeout = 30 -- 本端断开的socket连接,TCP保持在FIN-WAIT-2状态的时间。对方可能会断开连接或一直不结束连接或不可预料的进程死亡。默认值为 60 秒。过去在2.2版本的内核中是 180 秒。设置该值,需要注意,如果机器为负载很重的web服务器,可能要冒内存被大量无效数据报填满的风险,FIN-WAIT-2 sockets 的危险性低于 FIN-WAIT-1,因为它们最多只吃 1.5K 的内存,但是它们存在时间更长。
net.core.rmem_max = 4194304 -- 设置接收socket的最大缓存大小(字节)
net.core.wmem_default = 262144 -- 设置发送的socket缺省缓存大小(字节)
net.core.wmem_max = 1048576 -- 设置发送的socket最大缓存大小(字节)
net.core.somaxconn = 1024 -- 定义系统中每一个端口最大的监听队列的长度,这是个全局的参数。
vm.swappiness=0 -- 不要走swap,100 该值越高则linux越倾向于部分长期没有用到的页swap,即便有足够空余物理内存(1~100)
vm.overcommit_memory = 2 -- 是否允许内存的过量分配,允许进程分配比它实际使用的更多的内存。
-- 0:当用户申请内存的时候,内核会去检查是否有这么大的内存空间,当超过地址空间会被拒绝
-- 1:内核始终认为,有足够大的内存空间,直到它用完了位置
-- 2:内核禁止任何形式的过量分配内存
-- Memory allocation limit = swapspace + physmem * (overcommit_ratio / 100)
vm.overcommit_ratio = 90 -- mem/(mem+swap) 内存可过量分配的百分比。
vm.dirty_background_ratio=1 -- 默认10,在数据库系统中最好设置小一点,当脏页所占的百分比(相对于所有可用内存,即空闲内存页+可回收内存页)达到dirty_background_ratio时,write调用会唤醒内核的flusher线程开始回写脏页数据,直到脏页比例低于此值,与dirty_ratio不同,write调用此时并不会阻塞。
vm.dirty_ratio = 2 -- 低一点,脏页所占的百分比(相对于所有可用内存,即空闲内存页+可回收内存页)达到dirty_ratio时,write调用会唤醒内核的flusher线程开始回写脏页数据,直到脏页比例低于此值,注意write调用此时会阻塞。
# TCP 端口使用范围
net.ipv4.tcp_keepalive_time = 1200 -- 表示从最后一个包结束后多少秒内没有活动,才发送keepalive包保持连接,默认7200s,理想可设为1800s,即如果非正常断开,1800s后可通过keepalive知道。
net.ipv4.tcp_keepalive_probes = 3 -- 该文件表示丢弃TCP连接前,进行最大TCP保持连接侦测的次数。保持连接仅在SO_KEEPALIVE套接字选项被打开时才被发送。
net.ipv4.tcp_keepalive_intvl = 30 -- 表示发送TCP探测的频率,乘以tcp_keepalive_probes表示断开没有相应的TCP连接的时间。
net.ipv4.ip_local_port_range = 10000 65000 -- 本地发起连接时使用的端口范围,tcp初始化时会修改此值
net.ipv4.tcp_max_syn_backlog = 8192 -- 对于那些依然还未获得客户端确认的连接请求,需要保存在队列中最大数目。默认值是1024
net.ipv4.tcp_max_tw_buckets = 6000 -- 系统在同时所处理的最大timewait sockets 数目。如果超过此数的话,time-wait socket 会被立即砍除并且显示警告信息。
# 记录的那些尚未收到客户端确认信息的连接请求的最大值
net.ipv4.tcp_max_syn_backlog = 65536 -- 对于那些依然还未获得客户端确认的连接请求,需要保存在队列中最大数目。默认值是1024,可提高到2048。
# 每个网络接口接收数据包的速率比内核处理这些包的速率快时,允许送到队列的数据包的最大数目
net.core.netdev_max_backlog = 32768 -- 设置当个别接口接收包的速度快于内核处理速度时允许的最大的包序列
net.ipv4.tcp_synack_retries = 2 -- 对于远端的连接请求SYN,内核会发送SYN + ACK数据报,以确认收到上一个 SYN连接请求包。这是所谓的三次握手.这里决定内核在放弃连接之前所送出的 SYN+ACK 数目.
net.ipv4.tcp_syn_retries = 2 -- 表示本机向外发起TCP SYN连接超时重传的次数,不应该高于255;该值仅仅针对外出的连接,对于进来的连接由tcp_retries1控制。
net.ipv4.route.gc_timeout = 100 -- 设置一个路由表项的过期时长(秒).
net.ipv4.tcp_wmem = 8192 436600 873200 -- 此文件中保存有三个值,分别是
-- Min:为TCP socket预留用于发送缓冲的内存最小值。每个tcp socket都可以在建立后使用它。
-- Default:为TCP socket预留用于发送缓冲的内存数量,默认情况下该值会影响其它协议使用的net.core.wmem_default 值,一般要低于net.core.wmem_default的值。
-- Max:用于TCP socket发送缓冲的内存最大值。该值不会影响net.core.wmem_max,"静态"选择参数SO_SNDBUF则不受该值影响。
net.ipv4.tcp_rmem = 32768 436600 873200 -- 此文件中保存有三个值,分别是
-- Min:为TCP socket预留用于接收缓冲的内存最小值。每个tcp socket都可以在建立后使用它。即使在内存出现紧张情况下tcp socket都至少会有这么多数量的内存用于接收缓冲
-- Default:为TCP socket预留用于接收缓冲的内存数量,默认情况下该值会影响其它协议使用的net.core.rmem_default 值,一般要低于net.core.rmem_default的值。该值决定了在tcp_adv_win_scale、tcp_app_win和tcp_app_win=0默认值情况下,TCP窗口大小为65535。
-- Max:用于TCP socket接收缓冲的内存最大值。该值不会影响net.core.rmem_max,"静态"选择参数SO_SNDBUF则不受该值影响。
net.ipv4.tcp_mem = 94500000 91500000 92700000 -- 该文件保存了三个值,分别是
-- low:当TCP使用了低于该值的内存页面数时,TCP不会考虑释放内存。
-- presure:当TCP使用了超过该值的内存页面数量时,TCP试图稳定其内存使用,进入pressure模式,当内存消耗低于low值时则退出pressure状态。
-- high:允许所有tcp sockets用于排队缓冲数据报的页面量。
net.ipv4.tcp_max_orphans = 3276800 -- 系统所能处理不属于任何进程的TCP sockets最大数量。假如超过这个数量,那么不属于任何进程的连接会被立即reset,并同时显示警告信息。之所以要设定这个限制,纯粹为了抵御那些简单的 DoS 攻击,千万不要依赖这个或是人为的降低这个限制。
'''不带解析'''
vm.dirty_background_ratio=1
kernel.sem = 5010 641280 5010 256
fs.aio-max-nr = 1048576
fs.file-max = 6815744
kernel.shmall = 2097152
kernel.shmmax = 4294967295
kernel.shmmni = 4096
net.ipv4.ip_local_port_range = 9000 65500
net.core.rmem_default = 262144
net.ipv4.tcp_fin_timeout = 30
net.core.rmem_max = 4194304
net.core.wmem_default = 262144
net.core.wmem_max = 1048576
net.core.somaxconn=1024
vm.swappiness=0
vm.overcommit_memory = 2
vm.overcommit_ratio = 90
vm.dirty_background_ratio=1
vm.dirty_ratio = 2
net.ipv4.tcp_keepalive_time = 1200
net.ipv4.tcp_keepalive_probes = 3
net.ipv4.tcp_keepalive_intvl = 30
net.ipv4.ip_local_port_range = 10000 65000
net.ipv4.tcp_max_syn_backlog = 8192
net.ipv4.tcp_max_tw_buckets = 6000
net.ipv4.tcp_max_syn_backlog = 65536
net.core.netdev_max_backlog = 32768
net.core.wmem_default = 8388608
net.core.rmem_default = 8388608
net.core.rmem_max = 16777216
net.ipv4.tcp_synack_retries = 2
net.ipv4.tcp_syn_retries = 2
net.ipv4.route.gc_timeout = 100
net.ipv4.tcp_wmem = 8192 436600 873200
net.ipv4.tcp_rmem = 32768 436600 873200
net.ipv4.tcp_mem = 94500000 91500000 92700000
net.ipv4.tcp_max_orphans = 3276800
-- 重新加载生效
sysctl -p
3)修改磁盘IO 调度策略,有些系统没有({DEVICE-NAME}为磁盘名,如“sda”):
vim /etc/rc.d/rc.local
echo deadline > /sys/block/{DEVICE-NAME}/queue/scheduler
4)修改IPC(cat redhat-release 查看,7 及以上的版本需要修改)
vim /etc/systemd/logind.conf
RemoveIPC=no(有的版本RemoveIPC=yes,正确的应该是no)
systemctl daemon-reload
systemctl restart systemd-logind.service
-- 5)
-- vi /etc/systemd/system.conf
-- DefaultTaskAccounting=no
关于kernel.shmmax 的设置:
建议值为多于内存的一半,一般取值大于 SGA_MAX_SIZE 即可,可以取物理内存 -1byte
内存为 12G 时,该值为 1210241024*1024-1 = 12884901887
关于kernel.shmall 的设置:Linux 共享内存页大小为 4KB, 共享内存段的大小都是共享内存页大小的整数倍。
当内存为 16G 时, kernel.shmall = 16 * 1024 * 1024 / 4 = 4194304
3. 执行安装
3.1. 注意事项
1.如果在虚拟机中的Linux 系统中安装KES,需要注意Linux 必须安装了图形化界面,且虚拟机的硬件兼容性必须大于等于14.x 版本,否则会导致图形化安装界面不可用,但命令行安装界面仍是可用的;
2.安装程序不能使用root 执行,安装过程必须使用kingbase 用户操作,并使用前面规划好的目录。
3.2. 开始安装
su - kingbase
cd /kingbase/kdb_install/king......install -- 或者 mount /mnt king......install.iso
./setup.sh -i console -- 命令行安装
-- 在没有出现是否接受许可协议条款之前一路回车
-- 出现是否接受许可协议条款后
输入 Y
-- 选择完全安装
输入 1
-- 选择授权文件
/kingbase/kdb_install/license.dat
-- 输入软件安装目录
/kingbase/app/kes/8.2
是否正确根据实际情况输入Y和N
-- 安装清单
一路回车即可
-- 输入数据存放目录
/kingbase/app/kes/8.2/data
-- 按照提示确认数据库端口、管理员、密码、大小写敏感性
1
port:54321
username:system
password:******
Confirm password:******
字符集:UTF8
大小写是否敏感:1
-- 数据库初始化:
回车即可
-- 完成之后root运行脚本
/kingbase/app/kes/8.3/Scripts/root.sh
3.3. license过期
官网下载相对应的版本
进行替换原有的 license.dat
* cd /home/kingbase/ES/V8 -- 这里的路径是安装路径
* mv license.dat license.dat.bak
* 上传新的授权码到安装包存放路径
上传到这个目录/home/kingbase/kdb_install/
* 修改新上传的授权码的名称为 license.dat
cd /kingbase/kdb_install/
cp license_V8R3-企业版.dat /home/kingbase/ES/V8/license.dat
* 修改拥有者
chown kingbase:kingbase license.dat
* 启动数据库
su - kingbase
sys_ctl start
3.4. 测试登陆
3.4.1. 环境变量
su - kingbase
cd ~
vi .bash_profile
export KINGBASE_DATA=/home/kingbase/ES/V8/data
export LD_LIBRARY_PATH=$PATH:/home/kingbase/ES/V8/Server/lib
export PATH=$PATH:/home/kingbase/ES/V8/Server/bin
3.4.2. 登陆数据库
ksql test system
查看客户端版本:ksql --version
查看服务器端版本:
select version();
show server_version;
show server_version_num;
select current_setting('server_version_num');
3.5. 启停
输出内容 | 实施记录 |
---|---|
启动系统服务 | service kingbase8d start |
查看服务状态 | service kingbase8d status |
停止系统服务 | service kingbase8d stop |
4. 数据库参数调优
4.1. 默认参数
vi /kingbase/app/kes/8.2/data/kingbase.conf
listen_addresses='*'
port = 54321
max_connections=1000
app_reserved_connections='JSQL,6'
shared_buffers=RAM*0.4 -- 内存的40%
work_mem =10MB
maintenance_work_mem=1GB
effective_cache_size=RAM*0.5 -- 内存的50%
wal_buffers=512
compatible_level='mixed'
log_statement='ddl'
log_duration=off
lc_messages='C'
log_line_prefix='[%m][%h][%d][%p][%u][%x]'
autovacuum_naptime=10min
max_fsm_pages=10000000
max_fsm_relations=3000
max_locks_per_transaction=1024
checkpoint_timeout=10min
在配置参数的时候由于版本不同,设置按照文档设置参数报错,
4.3. 测试数据库启停
输出内容 | 实施命令 |
---|---|
手动停止启动数据库是否成功 | sys_ctl stop |
用服务启停数据库是否成功 | service kingbase8d [start|stop] |
命令行/客户端,登录数据库是否成功 | ksql -Usystem -dtest |
5. 配置备份脚本
- 必须要做的,由于备份只能放到本地,为了安全可以要求将备份放到独立的磁盘。
输出内容 | 实施记录 |
---|---|
确认备份目录 | 前面创建的/home/kingbase/ES/V8/scripts/ |
拷贝脚本 | 将备份脚本rman_full.sh、rman_page.sh 放到 /home/kingbase/ES/V8/scripts/ |
5.1. 配置脚本
(1)修改rman_full.sh
kdb_home="/home/kingbase/ES/V8/Server" --安装目录
kdb_data="/home/kingbase/ES/V8/data" --数据目录路径
kdb_user="SYSTEM" -- 备份用户
kdb_pass="991917" -- 密码
kdb_port="54321" -- 端口
kdb_host="127.0.0.1" -- ip
kdbback_dest="/home/kingbase/ES/backup/" -- 备份路径
keep_num="2" -- 保留备份集
(2)修改rman_page.sh
kdb_home="/home/kingbase/ES/V8/Server" -- 安装目录
kdb_data="/home/kingbase/ES/V8/data" -- 数据目录路径
kdb_user="SYSTEM" -- 备份用户
kdb_pass="991917" -- 密码
kdb_port="54321" -- 端口
kdb_host="127.0.0.1" -- ip
kdbback_dest="/home/kingbase/ES/backup/" -- 备份路径
5.2. 测试脚本
-- 先开归档
关闭数据库
修改kingbase.conf文件
wal_level=replica
archive_mode=on
archive_command='cp %p /home/kingbase/ES/archive/%f'
archive_dest='/home/kingbase/ES/archive/'
archive_timeout=0
启动数据库
-- 检查归档
ls /kingbase/app/archive/
select sys_switch_xlog();
checkpoint;
select sys_switch_xlog();
checkpoint;
ls /kingbase/app/archive/
-- 测试脚本
sh -x /home/kingbase/ES/V8/scripts/rman_full.sh
ls /home/kingbase/ES/backup/backups/ -- 查看全备
-- 把这三个脚本fast_deploy_rman.sh rman_check.sh rman.conf上传到目录/kiingbase/app/kes/8.2/scripts/
sh -x /home/kingbase/ES/V8/scripts/rman_page.sh
ls /home/kingbase/ES/backup/backups/ -- 查看增备
注意:安装完数据库先开归档,在做备份的时候,备份路径一定要写正确
5.3.备份策略
crontab -e
0 23 * * 7 sh -x /home/kingbase/ES/V8/scripts/rman_full.sh
0 23 * * 1-6 sh -x /home/kingbase/ES/V8/scripts/rman_page.sh
【本文正在参与炫“库”行动-人大金仓有奖征文】
https://marketing.csdn.net/p/98bd30353e7cb998b6070a89e8b91edb