在完成了硬件平台的搭建后,接下来的工作就是选择和安装支撑2亿专利数据库运行所需的软件系统。这个环节涉及多个软件组件的选型、配置和集成,每个选择都需要权衡性能、稳定性、社区支持和学习曲线等因素。本文将详细介绍我们选择的软件栈、安装过程以及配置细节。
3.1 软件栈整体架构
经过技术调研和对比分析,我们最终采用了以下软件架构:关系型数据库选用MySQL 8.0作为核心数据存储,因为它具有良好的事务支持、成熟的分区表功能和丰富的索引类型;全文搜索引擎选用Elasticsearch 8.x处理复杂的专利检索需求,支持中文分词和相关性排序;缓存层选用Redis 7.x用于热点数据的缓存和会话管理;消息队列选用Kafka处理数据导入和解耦各处理环节。
此外,我们还使用了以下辅助工具:Docker容器化部署部分组件以提高环境一致性;Ansible自动化配置管理;Grafana + Prometheus实现可视化监控;Nginx作为反向代理和负载均衡器。
3.2 MySQL 8.0安装与配置
MySQL是我们整个系统的核心。我们选择从官方仓库安装MySQL 8.0,以获取最新的功能和安全更新。
安装步骤如下:首先安装MySQL官方的Yum仓库,然后执行sudo yum install mysql-community-server进行安装。安装完成后,使用sudo systemctl start mysqld启动服务,MySQL会自动创建root临时密码,我们从日志文件中提取了这个密码(grep 'temporary password' /var/log/mysqld.log)。
接下来是安全配置。我们运行了mysql_secure_installation进行安全加固:设置新的root密码(使用了强密码策略)、删除匿名用户、禁止root远程登录、删除test数据库并重新加载权限表。
MySQL的关键配置优化在my.cnf文件中完成。我们根据服务器硬件配置调整了以下参数:
3.3 Elasticsearch 8.x集群部署
Elasticsearch是我们专利检索系统的核心引擎,负责处理复杂的全文检索和聚合查询。考虑到3台搜索服务器的配置,我们设计了一个3节点的Elasticsearch集群。
安装过程我们采用了RPM包方式。首先安装Java运行环境(Elasticsearch需要JDK),然后下载并安装Elasticsearch RPM包。安装命令为:sudo rpm -ivh elasticsearch-8.x.rpm。
Elasticsearch的配置文件中,关键参数包括:cluster.name设置集群名称;node.name设置节点名称;path.data和path.logs设置数据目录和日志目录;network.host绑定到实际IP地址;discovery.seed_hosts配置集群种子节点列表;cluster.initial_master_nodes配置初始主节点列表。
针对专利检索的特殊需求,我们还进行了以下优化:关闭了bootstrap.memory_lock以避免内存锁定问题;设置了合适的JVM堆大小(我们配置为24GB,约为物理内存的一半);开启了异步搜索功能(search.async: true)以提高复杂查询的响应速度;配置了合适的刷新间隔(index.refresh_interval: 5s)以在索引速度和搜索时效性之间取得平衡。
3.4 Redis 7.x安装与配置
Redis作为缓存层,安装配置相对简单。我们使用Yum安装:sudo yum install redis,安装完成后启动服务并设置为开机启动。
Redis的关键配置包括:maxmemory设置为80GB(预留部分内存给操作系统);maxmemory-policy设置为allkeys-lru,当内存不足时自动清理最近最少使用的键;appendonly yes开启AOF持久化;appendfsync everysec平衡性能和数据安全。
我们还配置了Redis集群模式以实现高可用,使用3主3从的集群架构。集群配置涉及多个配置文件的创建和redis-cli --cluster create命令的执行,这里不再赘述。
3.5 Kafka集群部署
Kafka用于处理数据导入和解耦各处理环节。我们部署了一个3节点的Kafka集群。
Kafka依赖ZooKeeper进行协调管理,我们首先部署了ZooKeeper集群。ZooKeeper的安装相对简单,下载二进制包解压后,配置zoo.cfg文件,设置dataDir和server.1/2/3配置项,然后在各节点创建myid文件。
Kafka的安装同样是下载二进制包解压并配置。关键配置包括:broker.id设置 broker编号;listeners配置监听地址和端口;log.dirs设置日志存储目录;zookeeper.connect配置ZooKeeper连接地址;num.partitions设置默认分区数(我们设置为12);default.replication.factor设置默认副本因子(设置为3保证高可用)。
3.6 Docker与容器化部署
为了提高环境一致性和部署效率,我们将部分组件进行了容器化。我们安装了Docker Engine和Docker Compose。Docker安装使用官方安装脚本:curl -fsSL https://get.docker.com | sh。
我们使用Docker Compose定义了以下服务:phpMyAdmin用于数据库管理界面;Portainer用于容器管理界面;Jenkins用于持续集成(虽然最终未投入使用);Grafana和Prometheus用于监控。这些服务都通过Docker Compose进行了编排,方便管理和维护。
3.7 Nginx反向代理配置
Nginx作为整个系统的入口,配置相对复杂。核心配置包括:上游服务器负载均衡配置(我们使用了加权轮询算法);SSL/TLS终端配置(使用了Let's Encrypt的免费证书);请求转发规则将API请求转发到后端应用服务器;静态文件缓存配置减少服务器负载;gzip压缩配置减少网络传输量。
我们还配置了请求速率限制(limit_req_zone)防止恶意请求,以及IP黑白名单控制访问。Nginx的高可用通过Keepalived实现,实现了双机热备。
部署顺序建议:按照依赖关系,建议的部署顺序为:基础环境(操作系统、网络)→ MySQL → Redis → Elasticsearch → Kafka → ZooKeeper → 应用服务 → Nginx。在实际部署中,我们编写了Ansible Playbook实现一键自动化部署,大大提高了部署效率。

<<返回首页
