Centos部署KBengine
安装Mysql5.7
建议只使用5.7版本,其他版本不建议使用。
添加仓库
sudo rpm -ivh https://dev.mysql.com/get/mysql57-community-release-el7-11.noarch.rpm
确认
sudo yum repolist all | grep mysql | grep enabled
安装
sudo yum -y install mysql-community-server
如果出现这个
The GPG keys listed for the "MySQL 5.7 Community Server" repository are already installed but they are not correct for this package.
Check that the correct key URLs are configured for this repository.
Failing package is: mysql-community-common-5.7.42-1.el7.x86_64
GPG Keys are configured as: file:///etc/pki/rpm-gpg/RPM-GPG-KEY-mysql
用这个修复
rpm --import https://repo.mysql.com/RPM-GPG-KEY-mysql-2022
然后从新安装
启动
sudo systemctl start mysqld
设置系统启动时自动启动
sudo systemctl enable mysqld
查看启动状态
sudo systemctl status mysqld
CentOS上的root默认密码可以在文件/var/log/mysqld.log找到,通过下面命令可以打印出来
cat /var/log/mysqld.log | grep -i 'temporary password'
执行下面命令进行安全设置,这个命令会进行设置root密码设置,移除匿名用户,禁止root用户远程连接等
mysql_secure_installation
第一步输入密码,用刚才查到的密码
第二步输入新密码,注意强度
第三步移除匿名用户,回答Y
第四允许远程登录,这个可以后面改。
第五测试数据库,点Y
修改my.cnf
vim /etc/my.cnf
设置数据库编码为utf8
在[mysqld],[client],[mysql]节点下添加编码设置
[client]
default-character-set=utf8
[mysql]
default-character-set=utf8
[mysqld]
collation-server = utf8_unicode_ci
init-connect='SET NAMES utf8'
character-set-server = utf8
如果需要更改保存位置,可以修改datadir的路径
# For advice on how to change settings please see
# http://dev.mysql.com/doc/refman/5.7/en/server-configuration-defaults.html
[client]
default-character-set=utf8
socket=/mnt/mysql/mysql_data/mysql/mysql.sock
[mysql]
default-character-set=utf8
[mysqld]
collation-server = utf8_unicode_ci
init-connect='SET NAMES utf8'
character-set-server = utf8
#
# Remove leading # and set to the amount of RAM for the most important data
# cache in MySQL. Start at 70% of total RAM for dedicated server, else 10%.
# innodb_buffer_pool_size = 128M
#
# Remove leading # to turn on a very important data integrity option: logging
# changes to the binary log between backups.
# log_bin
#
# Remove leading # to set options mainly useful for reporting servers.
# The server defaults are faster for transactions and fast SELECTs.
# Adjust sizes as needed, experiment to find the optimal values.
# join_buffer_size = 128M
# sort_buffer_size = 2M
# read_rnd_buffer_size = 2M
#datadir=/var/lib/mysql
#socket=/var/lib/mysql/mysql.sock
datadir=/mnt/mysql/mysql_data/mysql
socket=/mnt/mysql/mysql_data/mysql/mysql.sock
# Disabling symbolic-links is recommended to prevent assorted security risks
symbolic-links=0
log-error=/var/log/mysqld.log
pid-file=/var/run/mysqld/mysqld.pid
重启Mysql即可
systemctl restart mysqld
如果要设置root远程登录可以:
mysql -u root -p
use mysql
GRANT ALL PRIVILEGES ON *.* TO 'root'@'%' IDENTIFIED BY '你的密码!!' WITH GRANT OPTION;
mysql> FLUSH PRIVILEGES;
执行如下语句,如果能成功连接上就证明远程登录可用,注意把密码和IP换成你实际的密码和IP。
[root@localhost ~]# mysql -uroot -p密码 -h 192.168.170.128
技巧
查询数据库安装位置可以用 where mysql
添加Centos用户
配置用户
添加kbe1用户
adduser kbe1
passwd kbe1
密码设置:kbeuser1234567
设置uid,同组游戏服设置相同的uid
之后我们就可以使用这个密码来登录linux了。
usermod -u 101 kbe1
配置KBEngine
上传kbe引擎
解压
tar -zxvf kbengine-2.5.12.tar.gz -C /mnt
把kbengine-2.5.12目录改成server
进入server目录
修改vim .bashrc
vim /mnt/server/.bashrc
放入如下内容
ulimit -c unlimited
export KBE_ROOT=/mnt/server/
export KBE_RES_PATH=$KBE_ROOT/kbe/res/:$KBE_ROOT/assets/:$KBE_ROOT/assets/scripts/:$KBE_ROOT/assets/res/
export KBE_BIN_PATH=$KBE_ROOT/kbe/bin/server/
生效
source /mnt/server/.bashrc
添加数据库用户:
grant all privileges on . to kbe1@'%' identified by 'Pd123456';
grant select,insert,update,delete,create,drop on . to kbe1@'%' identified by 'Pd123456';
FLUSH PRIVILEGES;
set password for kbe1 = password('Pd123456');
quit;
测试是否可以连接可以用下面的语法
mysql -ukbe1 -p'Pd123456 -hlocalhost -P3306
优化Centos网络
用引擎自带的py脚本优化
kbe\tools\server\linux\socket_optimization.sh
服务端脚本
把最新代码(scripts)从assets拷贝到assets-server
修改游戏配置
asserts-server/res/server/kbengine.xml
<externalAddress> 你的IP地址 </externalAddress> <!-- Type: String -->
<!-- 自动备份的时间(秒)
(Automatic backup time period(secs))
-->
<backupPeriod> 500 </backupPeriod>
</baseapp>
<loginapp>
<externalAddress> 你的IP地址 </externalAddress> <!-- Type: String -->
</loginapp>
还有数据库部分的用户kbe1和密码
还要批量修改kbe引擎目录配表kbe\res\server\kbengine_defaults.xml,更改其他pwd123456的默认密码为用户密码。
编译引擎
查看openssl version -a,是否安装, 如果没有自行安装
如果没有gcc,需要安装
yum -y install gcc
yum -y install gcc-c++
安装auto
yum install autoconf
安装automake
yum install automake
安装libtool
yum install libtool
安装mysql-devel
yum install mysql-devel
安装zlib-devel
yum install zlib-devel
进入引擎的src目录
cd /mnt/server/kbe/src
chmod -R 755 .
开始编译
make
注意:
1: 如果使用了其他版本的编译器最好重编译openssl、log4cxx与其他(kbengine/kbe/src/libs/*a.)。
2: mysql_config在某些操作系统版本上可能不是这个路径地址 /usr/bin/mysql_config
你可以手动修改kbengine/kbe/src/build/common.mak其中MYSQL_CONFIG_PATH=/usr/bin/mysql_config。
3: 在Linux上编译之后可能会出现Python解释器无法初始化而导致无法启动服务端的问题 (这是一个Python的bug,参看:http://bugs.python.org/issue11320)
你可以执行如下命令解决这个问题
[root @ localhost ~] cd kbengine/src/lib/python
[root @ localhost ~] ./configure
[root @ localhost ~] make
[root @ localhost ~] make install
开服的sh脚本,首行添加
cd /mnt/server/assets
开服请使用kbe1用户开服,另外使用xshell方便快捷,可以编辑按钮执行命令。
开服指令
sh /mnt/server/assets/start_server.sh
关服指令
sh /mnt/server/assets/safe_kill.sh
查询指令
python /mnt/server/kbe/tools/server/pycluster/cluster_controller.py
杀死服务
sh /mnt/server/assets/kill_server.sh
技巧
查看某个端口谁使用 netstat -alnp |grep 20005
LOG4配置
正式开服后。log太大,可以修改kbe/res/server/log4xx_properties_defaults/baseapp等
把log4j.rootLogger=debug, R改为更高级的log4j.rootLogger=WARN, R
部署完毕后,要把目录权限给kbe,之后的维护最好使用kbe用户来操作,防止kbe没文件读写权限。
对于配置文件UDP设置,我们可以增大BUF的大小到512(默认128),根据自己的需求。
<readPacketsQueueSize>
<internal> 1024 </internal>
<external> 512 </external>
</readPacketsQueueSize>
<!-- Equivalent to TCP SND_BU, unit is the number of UDP-packages -->
<writePacketsQueueSize>
<internal> 1024 </internal>
<external> 512 </external>
</writePacketsQueueSize>
windowOverflow的大小也可以增加receive的bytes/external
常见错误
防火墙错误
machine-1: [ERROR]: BundleBroadcast::receive: failed! It can be caused by the firewall, the broadcastaddr, etc.Maybe broadcastaddr is not a LAN ADDR, or the Machine process is not running.
machine-1: [ERROR]: Machine::findBroadcastInterface: Broadcast discovery [0.0.0.0] not a valid interface. available interfaces: [127.0.0.1, 172.31.126.28, ]
machine-1: [ERROR]: Machine::initNetwork: Failed to determine default broadcast interface. Make sure that your broadcast route is set correctly. e.g. /sbin/ip route add broadcast 255.255.255.255 dev eth0, eth0 is internalInterface!
machine-1: [ERROR]: app::initialize(): initialization failed!
出现这个可能是防火墙,你可以关闭
systemctl stop firewalld
systemctl disable firewalld