3、基础环境部署:JDK安装与配置、Nginx安装与配置、Redis集群部署、Kafka消息队列部署
好,咱们进入正题。基础环境部署这块,说白了就是给交易系统搭好地基。我见过太多项目,业务代码写得挺漂亮,结果底层环境一塌糊涂,上线就崩。所以这一章,咱们把JDK、Nginx、Redis、Kafka这四个核心组件,一个一个捋清楚。
3.1 JDK安装与配置
JDK是Java应用的命根子。交易系统对JDK版本很敏感,我个人习惯用JDK 8或JDK 11,这两个版本在金融行业最稳。
3.1.1 下载与安装
别去Oracle官网下那个要登录的版本,麻烦。直接用OpenJDK,省心。
# 下载OpenJDK 11
wget https://github.com/AdoptOpenJDK/openjdk11-binaries/releases/download/jdk-11.0.10%2B9/OpenJDK11U-jdk_x64_linux_hotspot_11.0.10_9.tar.gz
# 解压到指定目录
tar -zxvf OpenJDK11U-jdk_x64_linux_hotspot_11.0.10_9.tar.gz -C /usr/local/
# 重命名目录,方便管理
mv /usr/local/jdk-11.0.10+9 /usr/local/java11
3.1.2 环境变量配置
配置环境变量这一步,我踩过坑。曾经有一次配错了路径,导致整个集群的Java应用都起不来,排查了半天。
# 编辑 /etc/profile
vim /etc/profile
# 在文件末尾添加
export JAVA_HOME=/usr/local/java11
export JRE_HOME=$JAVA_HOME/jre
export CLASSPATH=.:$JAVA_HOME/lib:$JRE_HOME/lib
export PATH=$JAVA_HOME/bin:$PATH
# 使配置生效
source /etc/profile
# 验证安装
java -version
重要:一定要用 source /etc/profile 或者重新登录,否则环境变量不生效。我见过有人配完直接重启服务器,其实没必要。
3.1.3 多JDK版本管理
有时候一个机器上要跑多个Java应用,版本还不一样。怎么办?用 alternatives 命令。
# 注册多个JDK版本
alternatives --install /usr/bin/java java /usr/local/java8/bin/java 1
alternatives --install /usr/bin/java java /usr/local/java11/bin/java 2
# 切换版本
alternatives --config java
嗯,这里要注意:切换后记得检查一下 java -version,确认版本对了再往下走。
3.2 Nginx安装与配置
Nginx在交易系统里主要干两件事:反向代理和负载均衡。说白了就是挡在前面,把请求分发给后面的业务服务器。
3.2.1 安装Nginx
我建议用源码编译安装,虽然麻烦点,但能定制模块。曾经有一次线上Nginx被攻击,就是因为默认安装带了不必要的模块。
# 安装依赖
yum install -y gcc-c++ pcre pcre-devel zlib zlib-devel openssl openssl-devel
# 下载源码
wget http://nginx.org/download/nginx-1.20.1.tar.gz
tar -zxvf nginx-1.20.1.tar.gz
cd nginx-1.20.1
# 编译安装
./configure --prefix=/usr/local/nginx \
--with-http_stub_status_module \
--with-http_ssl_module \
--with-stream
make && make install
3.2.2 核心配置
交易系统的Nginx配置,我一般这么写:
worker_processes auto;
events {
worker_connections 1024;
}
http {
upstream trade_backend {
server 192.168.1.10:8080 weight=5;
server 192.168.1.11:8080 weight=5;
server 192.168.1.12:8080 backup;
}
server {
listen 80;
server_name trade.example.com;
location / {
proxy_pass http://trade_backend;
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
}
}
}
小技巧:用 nginx -t 测试配置语法,别直接重启。我曾经手抖写错了一个分号,导致整个站点挂了5分钟。
3.2.3 启动与验证
# 启动
/usr/local/nginx/sbin/nginx
# 重新加载配置
/usr/local/nginx/sbin/nginx -s reload
# 检查进程
ps -ef | grep nginx
3.3 Redis集群部署
Redis在交易系统里,主要做缓存和会话管理。单机Redis扛不住高并发,必须上集群。
3.3.1 集群架构设计
我推荐用Redis Cluster,官方方案,稳定可靠。最少6个节点:3主3从。
核心逻辑:Redis Cluster采用无中心架构,数据自动分片到16384个槽位。每个主节点负责一部分槽位,从节点负责备份。
3.3.2 安装与配置
# 下载Redis
wget http://download.redis.io/releases/redis-6.2.6.tar.gz
tar -zxvf redis-6.2.6.tar.gz
cd redis-6.2.6
make && make install
# 创建集群目录
mkdir -p /data/redis-cluster/{7001,7002,7003,7004,7005,7006}
# 配置示例(以7001为例)
cat > /data/redis-cluster/7001/redis.conf << EOF
port 7001
cluster-enabled yes
cluster-config-file nodes-7001.conf
cluster-node-timeout 5000
appendonly yes
daemonize yes
pidfile /var/run/redis_7001.pid
EOF
3.3.3 启动集群
# 启动所有节点
redis-server /data/redis-cluster/7001/redis.conf
redis-server /data/redis-cluster/7002/redis.conf
# ... 依次启动所有节点
# 创建集群
redis-cli --cluster create 192.168.1.10:7001 192.168.1.10:7002 \
192.168.1.10:7003 192.168.1.11:7004 \
192.168.1.11:7005 192.168.1.11:7006 \
--cluster-replicas 1
注意:集群节点之间必须能互相通信。我曾经在云上部署时,忘了开安全组端口,结果集群一直创建失败。检查一下防火墙和网络策略。
3.4 Kafka消息队列部署
Kafka在交易系统里,负责处理订单流、行情数据这些高吞吐量的消息。说白了,就是削峰填谷,防止系统被突发流量冲垮。
3.4.1 安装Kafka
Kafka依赖ZooKeeper,不过新版本可以用KRaft模式,省掉ZK。我个人还是习惯用ZK模式,稳定。
# 下载Kafka
wget https://archive.apache.org/dist/kafka/3.2.0/kafka_2.13-3.2.0.tgz
tar -zxvf kafka_2.13-3.2.0.tgz -C /usr/local/
mv /usr/local/kafka_2.13-3.2.0 /usr/local/kafka
3.4.2 配置Kafka
# 编辑 server.properties
vim /usr/local/kafka/config/server.properties
# 关键配置
broker.id=0
listeners=PLAINTEXT://0.0.0.0:9092
advertised.listeners=PLAINTEXT://192.168.1.10:9092
log.dirs=/data/kafka-logs
num.partitions=3
zookeeper.connect=192.168.1.10:2181,192.168.1.11:2181,192.168.1.12:2181
3.4.3 启动与验证
# 先启动ZooKeeper(如果使用ZK模式)
/usr/local/kafka/bin/zookeeper-server-start.sh -daemon /usr/local/kafka/config/zookeeper.properties
# 启动Kafka
/usr/local/kafka/bin/kafka-server-start.sh -daemon /usr/local/kafka/config/server.properties
# 创建测试主题
/usr/local/kafka/bin/kafka-topics.sh --create \
--topic trade-order \
--bootstrap-server 192.168.1.10:9092 \
--partitions 3 \
--replication-factor 2
# 查看主题列表
/usr/local/kafka/bin/kafka-topics.sh --list --bootstrap-server 192.168.1.10:9092
经验之谈:分区数不要设太多,3-6个就够。我曾经在一个项目里设了32个分区,结果管理起来特别麻烦,而且性能提升并不明显。
3.4.4 生产者和消费者测试
# 启动生产者
/usr/local/kafka/bin/kafka-console-producer.sh \
--topic trade-order \
--bootstrap-server 192.168.1.10:9092
# 启动消费者
/usr/local/kafka/bin/kafka-console-consumer.sh \
--topic trade-order \
--bootstrap-server 192.168.1.10:9092 \
--from-beginning
嗯,到这里基础环境就部署完了。你想想看,JDK、Nginx、Redis、Kafka这四个组件,就像交易系统的四肢。四肢强壮了,业务代码才能跑得稳。我在项目中遇到过好几次,环境没配好导致线上事故,所以每一步都别偷懒。
| 组件 | 版本建议 | 核心用途 | 部署要点 |
|---|---|---|---|
| JDK | 8/11 | Java运行环境 | 多版本管理、环境变量 |
| Nginx | 1.20+ | 反向代理、负载均衡 | 源码编译、配置语法检查 |
| Redis | 6.x | 缓存、会话管理 | 集群模式、主从复制 |
| Kafka | 3.x | 消息队列、流处理 | 分区设计、ZK依赖 |