3. 环境搭建:JDK、Maven、MySQL、Redis、RabbitMQ、Nginx的安装与配置
好,咱们开始动手了。这一章我带你把整个秒杀系统的地基打牢。说白了,后面所有的代码都要跑在这些组件上。我见过不少新手,代码写得挺溜,结果环境配了一周,各种版本冲突、端口占用,心态直接崩了。
我个人习惯,先把所有软件的版本定死。别用最新的,也别用太老的。下面这张表是我反复验证过的组合,你照着来,基本不会踩坑。
| 组件 | 推荐版本 | 备注 |
|---|---|---|
| JDK | 1.8 (8u202) | 最后一个免费商用版本,稳定 |
| Maven | 3.6.3 | 兼容性好,别用3.8+,有坑 |
| MySQL | 5.7.35 | 8.0也行,但5.7更稳 |
| Redis | 6.2.6 | 支持ACL,性能足够 |
| RabbitMQ | 3.9.13 | 配合Erlang 24.x |
| Nginx | 1.20.2 | 稳定版,模块丰富 |
3.1 JDK 安装:别小看这一步
JDK 1.8,我用了快十年了。你可能会问,现在都出到17了,为什么还用1.8?嗯,这里要注意:秒杀系统追求的是极致的稳定。1.8的生态最成熟,各种中间件、框架的兼容性最好。
安装步骤其实很简单,但我还是想啰嗦两句:
- 下载:去Oracle官网下载jdk-8u202-linux-x64.tar.gz。别下错了,要Linux版本的。
- 解压:
tar -zxvf jdk-8u202-linux-x64.tar.gz -C /usr/local/ - 配置环境变量:编辑
/etc/profile,在末尾加上:
export JAVA_HOME=/usr/local/jdk1.8.0_202
export PATH=$JAVA_HOME/bin:$PATH
export CLASSPATH=.:$JAVA_HOME/lib/dt.jar:$JAVA_HOME/lib/tools.jar
然后执行 source /etc/profile 让它生效。最后 java -version 验证一下。
3.2 Maven:管理依赖的利器
Maven 说白了就是帮你下载 jar 包的工具。但它的精髓在于 settings.xml 的配置。我个人习惯,一定要配阿里云的镜像仓库,不然下载速度会让你怀疑人生。
安装步骤:
- 下载 apache-maven-3.6.3-bin.tar.gz
- 解压到
/usr/local/maven - 配置环境变量,跟 JDK 类似,加个
MAVEN_HOME就行 - 修改
conf/settings.xml,在<mirrors>标签里加上:
<mirror>
<id>aliyunmaven</id>
<mirrorOf>*</mirrorOf>
<name>阿里云公共仓库</name>
<url>https://maven.aliyun.com/repository/public</url>
</mirror>
<localRepository>/data/maven-repo</localRepository>
3.3 MySQL:数据存储的核心
MySQL 5.7,我推荐用二进制包安装,别用 yum。为什么?因为 yum 安装的版本往往不是最新的,而且目录结构比较乱。二进制包安装,所有文件都在一个目录下,管理起来方便。
安装步骤:
- 下载 mysql-5.7.35-linux-glibc2.12-x86_64.tar.gz
- 解压到
/usr/local/mysql - 创建 mysql 用户:
useradd -r -s /sbin/nologin mysql - 初始化数据库:
bin/mysqld --initialize --user=mysql
初始化完成后,会生成一个临时密码,记得记下来。然后启动 MySQL,用临时密码登录,再修改密码。
# 启动
bin/mysqld_safe --user=mysql &
# 登录
mysql -uroot -p
# 修改密码
ALTER USER 'root'@'localhost' IDENTIFIED BY 'YourPassword123!';
秒杀系统的数据库优化点:
- innodb_buffer_pool_size 设置为物理内存的 70%
- 关闭 query_cache,秒杀场景下没用
- 开启 binlog,方便数据恢复
3.4 Redis:扛住高并发的关键
Redis 安装最简单,编译一下就完事。但配置上,有几个参数必须调优。
# 下载、解压、编译
wget https://download.redis.io/releases/redis-6.2.6.tar.gz
tar xzf redis-6.2.6.tar.gz
cd redis-6.2.6
make
# 修改 redis.conf
daemonize yes # 后台运行
requirepass yourpass # 设置密码,生产环境必须
maxmemory 4gb # 限制最大内存
maxmemory-policy allkeys-lru # 淘汰策略
为什么用 allkeys-lru?因为秒杀场景下,热点数据会频繁变化。LRU 策略能保证最近访问的数据留在内存里。我遇到过有人用 volatile-lru,结果过期时间没设置好,内存直接爆了。
3.5 RabbitMQ:削峰填谷的利器
RabbitMQ 依赖 Erlang,所以得先装 Erlang。版本一定要匹配,不然启动不了。
# 安装 Erlang 24.x
wget https://packages.erlang-solutions.com/erlang/rpm/centos/7/x86_64/esl-erlang_24.3.3-1~centos~7_amd64.rpm
rpm -ivh esl-erlang_24.3.3-1~centos~7_amd64.rpm
# 安装 RabbitMQ
wget https://github.com/rabbitmq/rabbitmq-server/releases/download/v3.9.13/rabbitmq-server-3.9.13-1.el7.noarch.rpm
rpm -ivh rabbitmq-server-3.9.13-1.el7.noarch.rpm
启动后,记得开启管理插件:rabbitmq-plugins enable rabbitmq_management。然后访问 http://你的IP:15672,默认账号 guest/guest。
3.6 Nginx:流量入口的守门员
Nginx 的安装,我推荐用源码编译。虽然麻烦点,但可以按需加载模块,性能更好。
# 下载源码
wget http://nginx.org/download/nginx-1.20.2.tar.gz
tar -zxvf nginx-1.20.2.tar.gz
cd nginx-1.20.2
# 编译安装
./configure --prefix=/usr/local/nginx \
--with-http_stub_status_module \
--with-http_ssl_module \
--with-http_gzip_static_module
make && make install
配置方面,秒杀系统最核心的是限流和负载均衡。我一般会在 http 块里加上:
# 限流配置
limit_req_zone $binary_remote_addr zone=seckill:10m rate=100r/s;
# 负载均衡
upstream backend {
server 192.168.1.10:8080 weight=5;
server 192.168.1.11:8080 weight=5;
server 192.168.1.12:8080 backup;
}
这样配置后,每个 IP 每秒最多请求 100 次,超过的直接返回 503。同时,三台后端服务器做负载均衡,其中一台作为备用。
好了,环境搭建就到这里。你把这些组件都装好、配好,后面的开发工作才能顺利进行。下一章,我们开始搭建项目骨架,写真正的秒杀代码。