当前位置: 首页>数据库>正文

生产环境MySQL系统预装准备

1、操作系统及配置标准化

1.1 标准化数据库操作系统

目前,在互联网企业广泛应用centos系列系统。并且在同一组集群架构都需要保持系统和内核版本一致

1.2 标准化数据库稳定系统

目前采用centos7.2以上双数版本。并且安装同版本光盘稳定兼容好的软件包

1.3 标准化操作系统及硬件参数

1.3.1 关闭NUMA

a. bios级别
在bios层面numa关闭时,无论os层面numa是否打开,都不会影响性能
# numactl --hardware
available: 1 nodes (0) #如果是2或多个nodes就说明numa没关掉
b. OS grub级别:

vi /boot/grub2/grub.cfg
#/* Copyright 2010, Oracle. All rights reserved. */
default=0
timeout=5
hiddenmenu
foreground=000000
background=ffffff
splashimage=(hd0,0)/boot/grub/oracle.xpm.gz
title Trying_C0D0_as_HD0
root (hd0,0)
kernel /boot/vmlinuz-2.6.18-128.1.16.0.1.el5 root=LABEL=DBSYS ro bootarea=dbsys
rhgb quiet console=ttyS0,115200n8 console=tty1 crashkernel=128M@16M numa=off
initrd /boot/initrd-2.6.18-128.1.16.0.1.el5.img

在os层numa关闭时,打开bios层的numa会影响性能,QPS会下降15-30%;


生产环境MySQL系统预装准备,第1张
bios设置

数据库级别

mysql> show variables like '%numa%'; 
+------------------------+-------+
| Variable_name | Value |
+------------------------+-------+
| innodb_numa_interleave | OFF |
+------------------------+-------+

或者
vi /etc/init.d/mysqld
找到如下行
# Give extra arguments to mysqld with the my.cnf file. This script
# may be overwritten at next upgrade.
$bindir/mysqld_safe --datadir="$datadir" --pid-file="$mysqld_pid_file_path"
$other_args >/dev/null &
wait_for_pid created "$!" "$mysqld_pid_file_path"; return_value=$?
将$bindir/mysqld_safe --datadir="$datadir"这一行修改为:
/usr/bin/numactl --interleave all $bindir/mysqld_safe --datadir="$datadir" --pid?file="$mysqld_pid_file_path" $other_args >/dev/null & wait_for_pid created "$!" "$mysqld_pid_file_path"; return_value=$?

1.3.2 开启CPU高性能模式

生产环境MySQL系统预装准备,第2张
CPU设置

生产环境MySQL系统预装准备,第3张
CPU设置2

1.3.3 阵列卡RAID设置

raid10(推荐)
SSD、PCI-E、Flash

1.3.4 关闭THP

vi /etc/rc.local
# 在文件末尾添加如下指令:
if test -f /sys/kernel/mm/transparent_hugepage/enabled; then
echo never > /sys/kernel/mm/transparent_hugepage/enabled
fi
if test -f /sys/kernel/mm/transparent_hugepage/defrag; then
echo never > /sys/kernel/mm/transparent_hugepage/defrag
fi
[root@master ~]# cat /sys/kernel/mm/transparent_hugepage/enabled
always madvise [never]
[root@master ~]# cat /sys/kernel/mm/transparent_hugepage/defrag
always madvise [never]

1.3.5 网卡绑定

bonding技术,业务数据库服务器都要配置bonding继续。建议是主备模式。
交换机一定要堆叠。

1.3.6 存储多路径

使用独立存储设备的话,需要配置多路径:
linux 自带
厂商提供

1.3.7 系统层面参数优化

a. 更改文件句柄和进程数
内核优化 /etc/sysctl.conf

vim /etc/sysctl.conf
vm.swappiness = 5(也可以设置为0)
vm.dirty_ratio = 20
vm.dirty_background_ratio = 10
net.ipv4.tcp_max_syn_backlog = 819200
net.core.netdev_max_backlog = 400000
net.core.somaxconn = 4096
net.ipv4.tcp_tw_reuse=1
net.ipv4.tcp_tw_recycle=0

b. 防火墙
禁用selinux : /etc/sysconfig/selinux 更改SELINUX=disabled.
iptables如果不使用可以关闭。可是需要打开MySQL需要的端口号
c. 文件系统优化
推荐使用XFS文件系统
MySQL数据分区独立 ,例如挂载点为: /data
mount参数 defaults, noatime, nodiratime, nobarrier 如/etc/fstab:
/dev/sdb /data xfs defaults,noatime,nodiratime,nobarrier
1 2
d. 不使用LVM
e. io调度
SAS : deadline
SSD&PCI-E: noop
centos 7 默认是deadline
cat /sys/block/sda/queue/scheduler
#临时修改为deadline(centos6)

echo deadline >/sys/block/sda/queue/scheduler
vi /boot/grub/grub.conf
# 更改到如下内容:
kernel /boot/vmlinuz-2.6.18-8.el5 ro root=LABEL=/ elevator=deadline rhgb quiet

2、 预装MySQL前硬件烤机压测

2.1 stress 进行CPU、IO、MEM烤机压测

a. 安装
yum install -y epel-release
yum install -y stress
b. 烤机CPU
[root@slave1 ~]# stress -c 4
c. 烤机 MEM
stress -m 3 --vm-bytes 300M
d. 烤机多参数
stress -c 4 -m 2 -d 1

2.2 FIO 进行定制化IO烤机压测

2.2.1 FIO介绍

FIO是测试IOPS的非常好的工具,用来对磁盘进行压力测试和验证。
磁盘IO是检查磁盘性能的重要指标,可以按照负载情况分成照顺序读写,随机读写,混合读写两大类。
FIO是一个可以产生很多线程或进程并执行用户指定的特定类型I/O操作的工具,FIO的典型用途是编写
和模拟的I/O负载匹配的作业文件。
FIO是一个多线程io生成工具,可以生成多种IO模式,用来测试磁盘设备的性能(也包含文件系统:如针
对网络文件系统 NFS 的IO测试)。
FIO压测可以帮助管理员,提前预知磁盘瓶颈,及时作出扩容建议。也可以作为有效烤机的

2.2.2 FIO应用

a. 环境准备
mkdir -p /testio
mkfs.xfs /dev/sdb
mount /dev/sdb /testio
dd if=/dev/zero of=/testio/test bs=16k count=512000
b. 安装
yum install libaio libaio-devel fio
c. 各类压测
#测试随机写:
fio --filename=/testio/test --iodepth=4 --ioengine=libaio -direct=1 --
rw=randwrite --bs=16k --size=2G --numjobs=64 --runtime=20 --group_reporting --
name=test-rand-write
# 测试顺序读取:
fio --filename=/testio/test -iodepth=64 -ioengine=libaio --direct=1 --rw=read --
bs=1m --size=2g --numjobs=4 --runtime=10 --group_reporting --name=test-read
# 测试顺序写性能
fio --filename=/testio/test.big -iodepth=64 -ioengine=libaio -direct=1 -rw=write
-bs=1m -size=2g -numjobs=4 -runtime=20 --group_reporting -name=test-write
测试随机读:
fio --filename=/testio/test -iodepth=64 -ioengine=libaio -direct=1 -rw=randread -
bs=4k -size=2G -numjobs=64 -runtime=20 --group_reporting -name=test-rand-read
# 16k,70%读取,30%写入:
fio --filename=/dev/sdb --direct=1 --rw=randrw --refill_buffers --norandommap --
randrepeat=0 --ioengine=libaio --bs=4k --rwmixread=70 --iodepth=16 --numjobs=16 -
-runtime=60 --group_reporting --name=73test

# 重要参数解读:
--filename 需要压测的磁盘或者测试文件。
--direct=1 是否绕过文件系统缓存
-ioengine=libaio 采用异步或者同步IO
-iodepth=64 IO队列深度。一次发起多少个IO请求,一般SSD或者flash可以较大。
--numjobs=16 测试并发线程数。在RAID10或Raid5可加大参数。
--rwmixread=70 混合读写,read的比例。一般读写比例28或者37。
--group_reporting 统计汇总结果展示。
--name 起个名。
--rw=randrw 测试类型.
# 结果解读
IOPS
write: IOPS=5883, BW=91.9MiB/s (96.4MB/s)(1841MiB/20020msec)
lat (usec): min=1677, max=78137, avg=43413.06, stdev=7210.57
clat percentiles (usec):
| 1.00th=[23462], 5.00th=[25297], 10.00th=[26084], 20.00th=[27657],
| 30.00th=[28967], 40.00th=[30278], 50.00th=[31851], 60.00th=[33162],
| 70.00th=[34866], 80.00th=[36963], 90.00th=[40109], 95.00th=[42730],
| 99.00th=[49021], 99.50th=[51119], 99.90th=[59507], 99.95th=[61604],
| 99.99th=[64226]

3、数据库软件标准话

3.1 版本

1、稳定版:选择开源的社区版的稳定版GA版本。
2、选择mysql数据库GA版本发布后6个月-12个月的GA双数版本,大约在15-20个小版本左右。
3、要选择前后几个月没有大的BUG修复的版本,而不是大量修复BUG的集中版本。
4、要考虑开发人员开发程序使用的版本是否兼容你选的版本。
5、作为内部开发测试数据库环境,跑大概3-6个月的时间。
6、优先企业非核心业务采用新版本的数据库GA版本软件。
7、向DBA高手请教,或者在技术氛围好的群里和大家一起交流,使用真正的高手们用过的好用的GA版本产品。
最终建议: 8.0.20是一个不错的版本选择。向后可以选择双数版。


https://www.xamrdz.com/database/6nb1994172.html

相关文章: