构建内置存储系统
磁盘基本操作命令
fdisk
fdisk 设备 # 须是设备号,不是分区
fdisk /dev/sda
Command (m for help): 在这里按 m ,就会输出帮助;
Command action
a toggle a bootable flag
b edit bsd disklabel
c toggle the dos compatibility flag
d delete a partition 注:这是删除一个分区的动作;
l list known partition types 注:l 是列出分区类型,以供我们设置相应分区的类型;
m print this menu 注:m 是列出帮助信息;
n add a new partition 注:添加一个分区;
o create a new empty DOS partition table
p print the partition table 注:p 列出分区表;
q quit without saving changes 注:不保存退出;
s create a new empty Sun disklabel
t change a partition's system id # 注:t 改变分区类型;
u change display/entry units
v verify the partition table
w write table to disk and exit 注:把分区表写入硬盘并退出;
x extra functionality (experts only) 注:扩展应用,专家功能;
添加一个5G硬盘,并查看分区情况
mkfs
-h | 查看帮助信息 |
---|---|
-t <文件系统类型> | 指定要创建的文件系统类型 |
-v (小写) | 查看使用方法信息 |
-V (大写) | 查看版本信息 |
-f | 强制格式化,类似于rm -f |
-b size=1024 | 指定block大小(1k、2k、4k),默认block大小为4k |
实例,格式化/dev/sdb
硬盘,再次查看分区情况,刚刚分的区已经没了
磁盘组建RAID
RAID-0:
读、写性能提升;
可用空间:N*min(S1,S2,...)
无容错能力
最少磁盘数:2, 2+
RAID-1:
读性能提升、写性能略有下降;
可用空间:1*min(S1,S2,...)
有冗余能力
最少磁盘数:2, 2+
RAID-5:
读、写性能提升
可用空间:(N-1)*min(S1,S2,...)
有容错能力:1块磁盘
最少磁盘数:3, 3+
RAID-10:
读、写性能提升
可用空间:N*min(S1,S2,...)/2
有容错能力:每组镜像最多只能坏一块;
最少磁盘数:4, 4+
组建RAID0
提示:R0一时爽,数据火葬场。
最好是使用不同硬盘,因为使用相同硬盘不同分区组建R0最后是使用的同一个硬盘的IO,速度并没有本质上的提升。
RAID0 是一种简单的、无数据校验的数据条带化技术。实际上不是一种真正的 RAID ,因为它并不提供任何形式的冗余策略。 RAID0 将所在磁盘条带化后组成大容量的存储空间(如图 2 所示),将数据分散存储在所有磁盘中,以独立访问方式实现多块磁盘的并读访问。由于可以并发执行 I/O 操作,总线带宽得到充分利用。再加上不需要进行数据校验,RAID0 的性能在所有 RAID 等级中是最高的。理论上讲,一个由 n 块磁盘组成的 RAID0 ,它的读写性能是单个磁盘性能的 n 倍,但由于总线带宽等多种因素的限制,实际的性能提升低于理论值。
默认没有安装mdadm
RAID管理工具,使用yum install mdadm
安装即可
-C: 创建模式
-n{2}: 使用#个块设备来创建此RAID
-l{0}:指明要创建的RAID的级别
-a {yes|no}:自动创建目标RAID设备的设备文件
-c CHUNK_SIZE: 指明块大小,单位k
-x : 指明空闲盘的个数
-D:显示raid的详细信息
mdadm -D /dev/md0
管理模式:
-f: 标记指定磁盘为损坏
-a: 添加磁盘
-r: 移除磁盘
-f: 显示过程
观察md的状态:cat /proc/mdstat
增加新的成员
mdadm –G /dev/md0 –n4 -a /dev/sdf1
生成配置文件:mdadm –D –s >> /etc/mdadm.conf
停止设备:mdadm –S /dev/md0
激活设备:mdadm –A –s /dev/md0 激活
强制启动:mdadm –R /dev/md0
删除raid信息:mdadm --zero-superblock /dev/sdb1
- 先将磁盘分为了五个大小相同的区
使用
/dev/sdb[1-2]
,这两个区作为实验安装。查看RAID情况mdadm -Cv /dev/md0 -l0 -n2 /dev/sdb[1-2] #-Cv:创建并显示过程,-l0:级别为RAID0,-n2:使用两块盘区
- 查看系统中存在的RAID
停止并删除RAID,查看系统中的RAID情况
mdadm --stop /dev/md0 mdadm --misc --zero-superblock /dev/sdb1 mdadm --misc --zero-superblock /dev/sdb2 cat /proc/mdstat
组建RAID1
如果有两块1T的硬盘,那么只能使用1T,因为有一块做备用盘。
RAID1 称为镜像,它将数据完全一致地分别写到工作磁盘和镜像 磁盘,它的磁盘空间利用率为 50% 。 RAID1 在数据写入时,响应时间会有所影响,但是读数据的时候没有影响。 RAID1 提供了最佳的数据保护,一旦工作磁盘发生故障,系统自动从镜像磁盘读取数据,不会影响用户工作。工作原理如图 3 所示。
创建
RAID1
,并查看信息mdadm -Cv /dev/md0 -l1 -n2 /dev/sdb[1-2] cat /proc/mdstat
查看硬盘信息
fdisk -l
停止
RAID1
阵列,移除两个硬盘mdadm --stop /dev/md0 mdadm --misc --zero-superblock /dev/sdb1 mdadm --misc --zero-superblock /dev/sdb2 cat /proc/mdstat
组建RAID5
RAID5 应该是目前最常见的 RAID 等级,它的原理与 RAID4 相似,区别在于校验数据分布在阵列中的所有磁盘上,而没有采用专门的校验磁盘。对于数据和校验数据,它们的写操作可以同时发生在完全不同的磁盘上。因此, RAID5 不存在 RAID4 中的并发写操作时的校验盘性能瓶颈问题。另外, RAID5 还具备很好的扩展性。当阵列磁盘 数量增加时,并行操作量的能力也随之增长,可比 RAID4 支持更多的磁盘,从而拥有更高的容量以及更高的性能。
创建
RAID5
,并查看信息mdadm -Cv /dev/md0 -l5 -n3 /dev/sdb[1-3] cat /proc/mdstat
查看阵列信息
mdadm -D /dev/md0
格式化硬盘分区为
ext4
格式mkfs.ext4 /dev/md0
挂载并验证
mount /dev/md0 /mnt/ df -h
解挂载并删除设备
umount /mnt/ mdadm --stop /dev/md0 mdadm --misc --zero-superblock /dev/sdb1 mdadm --misc --zero-superblock /dev/sdb2 mdadm --misc --zero-superblock /dev/sdb3
RAID5
运维操作mdadm -Cv /dev/md0 -l5 -n3 /dev/sdb[1-3] cat /proc/mdstat
模拟硬盘故障
mdadm -f /dev/md0 /dev/sdb1
热移除故障盘
mdadm -r /dev/md0 /dev/sdb1
组建RAID10
RAID01 兼备了 RAID0 和 RAID1 的优点,它先用两块磁盘建立镜像,然后再在镜像内部做条带化。 RAID01 的数据将同时写入到两个磁盘阵列中,如果其中一个阵列损坏,仍可继续工作,保证数据安全性的同时又提高了性能。 RAID01 和 RAID10 内部都含有 RAID1 模式,因此整体磁盘利用率均仅为 50% 。
典型的 RAID01 (上)和 RAID10 (下)模型
构建
RAID10
并查看信息mdadm -Cv /dev/md0 -l10 -n4 /dev/sdb1 /dev/sdb2 /dev/sdb3 /dev/sdb5
删除RAID10
mdadm --stop /dev/md0 mdadm --misc --zero-superblock /dev/sdb1 mdadm --misc --zero-superblock /dev/sdb2 mdadm --misc --zero-superblock /dev/sdb3 mdadm --misc --zero-superblock /dev/sdb5
管理逻辑卷
删除所有分区并格式化,内核重新读取分区并查看。
fdisk /dev/sdb
partx /dev/sdb
创建物理卷组
- 创建物理卷
pvcreate /dev/sdb1 /dev/sdb2
查看创建的物理卷,和查看物理卷的详细信息
pvs pvdisplay
扫描物理卷,创建物理卷组
pvscan vgcreate myvg /dev/sdb[1-2] vgdisplay # 查看物理卷组的详细信息
卷组删除
删除myvg,重新创建并指定PE大小为16m
vgremove myvg vgcreate -s 16m myvg /dev/sdb[1-2]
删除PV并转移数据
pvmove /dev/sdb1 vgreduce myvg /dev/sdb1 pvs
添加物理卷
向myvg
添加一个物理卷/dev/sdb3
,但是这个分区须提前分
vgextend myvg /dev/sdb3
创建逻辑卷
名为mylv,大小5GB
vcreate -L+5G -n mylv myvg
lvs # 查看逻辑卷
lvscan # 扫描逻辑卷
操作逻辑卷
格式化并挂载
mkfs.ext4 /dev/mapper/myvg-mylv
mount /dev/mapper/myvg-mylv /mnt/
df -h
卷组扩容
lvextend -L+1G /dev/mapper/myvg-mylv # 对创建的LVM卷扩容
resize2fs /dev/mapper/myvg-mylv # 对文件系统进行扩容
物理卷扩容,并再对逻辑卷扩容
vgextend myvg /dev/sdb1
vgs
lvextend -L+1G /dev/mapper/myvg-mylv
resize2fs /dev/mapper/myvg-mylv
df -h
缩小卷组
umount /mnt/
df -h
lvreduce -L -3G /dev/mapper/myvg-mylv
lvs
此时需要重新格式化并挂载才能重新使用
构建OpenStack云存储系统
构建OpenStack私有云
配置安装环境
hostname controller # 临时修改主机名,
vi /etc/sysconfig/network # 永久修改主机名,修改hostname为controller
mount -o loop CentOS-6.5-x86_64-bin_DVD.iso /mnt/
mkdir /opt/centos
cp -rfv /mnt/* /opt/centos/
umount /mnt/ # 卸载
mount -o loop XianDian-IaaS-v1.4.iso /mnt/
cp -rfv /mnt/ /opt/
配置yum
软件源
vi /etc/yum.repos.d/local.repo # 写入以下
----------------------------------------
[centos]
name=centos
baseurl=file:///opt/centos
gpgcheck=0
enabled=1
[iaas]
name=iaas
baseurl=file///opt/iaas-repo
gpgcheck=0
enabled=1
-----------------------------------------
yum clean all # 清除软件源
yum list # 查看软件包
关闭防火墙
service iptables stop # 关闭返回去
chkconfig iptables off # 设置防火墙开机不启动
关闭selinux
setenforce 0 # 临时关闭
vi /etc/selinux/config # 永久关闭
# 设置SELINUX=permissive
安装iaas-xiandian
yum install iaas-xiandian -y
修改全局配置文件openrc.sh
vi /etc/xiandian/openrc.sh
-----------------------------------------------------------------------------------------#
#--------------------system config--------------------#
#Controller Server Manager IP. example:x.x.x.x
HOST_IP=192.168.100.10
#Controller Server hostname. example:controller
HOST_NAME=controller
#Compute Node Manager IP. example:x.x.x.x
HOST_IP_NODE=192.168.100.10
#Compute Node hostname. example:compute
HOST_NAME_NODE=controller
#--------------------MySQL config---------------------##
#Password for MySQL root user . exmaple:000000
DB_PASS=000000
#--------------------Keystone config------------------##
#Password for Keystore admin user. exmaple:000000
ADMIN_PASS=000000
#Password for Mysql keystore user. exmaple:000000
KEYSTONE_DBPASS=000000
#--------------------Glance config--------------------##
#Password for Mysql glance user. exmaple:000000
GLANCE_DBPASS=000000
#Password for Keystore glance user. exmaple:000000
GLANCE_PASS=000000
#--------------------Nova config----------------------##
#Password for Mysql nova user. exmaple:000000
NOVA_DBPASS=000000
#Password for Keystore nova user. exmaple:000000
NOVA_PASS=000000
#--------------------Neturon config-------------------##
#Password for Mysql neutron user. exmaple:000000
NEUTRON_DBPASS=000000
#Password for Keystore neutron user. exmaple:000000
NEUTRON_PASS=000000
#metadata secret for neutron. exmaple:000000
METADATA_SECRET=000000
#External Network Interface. example:eth1
INTERFACE_NAME=eth1
#First Vlan ID in VLAN RANGE for VLAN Network. exmaple:101
minvlan=
#Last Vlan ID in VLAN RANGE for VLAN Network. example:200
maxvlan=
#--------------------Cinder config--------------------##
#Password for Mysql cinder user. exmaple:000000
CINDER_DBPASS=000000
#Password for Keystore cinder user. exmaple:000000
CINDER_PASS=000000
#Cinder Block Disk. example:md126p3
BLOCK_DISK=sdb1
#--------------------Swift config---------------------##
#Password for Keystore swift user. exmaple:000000
SWIFT_PASS=000000
#The NO1. NODE Object Disk for Swift. example:md126p4. The 2nd will be OBJECT_DISK_2
OBJECT_DISK_1=sdc1
#The NO1. NODE IP for Swift Storage Network. example:x.x.x.x. The 2nd will be STORAGE_LOCAL_NET_IP_2
STORAGE_LOCAL_NET_IP_1=192.168.100.10
#The numbers of all the Swift Nodes. example:3
SWIFT_ZONE=1
#The number of this Swift Node. exmaple:1
SWIFT_NODE=1
#--------------------Heat config----------------------##
#Password for Mysql heat user. exmaple:000000
HEAT_DBPASS=000000
#Password for Keystore heat user. exmaple:000000
HEAT_PASS=000000
#--------------------Ceilometer config----------------##
#Password for Mysql ceilometer user. exmaple:000000
CEILOMETER_DBPASS=000000
#Password for Keystore ceilometer user. exmaple:000000
CEILOMETER_PASS=000000
#token for ceilometer. exmaple:000000
CEILOMETER_TOKEN=000000
#--------------------Sahara config--------------------##
#Password for Mysql sahara user. exmaple:000000
SAHARA_DBPASS=000000
#Password for Keystore sahara user. exmaple:000000
SAHARA_PASS=000000
-----------------------------------------------------------------------------------------------
安装Qpid
服务
yum install -y qpid-cpp-server
vi /etc/qpidd.conf
# 修改最后一行代码
# auth=no
service qpidd start # 启动服务
chkconfig qpidd on # 开机自启
安装基本服务
# 安装mysql
iaas-install-mysql.sh
# 安装Glance服务
iaas-install-keystone.sh
# 安装Nova计算服务
iaas-install-nova-controller.sh
iaas-install-nova-compute.sh
# 安装Neutron网络服务
iaas-install-neutron-controller.sh
iaas-install-neutron-compute.sh
# 网络可以选择gre模式
iaas-install-neutron-controller-gre.sh
iaas-install-neutron-compute-gre.sh
# 安装Dashboard服务
iaas-install-dashboard.sh
验证安装
在浏览器输入10.10.1.10/dashboard
进入即可
配置OpenStack对象存储
安装Swift服务
iaas-install-swift-controller.sh
iaas-install-swift-compute.sh
查看Swift状态
swift stat
查看容器
swift list
创建容器
swift post C1
容器操作
# 上传文件
swift upload C1 /etc/hosts
# 删除文件
swift delete C1 /etc/hosts
删除容器
swift delete C1
构建GlusterFS
的分布式文件系统
将glusterfs
文件夹通过winscp
上传到/opt目录下
yum install -y createrepo # 在线安装索引生成工具
createrepo /opt/glusterfs # 将指定目录生成安装软件包索引
配置YUM 源,在/etc/yum.repos.d
目录下,新建一个local.repo 文件,内容如下:
[glusterfs]
name=glusterfs
baseurl=file///opt/glusterfs
gpgcheck=0
enabled=1
执行yum clean all
,刷新软件包库
安装glusterfs服务端和客户端
yum install -y glusterfs-server xfsprogs
service glusterfs start # 启动服务
chkconfig glusterfs on # 设置开机自启
设置防火墙关闭,开机不自启
service firewalld stop
chkconfig firewalld off
添加节点到GlusterFS服务器集群,并查看集群状态
gluster peer probe 10.10.1.10
gluster peer probe 10.10.1.11
gluster peer status
格式化磁盘并挂载目录
fdisk /dev/sdb # 分一个区即可
mkdir /export/brick1/1
在主节点创建共享副本卷
创建共享副本卷,gv0
为卷名称,可以自定义
gluster volume create gv0 replica 2 10.10.1.10:/export/brick1/1 10.10.1.11:/export/brick1/1
gluster volume start gv0 # 启动卷
gluster volume info # 查看卷gv0的状态
挂载副本卷
mount -t glusterfs 172.168.1.105:/gv0 /mnt
在主节点创建分布卷
gluster volume create gv1 10.10.1.10:/export/brick1/2 10.10.1.11:/export/brick1/2
gluster volume start gv1
挂载分布卷
umount /mnt # 解挂载
mount -t glusterfs 10.10.1.10:/gv1 /mnt
运维操作
# 启动/关闭/查看glusterd服务
/etc/init.d/glusterd start
/etc/init.d/glusterd stop
/etc/init.d/glusterd status
# Brick管理
gluster peer probe <SERVER> # 存储池添加服务器节点
gluster peer detach <SERVER> # 为存储池移除服务器节点
gluster volume add-brick gv1 10.10.1.10:/export/brick1/2 10.10.1.11:/export/brick1/2
# 列出集群中的所有卷:
gluster volume list
# 查看卷信息
gluster volume info # 查看卷信息
gluster volume status [all] # 查看卷状态
#创建/启动/停止/删除卷
gluster volume start <VOLNAME> # 创建卷
gluster volume stop <VOLNAME> # 停止卷
gluster volume delete <VOLNAME> # 删除卷
# 修复卷
gluster volume heal mamm-volume # 只修复有问题的卷
gluster volume heal mamm-volume full # 修复所有文件
gluster volume heal mamm-volume info # 查看自愈详情
# 数据重新分配
gluster volume rebalance datavolume1 start
gluster volume rebalance datavolume1 status
gluster volume rebalance datavolume1 stop
# 卸载GlusterFS磁盘
gluster peer detach idc1-server4
# 删除GlusterFS磁盘
gluster volume stop datavolume1
gluster volume delete datavolume1
# 扩展卷
gluster volume add-brick <VOLNAME> <NEW-BRICK>
构建Ceph分布式存储系统
基础环境配置
安装pve
并安装ceph
pvecm create myclusters
pvecm add (主机1 IP地址) # 主机二上执行
# 修改源
vi /etc/apt/sources.list # 打开后全部删除写入以下内容
-----------------------------------------------------------------------------------------
deb https://mirrors.aliyun.com/debian buster main contrib non-free
deb https://mirrors.aliyun.com/debian buster-updates main contrib non-free
deb https://mirrors.aliyun.com/debian-security buster/updates main contrib non-free
deb https://mirrors.ustc.edu.cn/proxmox/debian/pve buster pve-no-subscription
deb https://mirrors.ustc.edu.cn/proxmox/debian/ceph-octopus/ buster main
------------------------------------------------------------------------------------------
vi /etc/apt/sources.list.d/ceph.list # 打开后全部删除写入以下内容
deb https://mirrors.ustc.edu.cn/proxmox/debian/ceph-octopus/ buster main
# 传递给主机2
scp -r /etc/apt/sources.list root@10.10.1.11:/etc/apt/sources.list
安装ceph
全部选择y
修改vi etc/ceph/ceph.conf
vi /etc/ceph/ceph.conf # 修改public_network = 10.10.10.0/24
创建ceph集群存储,两台主机均执行如下命令
pveceph createmon # 创建Mon监控
pveceph createosd /dev/sdb # 创建ceph集群存储OSD服务
创建pools
ceph osd pool create myclusters 128 128 # 主机1执行
添加RBD存储
构建超融合架构
基础环境配置
修改所有虚拟机文件
vi /etc/hosts
10.10.1.10 ceph-node1
10.10.1.11 ceph-node2
10.10.1.12 ceph-node3
生成复制`ssh密钥
ssh-keygen
ssh-copy-id root@ceph-node2
ssh-copy-id root@ceph-node3
禁用selinux
setenforce 0
vi /etc/selinux/config sllinux->disablesd
为所有服务器校时
yum install -y ntp ntpdate
ntpdate pool.ntp.org
chkconfig ntpd on
修改yum源,使用本地FTP源
[centos]
name=centos
baseurl=file:///opt/centos
gpgcheck=0
enabled=1
[iaas]
name=iaas
baseurl=file///opt/iaas-repo
gpgcheck=0
enabled=1
安装和配置Ceph
创建ceph集群
yum install ceph-deploy -y
mkdir /etc/ceph
cd /etc/ceph/
ceph-deploy new ceph-node1
ceph-deploy install ceph-node1 ceph-node2 ceph-node3
查看版本信息
ceph -v
创建第一个Ceph monitor,并查看集群状态
ceph-deploy --overwrite mon vreate-initial
ceph -s
创建OSD
三个节点创建共享磁盘
mkdir -p /opt/osd1
ssh ceph-node2
mkdir -p /opt/osd2
ssh ceph-node2
mkdir -p /opt/osd3
在node1节点创建OSD节点
ceph-deployosd prepare ceph-node1:/opt/osd1 ceph-node2:/opt/osd2 ceph-node3:/opt/osd3
在node1激活节点
ceph-deploy osd activate ceph-node1:/opt/osd1 ceph-node2:/opt/osd2 ceph-node3:/opt/osd3
开放权限给其他节点,进行灾备处理
ceph-deploy ceph-node1{1,2,3}
ceph集群运维
ceph status # 查看安装状态
ceph -w # 查看健康状态
ceph quorum_status --format json-petty # 查看Ceph monitor仲裁状态
ceph mon dump # 导出Ceph monitor信息
ceph df # 检查集群使用状态
ceph mon stat # 检查Ceph monitor 状态
ceph osd stat # 检查OSD状态
ceph pg stat # 检查PG配置组状态
评论 (1)