fix bugfixs for mariadb_distributed

Signed-off-by: jinsaihang <jinsaihang@h-partners.com>
This commit is contained in:
jinsaihang
2025-04-03 02:38:08 +00:00
committed by root
parent b96a56a215
commit 4e1f086fd7
13 changed files with 805 additions and 818 deletions

View File

@@ -1,14 +1,14 @@
#!/bin/bash
set -x
# 检查是否传入参数
if [ -z "$1" ]; then
echo "请提供一个参数"
exit 1
fi
# 获取传入的参数
param=$1
#!/bin/bash
set -x
# 检查是否传入参数
if [ -z "$1" ]; then
echo "请提供一个参数"
exit 1
fi
# 获取传入的参数
param=$1
mysql -h SERVER_IP_1 -u root -e "SHOW VARIABLES LIKE '$1';" | grep -i "$1" | awk '{print $2}'

View File

@@ -1,28 +1,28 @@
# 本地文件检查与等待逻辑
LOG_FILE="PATH/mariadb_tpmc.out"
MAX_WAIT=60
for ((i=0; i<MAX_WAIT; i++)); do
# 如果文件存在,打印信息并继续
if [ -f "$LOG_FILE" ]; then
break
fi
# 如果文件不存在等待1秒
sleep 1
done
# 如果超时后文件仍然不存在,退出
if [ ! -f "$LOG_FILE" ]; then
echo "Local file $LOG_FILE does not exist after waiting $MAX_WAIT seconds!"
exit 1
fi
# 获取本地文件内容
local_value=$(cat PATH/mariadb_tpmc.out)
# 检查远程文件是否存在并获取内容
ssh -q root@CLIENT_IP_2 'sleep 1'
remote_value=$(ssh -q root@9.82.199.187 'if [ -f PATH/mariadb_tpmc.out ]; then cat PATH/mariadb_tpmc.out; else echo "Remote file does not exist!"; exit 1; fi')
# 将两个值相加并输出结果
sum=$((local_value + remote_value))
echo $sum
# 本地文件检查与等待逻辑
LOG_FILE="PATH/tpcc/mariadb_tpmc.out"
MAX_WAIT=60
for ((i=0; i<MAX_WAIT; i++)); do
# 如果文件存在,打印信息并继续
if [ -f "$LOG_FILE" ]; then
break
fi
# 如果文件不存在等待1秒
sleep 1
done
# 如果超时后文件仍然不存在,退出
if [ ! -f "$LOG_FILE" ]; then
echo "Local file $LOG_FILE does not exist after waiting $MAX_WAIT seconds!"
exit 1
fi
# 获取本地文件内容
local_value=$(cat PATH/mariadb_tpmc.out)
# 检查远程文件是否存在并获取内容
ssh -q root@CLIENT_IP_2 'sleep 1'
remote_value=$(ssh -q root@CLIENT_IP_2 'if [ -f PATH/tpcc/mariadb_tpmc.out ]; then cat PATH/tpcc/mariadb_tpmc.out; else echo "Remote file does not exist!"; exit 1; fi')
# 将两个值相加并输出结果
sum=$((local_value + remote_value))
echo $sum

View File

@@ -1,11 +1,13 @@
#!/bin/bash
set -x
cd PATH
sh tpcc_benchmark.sh >> debug_tpcc1.log 2>&1 &
local=$!
sh remote_benchmark.sh >> debug_tpcc2.log 2>&1 &
remote=$!
wait $local
#!/bin/bash
set -x
rm -rf debug_tpcc1.log
rm -rf debug_tpcc2.log
cd PATH
sh tpcc_benchmark.sh > debug_tpcc1.log 2>&1 &
local=$!
sh remote_benchmark.sh > debug_tpcc2.log 2>&1 &
remote=$!
wait $local
wait $remote

View File

@@ -1,12 +1,12 @@
project: "mariadb"
engine: "gbrt"
iterations: 30
random_starts: 10
benchmark: "sh PATH/mariadb_benchmark.sh"
evaluations:
- name: "tpmc"
info:
get: "sh PATH/get_tpmc.sh"
type: "negative"
weight: 100
project: "mariadb"
engine: "gbrt"
iterations: 30
random_starts: 10
benchmark: "sh PATH/mariadb_benchmark.sh"
evaluations:
- name: "tpmc"
info:
get: "sh PATH/get_tpmc.sh"
type: "negative"
weight: 100

View File

@@ -1,215 +1,215 @@
project: "mariadb"
maxiterations: 100
startworkload: "sh PATH/start_maraidb.sh"
stopworkload: "sh PATH/stop_maraidb.sh"
object :
-
name : "mariadb.key_buffer_size"
info :
desc : "Index parameters of the myisam storage engine"
get : "sh PATH/get_mariadb_param_info.sh key_buffer_size"
set : "sh PATH/set_mariadb_param_info.sh key_buffer_size $value"
needrestart : "true"
type : "discrete"
scope :
- 1048576
- 53687091
step : 5048576
items :
dtype : "int"
-
name : "mariadb.max_allowed_packet"
info :
desc : "Maximum number of received packets"
get : "sh PATH/get_mariadb_param_info.sh max_allowed_packet"
set : "sh PATH/set_mariadb_param_info.sh max_allowed_packet $value"
needrestart : "true"
type : "discrete"
scope :
- 10485760
- 104857600
step : 5048576
items :
dtype : "int"
-
name : "mariadb.table_open_cache"
info :
desc : "Table cache for storing data"
get : "sh PATH/get_mariadb_param_info.sh table_open_cache"
set : "sh PATH/set_mariadb_param_info.sh table_open_cache $value"
needrestart : "true"
type : "discrete"
scope :
- 16000
- 1000000
step : 50000
items :
dtype : "int"
-
name : "mariadb.back_log"
info :
desc : "The number of new requests stored in the stack"
get : "sh PATH/get_mariadb_param_info.sh back_log"
set : "sh PATH/set_mariadb_param_info.sh back_log $value"
needrestart : "true"
type : "continuous"
scope :
- 500
- 4096
dtype : "int"
-
name : "mariadb.sort_buffer_size"
info :
desc : "Cache used for sorting"
get : "sh PATH/get_mariadb_param_info.sh sort_buffer_size"
set : "sh PATH/set_mariadb_param_info.sh sort_buffer_size $value"
needrestart : "true"
type : "discrete"
scope :
- 2560000
- 10485760
step : 102400
items :
dtype : "int"
-
name : "mariadb.read_buffer_size"
info :
desc : "the buffer allocated to each thread during sequential table scanning."
get : "sh PATH/get_mariadb_param_info.sh read_buffer_size"
set : "sh PATH/set_mariadb_param_info.sh read_buffer_size $value"
needrestart : "true"
type : "discrete"
scope :
- 10240000
- 104857600
step : 1024000
items :
dtype : "int"
-
name : "mariadb.read_rnd_buffer_size"
info :
desc : "the buffer allocated to each thread when the table is read randomly"
get : "sh PATH/get_mariadb_param_info.sh read_rnd_buffer_size"
set : "sh PATH/set_mariadb_param_info.sh read_rnd_buffer_size $value"
needrestart : "true"
type : "discrete"
scope :
- 10240000
- 104857600
step : 1024000
items :
dtype : "int"
-
name : "mariadb.thread_cache_size"
info :
desc : "Number of threads saved in the cache that are reused"
get : "sh PATH/get_mariadb_param_info.sh thread_cache_size"
set : "sh PATH/set_mariadb_param_info.sh thread_cache_size $value"
needrestart : "true"
type : "continuous"
scope :
- 8
- 500
dtype : "int"
-
name : "mariadb.max_connections"
info :
desc : "the max number of connections"
get : "sh PATH/get_mariadb_param_info.sh max_connections"
set : "sh PATH/set_mariadb_param_info.sh max_connections $value"
needrestart : "true"
type : "continuous"
scope :
- 300
- 1500
dtype : "int"
-
name : "mariadb.max_heap_table_size"
info :
desc : "size of a memory table that can be created"
get : "sh PATH/get_mariadb_param_info.sh max_heap_table_size"
set : "sh PATH/set_mariadb_param_info.sh max_heap_table_size $value"
needrestart : "true"
type : "discrete"
scope :
- 10240000
- 104857600
step : 1024000
items :
dtype : "int"
-
name : "mariadb.innodb_log_buffer_size"
info :
desc : "size of innodb log buffer"
get : "sh PATH/get_mariadb_param_info.sh innodb_log_buffer_size"
set : "sh PATH/set_mariadb_param_info.sh innodb_log_buffer_size $value"
needrestart : "true"
type : "discrete"
scope :
- 10485760
- 104857600
step : 1048576
items :
dtype : "int"
-
name : "mariadb.innodb_write_io_threads"
info :
desc : "size of innodb log buffer"
get : "sh PATH/get_mariadb_param_info.sh innodb_write_io_threads"
set : "sh PATH/set_mariadb_param_info.sh innodb_write_io_threads $value"
needrestart : "true"
type : "continuous"
scope :
- 4
- 16
dtype : "int"
-
name : "mariadb.innodb_read_io_threads"
info :
desc : "size of innodb log buffer"
get : "sh PATH/get_mariadb_param_info.sh innodb_read_io_threads"
set : "sh PATH/set_mariadb_param_info.sh innodb_read_io_threads $value"
needrestart : "true"
type : "continuous"
scope :
- 4
- 16
dtype : "int"
-
name : "innodb_buffer_pool_size"
info :
desc : "MySQL [mysqld] parameters 'innodb_buffer_pool_size'."
get : "sh PATH/get_mariadb_param_info.sh innodb_buffer_pool_size"
set : "sh PATH/set_mariadb_param_info.sh innodb_buffer_pool_size $value"
needrestart : "true"
type : "discrete"
scope :
- 21474836480
- 26843545600
step : 1073741824
items :
dtype : "int"
-
name : "innodb_buffer_pool_instances"
info :
desc : "MySQL [mysqld] parameters 'innodb_buffer_pool_instances'."
get : "sh PATH/get_mariadb_param_info.sh innodb_buffer_pool_instances"
set : "sh PATH/set_mariadb_param_info.sh innodb_buffer_pool_instances $value"
needrestart : "true"
type : "continuous"
scope :
- 1
- 8
dtype : "int"
-
name : "innodb_io_capacity"
info :
desc : "MySQL [mysqld] parameters 'innodb_io_capacity'."
get : "sh PATH/get_mariadb_param_info.sh innodb_io_capacity"
set : "sh PATH/set_mariadb_param_info.sh innodb_io_capacity $value"
needrestart : "true"
type : "continuous"
scope :
- 100
- 2000
dtype : "int"
project: "mariadb"
maxiterations: 100
startworkload: "sh PATH/start_maraidb.sh"
stopworkload: "sh PATH/stop_maraidb.sh"
object :
-
name : "mariadb.key_buffer_size"
info :
desc : "Index parameters of the myisam storage engine"
get : "sh PATH/get_mariadb_param_info.sh key_buffer_size"
set : "sh PATH/set_mariadb_param_info.sh key_buffer_size $value"
needrestart : "true"
type : "discrete"
scope :
- 1048576
- 53687091
step : 5048576
items :
dtype : "int"
-
name : "mariadb.max_allowed_packet"
info :
desc : "Maximum number of received packets"
get : "sh PATH/get_mariadb_param_info.sh max_allowed_packet"
set : "sh PATH/set_mariadb_param_info.sh max_allowed_packet $value"
needrestart : "true"
type : "discrete"
scope :
- 10485760
- 104857600
step : 5048576
items :
dtype : "int"
-
name : "mariadb.table_open_cache"
info :
desc : "Table cache for storing data"
get : "sh PATH/get_mariadb_param_info.sh table_open_cache"
set : "sh PATH/set_mariadb_param_info.sh table_open_cache $value"
needrestart : "true"
type : "discrete"
scope :
- 16000
- 1000000
step : 50000
items :
dtype : "int"
-
name : "mariadb.back_log"
info :
desc : "The number of new requests stored in the stack"
get : "sh PATH/get_mariadb_param_info.sh back_log"
set : "sh PATH/set_mariadb_param_info.sh back_log $value"
needrestart : "true"
type : "continuous"
scope :
- 500
- 4096
dtype : "int"
-
name : "mariadb.sort_buffer_size"
info :
desc : "Cache used for sorting"
get : "sh PATH/get_mariadb_param_info.sh sort_buffer_size"
set : "sh PATH/set_mariadb_param_info.sh sort_buffer_size $value"
needrestart : "true"
type : "discrete"
scope :
- 2560000
- 10485760
step : 102400
items :
dtype : "int"
-
name : "mariadb.read_buffer_size"
info :
desc : "the buffer allocated to each thread during sequential table scanning."
get : "sh PATH/get_mariadb_param_info.sh read_buffer_size"
set : "sh PATH/set_mariadb_param_info.sh read_buffer_size $value"
needrestart : "true"
type : "discrete"
scope :
- 10240000
- 104857600
step : 1024000
items :
dtype : "int"
-
name : "mariadb.read_rnd_buffer_size"
info :
desc : "the buffer allocated to each thread when the table is read randomly"
get : "sh PATH/get_mariadb_param_info.sh read_rnd_buffer_size"
set : "sh PATH/set_mariadb_param_info.sh read_rnd_buffer_size $value"
needrestart : "true"
type : "discrete"
scope :
- 10240000
- 104857600
step : 1024000
items :
dtype : "int"
-
name : "mariadb.thread_cache_size"
info :
desc : "Number of threads saved in the cache that are reused"
get : "sh PATH/get_mariadb_param_info.sh thread_cache_size"
set : "sh PATH/set_mariadb_param_info.sh thread_cache_size $value"
needrestart : "true"
type : "continuous"
scope :
- 8
- 500
dtype : "int"
-
name : "mariadb.max_connections"
info :
desc : "the max number of connections"
get : "sh PATH/get_mariadb_param_info.sh max_connections"
set : "sh PATH/set_mariadb_param_info.sh max_connections $value"
needrestart : "true"
type : "continuous"
scope :
- 300
- 1500
dtype : "int"
-
name : "mariadb.max_heap_table_size"
info :
desc : "size of a memory table that can be created"
get : "sh PATH/get_mariadb_param_info.sh max_heap_table_size"
set : "sh PATH/set_mariadb_param_info.sh max_heap_table_size $value"
needrestart : "true"
type : "discrete"
scope :
- 10240000
- 104857600
step : 1024000
items :
dtype : "int"
-
name : "mariadb.innodb_log_buffer_size"
info :
desc : "size of innodb log buffer"
get : "sh PATH/get_mariadb_param_info.sh innodb_log_buffer_size"
set : "sh PATH/set_mariadb_param_info.sh innodb_log_buffer_size $value"
needrestart : "true"
type : "discrete"
scope :
- 10485760
- 104857600
step : 1048576
items :
dtype : "int"
-
name : "mariadb.innodb_write_io_threads"
info :
desc : "size of innodb log buffer"
get : "sh PATH/get_mariadb_param_info.sh innodb_write_io_threads"
set : "sh PATH/set_mariadb_param_info.sh innodb_write_io_threads $value"
needrestart : "true"
type : "continuous"
scope :
- 4
- 16
dtype : "int"
-
name : "mariadb.innodb_read_io_threads"
info :
desc : "size of innodb log buffer"
get : "sh PATH/get_mariadb_param_info.sh innodb_read_io_threads"
set : "sh PATH/set_mariadb_param_info.sh innodb_read_io_threads $value"
needrestart : "true"
type : "continuous"
scope :
- 4
- 16
dtype : "int"
-
name : "innodb_buffer_pool_size"
info :
desc : "MySQL [mysqld] parameters 'innodb_buffer_pool_size'."
get : "sh PATH/get_mariadb_param_info.sh innodb_buffer_pool_size"
set : "sh PATH/set_mariadb_param_info.sh innodb_buffer_pool_size $value"
needrestart : "true"
type : "discrete"
scope :
- 21474836480
- 26843545600
step : 1073741824
items :
dtype : "int"
-
name : "innodb_buffer_pool_instances"
info :
desc : "MySQL [mysqld] parameters 'innodb_buffer_pool_instances'."
get : "sh PATH/get_mariadb_param_info.sh innodb_buffer_pool_instances"
set : "sh PATH/set_mariadb_param_info.sh innodb_buffer_pool_instances $value"
needrestart : "true"
type : "continuous"
scope :
- 1
- 8
dtype : "int"
-
name : "innodb_io_capacity"
info :
desc : "MySQL [mysqld] parameters 'innodb_io_capacity'."
get : "sh PATH/get_mariadb_param_info.sh innodb_io_capacity"
set : "sh PATH/set_mariadb_param_info.sh innodb_io_capacity $value"
needrestart : "true"
type : "continuous"
scope :
- 100
- 2000
dtype : "int"

View File

@@ -1,389 +1,370 @@
压力机客户端两台压力机19.82.230.66、压力机29.82.199.187
测试机服务端两台测试机19.82.179.1、压力机29.82.199.161
# 1.环境准备
## 1.1 下载JDK文件
在两台物理机上执行
JDK下载链接
https://download.oracle.com/java/21/latest/jdk-21_linux-aarch64_bin.tar.gz
下载后解压到opt目录下
```bash
tar -zxvf jdk-21_linux-aarch64_bin.tar.gz -C /opt/
```
## 1.2 配置临时java环境
```bash
export JAVA_HOME=/opt/jdk-21.0.6
export PATH=$JAVA_HOME/bin:$PATH
```
## 1.3 配置永久java环境可选
打开bashrc文件
```bash
vim ~/.bashrc
```
将以下命令追加到文件末尾并source生效
```bash
export JAVA_HOME=/opt/jdk-21.0.6
export PATH=$JAVA_HOME/bin:$PATH
```
使用source命令使修改生效
```bash
source ~/.bashrc
```
该步骤在两台压力机上都要执行
## 1.4 部署A-Tune环境
具体安装启动方式参考A-Tune README-zh 文档第一节“安装A-Tune”,A-Tune仓库链接https://gitee.com/openeuler/A-Tune
```bash
yum install -y atune atune-engine
```
加载并启动atuned和atune-engine服务:
```bash
systemctl start atuned
systemctl start atune-engine
```
下载A-Tune源码具体操作如下
```bash
cd ~
git clone https://gitee.com/openeuler/A-Tune.git
cd A-Tune/examples/tuning/mariadb_distributed
```
进入目录A-Tune/examples/tuning/mariadb_distributed,并为tpcc创建目录
```bash
cd A-Tune/examples/tuning/mariadb_distributed
mkdir tpcc
```
## 1.5 tpcc部署
两台压力机都需要部署
下载链接:
https://master.dl.sourceforge.net/project/tpccruner/TPCCRunner_SRC_V1.00.zip?viasf=1
### 1.5.1 编译
在两台压力机上执行
将压缩包copy到A-Tune/examples/tuning/mariadb_distributed/tpcc目录下进入A-Tune/examples/tuning/mariadb_distributed/tpcc目录然后执行如下命令
```bash
cd tpcc
unzip TPCCRunner_SRC_V1.00.zip
mkdir log
javac -d bin src/iomark/TPCCRunner/*.java
```
### 1.5.2 修改loader.properties文件
在两台压力机上修改conf/example/mysql/loader.properties
应手动修改对应测试机的ip因为两台测试机中mariadb数据库中数据相似因此这里的ip设置为其中一个测试机的ip即可
修改内容如下:
```bash
driver=com.mysql.jdbc.Driver
url=jdbc:mysql://9.82.179.1/hsdb
user=root
#password=huawei
threads=8
warehouses=5
```
### 1.5.3 修改master.properties文件
在两台压力机上修改conf/example/mysql/master.properties
修改内容如下:
```bash
listenPort=27891
slaves=slave1,slave2
runMinutes=5
warmupMinutes=2
newOrderPercent=1
paymentPercent=1
orderStatusPercent=45
deliveryPercent=43
stockLevelPercent=10
newOrderThinkSecond=0
paymentThinkSecond=0
orderStatusThinkSecond=0
deliveryThinkSecond=0
stockLevelThinkSecond=0
```
### 1.5.4 修改slave1.properties文件
在两台压力机上修改conf/example/mysql/slave1.properties
应手动修改对应测试机1的ip
修改内容如下:
```bash
name=slave1
masterAddress=127.0.0.1
masterPort=27891
driver=com.mysql.jdbc.Driver
url=jdbc:mysql://9.82.179.1/hsdb
user=root
#password=huawei
poolSize=120
userCount=100
warehouseCount=500
startWarehouseID=1
```
### 1.5.5 修改slave2.properties文件
在两台压力机上修改conf/example/mysql/slave2.properties
应手动修改对应测试机2的ip
修改内容如下:
```bash
name=slave2
masterAddress=127.0.0.1
masterPort=27891
driver=com.mysql.jdbc.Driver
url=jdbc:mysql://9.82.179.1/hsdb
user=root
#password=huawei
poolSize=96
userCount=100
warehouseCount=500
startWarehouseID=1
```
## 1.6 安装mariadb数据库
在两台测试机上安装数据库mariadb
```bash
yum install mariadb -y
yum install mariadb-server -y
```
## 1.7 配置数据库免密登录
修改/etc/my.cnf文件在[mysqld]后添加skip-grant-tables登录时跳过权限检查
```bash
skip-grant-tables
```
## 1.8 写入数据
在两台测试机上执行,在解压后的tpcc目录,在数据库中创建数据
```bash
mysql -uroot -phuawei -vvv -n < sql/example/mysql/create_database.sql
mysql -uroot -phuawei -vvv -n < sql/example/mysql/create_table.sql
```
在两台压力机上执行,向数据库中加载数据
```bash
java -cp bin/:lib/mysql-connector-java-5.1.7-bin.jar iomark.TPCCRunner.Loader conf/example/mysql/loader.properties
```
在两台测试机上执行,在数据库中创建索引,加快查找速度
```bash
mysql -uroot -phuawei -vvv -n < sql/example/mysql/create_index.sql
```
# 2.调优环境准备
压力机相当于客户端节点
## 2.1 运行环境准备
克隆A-Tune仓库
```bash
cd ~
git clone https://gitee.com/openeuler/A-Tune.git
cd /root/A-Tune/examples/tuning/mariadb_distributed
```
在压力机1上执行运行prepare.sh脚本来替换调优文件中的路径执行后还需输入压力机2的ip和两台对应测试机的ip。
```bash
sh prepare.sh
```
客户端ip相当于压力机ip服务端ip相当于测试机ip执行结果如下
```bash
[root@localhost mariadb_distributed]# sh prepare.sh
path: /root/gitee/A-Tune/examples/tuning/mariadb_distributed
[INPUT] enter client_ip_2 of testbench to used:9.82.199.187
[INPUT] enter server_ip_1 of testbench to used:9.82.179.1
[INPUT] enter server_ip_2 of testbench to used:9.82.199.161
[INFO] update path for mariadb files
[INFO] update ip for mariadb files
cp mariadb_server.yaml to/etc/atuned/tuning
finish prepare
```
## 2.2 测试benchmark脚本能否正常运行
在压力机1上的A-Tune/examples/tuning/mariadb_distributed目录下执行tpcc_benchmark.sh脚本测试benchmark能否在调优环境中运行
```bash
sh tpcc_benchmark.sh
```
可以通过观察mariadb.log,slave1.log,slave2.log日志文件来查看benchmark运行过程
```bash
tail -f tpcc/mariadb.log
tail -f tpcc/slave1.log
tail -f tpcc/slave2.log
```
## 2.3 测试benchmark脚本在远程机器上能否正常运行
在压力机1上的A-Tune/examples/tuning/mariadb_distributed目录下执行tmp-remote.sh脚本测试benchmark能否在调优环境中运行
```bash
sh tmp-remote.sh
```
在压力机2上A-Tune/examples/tuning/mariadb_distributed目录下可以观察mariadb.log,slave1.log,slave2.log日志文件来查看benchmark运行过程
```bash
tail -f tpcc/mariadb.log
tail -f tpcc/slave1.log
tail -f tpcc/slave2.log
```
## 2.4 运行总的benchmark脚本可选
在压力机1上运行mariadb_benchmark.sh该脚本同时进行本地和远程的benchmark运行可以观察本地压力机mariadb.log日志来查看运行过程
```bash
sh mariadb_benchmark.sh
```
该脚本正常运行后证明benchmark基线数据可以正常获取。
## 2.5 atune调优
atune-adm tuning 是 A-Tune 的调优命令它会根据mariadb_client.yaml中的配置文件对mariadb数据库进行调优。会根据环境和性能数据自动选择合适的调优策略优化集群的性能。调优过程中可以通过查看mariadb.log、debug.log日志来确定服务是否正常执行
```bash
atune-adm tuning --project mariadb --detail mariadb_client.yaml
```
执行调优命令后会先执行benchmark获取基线数据然后加载mariadb项目的调优配置文件输出如下
第一轮输出:
Best Performance: (tpmc=396916.00), Performance Improvement Rate: 3.95%
代表最优的性能指标以及性能提升比例对比基线是第一轮benchmark的结果。
```bash
[root@localhost mariadb_distributed]# atune-adm tuning --project mariadb --detail mariadb_client.yaml
Start to benchmark baseline...
1.Loading its corresponding tuning project: mariadb
2.Start to tuning the system......
Current Tuning Progress......(1/30)
Used time: 10m27s, Total Time: 10m27s, Best Performance: (tpmc=396916.00), Performance Improvement Rate: 3.95%
The 1th recommand parameters is: mariadb.key_buffer_size=1048576,mariadb.max_allowed_packet=20582912,mariadb.table_open_cache=66000,mariadb.back_log=3677,mariadb.sort_buffer_size=6963200,mariadb.read_buffer_size=16384000,mariadb.read_rnd_buffer_size=54272000,mariadb.thread_cache_size=462,mariadb.max_connections=1169,mariadb.max_heap_table_size=20480000,mariadb.innodb_log_buffer_size=63963136,mariadb.innodb_write_io_threads=5,mariadb.innodb_read_io_threads=10,innodb_buffer_pool_size=26843545000,innodb_buffer_pool_instances=3,innodb_io_capacity=1843
The 1th evaluation value: (tpmc=396916.00)(3.95%)
```
## 2.6 恢复原有的配置参数(可选)
原始的参数配置文件为/var/atuned/ceph-tuning-restore.conf。
可以先执行如下命令恢复调优前的环境配置:
```bash
atune-adm tuning --restore --project mariadb
```
# 3.主要文件功能介绍
## set_mariadb_param_info.sh
该脚本在mariadb_server.yaml中使用获取测试机1中mariadb相关的参数值,用来进行本地调优。因为测试机1和测试机2中生成的mariadb数据比较接近因此用使用第一个测试机的数据来进行调优
```bash
#!/bin/bash
set -x
# 检查是否传入参数
if [ -z "$1" ]; then
echo "请提供一个参数"
exit 1
fi
# 获取传入的参数
param=$1
mysql -h SERVER_IP_1 -u root -e "SHOW VARIABLES LIKE '$1';" | grep -i "$1" | awk '{print $2}'
```
## set_mariadb_param_info.sh
该脚本在mariadb_server.yaml中使用分发获取到的mariadb调优参数到各个测试机中提升mariadb服务的性能。
```bash
#!/bin/bash
set -x
# 检查是否传入参数
if [ -z "$1" ]; then
echo "请提供一个参数"
exit 1
fi
# 获取传入的参数
param=$1
value=$2
# 构建命令
ssh -q root@SERVER_IP_1 "bash -c 'grep -q \"^$param\" /etc/my.cnf && sed -i \"s/^$param.*/$param = $value/g\" /etc/my.cnf || echo \"$param = $value\" >> /etc/my.cnf'"
ssh -q root@SERVER_IP_2 "bash -c 'grep -q \"^$param\" /etc/my.cnf && sed -i \"s/^$param.*/$param = $value/g\" /etc/my.cnf || echo \"$param = $value\" >> /etc/my.cnf'"
```
## mariadb_benchmark.sh
该脚本是总的benchmark执行脚本用于获取基线数据其中包含了本地执行benchmark和远程执行benchmark两个步骤。本地和远程执行benchmark脚本后会获取进程号通过wait命令来保证同时结束。同时会将执行过程重定向到debug.log日志文件中。
```bash
#!/bin/bash
set -x
cd PATH
sh tpcc_benchmark.sh >> debug_tpcc1.log 2>&1 &
local=$!
sh remote_benchmark.sh >> debug_tpcc2.log 2>&1 &
remote=$!
wait $local
wait $remote
```
## tpcc_benchmark.sh
该脚本用来进行本地benchmark基线运行主要是运行基于java的tpcc基准测试程序。三条命令执行后会将结果重定向mariadb.log、slave1.log、slave2.log日志文件中可以通过观察该日志文件来获取执行信息。
```bash
#!/bin/bash
set -x
cd tpcc
rm -rf mariadb.log
rm -rf slave1.log
rm -rf slave2.log
rm -rf mariadb_tpmc.out
pkill bash
sleep 1
pkill java
sleep 1
ps -ef|grep java
echo 'start runing'
java -cp bin/:lib/mysql-connector-java-5.1.7-bin.jar iomark.TPCCRunner.Master conf/example/mysql/master.properties > mariadb.log 2>&1 &
master_pid=$!
echo "Starting Master..."
sleep 1
java -cp bin/:lib/mysql-connector-java-5.1.7-bin.jar iomark.TPCCRunner.Slave conf/example/mysql/slave1.properties > slave1.log 2>&1 &
slave1_pid=$!
echo "Starting Slave1..."
sleep 1
java -cp bin/:lib/mysql-connector-java-5.1.7-bin.jar iomark.TPCCRunner.Slave conf/example/mysql/slave2.properties > slave2.log 2>&1 &
slave2_pid=$!
echo "Starting Slave2..."
sleep 1
# 监控 slave1.log
tail -f slave1.log | while read line; do
if [[ "$line" == *"Terminating users"* ]]; then
echo "Terminating users at slave1.log detected, killing process..."
kill $slave1_pid # 杀死 slave1 进程
break
fi
done & # 将监控放到后台
# 监控 slave2.log
tail -f slave2.log | while read line; do
if [[ "$line" == *"Terminating users"* ]]; then
echo "Terminating users at slave2.log detected, killing process..."
kill $slave2_pid # 杀死 slave2 进程
break
fi
done & # 将监控放到后台
# 监控 mariadb.log
tail -f mariadb.log | while read line; do
if [[ "$line" == *"terminate users"* ]]; then
echo "Terminating users at mariadb1.log detected, killing process..."
kill $master_pid # 杀死 master 进程
break
fi
done & # 将监控放到后台
# 等待所有后台任务完成
wait $slave1_pid
wait $slave2_pid
wait $master_pid
total=$(awk '$1 == "average" { total += $3 } END { print total }' mariadb.log)
echo $total > mariadb_tpmc.out
```
## remote_benchmark.sh
该脚本用来在远程执行压力机2的benchmark基线需要保证远程压力机的路径和当前环境的中的路径一致
```bash
#!/bin/bash
# 在远程服务器上执行脚本并放入后台
ssh -q root@CLIENT_IP_2 "cd PATH && sh tpcc_benchmark.sh > tpcc_benchmark.log 2>&1 &"
sleep 5
# 监控远程日志,检测到特定日志内容时终止
while ! ssh -q root@CLIENT_IP_2 '[ -f PATH/tpcc/mariadb_tpmc.out ]'; do sleep 2; done && ssh -q root@CLIENT_IP_2 'kill $(pgrep -f tpcc_benchmark.sh)'
# # 等待所有后台进程完成
wait
```
压力机客户端两台压力机19.82.230.66、压力机29.82.199.187
测试机服务端两台测试机19.82.179.1、压力机29.82.199.161
# 1.环境准备
## 1.1 下载JDK文件
在两台物理机上执行
JDK下载链接
https://download.oracle.com/java/21/latest/jdk-21_linux-aarch64_bin.tar.gz
下载后解压到opt目录下
```bash
tar -zxvf jdk-21_linux-aarch64_bin.tar.gz -C /opt/
```
## 1.2 配置临时java环境
```bash
export JAVA_HOME=/opt/jdk-21.0.6
export PATH=$JAVA_HOME/bin:$PATH
```
## 1.3 配置永久java环境可选
打开bashrc文件
```bash
vim ~/.bashrc
```
将以下命令追加到文件末尾并source生效
```bash
export JAVA_HOME=/opt/jdk-21.0.6
export PATH=$JAVA_HOME/bin:$PATH
```
使用source命令使修改生效
```bash
source ~/.bashrc
```
该步骤在两台压力机上都要执行包括A-Tune源码也需要下载到相同的路径否则可能无法远程执行另外一台压力机的benchmark。
## 1.4 部署A-Tune环境
部署环境时需要保证两台压力机上的源代码路径是一致的下文给出的参考方法是两台压力机都到root目录下克隆仓库也可以根据实际环境进行路径的更改但都需要保证两个压力机中代码路径的一致便于后续远程执行benchmark命令。
具体安装启动方式参考A-Tune README-zh 文档第一节“安装A-Tune”,A-Tune仓库链接https://gitee.com/openeuler/A-Tune
```bash
yum install -y atune atune-engine
```
加载并启动atuned和atune-engine服务:
```bash
systemctl start atuned
systemctl start atune-engine
```
下载A-Tune源码具体操作如下
```bash
cd ~
git clone https://gitee.com/openeuler/A-Tune.git
```
进入目录A-Tune/examples/tuning/mariadb_distributed,并为tpcc创建目录
```bash
cd A-Tune/examples/tuning/mariadb_distributed
mkdir tpcc
```
## 1.5 tpcc部署
两台压力机都需要部署,可以在一台压力机上配置完成后拷贝到另一台压力机上的相同路径。
下载链接:
https://master.dl.sourceforge.net/project/tpccruner/TPCCRunner_SRC_V1.00.zip?viasf=1
### 1.5.1 编译
在两台压力机上执行
将压缩包copy到A-Tune/examples/tuning/mariadb_distributed/tpcc目录下进入A-Tune/examples/tuning/mariadb_distributed/tpcc目录然后执行如下命令
```bash
cd tpcc
unzip TPCCRunner_SRC_V1.00.zip
mkdir log
javac -d bin src/iomark/TPCCRunner/*.java
```
### 1.5.2 修改loader.properties文件
在两台压力机上修改conf/example/mysql/loader.properties文件。
应手动修改对应测试机的ip一台压力机对应一台测试机。
修改内容如下:
```bash
driver=com.mysql.jdbc.Driver
url=jdbc:mysql://9.82.179.1/hsdb
user=root
#password=huawei
threads=8
warehouses=5
```
### 1.5.3 修改master.properties文件
在两台压力机上修改conf/example/mysql/master.properties
修改内容如下:
```bash
listenPort=27891
slaves=slave1,slave2
runMinutes=5
warmupMinutes=2
newOrderPercent=1
paymentPercent=1
orderStatusPercent=45
deliveryPercent=43
stockLevelPercent=10
newOrderThinkSecond=0
paymentThinkSecond=0
orderStatusThinkSecond=0
deliveryThinkSecond=0
stockLevelThinkSecond=0
```
### 1.5.4 修改slave1.properties文件
在两台压力机上修改conf/example/mysql/slave1.properties
应手动修改对应测试机1的ip
修改内容如下:
```bash
name=slave1
masterAddress=127.0.0.1
masterPort=27891
driver=com.mysql.jdbc.Driver
url=jdbc:mysql://9.82.179.1/hsdb
user=root
#password=huawei
poolSize=120
userCount=100
warehouseCount=500
startWarehouseID=1
```
### 1.5.5 修改slave2.properties文件
在两台压力机上修改conf/example/mysql/slave2.properties
应手动修改对应测试机2的ip
修改内容如下:
```bash
name=slave2
masterAddress=127.0.0.1
masterPort=27891
driver=com.mysql.jdbc.Driver
url=jdbc:mysql://9.82.199.161/hsdb
user=root
#password=huawei
poolSize=120
userCount=100
warehouseCount=500
startWarehouseID=1
```
## 1.6 安装mariadb数据库
在两台测试机上安装数据库mariadb
```bash
yum install mariadb -y
yum install mariadb-server -y
```
## 1.7 配置数据库免密登录
修改/etc/my.cnf文件在[mysqld]后添加skip-grant-tables登录时跳过权限检查
```bash
skip-grant-tables
```
## 1.8 写入数据
在两台测试机上执行,下载TPCCRunner_SRC_V1.00.zip压缩包解压后,在数据库中创建数据
```bash
mysql -uroot -vvv -n < sql/example/mysql/create_database.sql
mysql -uroot -vvv -n < sql/example/mysql/create_table.sql
```
在两台压力机上执行,向数据库中加载数据
```bash
java -cp bin/:lib/mysql-connector-java-5.1.7-bin.jar iomark.TPCCRunner.Loader conf/example/mysql/loader.properties
```
在两台测试机上执行,在数据库中创建索引,加快查找速度
```bash
mysql -uroot -vvv -n < sql/example/mysql/create_index.sql
```
# 2.调优环境准备
压力机相当于客户端节点
## 2.1 运行环境准备
进入A-Tune仓库
```bash
cd /root/A-Tune/examples/tuning/mariadb_distributed
```
在压力机1上执行运行prepare.sh脚本来替换调优文件中的路径执行后还需输入压力机2的ip和两台对应测试机的ip。
在压力机1上执行后可以使用scp命令拷贝到另一台压力机
```bash
sh prepare.sh
```
本地执行命令的机器为client_ip_1
压力机2的为client_ip_2
两个mariadb数据库所在的测试机分别为server_ip_1、server_ip_2,
执行结果如下:
```bash
[root@localhost mariadb_distributed]# sh prepare.sh
path: /root/gitee/A-Tune/examples/tuning/mariadb_distributed
[INPUT] enter client_ip_2 of testbench to used:9.82.199.187
[INPUT] enter server_ip_1 of testbench to used:9.82.179.1
[INPUT] enter server_ip_2 of testbench to used:9.82.199.161
[INFO] update path for mariadb files
[INFO] update ip for mariadb files
cp mariadb_server.yaml to/etc/atuned/tuning
finish prepare
```
## 2.2 运行总的benchmark脚本
在压力机1上运行mariadb_benchmark.sh该脚本同时进行本地和远程的benchmark运行可以观察本地压力机debug_tpcc1.log日志、tpcc目录下的mariadb.log日志来查看运行过程
```bash
sh mariadb_benchmark.sh
```
## 2.3 atune调优
atune-adm tuning 是 A-Tune 的调优命令它会根据mariadb_client.yaml中的配置文件对mariadb数据库进行调优。会根据环境和性能数据自动选择合适的调优策略优化集群的性能。调优过程中可以通过查看mariadb.log、debug.log日志来确定服务是否正常执行
```bash
atune-adm tuning --project mariadb --detail mariadb_client.yaml
```
执行调优命令后会先执行benchmark获取基线数据然后加载mariadb项目的调优配置文件输出如下
第一轮输出:
Best Performance: (tpmc=396916.00), Performance Improvement Rate: 3.95%
代表最优的性能指标以及性能提升比例对比基线是第一轮benchmark的结果。
```bash
[root@localhost mariadb_distributed]# atune-adm tuning --project mariadb --detail mariadb_client.yaml
Start to benchmark baseline...
1.Loading its corresponding tuning project: mariadb
2.Start to tuning the system......
Current Tuning Progress......(1/30)
Used time: 10m27s, Total Time: 10m27s, Best Performance: (tpmc=396916.00), Performance Improvement Rate: 3.95%
The 1th recommand parameters is: mariadb.key_buffer_size=1048576,mariadb.max_allowed_packet=20582912,mariadb.table_open_cache=66000,mariadb.back_log=3677,mariadb.sort_buffer_size=6963200,mariadb.read_buffer_size=16384000,mariadb.read_rnd_buffer_size=54272000,mariadb.thread_cache_size=462,mariadb.max_connections=1169,mariadb.max_heap_table_size=20480000,mariadb.innodb_log_buffer_size=63963136,mariadb.innodb_write_io_threads=5,mariadb.innodb_read_io_threads=10,innodb_buffer_pool_size=26843545000,innodb_buffer_pool_instances=3,innodb_io_capacity=1843
The 1th evaluation value: (tpmc=396916.00)(3.95%)
```
## 2.4 恢复原有的配置参数(可选)
原始的参数配置文件为/var/atuned/ceph-tuning-restore.conf。
可以先执行如下命令恢复调优前的环境配置:
```bash
atune-adm tuning --restore --project mariadb
```
# 3.主要文件功能介绍
## set_mariadb_param_info.sh
该脚本在mariadb_server.yaml中使用获取测试机1中mariadb相关的参数值,用来进行本地调优。(因为两台测试机硬件规格和环境比较相似,因此用使用第一个测试机的数据来进行调优即可)
如果需要扩展为不同机器的mariadb下发参数不同可以扩展该脚本为两个参数指定IP和参数名用于给对应机器的参数进行下发。
```bash
#!/bin/bash
set -x
# 检查是否传入参数
if [ -z "$1" ]; then
echo "请提供一个参数"
exit 1
fi
# 获取传入的参数
param=$1
mysql -h SERVER_IP_1 -u root -e "SHOW VARIABLES LIKE '$1';" | grep -i "$1" | awk '{print $2}'
```
## set_mariadb_param_info.sh
该脚本用于下发参数到mariadb测试机节点设置一对参数和值之后会将两个测试机节点设置相同的参数值若需要多台机器设置不同的值此脚本需额外扩展一个参数IP用于指定对应机器进行参数下发
```bash
#!/bin/bash
set -x
# 检查是否传入参数
if [ -z "$1" ]; then
echo "请提供一个参数"
exit 1
fi
# 获取传入的参数
param=$1
value=$2
# 构建命令
ssh -q root@SERVER_IP_1 "bash -c 'grep -q \"^$param\" /etc/my.cnf && sed -i \"s/^$param.*/$param = $value/g\" /etc/my.cnf || echo \"$param = $value\" >> /etc/my.cnf'"
ssh -q root@SERVER_IP_2 "bash -c 'grep -q \"^$param\" /etc/my.cnf && sed -i \"s/^$param.*/$param = $value/g\" /etc/my.cnf || echo \"$param = $value\" >> /etc/my.cnf'"
```
## mariadb_benchmark.sh
该脚本是整体的benchmark执行脚本用于在两台压力机执行性能压测并汇总结果到压力机1上。tpcc_benchmark.sh为本地执行benchmark脚本remote_benchmark.sh为远程执行另一台压力机的脚本该脚本会阻塞进程直到所有机器执行完benchmark结果并输出到mariadb_tpmc.out文件最终通过get_tpmc.sh脚本将结果求和得到最终tpmc指标反馈给atune。
```bash
#!/bin/bash
set -x
cd PATH
sh tpcc_benchmark.sh >> debug_tpcc1.log 2>&1 &
local=$!
sh remote_benchmark.sh >> debug_tpcc2.log 2>&1 &
remote=$!
wait $local
wait $remote
```
## tpcc_benchmark.sh
该脚本用来执行本地benchmark基于tpcc-runner基准测试程序进行压测。命令执行后会将结果重定向mariadb.log、slave1.log、slave2.log日志文件中可以通过观察该日志文件来获取执行信息。
```bash
#!/bin/bash
set -x
cd tpcc
rm -rf mariadb.log
rm -rf slave1.log
rm -rf slave2.log
rm -rf mariadb_tpmc.out
pkill bash
sleep 1
pkill java
sleep 1
ps -ef|grep java
echo 'start runing'
java -cp bin/:lib/mysql-connector-java-5.1.7-bin.jar iomark.TPCCRunner.Master conf/example/mysql/master.properties > mariadb.log 2>&1 &
master_pid=$!
echo "Starting Master..."
sleep 1
java -cp bin/:lib/mysql-connector-java-5.1.7-bin.jar iomark.TPCCRunner.Slave conf/example/mysql/slave1.properties > slave1.log 2>&1 &
slave1_pid=$!
echo "Starting Slave1..."
sleep 1
java -cp bin/:lib/mysql-connector-java-5.1.7-bin.jar iomark.TPCCRunner.Slave conf/example/mysql/slave2.properties > slave2.log 2>&1 &
slave2_pid=$!
echo "Starting Slave2..."
sleep 1
# 监控 slave1.log
tail -f slave1.log | while read line; do
if [[ "$line" == *"Terminating users"* ]]; then
echo "Terminating users at slave1.log detected, killing process..."
kill $slave1_pid # 杀死 slave1 进程
break
fi
done & # 将监控放到后台
# 监控 slave2.log
tail -f slave2.log | while read line; do
if [[ "$line" == *"Terminating users"* ]]; then
echo "Terminating users at slave2.log detected, killing process..."
kill $slave2_pid # 杀死 slave2 进程
break
fi
done & # 将监控放到后台
# 监控 mariadb.log
tail -f mariadb.log | while read line; do
if [[ "$line" == *"terminate users"* ]]; then
echo "Terminating users at mariadb1.log detected, killing process..."
kill $master_pid # 杀死 master 进程
break
fi
done & # 将监控放到后台
# 等待所有后台任务完成
wait $slave1_pid
wait $slave2_pid
wait $master_pid
total=$(awk '$1 == "average" { total += $3 } END { print total }' mariadb.log)
echo $total > mariadb_tpmc.out
```
## remote_benchmark.sh
该脚本用来在远程执行压力机2的benchmark需要保证远程压力机的路径和当前环境的中的路径一致。
```bash
#!/bin/bash
# 在远程服务器上执行脚本并放入后台
ssh -q root@CLIENT_IP_2 "cd PATH && sh tpcc_benchmark.sh > tpcc_benchmark.log 2>&1 &"
sleep 5
# 监控远程日志,检测到特定日志内容时终止
while ! ssh -q root@CLIENT_IP_2 '[ -f PATH/tpcc/mariadb_tpmc.out ]'; do sleep 2; done && ssh -q root@CLIENT_IP_2 'kill $(pgrep -f tpcc_benchmark.sh)'
# # 等待所有后台进程完成
wait
```

View File

@@ -1,22 +1,22 @@
[client]
port = 3306
[mysqld]
port = 3306
key_buffer_size = 8388608
max_allowed_packet = 16777216
table_open_cache = 2000
back_log = 900
sort_buffer_size = 1048576
read_buffer_size = 1048576
read_rnd_buffer_size = 262144
myisam_sort_buffer_size = 262144
thread_cache_size = 9
max_connections = 5000
max_heap_table_size = 67108864
innodb_buffer_pool_size = 134217728
innodb_log_buffer_size = 16777216
[client]
port = 3306
[mysqld]
port = 3306
key_buffer_size = 8388608
max_allowed_packet = 16777216
table_open_cache = 2000
back_log = 900
sort_buffer_size = 1048576
read_buffer_size = 1048576
read_rnd_buffer_size = 262144
myisam_sort_buffer_size = 262144
thread_cache_size = 9
max_connections = 5000
max_heap_table_size = 67108864
innodb_buffer_pool_size = 134217728
innodb_log_buffer_size = 16777216
skip-grant-tables

View File

@@ -1,34 +1,36 @@
#!/bin/sh
path=$(
cd "$(dirname "$0")"
pwd
)
echo "path: ${path}"
read -p "[INPUT] enter client_ip_2 of testbench to used:" CLIENT_IP_2
read -p "[INPUT] enter server_ip_1 of testbench to used:" SERVER_IP_1
read -p "[INPUT] enter server_ip_2 of testbench to used:" SERVER_IP_2
echo "[INFO] update path for mariadb files"
sed -i "s#PATH#${path}#g" ${path}/get_mariadb_param_info.sh
sed -i "s#PATH#${path}#g" ${path}/get_tmpc.sh
sed -i "s#PATH#${path}#g" ${path}/mariadb_benchmark.sh
sed -i "s#PATH#${path}#g" ${path}/mariadb_client.yaml
sed -i "s#PATH#${path}#g" ${path}/mariadb_server.yaml
sed -i "s#PATH#${path}#g" ${path}/tmp-remote.sh
echo "[INFO] update ip for mariadb files"
sed -i "s#CLIENT_IP_1#$CLIENT_IP_1#g" ${path}/get_mariadb_param_info.sh
sed -i "s#CLIENT_IP_1#$CLIENT_IP_1#g" ${path}/set_mariadb_param_info.sh
sed -i "s#CLIENT_IP_2#$CLIENT_IP_2#g" ${path}/set_mariadb_param_info.sh
sed -i "s#CLIENT_IP_1#$CLIENT_IP_1#g" ${path}/start_mariadb.sh
sed -i "s#CLIENT_IP_2#$CLIENT_IP_2#g" ${path}/start_mariadb.sh
sed -i "s#CLIENT_IP_1#$CLIENT_IP_1#g" ${path}/stop_mariadb.sh
sed -i "s#CLIENT_IP_2#$CLIENT_IP_2#g" ${path}/stop_mariadb.sh
echo "cp mariadb_server.yaml to/etc/atuned/tuning"
mkdir -p /etc/atuned/tuning
cp $path/mariadb_server.yaml /etc/atuned/tuning
echo "finish prepare"
#!/bin/sh
path=$(
cd "$(dirname "$0")"
pwd
)
echo "path: ${path}"
read -p "[INPUT] enter client_ip_2 of testbench to used:" CLIENT_IP_2
read -p "[INPUT] enter server_ip_1 of testbench to used:" SERVER_IP_1
read -p "[INPUT] enter server_ip_2 of testbench to used:" SERVER_IP_2
echo "[INFO] update path for mariadb files"
sed -i "s#PATH#${path}#g" ${path}/get_mariadb_param_info.sh
sed -i "s#PATH#${path}#g" ${path}/get_tpmc.sh
sed -i "s#PATH#${path}#g" ${path}/mariadb_benchmark.sh
sed -i "s#PATH#${path}#g" ${path}/mariadb_client.yaml
sed -i "s#PATH#${path}#g" ${path}/mariadb_server.yaml
sed -i "s#PATH#${path}#g" ${path}/remote_benchmark.sh
echo "[INFO] update ip for mariadb files"
sed -i "s#SERVER_IP_1#$SERVER_IP_1#g" ${path}/get_mariadb_param_info.sh
sed -i "s#SERVER_IP_1#$SERVER_IP_1#g" ${path}/set_mariadb_param_info.sh
sed -i "s#SERVER_IP_2#$SERVER_IP_2#g" ${path}/set_mariadb_param_info.sh
sed -i "s#SERVER_IP_1#$SERVER_IP_1#g" ${path}/start_mariadb.sh
sed -i "s#SERVER_IP_2#$SERVER_IP_2#g" ${path}/start_mariadb.sh
sed -i "s#SERVER_IP_1#$SERVER_IP_1#g" ${path}/stop_mariadb.sh
sed -i "s#SERVER_IP_2#$SERVER_IP_2#g" ${path}/stop_mariadb.sh
sed -i "s#CLIENT_IP_2#$CLIENT_IP_2#g" ${path}/remote_benchmark.sh
sed -i "s#CLIENT_IP_2#$CLIENT_IP_2#g" ${path}/get_tpmc.sh
echo "cp mariadb_server.yaml to/etc/atuned/tuning"
mkdir -p /etc/atuned/tuning
cp $path/mariadb_server.yaml /etc/atuned/tuning
echo "finish prepare"

View File

@@ -1,12 +1,12 @@
#!/bin/bash
# 在远程服务器上执行脚本并放入后台
ssh -q root@CLIENT_IP_2 "cd PATH && sh tpcc_benchmark.sh > tpcc_benchmark.log 2>&1 &"
sleep 5
# 监控远程日志,检测到特定日志内容时终止
while ! ssh -q root@CLIENT_IP_2 '[ -f PATH/tpcc/mariadb_tpmc.out ]'; do sleep 2; done && ssh -q root@CLIENT_IP_2 'kill $(pgrep -f tpcc_benchmark.sh)'
# # 等待所有后台进程完成
wait
#!/bin/bash
# 在远程服务器上执行脚本并放入后台
ssh -q root@CLIENT_IP_2 "cd PATH && rm -rf tpcc_benchmark.log && sh tpcc_benchmark.sh > tpcc_benchmark.log 2>&1 &"
sleep 5
# 监控远程日志,检测到特定日志内容时终止
while ! ssh -q root@CLIENT_IP_2 '[ -f PATH/tpcc/mariadb_tpmc.out ]'; do sleep 2; done && ssh -q root@CLIENT_IP_2 'kill $(pgrep -f tpcc_benchmark.sh)'
# 等待所有后台进程完成
wait

View File

@@ -1,17 +1,17 @@
#!/bin/bash
set -x
# 检查是否传入参数
if [ -z "$1" ]; then
echo "请提供一个参数"
exit 1
fi
# 获取传入的参数
param=$1
value=$2
# 构建命令
ssh -q root@SERVER_IP_1 "bash -c 'grep -q \"^$param\" /etc/my.cnf && sed -i \"s/^$param.*/$param = $value/g\" /etc/my.cnf || echo \"$param = $value\" >> /etc/my.cnf'"
ssh -q root@SERVER_IP_2 "bash -c 'grep -q \"^$param\" /etc/my.cnf && sed -i \"s/^$param.*/$param = $value/g\" /etc/my.cnf || echo \"$param = $value\" >> /etc/my.cnf'"
#!/bin/bash
set -x
# 检查是否传入参数
if [ -z "$1" ]; then
echo "请提供一个参数"
exit 1
fi
# 获取传入的参数
param=$1
value=$2
# 构建命令
ssh -q root@SERVER_IP_1 "bash -c 'grep -q \"^$param\" /etc/my.cnf && sed -i \"s/^$param.*/$param = $value/g\" /etc/my.cnf || echo \"$param = $value\" >> /etc/my.cnf'"
ssh -q root@SERVER_IP_2 "bash -c 'grep -q \"^$param\" /etc/my.cnf && sed -i \"s/^$param.*/$param = $value/g\" /etc/my.cnf || echo \"$param = $value\" >> /etc/my.cnf'"

View File

@@ -1,2 +1,2 @@
ssh -q root@SERVER_IP_1 "systemctl start mariadb"
ssh -q root@SERVER_IP_2 "systemctl start mariadb"
ssh -q root@SERVER_IP_1 "systemctl start mariadb"
ssh -q root@SERVER_IP_2 "systemctl start mariadb"

View File

@@ -1,2 +1,2 @@
ssh -q root@SERVER_IP_1 "systemctl stop mariadb"
ssh -q root@SERVER_IP_2 "systemctl stop mariadb"
ssh -q root@SERVER_IP_1 "systemctl stop mariadb"
ssh -q root@SERVER_IP_2 "systemctl stop mariadb"

View File

@@ -1,63 +1,65 @@
#!/bin/bash
set -x
cd tpcc
rm -rf mariadb.log
rm -rf slave1.log
rm -rf slave2.log
rm -rf mariadb_tpmc.out
pkill bash
sleep 1
pkill java
sleep 1
ps -ef|grep java
echo 'start runing'
java -cp bin/:lib/mysql-connector-java-5.1.7-bin.jar iomark.TPCCRunner.Master conf/example/mysql/master.properties > mariadb.log 2>&1 &
master_pid=$!
echo "Starting Master..."
sleep 1
java -cp bin/:lib/mysql-connector-java-5.1.7-bin.jar iomark.TPCCRunner.Slave conf/example/mysql/slave1.properties > slave1.log 2>&1 &
slave1_pid=$!
echo "Starting Slave1..."
sleep 1
java -cp bin/:lib/mysql-connector-java-5.1.7-bin.jar iomark.TPCCRunner.Slave conf/example/mysql/slave2.properties > slave2.log 2>&1 &
slave2_pid=$!
echo "Starting Slave2..."
sleep 1
# 监控 slave1.log
tail -f slave1.log | while read line; do
if [[ "$line" == *"Terminating users"* ]]; then
echo "Terminating users at slave1.log detected, killing process..."
kill $slave1_pid # 杀死 slave1 进程
break
fi
done & # 将监控放到后台
# 监控 slave2.log
tail -f slave2.log | while read line; do
if [[ "$line" == *"Terminating users"* ]]; then
echo "Terminating users at slave2.log detected, killing process..."
kill $slave2_pid # 杀死 slave2 进程
break
fi
done & # 将监控放到后台
# 监控 mariadb.log
tail -f mariadb.log | while read line; do
if [[ "$line" == *"terminate users"* ]]; then
echo "Terminating users at mariadb1.log detected, killing process..."
kill $master_pid # 杀死 master 进程
break
fi
done & # 将监控放到后台
# 等待所有后台任务完成
wait $slave1_pid
wait $slave2_pid
wait $master_pid
total=$(awk '$1 == "average" { total += $3 } END { print total }' mariadb.log)
echo $total > mariadb_tpmc.out
#!/bin/bash
set -x
cd tpcc
rm -rf mariadb.log
rm -rf slave1.log
rm -rf slave2.log
rm -rf mariadb_tpmc.out
pkill bash
sleep 1
pkill java
sleep 1
ps -ef|grep java
echo 'start runing'
java -cp bin/:lib/mysql-connector-java-5.1.7-bin.jar iomark.TPCCRunner.Master conf/example/mysql/master.properties > mariadb.log 2>&1 &
master_pid=$!
echo "Starting Master..."
sleep 1
java -cp bin/:lib/mysql-connector-java-5.1.7-bin.jar iomark.TPCCRunner.Slave conf/example/mysql/slave1.properties > slave1.log 2>&1 &
slave1_pid=$!
echo "Starting Slave1..."
sleep 1
java -cp bin/:lib/mysql-connector-java-5.1.7-bin.jar iomark.TPCCRunner.Slave conf/example/mysql/slave2.properties > slave2.log 2>&1 &
slave2_pid=$!
echo "Starting Slave2..."
sleep 1
# 监控 slave1.log
tail -f slave1.log | while read line; do
if [[ "$line" == *"Terminating users"* ]]; then
echo "Terminating users at slave1.log detected, killing process..."
kill $slave1_pid # 杀死 slave1 进程
break
fi
done & # 将监控放到后台
# 监控 slave2.log
tail -f slave2.log | while read line; do
if [[ "$line" == *"Terminating users"* ]]; then
echo "Terminating users at slave2.log detected, killing process..."
kill $slave2_pid # 杀死 slave2 进程
break
fi
done & # 将监控放到后台
# 监控 mariadb.log
tail -f mariadb.log | while read line; do
if [[ "$line" == *"terminate users"* ]]; then
echo "Terminating users at mariadb1.log detected, killing process..."
kill $master_pid # 杀死 master 进程
break
fi
done & # 将监控放到后台
# 等待所有后台任务完成
wait $slave1_pid
wait $slave2_pid
wait $master_pid
total=$(awk '$1 == "average" { total += $3 } END { print total }' mariadb.log)
total=$(printf "%.0f" "$total")
echo $total > mariadb_tpmc.out