阿里云-云小站(无限量代金券发放中)
【腾讯云】云服务器、云数据库、COS、CDN、短信等热卖云产品特惠抢购

利用Azure高级存储搭建高性能Linux服务器

94次阅读
没有评论

共计 7518 个字符,预计需要花费 19 分钟才能阅读完成。

目前 Azure 针对虚拟机提供两种类型的存储,一种是标准存储,基于 HDD 的,一种是高性能存储 Premium Storage(在下文中简称 PS),基于 SSD 的。针对用户高性能,低延迟,I/ O 密集型的应用, 比如数据库 MySQL, MongoDB,SAP 等提供良好的支持。

本文主要介绍如何在 CentOS 上使用高级存储构建数据库服务器的最佳实践,包括你的应用需求在超过单盘 IOPS 限制的情况下,如何通过使用软 RAID 来构建 50000 级别的 IOPS 服务器。

目前高级存储只能用于 DS/GS/FS 系列机器作为数据磁盘使用,根据虚拟机的大小不同,对每个虚拟机,你最多可以挂载 32T 的高级存储,达到最高 64000 的 IOPS(受限于你的虚拟机大小和磁盘带宽)。

需要理解的是,磁盘性能取决于三个要素: 磁盘类型、磁盘大小和虚拟机大小。高级磁盘比标准磁盘具有更高的 I/O 限制,I/O 限制随磁盘大小而增加,较大的虚拟机比较小虚拟机具有更高的带宽限制。使用高级磁盘时,请确保虚拟机足够大,能够处理总磁盘带宽。

利用 Azure 高级存储搭建高性能 Linux 服务器

注意事项

本文中以 CentOS 6.7 为例,使用 DS14 作为测试虚拟机,为在 CentOS 上使用高级存储用做数据库服务器,需要注意一下几项:

1. 如果想获得最佳性能和稳定性,在 CentOS 6/ 7 上 必须手动 安装 LIS 4.1 以上驱动,下载地址如下:

https://www.microsoft.com/en-us/download/details.aspx?id=51612

对于 LIS 的说明如下:https://www.azure.cn/documentation/articles/storage-premium-storage/

为方便下载,我已经把最新的 LIS4.1 的包放在了 blob storage,Linux 下直接 wget 即可下载:

https://www.azure.cn/documentation/articles/storage-premium-storage/

利用 Azure 高级存储搭建高性能 Linux 服务器

# 安装之前首先保证你的系统最新

$ sudo yum update

请注意:LIS 的安装要求你的 kernel 是最新版本,所以更新之后请重启一下机器确保装载的是最新的 Linux kernel,否则后续安装会报错。

# 解压缩并安装 LIS4

$ tar -xzvf lis-rpms-4.1.2-2.tar.gz

$ sudo ./inshall.sh

可能会有一些警告,忽略即可,安装完成后机器需要重启,以便让新的驱动生效。

[azureuser@mycent67 LISISO]$ rpm -aq|grep microsoft

kmod-microsoft-hyper-v-4.1.2.2-20161013.x86_64

microsoft-hyper-v-debuginfo-4.1.2.2-20161013.x86_64

microsoft-hyper-v-4.1.2.2-20161013.x86_64

2. 合理使用高级存储的缓存设置:

关于 premium 高级磁盘缓存设置,你需要根据你的应用的实际情况进行正确设置获得最佳性能:

设置为无:如果你的应用基本都是写入,或者超过 80% 以上的都是写入操作,则缓存设置为无。

设置为只读:这个选项是 Premium Storage 的默认选项也是最为常见的选项,如果你的应用操作是读写的,或者只读的操作, 建议使用该选项。

设置为读写:如果你的程序可以处理缓存数据,并且在需要的时候可以将缓存数据写入到持久化磁盘,对应用程序有较高要求,处理不当可能会有数据损失。

例如对于 SQL Server 而言,你可以:

  • 将有数据库数据文件的磁盘的缓存设置为 只读,获得快速读取和处理性能

  • 将日志文件的目录设置为 ,因为日志文件基本上以写为主

对于 MySQL 数据库而言,道理比较类似,你可以将 bin log 文件设置为一个目录,而将数据文件也单独设置为一个目录,利用缓存获得最佳性能。

3. 对于 CentOS 6/ 7 用户,你如果你使用的缓存策略是 ” 无 ” 或者 ” 只读 ”,你必须在挂载磁盘的时候将 barrier 设为 0,具体做法一般是在 fstab 文件中设置,具体方法见后续例子。

 

4. 在设置 fstab 自动加载的时候,一定要使用 UUID,否则某些情况下会出现不可预知的问题;另外,在设置 fstab 的时候,为避免在某些情况磁盘加载失败而系统无法启动的情况(比如最为常见的 UUID 写错,配置错误等等)最好加上 nobootwait(Ubuntu)或者 nofail(centos)参数,具体用法见后面例子。

单个 P30 盘性能测试

  1. 创建 DS 系列的虚拟机,如果你需要更高级别的处理性能的虚拟机,可以创建 DS V2 系列的虚拟机,V2 系列比 DS 系列的虚拟机处理能力快 35% 左右, 本实例中创建一台 DS14 系列的虚拟机:

    利用 Azure 高级存储搭建高性能 Linux 服务器

     

  2. 挂载单个 1024���小的 P30 SSD 磁盘到虚拟机,我们进行单盘的性能测试:

    利用 Azure 高级存储搭建高性能 Linux 服务器

     

     

  3. 查看添加的磁盘,当前是个裸设备,需要分区并添加:

    $ ls -l /dev/sd*

    $ sudo fdisk /dev/sdc

    利用 Azure 高级存储搭建高性能 Linux 服务器

输入 n 创建新的分区,p 选择 primary,partition number 选择 1,其他的选择默认值。

然后输入 t,选择 partition 为 1,修改 hex code 为 fd,这个类型代表 Linux raid auto

利用 Azure 高级存储搭建高性能 Linux 服务器

 

重复以上步骤,直到新增加的 4 块盘都分区完成:

利用 Azure 高级存储搭建高性能 Linux 服务器

4. 我们先用 sdc 来做个单盘测试,格式化设备,创建目录,挂载分区到测试目录:

$ sudo mkfs -t ext4 /dev/sdc1

$ sudo mkdir /data

$ sudo mount /dev/sdc1 /data

5. 我们使用标准的 Linux 磁盘测试工具 fio 来测试一下磁盘的性能, 首先我们安装一下 fio 软件,使用 epel 的 repo 来做安装:

$ sudo yum install epel-release

利用 Azure 高级存储搭建高性能 Linux 服务器

$ sudo yum install fio

利用 Azure 高级存储搭建高性能 Linux 服务器

更多详情见请继续阅读下一页的精彩内容:http://www.linuxidc.com/Linux/2016-11/136976p2.htm

  1. 我们首先来测试随机写的 IOPS,可以看到 随机写 的 IOPS 可以达到 5082 顺序写 的 IOPS 可以达到5087

    $ sudo fio -filename=/data/testfile -direct=1 -iodepth 1 -thread -rw=randwrite -ioengine=libaio -bs=16k -size=10G -numjobs=20 -runtime=60 -group_reporting -name=mytest

    利用 Azure 高级存储搭建高性能 Linux 服务器

    $ sudo fio -filename=/data/testfile -direct=1 -iodepth 1 -thread -rw=write -ioengine=libaio -bs=16k -size=10G -numjobs=20 -runtime=60 -group_reporting -name=mytest

    利用 Azure 高级存储搭建高性能 Linux 服务器

     

  2. 同样的方法我们测试一下随机读的 IOPS, 默认情况下,读缓存是打开的,随机读可以达到 114619 万左右的 IOPS,顺序读可以达到 139746 左右的 IOPS:

     

    $ sudo fio -filename=/data/testfile -direct=1 -iodepth 1 -thread -rw=read -ioengine=libaio -bs=4k -size=10G -numjobs=20 -runtime=60 -group_reporting -name=mytest

    利用 Azure 高级存储搭建高性能 Linux 服务器

    $ sudo fio -filename=/data/testfile -direct=1 -iodepth 1 -thread -rw=read -ioengine=libaio -bs=4k -size=10G -numjobs=20 -runtime=60 -group_reporting -name=mytest

    利用 Azure 高级存储搭建高性能 Linux 服务器

     

  3. 我们再来做一个测试,关闭缓存服务,即缓存服务设为无,进行测试,可以看到:

    随机写:5089 顺序写:5099    随机读:5163    顺序读:5102

    利用 Azure 高级存储搭建高性能 Linux 服务器

     

    利用 Azure 高级存储搭建高性能 Linux 服务器

     

RAID 0 高性能磁盘配置及测试

 

在有些情况下,比如高负载的 MySQL,MongoDB 服务器,可能对于单盘的 IOPS 要求高于 5000,希望达到 2000 或者更好,那么在这种情况下,获得更高 IOPS 的方式就是使用软 RAID,RAID 0 的方式。在后续测试中,为了看到实际性能,所有磁盘的缓存都是关闭的状态,及缓存为 ” 无 ”。

  1. 前面已经在界面上添加了 4 个 1T 的 SSD 数据盘,其中 sdc 用来做单盘测试,剩下的 sdd,sde,sdf 来做 RAID。

     

  2. 使用 SSH 登陆虚拟机,安装 RAID 管理软件 mdadm:

    $ sudo yum install mdadm

    利用 Azure 高级存储搭建高性能 Linux 服务器

     

  3. 使用 mdm 创建 RAID 0 设备 /dev/mdraid

    sudo mdadm –create /dev/md127 –level 0 –raid-devices 3 /dev/sdc1 /dev/sdd1 /dev/sde1

     

    利用 Azure 高级存储搭建高性能 Linux 服务器

     

  4. 创建挂载文件目录,并格式化文件系统为 ext4 格式:

$ sudo mkdir /data

$ sudo mkfs -t ext4 /dev/md127

如果你想快速启用,快速格式化,可以使用参数-E lazy_itable_init=1

例如:$ sudo mkfs -t ext4 -E lazy_itable_init=1 /dev/md127

 

  1. 最后,需要把文件挂载信息添加到 fstab 里面,确保每次机器重启的时候可以自动挂载文件系统,首先获得刚才创建设备的 UUID:

    sudo /sbin/blkid

    利用 Azure 高级存储搭建高性能 Linux 服务器

  2. 打开 fstab 文件,将文件关在信息添加到该文件如下:

    $ sudo vi /etc/fstab

     

    最后一行添加(需要换成你自己的 UUID)

     

    UUID=bf5f2973-ded3-4da2-a67a-0dc9fd36554c /data ext4 defaults 0 2

    利用 Azure 高级存储搭建高性能 Linux 服务器

按照之前注意事项提到的,你需要设置 barrier 和 nofail,所以我的 fstab 文件的设置如下:

UUID=3c8289a5-de55-4e1c-9baf-5a603d8230e3 /data ext4 defaults,barrier=0,nofail 0 2

  1. 执行 sudo mount - a 并检查当前挂载状态:

利用 Azure 高级存储搭建高性能 Linux 服务器

  1. 在使用 RAID0 条带化以后,iodepth 的数值会和测试结果有较大的关系,我们通过不同的参数来看一下不同的结果:

    利用 Azure 高级存储搭建高性能 Linux 服务器

$ sudo fio -filename=/data/testfile -direct=1 -iodepth 32 -thread -rw=write -ioengine=libaio -bs=16k -size=10G -numjobs=20 -runtime=60 -group_reporting -name=mytest

Iodepth

Randwrite

Write

Randread

Read

16

iops=15185

iops=17523

iops=17523

iops=19885

32

iops=15164

iops=25033

iops=15183

iops=30788

128

iops=15169

iops=31862

iops=15227

iops=31805

 

可以看到,在你需要更高磁盘性能,单个 P30 无法满足你的要求的情况下,可以使用 soft RAID 的方式来提升磁盘的性能,随着磁盘的增加,性能呈线性增长,当然就如之前所有,磁盘的性能依赖于磁盘的类型,磁盘的大小和虚拟机的大小,例如 DS14 在无缓存的情况下最大可以达到 51200 IOPS,可以根据自己的需求选择合适的 VM,搭配高级存储。

利用 Azure 高级存储搭建高性能 Linux 服务器

最后,简单聊一下一些做数据库服务器架构设计的一些想法,在大部分情况下,创建高 IOPS 的虚拟机都是作为数据库来使用的,但是高性能和高可用是两个概念,如果你要保证数据库的高可用性,以 MySQL 来举例,你需要配置 MySQL 集群,比如 Master-Slave 模式,或者多 maste 多 slave 模式;从性能和扩展性的角度来讲,如果你使用了非常高 IOPS,大内核的虚拟机,但还是不能满足要求,你需要尽早考虑一下数据库的扩展性问题,原来这种性能不够就加 CPU,加内存,vertical scale 的方式被证明并不是一个好的设计,无论物理机还是虚拟机,性能都是有上限的,为了满足当前大规模高并发访问的需求,数据库需要考虑 sharding,分库,分表等方式来增加数据库的可扩展性,把压力分散到各个数据库节点,而且需要尽早考虑,因为这部分的改变往往需要应用程序的修改来做配合,所以大家需要综合考虑。

本文永久更新链接地址:http://www.linuxidc.com/Linux/2016-11/136976.htm

目前 Azure 针对虚拟机提供两种类型的存储,一种是标准存储,基于 HDD 的,一种是高性能存储 Premium Storage(在下文中简称 PS),基于 SSD 的。针对用户高性能,低延迟,I/ O 密集型的应用, 比如数据库 MySQL, MongoDB,SAP 等提供良好的支持。

本文主要介绍如何在 CentOS 上使用高级存储构建数据库服务器的最佳实践,包括你的应用需求在超过单盘 IOPS 限制的情况下,如何通过使用软 RAID 来构建 50000 级别的 IOPS 服务器。

目前高级存储只能用于 DS/GS/FS 系列机器作为数据磁盘使用,根据虚拟机的大小不同,对每个虚拟机,你最多可以挂载 32T 的高级存储,达到最高 64000 的 IOPS(受限于你的虚拟机大小和磁盘带宽)。

需要理解的是,磁盘性能取决于三个要素: 磁盘类型、磁盘大小和虚拟机大小。高级磁盘比标准磁盘具有更高的 I/O 限制,I/O 限制随磁盘大小而增加,较大的虚拟机比较小虚拟机具有更高的带宽限制。使用高级磁盘时,请确保虚拟机足够大,能够处理总磁盘带宽。

利用 Azure 高级存储搭建高性能 Linux 服务器

注意事项

本文中以 CentOS 6.7 为例,使用 DS14 作为测试虚拟机,为在 CentOS 上使用高级存储用做数据库服务器,需要注意一下几项:

1. 如果想获得最佳性能和稳定性,在 CentOS 6/ 7 上 必须手动 安装 LIS 4.1 以上驱动,下载地址如下:

https://www.microsoft.com/en-us/download/details.aspx?id=51612

对于 LIS 的说明如下:https://www.azure.cn/documentation/articles/storage-premium-storage/

为方便下载,我已经把最新的 LIS4.1 的包放在了 blob storage,Linux 下直接 wget 即可下载:

https://www.azure.cn/documentation/articles/storage-premium-storage/

利用 Azure 高级存储搭建高性能 Linux 服务器

# 安装之前首先保证你的系统最新

$ sudo yum update

请注意:LIS 的安装要求你的 kernel 是最新版本,所以更新之后请重启一下机器确保装载的是最新的 Linux kernel,否则后续安装会报错。

# 解压缩并安装 LIS4

$ tar -xzvf lis-rpms-4.1.2-2.tar.gz

$ sudo ./inshall.sh

可能会有一些警告,忽略即可,安装完成后机器需要重启,以便让新的驱动生效。

[azureuser@mycent67 LISISO]$ rpm -aq|grep microsoft

kmod-microsoft-hyper-v-4.1.2.2-20161013.x86_64

microsoft-hyper-v-debuginfo-4.1.2.2-20161013.x86_64

microsoft-hyper-v-4.1.2.2-20161013.x86_64

2. 合理使用高级存储的缓存设置:

关于 premium 高级磁盘缓存设置,你需要根据你的应用的实际情况进行正确设置获得最佳性能:

设置为无:如果你的应用基本都是写入,或者超过 80% 以上的都是写入操作,则缓存设置为无。

设置为只读:这个选项是 Premium Storage 的默认选项也是最为常见的选项,如果你的应用操作是读写的,或者只读的操作, 建议使用该选项。

设置为读写:如果你的程序可以处理缓存数据,并且在需要的时候可以将缓存数据写入到持久化磁盘,对应用程序有较高要求,处理不当可能会有数据损失。

例如对于 SQL Server 而言,你可以:

  • 将有数据库数据文件的磁盘的缓存设置为 只读,获得快速读取和处理性能

  • 将日志文件的目录设置为 ,因为日志文件基本上以写为主

对于 MySQL 数据库而言,道理比较类似,你可以将 bin log 文件设置为一个目录,而将数据文件也单独设置为一个目录,利用缓存获得最佳性能。

3. 对于 CentOS 6/ 7 用户,你如果你使用的缓存策略是 ” 无 ” 或者 ” 只读 ”,你必须在挂载磁盘的时候将 barrier 设为 0,具体做法一般是在 fstab 文件中设置,具体方法见后续例子。

 

4. 在设置 fstab 自动加载的时候,一定要使用 UUID,否则某些情况下会出现不可预知的问题;另外,在设置 fstab 的时候,为避免在某些情况磁盘加载失败而系统无法启动的情况(比如最为常见的 UUID 写错,配置错误等等)最好加上 nobootwait(Ubuntu)或者 nofail(centos)参数,具体用法见后面例子。

单个 P30 盘性能测试

  1. 创建 DS 系列的虚拟机,如果你需要更高级别的处理性能的虚拟机,可以创建 DS V2 系列的虚拟机,V2 系列比 DS 系列的虚拟机处理能力快 35% 左右, 本实例中创建一台 DS14 系列的虚拟机:

    利用 Azure 高级存储搭建高性能 Linux 服务器

     

  2. 挂载单个 1024���小的 P30 SSD 磁盘到虚拟机,我们进行单盘的性能测试:

    利用 Azure 高级存储搭建高性能 Linux 服务器

     

     

  3. 查看添加的磁盘,当前是个裸设备,需要分区并添加:

    $ ls -l /dev/sd*

    $ sudo fdisk /dev/sdc

    利用 Azure 高级存储搭建高性能 Linux 服务器

输入 n 创建新的分区,p 选择 primary,partition number 选择 1,其他的选择默认值。

然后输入 t,选择 partition 为 1,修改 hex code 为 fd,这个类型代表 Linux raid auto

利用 Azure 高级存储搭建高性能 Linux 服务器

 

重复以上步骤,直到新增加的 4 块盘都分区完成:

利用 Azure 高级存储搭建高性能 Linux 服务器

4. 我们先用 sdc 来做个单盘测试,格式化设备,创建目录,挂载分区到测试目录:

$ sudo mkfs -t ext4 /dev/sdc1

$ sudo mkdir /data

$ sudo mount /dev/sdc1 /data

5. 我们使用标准的 Linux 磁盘测试工具 fio 来测试一下磁盘的性能, 首先我们安装一下 fio 软件,使用 epel 的 repo 来做安装:

$ sudo yum install epel-release

利用 Azure 高级存储搭建高性能 Linux 服务器

$ sudo yum install fio

利用 Azure 高级存储搭建高性能 Linux 服务器

更多详情见请继续阅读下一页的精彩内容:http://www.linuxidc.com/Linux/2016-11/136976p2.htm

正文完
星哥说事-微信公众号
post-qrcode
 0
星锅
版权声明:本站原创文章,由 星锅 于2022-01-21发表,共计7518字。
转载说明:除特殊说明外本站文章皆由CC-4.0协议发布,转载请注明出处。
【腾讯云】推广者专属福利,新客户无门槛领取总价值高达2860元代金券,每种代金券限量500张,先到先得。
阿里云-最新活动爆款每日限量供应
评论(没有评论)
验证码
【腾讯云】云服务器、云数据库、COS、CDN、短信等云产品特惠热卖中