下面是我在工作中,对新买的服务进行设备拷机的总结。如有错误请不吝赐教;
服务器标配:逻辑CPU数
中配:16核128GB内存; 500以内连接数,QPS 1000以内,TPS 200-以内; (公司)
高配: 64C 256GBSSD盘;一般mysql的服务器只装这一个软件;raid10;建议CPU和内存比例:1:3
其实到达2500个连接就比较吃力了,在增加配置已经没大多效果了,开始考虑分布式;网络IO和磁盘IO已经达到瓶颈了;
一般要考虑三年以后的增长率,所以预留出来一些配置,防止经常变更物理服务器;
在mysql的服务器上关闭NUMA,因为数据自己有内存管理机制;关闭后QPS能够提升20%~30%
云服务器只能提供过配置文件关闭;vi /boot/grub2/grub.cfg
阵列卡RAID的配置
数据库强烈建议使用raid10,最好有热备盘
关闭THP
只要有独立内存管理机制的都要关闭THP,防止内存溢出和内存碎片的产生;redis,mysql,mongodb
在/etc/rc.local中配置后,注意给他加上chomd +x 执行权限;
网卡绑定
就是将服务器的两个网卡绑定在一起,合并成一个逻辑网卡
对接应用程序,如果一个网卡坏了,另一个网卡还能继续提供服务;
网络工程师来做的;
一般配置主备模式,要不然拷贝大文件就丢包,如果是高可用模式就需要交换机堆叠;
a. 更改文件句柄和进程数内核优化 /etc/sysctl.confvm.swappiness = 5(也可以设置为0) #swap分区调整,内存还剩5%的时候使用磁盘;后台脏页百分比;vm.dirty_ratio = 20 #同步刷写,达到20%就刷写磁盘,这是针对SSD的配置,盘越好值越低;vm.dirty_background_ratio = 10 #异步刷写网络相关参数,按照配置即可net.ipv4.tcp_max_syn_backlog = 819200net.core.netdev_max_backlog = 400000net.core.somaxconn = 4096net.ipv4.tcp_tw_reuse=1net.ipv4.tcp_tw_recycle=0b. 防火墙禁用selinux : /etc/sysconfig/selinux 更改SELINUX=disabled.iptables如果不使用可以关闭。可是需要打开MySQL需要的端口号c. 文件系统优化推荐使用XFS文件系统MySQL数据分区独立 ,例如挂载点为: /datamount参数 defaults, noatime, nodiratime, nobarrier 如/etc/fstab:/dev/sdb /data xfs defaults,noatime,nodiratime,nobarrier 1 2d. 不使用LVM!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!e. io调度SAS : deadline (机械盘用这个)SSD&PCI-E: noop (固态或者更好的用这个)centos 7 默认是deadlinecat /sys/block/sda/queue/scheduler#临时修改为deadline(centos6)echo deadline >/sys/block/sda/queue/schedulervi /boot/grub/grub.conf更改到如下内容:kernel /boot/vmlinuz-2.6.18-8.el5 ro root=LABEL=/ elevator=deadline rhgb quietf:打开文件句柄限制vim /etc/security/limits.confnofile hard 65535nofile soft 65535
3. 预装MySQL前硬件
烤机压测
一般服务器买回来,调整好参数后,在一定压力下空跑半个月,看看硬件质量咋样,别跑着跑着烧了,CPU,IO瓶颈咋样;
下面这些都是裸机压测,如果安装mysql后,还可以基于业务进行压测;
3.1. stress 进行CPU、IO、MEM烤机压测
专业压测CPU、MEM的
a. 安装yum install -y epel-releaseyum install -y stressb. 烤机CPU[root@slave1 ~]# stress -c 4 #4个逻辑CPU,压上一段时间,看看会不会烧了;c. 烤机 MEMstress -m 3 --vm-bytes 300Md. 烤机多参数stress -c 4 -m 2 -d 1
设置为接近压慢的状态,收集错误日志,然后分析一下新能问题;
3.2. FIO 进行定制化IO烤机压测
专业压测IO的,IO是可以评估的;内存和CPU无法评估,跑满即可;
IO评估: 吞吐量 : 多少兆每秒 IOPS : 每秒发生IO次数,越高越好,超过值的IO就需要等待,云服务器可以买这个值的;从磁盘到内存和内存到磁盘各自算一次IO; LA (SLA,CLA):延时也叫调度时间,就是CPU加载数据的时候,肯定需要时间,这个就是那个时间,越小越好; SLA: CLA:比较关注这个;FIO是测试IOPS的非常好的工具,用来对磁盘进行压力测试和验证。磁盘IO是检查磁盘性能的重要指标,可以按照负载情况分成照顺序读写,随机读写,混合读写两大类。FIO是一个可以产生很多线程或进程并执行用户指定的特定类型I/O操作的工具,FIO的典型用途是编写和模拟的I/O负载匹配的作业文件。FIO是一个多线程io生成工具,可以生成多种IO模式,用来测试磁盘设备的性能(也包含文件系统:如针对网络文件系统 NFS 的IO测试)。FIO压测可以帮助管理员,提前预知磁盘瓶颈,及时作出扩容建议。也可以作为有效烤机的
3.2.2 FIO应用
传统方法使用dd
命令,只是测试顺序IO
的;FIO可以测试顺序、随机、混合IO
; mysql内部就符合顺序、随机、混合IO,读多写少的;
a. 环境准备mkdir -p /testiomkfs.xfs /dev/sdb #将磁盘挂载上来mount /dev/sdb /testio[root@linaxi~]# dd if=/dev/zero of=/testio/test bs=16k count=512000 #生成一个大文件,压测使用,bs为16kb;8388608000 byte(8.4GB) copied,27.114s,302MB/s #可以大概看出顺序IO的峰值;b. 安装yum install libaio libaio-devel fioc. 各类压测一共是8GB,我们写到2GB就退出;# 测试顺序读取: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=4 --ioengine=libaio -direct=1 --rw=randwrite --bs=16k --size=2G --numjobs=64 --untime=20 --group_reporting --name=test-rand-write#测试随机读:fio --filename=/testio/test -iodepth=64 -ioengine=libaio -direct=1 -rw=randread -bs=4k -size=2G -numjobs=60 -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 是否绕过文件系统缓存,选择绕过page cache,看看磁盘真实的IO; -ioengine=libaio 采用异步或者同步IO-iodepth=64 IO队列深度。一次发起多少个IO请求,一般SSD或者flash可以较大。--numjobs=16 测试并发线程数。在RAID10或Raid5可加大参数。一般设置为CPU逻辑核数,然后不断降低,看看最终合理值;-size=2G 测试大小,到了就退出--runtime=20 测试时间(秒),到时间就退出了;--rwmixread=70 混合读写,read的比例。一般读写比例28或者37。--group_reporting 统计汇总结果展示。--name 起个名。--rw=测试类型.randread(随机读),randwrite(随机写),read(顺序读),write(顺序写)# 结果解读随机写时候,IOPS最大为5883,吞吐量96.4MB/s write: IOPS=5883, BW=91.9MiB/s (96.4MB/s)(1841MiB/20020msec) slat (usec): min=1677, max=78137, avg=43413.06, stdev=7210.57 (usec是微秒,CPU调度的时间延迟,一般在50ms之内就很好了) 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]
不断测试,找到最好的压测效果当做最终的值;
压测就是为了知道 1)系统个各项指标上限,这样以后就知道是因为磁盘IO达到上线了还是网络IO达到上线了,排除这些问题;2)各个硬件的稳定情况;
没有回复内容