1. 秒杀项目环境
1.Docker和JDK安装
Docker安装
# 设置仓库 yum install -y yum-utils device-mapper-persistent-data lvm2 yum-config-manager --add-repo https://download.docker.com/linux/centos/docker-ce.repo #安装 yum install -y docker-ce docker-ce-cli containerd.io #启动 systemctl start docker #设置开机启动 systemctl enable docker #安装好后,可以查看docker的版本 docker -v #修改Docker配置文件,使用国内的Docker镜像: vi /etc/docker/daemon.json # 添加以下内容 {"registry-mirrors":["https://ncwlarc2.mirror.aliyuncs.com"]} #使之生效 systemctl daemon-reload #重启 systemctl restart docker
安装Docker Compose
# 上传资料里的docker-compose-Linux-x86_64 # 移动并改名 mv docker-compose-Linux-x86_64 /usr/local/bin/docker-compose # 将可执行权限应用于二进制文件: chmod +x /usr/local/bin/docker-compose # 创建软链: ln -s /usr/local/bin/docker-compose /usr/bin/docker-compose # 测试是否安装成功: docker-compose --version
JDK安装
# 安装wget yum install -y wget # jdk镜像仓库:https://repo.huaweicloud.com/java/jdk/8u171-b11/ # 下载、解压jdk wget https://repo.huaweicloud.com/java/jdk/8u171-b11/jdk-8u171-linux-x64.tar.gz tar -zxf jdk-8u171-linux-x64.tar.gz mv jdk1.8.0_171 /usr/local/jdk8 # 配置环境 vi /etc/profile # 添加内容: export JAVA_HOME=/usr/local/jdk8 export PATH=$JAVA_HOME/bin:$PATH # 配置生效命令 source /etc/profile #查看j版本命令 java -version
unzip命令安装
yum install -y unzip
2. 创建Nacos
# 启动容器 docker run -id --name nacos \ --restart=always -p 8848:8848 \ -e MODE=standalone nacos/nacos-server:1.4.1
3. 创建MySQL
后期要使用Canal,需要把MySQL的配置文件提取出来,所以要进行相关的配置文件的编写
#创建MySQL配置文件 mkdir -p /mnt/mysql/conf #创建配置文件mysql.cnf vim /mnt/mysql/conf/mysql.cnf #内容如下: [mysqld] # 设置关闭二进制日志 skip-log-bin
启动MySQL容器
# 创建MySQL网络环境,指定子网网段 docker network create --subnet=112.74.50.231/16 seckill_network # 启动MySQL 指定容器IP,固定IP地址 docker run -id --name seckill_mysql \ --net seckill_network --ip 112.74.50.231 \ -v /mnt/mysql/data:/var/lib/mysql \ -v /mnt/mysql/conf:/etc/mysql/conf.d \ --restart=always -p 3306:3306 \ -e MYSQL_ROOT_PASSWORD=123456 mysql:8.0.18
4. 创建Canal数据同步
配置MySQL
需要让canal伪装成salve并正确获取mysql中的binary log,首先要开启 Binlog 写入功能,配置 binlog-format 为 ROW 模式
修改MySQL配置文件,如下操作:
# 执行修改命令 vi /mnt/mysql/conf/mysql.cnf
# 配置文件 mysql.cnf 内容如下 [mysqld] # 设置关闭二进制日志 #skip-log-bin # 开启二进制日志 log-bin=mysql-bin #开启binlog 选择ROW模式 binlog-format=ROW #server_id不要和canal的slaveId重复 server_id=1
配置文件修改完成后重启MySQL
docker restart seckill_mysql
在MySQL中执行以下sql,查询数据库状态
show variables like 'log_bin'; show variables like 'binlog_format'; show master status;
创建连接MySQL的账号canal
并授予作为 MySQL slave 的权限,执行以下sql:
# 创建账号 CREATE USER canal IDENTIFIED BY 'canal'; # 授予权限 GRANT SELECT, REPLICATION SLAVE, REPLICATION CLIENT ON *.* TO 'canal'@'%'; # 修改数据库加密算法 ALTER USER 'canal'@'%' IDENTIFIED WITH mysql_native_password BY 'canal'; # 刷新并应用 FLUSH PRIVILEGES;
创建并配置Cancal
创建canal-server容器
docker run -d --name canal-server \ --net seckill_network --ip 112.74.50.232 \ --restart=always -p 11111:11111 \ canal/canal-server:v1.1.4
配置Canal
# 进入Canal容器 docker exec -it canal-server /bin/bash # 修改配置文件 vi /home/admin/canal-server/conf/example/instance.properties # instance.properties需要修改以下三个部分 # 修改Canal的slaveId,不能和MySQL的server_id重复 canal.instance.mysql.slaveId=101 # 修改需要进行同步操作的MySQL的连接地址 canal.instance.master.address=172.36.0.3:3306 # 修改需要进行监听的数据库表 canal.instance.filter.regex=seckill_goods.tb_sku # 修改完成后重启Canal服务 docker restart canal-server
监听数据库表的配置 canal.instance.filter.regex
如下:
mysql 数据解析关注的表,Perl正则表达式. 多个正则之间以逗号(,)分隔,转义符需要双斜杠(\\) 常见例子: 1. 所有表:.* or .*\\..* 2. canal schema下所有表: canal\\..* 3. canal下的以canal打头的表:canal\\.canal.* 4. canal schema下的一张表:canal.test1 5. 多个规则组合使用:canal\\..*,mysql.test1,mysql.test2 (逗号分隔) 注意:此过滤条件只针对row模式的数据有效(ps. mixed/statement因为不解析sql,所以无法准确提取tableName进行过滤)
5. 创建Elasticsearch和kibana
准备IK分词器
# 创建存放IK分词器的目录 mkdir -p /mnt/elasticsearch/plugins/ik # 上传IK分词器 # 解压IK到指定路径 tar -xf ik-7.4.0.tar -C /mnt/elasticsearch/plugins/ik
启动docker服务
# 创建单机版elasticsearch容器 docker run -id --name elasticsearch \ --net seckill_network --i