人大金仓数据库KESV8R3集群安装详细教程
注意:每次关机都要先关闭集群
关集群时先关备库再关主库
一、集群部署
1. 安装部署前准备
1.1. 硬件环境检查
- 检查每个节点的硬件配置,是否满足要求,尤其是磁盘方面,如果默认目录空间不够,可以考虑将挂载磁盘通过软连接的方式关联到默认目录
检查内容 | 及各项 | 实际情况 |
---|---|---|
内存 | 1GB以上 | free -g |
硬盘 | 1GB以上空闲空间 | df -h |
IP | 固定IP | ifconfig |
1.2. 软件依赖检查
检查内容 | 及各项 | 实际情况 |
---|---|---|
操作系统版本 | 主流的32/64位linux系统 | 1.uname -a 2.cat /proc/version 3.cat /etc/issue 或 cat /etc/redhat-release 4.cat /proc/cpuinfo 5.getconf LONG_BIT 6.lsb_release -a(centos7.0以上版本可以直接使用,以下版本需要安装lsb) |
1.3. 检查介质
查看客户端版本:ksql --version
查看服务器端版本:
select version();
show server_version;
show server_version_num;
select current_setting('server_version_num');
1.4. license检查
2. 安装准备
2.1. 确认安装参数
输出内容 | 实施记录 |
---|---|
DB VIP | |
Cluster VIP | |
是否大小写敏感 | |
用户名密码 | |
是否兼容oracle | |
数据库端口号,cluster端口号 | |
确认安装目录,保密机是否否有盘阵 | |
是否需要定时备份 |
2.2. 安装检查
-
与集成商确认,操作系统时间、防火墙状态及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.3. 创建用户
输出内容 | 实施命令 |
---|---|
数据库属主用户名/密码 | useradd -m -U dn passwd dn |
2.4. 修改主机名
vi /etc/hostname
HOSTNAME=xxx
2.5. 目录规划
输出内容 | 执行命令 |
---|---|
安装包存放目录,建议:/kingbase/kdb_install | mkdir -p /home/kingbase/kdb_install |
客户端软件目录,建议:/kingbase/app/kes/8.2 | mkdir -p /home/km/app/kes/8.2 |
集群安装目录 | mkdir -p /home/kingbase/cluster/kingbasecluster/db |
数据目录 | mkdir -p /home/kingbase/cluster/kingbasecluster/db/data |
授予权限 | chown -R kingbase:kingbase /home/kingbase |
2.6. 修改操作系统参数
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
增加如下内容(#号后面为注释内容):
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
3. 执行安装
3.1. 网卡绑定
3.1.1. 网卡检查
nmcli device
ip a
-- 如网卡存在ip配置,可参照如下命令进行删除;
nmcli connection delete enoxxx
-- 如果一些ip配置无法删除可以先查看uuid使用uuid进行删除
nmcli connection show
nmcli connection delete 'uuid的值'
3.1.2. 网卡绑定
nmcli device
nmcli connection add con-name team0 type team ifname team0 config '{"team0":"activebackup"}'
nmcli device
nmcli connection modify team0 ipv4.addresses 192.168.174.111/24 ipv4.gateway 192.168.174.2 connection.autoconnect yes ipv4.method manual
nmcli connection add type team-slave con-name team0-slave1 ifname eno16777736 master team0
nmcli connection add type team-slave con-name team0-slave2 ifname eno33554984 master team0
nmcli connection up team0
nmcli device
service network restart
nmcli device
nmcli connection reload
nmcli connection show
ip a
teamdctl team0 state
在绑定完第一个节点网卡后,再继续绑定其它节点的网卡
3.2. 数据库软件部署
3.2.1. 系统优化
- 上传一键优化脚本,执行脚本
3.2.2. 安装部署软件准备
1.安装包
2.license文件
3.scripts文件
3.2.3. 解压或挂载安装包
tar -zxvf xxx.tar.gz
mount xxx.iso /mnt
3.2.4. 安装客户端软件
cd /mnt
./setup.sh 或者 ./setup.sh -console
3.3. 磁盘配置及文件系统初始化
3.3.1. 脚本创建kingbase用户
3.3.2. 磁盘配置
# 查看磁盘规划
lsbk
# 初始化sdb
fdisk /dev/sdb
n
p
1
enter
enter
w
# 建立sdb磁盘关联的vg、lv等,关联/home/kingbase/cluster挂载点
lsblk
pvcreate /dev/sdb1
vgcreate vgsoft /dev/sdb1
lvcreate -n lvsoft -l 100%FREE vgsoft
mkfs.xfs /dev/vgsoft/lvsoft
mkdir -p /home/kingbase/cluster
blkid
vi /etc/fstab
uuid=xxx /home/kingbase/cluster xfs defaults 0 0
mount -a
df -hT
chown -R kingbase:kingbase /home/kingbase/cluster
chmod -R 775 /home/kingbase/cluster
# 初始化sdc磁盘,并建立与/home/kingbase/kdata挂载点的关系
lsblk
gdisk /dev/sdc
n
enter
enter
enter
8e00
w
y
lsblk
pvcreate /dev/sdc1
vgcreate vgdata /dev/sdc1
lvcreate -n lvdata -l 100%FREE vgdata
mkfs.xfs /dev/vgdata/lvdata
mkdir -p /home/kingbase/kdata
blkid
vi /etc/fstab
uuid='xxx' /home/kingbase/kdata xfs defaults 0 0
mount -a
df -hT
chown -R kingbase:kingbase /home/kingbase/kdata
chmod 755 /home/kingbase/kdata
cd /home/kingbase
ll
在第一个节点配置完之后,配置其他节点
3.4. 部署集群
cd /home/dn/app/kes/8.2/DeployTools
./deploy
3.4.1. 新建节点
3.4.2. 新建主备同步
3.4.3. 确认单机服务
输出内容 | 实施记录 |
---|---|
确认单机的服务开机自启动是否关闭 | chkconfig --list |grep kingbase chkconfig --del kingbase8d chkconfig --list |grep kingbase |
3.4.4. 数据库集群启停
输出内容 | 实施记录 |
---|---|
/home/kingbase/app/cluster/kingbasecluster/db/bin/kingbase_monitor.sh stop | 停止集群 |
/home/kingbase/app/cluster/kingbasecluster/db/bin/kingbase_monitor.sh start | 启动集群 |
3.4.5. 配置环境变量
LD_LIBRARY_PATH=/usr/local/bin:/bin:/usr/bin:/usr/local/sbin:/usr/sbin:/home/kingbase/.local/bin:/home/kingbase/bin:/home/kingbase/cluster/yjlrac/db/lib
PATH=/usr/local/bin:/bin:/usr/bin:/usr/local/sbin/:/usr/sbin:/home/kingbase/.local/bin:/home/kingbase/bin:/home/kingbase/cluster/yjlrac/db/bin
3.5. 测试数据库集群切换
输出内容 | 实施记录 |
---|---|
杀掉主节点数据库主进程,查看数据库是否会被拉起 | |
重启主节点服务器,观察集群是否切换 | |
再次重启新的主节点服务器,让集群恢复到最初模式 |
3.5.1.杀掉主节点数据库主进程,查看数据库是否会被拉起
# 查看集群状态
su - kingbase
pcp_watchdog_info -Ukingbase -W123456
ksql -h 192.168.174.115 -USYSTEM -W123456 -dtest -p9999
show pool_nodes;
# 查看主节点进程
ps -ef |grep -i kingbase
# 杀掉主进程
kill -9 xxxxx
ps -ef |grep -i kingbase
# 查看集群信息,并稍等片刻
pcp_watchdog_info -Ukingbase -W123456
ksql -h 192.168.174.115 -USYSTEM -W123456 -dtest -p9999
show pool_nodes;
show pool_nodes;
show pool_nodes;
# 查看主节点进程信息
ps -ef |grep -i kingbase
# kill集群服务主进程xxxx
kill -9 xxxxx
ps -ef |grep -i kingbase
# 查看集群信息,并稍等片刻
pcp_watchdog_info -Ukingbase -W123456
pcp_watchdog_info -Ukingbase -W123456
pcp_watchdog_info -Ukingbase -W123456
ksql -h 192.168.174.115 -USYSTEM -W123456 -dtest -p9999
# 查看主节点进程信息
ps -ef |grep -i kingbase
这个测试做完之后,想要恢复到原来的主备库,出现错误,重启集群可以解决,但一般项目都不会停机的,有一个解决方法 在这个 /home/kingbase/cluster/test/kingbasecluster/bin 目录下,./pcp_stop_kingbasecluster -Ukingbase -W123456 等待一小会即可连接数据库
- more /home/kingbase/cluster/yjlrac/db/etc/HAmodule.conf 查看vip
- sys_ctl start -D /home/kingbase/cluster/test/db/data 手动启动集群单个库
3.5.2.重启主节点服务器,观察集群是否切换
# 查看集群状态
pcp_watchdog_info -Ukingbase -W123456
ksql -USYSTEM -W123456 -dtest -p9999 -h192.168.174.115
show pool_nodes;
# 重启主节点
reboot # 可能会存在不能关闭的情况,可以直接关机或者关闭本机集群
3.5.3.再次重启新的主节点服务器,让集群恢复到最初模式
pcp_watchdog_info -Ukingbase -W123456
ksql -USYSTEM -W123456 -dtest -p9999 -h192.168.174.115
show pool_nodes;
reboot
3.5.4. 双主库错误
1.重做备机
2.文件修改
(1)选取一个主机作为主库,删除主库的recovery.done,修改备库中recovery.done为recovery.conf
sys_controldata -D `pwd` (根据时间点选择主备机)
(2)重启备机数据库
(3)查看recovey.log
(4)手动启动主备各库的数据库库
sys_ctl start -D /home/kingbase/cluster/test/db/data
(5)查看进程
ps -ef |grep kingbase
ps -ef |grep kingbasecluster
(6)查看定时任务
crontab -l
-- 如果没有集群进程,可以手动写入
cat /etc/cron.d/KINGBASECLUSTER
(7)查看dbvip(数据库集群)和clustervip(管理集群)过来没
ifconfig
-- 如果没有,手动加上
ifconfig team0:2 192.168.174.114 up
ifconfig team0:3 192.168.174.115 up
(8)查看recovery.log
查看是否正常启动集群
(9)检查集群
pcp_watchdog_info -Ukingbase -W123456
ksql -USYSTEM -W123456 -dtest -p9999 -h192.168.174.115
(10)如果第9条还不行
两边cluster停一下
在这个 /home/kingbase/cluster/test/kingbasecluster/bin 目录下,./pcp_stop_kingbasecluster -Ukingbase -W123456
4. 数据库调优
- 与集成商确认数据库端口、数据库最大连接数、应用是否从oracle迁移等,涉及到oracle兼容参数的调整。
- 需修改两个路径下的kingbase.conf配置文件
- /home/kingbase/app/cluster/kingbasecluster/db/data 和
- /home/kingbase/app/cluster/kingbasecluster/db/etc
流程内容 | 操作内容 |
---|---|
现场环境确认 | 与集成商确认:数据库端口、数据库最大连接数、应用是否从oracle迁移、确认服务器内存大小、确认服务器CPU数量 |
listen_addresses='*'
port = 54321
max_connections=1000
app_reserved_connections='JSQL,6'
shared_buffers=RAM*0.4GB -- 1GB
work_mem =10MB
maintenance_work_mem=1GB
effective_cache_size=RAM*0.5GB - RAM指内存(free -g)1.25GB
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
5. 数据库备份
修改备份脚本里的参数
(1)修改rman_full.sh
kdb_home="/home/kingbase/app/cluster/kingbasecluster/db" -- 安装目录
kdb_data="/home/kingbase/app/cluster/kingbasecluster/db/data" -- 数据目录路径
kdb_user="SYSTEM" -- 备份用户
kdb_pass="123456" -- 密码
kdb_port="54321" -- 端口
kdb_host="127.0.0.1" -- ip
kdbback_dest="/home/kingbase/backup/" -- 备份路径
keep_num="2" -- 保留备份集
(2)修改rman_page.sh
kdb_home="/home/kingbase/app/cluster/kingbasecluster/db" -- 安装目录
kdb_data="/home/kingbase/app/cluster/kingbasecluster/db/data " -- 数据目录路径
kdb_user="SYSTEM" -- 备份用户
kdb_pass="123456" -- 密码
kdb_port="54321" -- 端口
kdb_host="127.0.0.1" -- ip
kdbback_dest="/home/kingbase/backup " -- 备份路径
-- 测试脚本
sh -x /kingbase/app/kes/8.2/Scripts/rman_full.sh
sh -x /kingbase/app/kes/8.2/Scripts/rman_page.sh
-- 自动备份策略
-- 例如:每周日23点全量备份,周一至周六23点增量备份。
00 23 * * 7 sh -x rman_full.sh
00 23 * * 1-6 sh -x rman_pa