---集群:HPC/LB/HA
LB:nginx/ lvs / haproxy / F5
HA:keepalived/ RHCS
LVS:Linux虚拟服务器
LVS工作模式:NAT/ TUN/ DR
---存储:
块存储,如iSCSI、FC SAN
文件存储,如NFS,CIFS
对象存储
Ceph:
它是一个分布式文件系统,可以提供块存储、文件系统存储和对象存储。但是文件存储还不非常成熟,不建议在生产环境中使用。应用的最多的形式是块存储。
Ceph主要组件
OSD:对象存储设备,它是ceph中唯一的真正进行数据存储的组件。通常情况下,一个OSD进程绑定到一块物理磁盘。
MON:Monitor监视器,跟踪整个集群的健康状态。它为每个ceph组件维护一个映射表。MON进程数目是奇数,如3、5、7……
MDS:元数据服务器。为ceph文件系统存储提供元数据,如果不是文件系统存储则不需要。
元数据:描述数据的数据。如一本书的出版社、页数、作者、出版时间等都是元数据。
RADOS:可靠自主的分存式对象存储。RADOS保证CEPH中的各种数据都是对象形式,操持CEPH的一致性。
RBD:为客户端提供块存储接口
RADOSGW:为客户端提供对象存储接口
CEPHFS:为客户端提供文件系统存储接口
CEPH环境搭建
创建5台虚拟机
node1.tedu.cn` 192.168.4.1
node2.tedu.cn 192.168.4.2
node3.tedu.cn 192.168.4.3
node4.tedu.cn 192.168.4.4
client.tedu.cn 192.168.4.10
2、启动虚机
[root@room8pc16kvms_ansi]# for vm in rh7_node{1..5}
>do
>virsh start $vm
>done
在物理主机上配置CEPH的YUM源
[root@room8pc16cluster]# mkdir /var/ftp/ceph/
[root@room8pc16cluster]# tail -1 /etc/fstab
/ISO/rhcs2.0-rhosp9-20161113-x86_64.iso/var/ftp/ceph iso9660 defaults 0 0
[root@room8pc16cluster]# mount -a
[root@room8pc16~]# vim server.repo
[rhel7.4]
name=rhel7.4
baseurl=ftp://192.168.4.254/rhel7.4
enabled=1
gpgcheck=0
[mon]
name=mon
baseurl=ftp://192.168.4.254/ceph/rhceph-2.0-rhel-7-x86_64/MON
enabled=1
gpgcheck=0
[osd]
name=osd
baseurl=ftp://192.168.4.254/ceph/rhceph-2.0-rhel-7-x86_64/OSD
enabled=1
gpgcheck=0
[tools]
name=tools
baseurl=ftp://192.168.4.254/ceph/rhceph-2.0-rhel-7-x86_64/Tools
enabled=1
gpgcheck=0
CEPH集群中有很多节点,逐台管理效率低下,还可能出现错误,所以可以找一台主机当作管理节点,由它统一管理所有主机。我们保用node1作为管理节点。
为了使得管理节点能够方便的管理,先创建免密登陆
通过名称访问各台主机,配置名称解析
[root@node1~]# for i in {1..4}
>do
>echo -e "192.168.4.$i\tnode$i.tedu.cn\tnode$i" >>/etc/hosts
>done
[root@node1~]# echo -e "192.168.4.10\tclient.tedu.cn\tclient" >>/etc/hosts
生成密钥对,非交互模式生成
[root@node1~]# ssh-keygen -f /root/.ssh/id_rsa -N ""
第一交ssh到远程主机会被询问(yes/no)?。可以先将远程主机的身份信息,保存到本地
[root@node1~]# ssh-keyscan 192.168.4.{1..4} >> /root/.ssh/known_hosts
[root@node1~]# ssh-keyscan 192.168.4.10 >> /root/.ssh/known_hosts
[root@node1~]# ssh-keyscan node{1..4} >> /root/.ssh/known_hosts
[root@node1~]# ssh-keyscan client >> /root/.ssh/known_hosts
(4)拷贝密钥到远程主机
[root@node1~]# for ip in 192.168.4.{1..4}
>do
>ssh-copy-id -i $ip
>done
[root@node1~]# ssh-copy-id -i 192.168.4.10
(5)把hosts文件拷贝到各台主机
[root@node1 ~]# forhost in node{2..4}
> do
> scp /etc/hosts$host:/etc/
> done
[root@node1 ~]# scp/etc/hosts client:/etc
将client作为NTP服务器
NTP:网络时间协议,udp123端口。用于同步时间。
精确时间的确定:原子钟。全球时间不是一样的,因为地球是圆的,所以将地球按经度,每隔15度角划分一个时区,一共24时区。中国采用东八区时间。
在client上安装软件包
[root@client ~]# yuminstall -y chrony
修改配置
[root@client ~]# vim/etc/chrony.conf
allow 192.168.4.0/24
local stratum 10
启动服务
[root@client ~]#systemctl restart chronyd; systemctl enable chronyd
将其他主机作为客户端
[root@node1 ~]# vim/etc/chrony.conf
server 192.168.4.10iburst #其他3行server开头的删除
[root@node1 ~]# for ipin 192.168.4.{2..4}
> do
> scp/etc/chrony.conf $ip:/etc/
> done
[root@node1 ~]# for ipin 192.168.4.{1..4}
> do
> ssh $ip systemctlrestart chronyd
> done
测试
[root@node1 ~]# date-s "2018-06-20 12:00:00"
[root@node1 ~]#ntpdate 192.168.4.10 跟192.168.4.10同步时钟
[root@node1 ~]# date 时间已同步
在node1~node3上各添加3块硬盘
在node1节点上安装ceph部署工具
[root@node1 ~]# yuminstall -y ceph-deploy
在node1节点上为ceph创建工作目录,目录名自定义
[root@node1 ~]# mkdir ceph_conf
[root@node1 ~]# cdceph_conf
生成ceph安装所必须的配置文件
[root@node1ceph_conf]# ceph-deploy new node1 node2 node3
[root@node1ceph_conf]# ls
安装ceph集群
[root@node1ceph_conf]# ceph-deploy install node1 node2 node3
初始化所有节点的MON服务
[root@node1ceph_conf]# ceph-deploy mon create-initial
配置CEPH集群
在node1~node3节点上对vdb进行分区,将vdb的分区用于日志
[root@node1ceph_conf]# for host in node{1..3}
> do
> ssh $host parted /dev/vdb mklabel gpt
> done
[root@node1ceph_conf]# for host in node{1..3}; do ssh $host parted /dev/vdbmkpart primary 1024kB 50%; done
[root@node1ceph_conf]# for host in node{1..3}; do ssh $host parted /dev/vdbmkpart primary 50% 100%; done
[root@node1ceph_conf]# for host in node{1..3}; do ssh $host lsblk; done
[root@node1ceph_conf]# for host in node{1..3}; do ssh $host chown ceph.ceph/dev/vdb?; done # 系统重启后属主属组又变回root.disk了。
配置udev,使得磁盘属主属组在reboot后,仍然是ceph
[root@node3 ~]# vim/etc/udev/rules.d/90-mydisk.rules
ACTION=="add",KERNEL=="vdb[12]", OWNER="ceph", GROUP="ceph"
创建OSD磁盘,在node1上执行
初始化磁盘
[root@node1ceph_conf]# for host in node{1..3}
> do
> ceph-deploy diskzap $host:vdc $host:vdd
> done
创建OSD,将数据的日志区指定为vdb
[root@node1ceph_conf]# for host in node{1..3}
> do
> ceph-deploy osdcreate $host:vdc:/dev/vdb1 $host:vdd:/dev/vdb2
> done
如果出现run‘gatherkeys’的错误提示,执行以下命令
[root@node1ceph_conf]# ceph-deploy gatherkeys node1 node2 node3
查看状态
[root@node1ceph_conf]# ceph -s 如果正常将显示HEATH_OK
如果状态是HEALTH_ERR,就重启服务,如下:
[root@node1ceph_conf]# for host in node{1..3}; do ssh $host systemctl restartceph\*.service ceph\*.target ; done
Yum:
http://mirrors.163.com
http://mirrors.aliyun.com
http://mirrors.sohu.com
点击图中CentOS7就可以下载网易的repo文件,将其拷贝到/etc/yum.repos.d/目录下就能在线使用网易的源了。
EPEL:Extra Packages for Enterprise Linux
点击上图中的链接,将会下载一个名为epel-release-latest-7.noarch.rpm的软件包,只要把它安装上,/etc/yum.repos.d/目录下将会出现新的repo文件
使用CEPH提供块设备
CEPH默认有一个存储池
[root@node1ceph_conf]# ceph osd lspools
为了能够给客户端提供块设备,需要创建image
在默认的池中创建一个10GB大小,名为demo-image的镜像
[root@node1ceph_conf]# rbd create demo-image --image-feature layering --size 10G
另一种创建方法:指定在rbd这个池里创建一个名为image的镜像
[root@node1ceph_conf]# rbd create rbd/image --image-feature layering --size 10G
列出镜像
[root@node1ceph_conf]# rbd list
查看image的详情
[root@node1ceph_conf]# rbd info image
调整image镜像的大小为7GB(体验而已,不推荐减小操作)
[root@node1ceph_conf]# rbd resize --size 7G image --allow-shrink
调整image镜像的大小为15GB
[root@node1ceph_conf]# rbd resize --size 15G image
[root@node1ceph_conf]# rbd info image
客户端使用RBD块设备
在Client上安装客户端软件包
[root@client~]# yum install -y ceph-common
把配置文件和用户密钥文件拷贝给客户端
[root@node1ceph_conf]# scp /etc/ceph/ceph.conf 192.168.4.10:/etc/ceph/
[root@node1ceph_conf]# scp /etc/ceph/ceph.client.admin.keyring192.168.4.10:/etc/ceph/
客户端把CEPH的image镜像作为本地磁盘使用
[root@client~]# rbd list
[root@client~]# rbd map image
[root@client~]# lsblk 多出一个15GB的rbd0
使用RBD块设备
[root@client~]# mkfs.xfs /dev/rbd0
[root@client~]# mount /dev/rbd0 /mnt/
[root@client~]# df -h /mnt/
[root@client~]# echo "hello world" >> /mnt/hi.txt
[root@client~]# cat /mnt/hi.txt
5、查看image镜像的快照
[root@client~]# rbd snap ls image
为image创建一个名为image-snap1的快照
[root@client~]# rbd snap create image --snap image-snap1
[root@client~]# rbd snap ls image
模拟误删除
[root@client~]# rm -f /mnt/hi.txt
还原快照,以还原误删除的文件
卸载镜像
[root@client~]# umount /mnt/
使用image-snap1还原快照
[root@client~]# rbd snap rollback image --snap image-snap1
挂载镜像,查看是否已还原
[root@client~]# mount /dev/rbd0 /mnt/
[root@client~]# ls /mnt/
[root@client~]# cat /mnt/hi.txt
通过快照创建镜像
设置image-snap1为保护状态
[root@client~]# rbd snap protect image --snap image-snap1
2、使用image的快照image-snap1克隆一个新的image-clone镜像
[root@client~]# rbd clone image --snap image-snap1 image-clone --image-featurelayering
查看新镜像与父镜像的关系
[root@client~]# rbd info image-clone
找到它的parent是rbd/image@image-snap1
合并镜像,使得image-clone没有父镜像,它可以独立使用
[root@client~]# rbd flatten image-clone
[root@client~]# rbd info image-clone 此时,它已没有parent
删除挂载
[root@client~]# rbd showmapped 可以查看到镜像到本地的块设备映射
[root@client~]# umount /mnt/
[root@client~]# rbd unmap image 取消映射
[root@client~]# rbd showmapped
[root@client~]# lsblk 发现rbd0已经不存在了
删除快照
[root@client~]# rbd snap ls image 列出image的快照
[root@client~]# rbd snap unprotect image --snap image-snap1
[root@client~]# rbd snap rm image --snap image-snap1
删除镜像
[root@client~]# rbd rm image
[root@client~]# rbd list
安装KVM虚拟机,磁盘存储在CEPH集群上
将物理主机设置成为CEPH客户端
[root@room8pc16~]# yum install -y ceph-common
[root@room8pc16~]# scp 192.168.4.1:/etc/ceph/ceph.conf /etc/ceph/
[root@room8pc16~]# scp 192.168.4.1:/etc/ceph/ceph.client.admin.keyring /etc/ceph/
新建一个名为vm1-image的镜像,作为KVM虚拟机的磁盘
[root@room8pc16~]# rbd create vm1-image --image-feature layering --size 10G
查看镜像信息
[root@room8pc16~]# rbd info vm1-image
[root@room8pc16~]# qemu-img info rbd:rbd/vm1-image
在virt-manager图形界面中,创建新的虚拟机,名为rhel7-ceph1,按正常步骤创建即可。当虚拟机创建完成后,将会启动,此时,点击强制关机。
KVM虚拟机在使用CEPH的时候,需要认证,我们可以创建一个secret(相当于通行证)
在物理主机上创建一临时文件
[root@room8pc16~]# vim /tmp/secret.xml
利用临时文件生成secret通行证信息
[root@room8pc16~]# virsh secret-list 查看secret
[root@room8pc16~]# virsh secret-define --file /tmp/secret.xml
[root@room8pc16~]# virsh secret-list 已经生成secret
将kvm的secret和ceph的管理员用户client.admin进行关联
查看管理员的keyring
[root@room8pc16~]# cat /etc/ceph/ceph.client.admin.keyring
关联secret和keyring
[root@room8pc16~]# virsh secret-set-value --secretf59c54be-d479-41a6-a09c-cf2f7ffc57cb --base64AQDaDSpboImwIBAAzX800q+H0BCNq9xq2xQaJA==
导出rhel7-ceph1的xml文件
[root@room8pc16~]# virsh dumpxml rhel7-ceph1 > /tmp/vm.xml
修改vm.xml
[root@room8pc16~]# vim /tmp/vm.xml
找到以下内容:
将其改为
在virt-manager中将rhel7-ceph1删除
使用修改过的vm.xml生成虚拟机
[root@room8pc16~]# virsh define /tmp/vm.xml
Virt-manager中将会出现rhel7-ceph1虚拟机
修改虚拟机配置,把IDECDROM1连接光盘文件,然后在BootOptions中勾选“启用引导菜单”,把光盘作为第一启动介质
使用CEPHFS为客户端提供文件系统(相当于NFS),注意,这种方式还不成熟,不建议用在生产环境下。
1、准备node4作为MDS(元数据服务器)
2、在node4上安装软件包
[root@node4~]# yum install -y ceph-mds
在node1上配置node4的MDS
[root@node1ceph_conf]# cd /root/ceph_conf/ 进入配置文件目录
同步admin的keyring到node4
[root@node1ceph_conf]# ceph-deploy admin node4
在NODE4上启用mds服务(在node1上操作)
[root@node1ceph_conf]# ceph-deploy mds create node4
创建存储池。至少有两个池,一个用于存储数据,一个用于存储元数据。
[root@node1ceph_conf]# ceph osd pool create cephfs_data 128
[root@node1ceph_conf]# ceph osd pool create cephfs_metadata 128
注:128是指,池中有128个PG(归置组)
PG的说明:http://www.wzxue.com/ceph-osd-and-pg/
查看MDS状态
[root@node1ceph_conf]# ceph mds stat
创建文件系统
[root@node1ceph_conf]# ceph fs new myfs1 cephfs_metadata cephfs_data
查看文件系统
[root@node1ceph_conf]# ceph fs ls
客户端挂载CEPHFS
[root@client~]# mkdir /mnt/cephfs
[root@client~]# mount -t ceph 192.168.4.1:6789:/ /mnt/cephfs/ -oname=admin,secret=AQDaDSpboImwIBAAzX800q+H0BCNq9xq2xQaJA==
[root@client~]# df -h /mnt/cephfs/
对象存储
1、什么是对象,参见:http://storage.ctocio.com.cn/281/12110781.shtml
2、新建虚拟机,用于RGW
node5.tedu.cn 192.168.4.5
需要node1可以免密登陆到node5。Node5也需要ceph的yum源。Node1可以通过名字访问node5。
在node1远程为node5安装RGW
[root@node1ceph_conf]# ceph-deploy install --rgw node5
同步keyring等文件到node5
[root@node1ceph_conf]# ceph-deploy admin node5
启动RGW服务
[root@node1ceph_conf]# ceph-deploy rgw create node5
[root@node5~]# systemctl status ceph-radosgw@\*
RGW内置了一个WEB服务器civetweb。为了用户访问方便,将RGW端口改为80(默认是7480)
[root@node5~]# vim /etc/ceph/ceph.conf 追加以下内容
[client.rgw.node5]
host=node5
rgw_frontends="civetwebport=80"
[root@node5~]# systemctl restart ceph-radosgw@\* 重启服务
客户端验证
[root@client~]# curl http://192.168.4.5
RGW客户端的使用
1、s3是亚马逊提供的一个命令行客户端
[root@client~]# rpm -ihv s3cmd-2.0.1-1.el7.noarch.rpm
创建用于RGW访问的用户
[root@node5~]# radosgw-admin user create --uid="testuser"--display-name="First User" 注意以下输出的信息
"keys":[
{
"user":"testuser",
"access_key":"2OEWOIA7G6GZZ22UI0E4",
"secret_key":"FrOzh6NQC1Ak3C4SXNSaLAEFPy5SyPu9MC02mtdm"
}
],
在客户端上配置s3
[root@client~]# s3cmd --configure
AccessKey:2OEWOIA7G6GZZ22UI0E4
SecretKey: FrOzh6NQC1Ak3C4SXNSaLAEFPy5SyPu9MC02mtdm
DefaultRegion [US]: 注意直接回车,不要改
S3Endpoint [s3.amazonaws.com]: 192.168.4.5
DNS-stylebucket+hostname:port template for accessing a bucket[%(bucket)s.s3.amazonaws.com]: %(bucket)s.192.168.4.5
Whenusing secure HTTPS protocol all communication with Amazon S3
serversis protected from 3rd party eavesdropping. This method is
slowerthan plain HTTP, and can only be proxied with Python 2.7 or newer
UseHTTPS protocol [Yes]: No
Testaccess with supplied credentials? [Y/n] y
Savesettings? [y/N] y
配置文件最终保存在了/root/.s3cfg
客户端配置完成,就可以执行上传、下载、删除等操作了
[root@client~]# s3cmd ls 查看
[root@client~]# s3cmd mb s3://my_bucket 创建一个容器(文件夹)
[root@client~]# s3cmd put /var/log/messages s3://my_bucket 上传文件
[root@client~]# s3cmd ls s3://my_bucket 查看my_bucket中的内容
[root@client~]# s3cmd get s3://my_bucket/messages /tmp/ 下载
[root@client ~]# s3cmddel s3://my_bucket/messages 删除