RadosGW 对象存储简介:
RadosGW 是对象存储(OSS,Object Storage Service)的一种实现方式,RADOS 网关也称为 Ceph 对象网关、RADOSGW、RGW,是一种服务,使客户端能够利用标准对象存储 API 来访问 Ceph 集群,它支持AWS S3和Swift API,rgw运行于librados之上,在ceph 0.8版本之后使用Civetweb 的 web 服务器来响应 api 请求,可以使用 nginx 或或者 apache 替代,客户端基于 http/https 协议通过 RESTful API 与 rgw 通信,而 rgw 则使用 librados 与 ceph 集群通信,rgw 客户端通 过 s3 或者 swift api 使用 rgw 用户进行身份验证,然后 rgw 网关代表用户利用 cephx 与 ceph 存储进行身份验证。 S3 由 Amazon 于 2006 年推出,全称为 Simple Storage Service,S3 定义了对象存储,是对象存 储事实上的标准,从某种意义上说,S3 就是对象存储,对象存储就是 S3,它对象存储市场的 霸主,后续的对象存储都是对 S3 的模仿.
RadosGW 对象存储使用: 对象是对象存储系统中数据存储的基本单位,每个 Object 是数据和数据属性集的综合体,数据属性可以根据应用的需求进行设置,包括数据分布、服务质量等每个对象自我维护其属性,从而简化了存储系统的管理任务,对象的大小可以不同,对象存储(Object Storage)是无层次结构的数据存储方法,通常用于云计算环境中,不同于其他数据存储方法,基于对象的存储不使用目录树: 数据作为单独的对象进行存储 数据并不放置在目录层次结构中,而是存在于平面地址空间内的同一级别 应用通过唯一地址来识别每个单独的数据对象 每个对象可包含有助于检索的元数据 专为使用 API 在应用级别(而非用户级别)进行访问而设计. 下面准备部署RGW,并测试文件的上传下载,这里主要分以下几步: 1.安装启动用RGW 2.这里准备做一个高可用,准备采用2台做Haproxy+Keepalive 3.创建用户并授权 4.创建bucket,并测试文件的上传下载 环境准备: 1.Ceph集群(之前已经部署,这里省略) 2.再加2台服务器做高可用 主IP-172.16.1.97 备IP-172.16.1.98 VIP-172.16.1.96 RGW部署: 1.先安装RGW,然后服务端添加: 在mgr节点操作: root@ceph-mgr1:~# apt install radosgw root@ceph-mgr2:~# apt install radosgw
2台mgr节点执行同样操作
完成之后,登录部署节点deploy节点
在deploy节点执行添加命令:
root@ceph-deploy:~/ceph-cluster# ceph-deploy rgw create ceph-mgr1
root@ceph-deploy:~/ceph-cluster# ceph-deploy rgw create ceph-mgr2
2台执行同样的添加操作完成后
执行ceph -s 再次查看
到mgr节点验证,发现7480端口已经生效
说明:本次测试因为内网实验,均采用默认的7480端口,可以根据自己的需要,更改端口以及443,方法是生成KEY或使用购买的KEY,前端采用Nginx或者到节点配置文件更改/etc/ceph/ceph.conf文件,这里不做阐述。
2.高可用服务器准备
这里已经准备好了2台服务器做负载高可用,并安装haproxy(过程略)
配置haproxy文件,添加如下:
[root@lb ~]# vim /etc/haproxy/haproxy.cfg
配置hosts文件,进行解析
172.16.1.96 rgw.magedu.net
完成后,测试:
3.创建用户
在ceph-deploy节点执行:
root@ceph-deploy:~/ceph-cluster# radosgw-admin user create --uid="rgwuser" --display-name="magedu rgwuser"
记录下其中生成的KEY,如果忘记记录,可以用一下命令查看:
root@ceph-deploy:~/ceph-cluster# radosgw-admin user info --uid=创建的用户
4.创建bucket
要使用bucket,首先需要安装s3cmd,并配置
s3cmd是一个通过命令行访问ceph RGW实现创建存储上传、下载以及管理数据到对象存储的命令行客户端工具
登录ceph-deploy节点执行:
root@ceph-deploy:~/ceph-cluster# apt-cache madison s3cmd
root@ceph-deploy:~/ceph-cluster# apt-cache apt install s3cmd
安装完成后,开始配置
root@ceph-deploy:~/ceph-cluster# s3cmd --configure
创建目录:
root@ceph-deploy:~/ceph-cluster# s3cmd mb s3://magedu
root@ceph-deploy:~/ceph-cluster# s3cmd ls
上传、下载文件测试:
这里准备一个wordpress包。然后执行如下:
上传:
root@ceph-deploy:~/ceph-cluster# s3cmd put /opt/wordpress-5.7.2-zh_CN.zip s3://magedu/rpm/wordpress-5.7.2-zh_CN.zip
下载:
root@ceph-deploy:~/ceph-cluster# s3cmd get s3://magedu/rpm/wordpress-5.7.2-zh_CN.zip /server
解压文件:
至此,RGW部署完成
Dashbord以及监控部署 1. Dashbord部署 在 mgr1节点安装执行: root@ceph-mgr1:~# apt-cache madison ceph-mgr-dashboard root@ceph-mgr1:~# apt install ceph-mgr-dashboard 安装完成后,登录部署节点deploy节点执行: root@ceph-deploy:~/ceph-cluster# ceph mgr module enable dashboard #启用模块 root@ceph-deploy:~/ceph-cluster# ceph config set mgr mgr/dashboard/ssl false #模块启用后还不能直接访问,需要配置关闭 SSL 或启用 SSL 及指定监听地址,这里先关闭 root@ceph-deploy:~/ceph-cluster# ceph config set mgr mgr/dashboard/ceph-mgr1/server_addr 172.16.1.164 #指定 dashboard 监听地址 root@ceph-deploy:~/ceph-cluster# ceph config set mgr mgr/dashboard/ceph-mgr1/server_port 9988 #指定 dashboard 监听端口 执行完成后,需要等待一会 到mgr1节点查看端口启用状态,如果等待一会后,发现没启用,同时部署节点ceph -s无报错,可以手动执行重启命令 root@ceph-mgr1:~# systemctl restart ceph-mgr@ceph-mgr1.service 再次执行端口查看命令:
打开浏览器,访问:http://172.16.1.164:9988
创建用户以及密码文件
完成后,登录
dashboard SSL: 如果要使用 SSL 访问。则需要配置签名证书。证书可以使用 ceph 命令生成,或是 opessl 命令生成。
执行如下:
root@ceph-deploy:~# ceph dashboard create-self-signed-cert
root@ceph-deploy:~#ceph config set mgr mgr/dashboard/ssl true
#查看当前 dashboard 状态: root@ceph-deploy:~# ceph mgr services { "dashboard": "http://172.16.6.1:9988/" } #重启 mgr 服务: [root@ceph-mgr1 ~]# systemctl restart ceph-mgr@ceph-mgr1 #再次验证 dashboard: root@ceph-deploy:~# ceph mgr services { "dashboard": "https://172.16.6.1:9988/" } 安装prometheus监控 1.prometheus安装 首先,上传prometheus-2.23.0.linux-amd64.tar.gz 到mgr1节点下,执行解压 执行:root@ceph-mgr1:/opt# ln -sv /opt/prometheus-2.23.0.linux-amd64 /opt/prometheus #创建一个链接 便于后面管理,这里编写一个services 内容如下: [root@ceph-mgr1 prometheus]# vim /etc/systemd/system/prometheus.service [Unit] Description=Prometheus Server Documentation=https://prometheus.io/docs/introduction/overview/ After=network.target [Service] Restart=on-failure WorkingDirectory=/opt/prometheus/ ExecStart=/opt/prometheus/prometheus --config.file=/opt/prometheus/prometheus.yml [Install] WantedBy=multi-user.target 执行重启,并设置成开机自启
访问 http://172.16.1.164:9090
2.node 节点监控安装:
上传node_exporter-1.0.1.linux-amd64.tar.gz到各节点/opt目录下:
执行如下:
root@ceph-node3:/opt# tar xzvf node_exporter-1.0.1.linux-amd64.tar.gz
root@ceph-node3:/opt# ln -sv node_exporter-1.0.1.linux-amd64 node_exporter
所有节点同样操作
同样vim一个services文件:
vim /etc/systemd/system/node_exporter.service
[Unit] Description=node_exporter.service After=network.target [Service] Restart=on-failure WorkingDirectory=/opt/node_exporter/ ExecStart=/opt/node_exporter/node_exporter [Install] WantedBy=multi-user.target 完成后执行重启:root@ceph-node1:/opt/node_exporter# systemctl daemon-reload
root@ceph-node1:/opt/node_exporter# systemctl restart node_exporter.service
root@ceph-node1:/opt/node_exporter# systemctl enable node_exporter.service
浏览器访问,例如:http://172.16.1.167:9100 ,查看监控情况
3.监控配置: 默认情况下prometheus端不会主动监控,需要更改配置文件 root@ceph-mgr1:/opt/prometheus# vim prometheus.yml 在结尾添加监听名以及监控节点,如下图所示:
完成后,执行重启 root@ceph-mgr1:/opt/prometheus# systemctl restart prometheus.service 浏览器刷新访问:
通过 prometheus 监控 ceph 服务: Ceph manager 内部的模块中包含了 prometheus 的监控模块,并监听在每个 manager 节点的9283 端口,该端口用于将采集到的信息通过 http 接口向 prometheus 提供数据。 启用 prometheus 监控模块: root@ceph-deploy:~# ceph mgr module enable prometheus
验证 manager 数据:
浏览器访问 http://192.168.79.164:9283
再次更改配置文件,进行添加:
root@ceph-mgr1:/opt/prometheus# vim prometheus.yml
重启服务,并进行验证:
root@ceph-mgr1:/opt/prometheus# systemctl restart prometheus.service
浏览器访问 http://172.16.1.164:9090/
通过 grafana 显示监控数据:
访问 https://grafana.com/grafana/download?pg=get&plcmt=selfmanaged-box1-cta1
按下图红框标记,在部署节点执行:
完成之后登录,端口为3000,默认用户和密码均为admin
添加数据源:
导入模板,首先进行模板选择
地址:https://grafana.com/grafana/dashboards?search=ceph
最终效果:
Docker的安装以及基本命令
Docker容器本质上是宿主机的进程. 可以把docker容器内部跑的进程看作 是宿主机的线程。 Docker通过namespace实现了资源隔离 ,通过cgroups实现了资源限制
NameSpace
Linux内核实现namespace的一个主要目的就是实现轻量级虚拟化(容器)服 务。在同一个namespace下的进程可以感知彼此的变化,而对外界的进程 一无所知。Linux 在很早的版本中就实现了部分的 namespace,
比如内核 2.4 就实现了 mount namespace。 大多数的namespace支持是在内核 2.6 中完成的,比如 IPC、Network、 PID、和 UTS。还有个别的namespace 比较特殊,比如User,从内核 2.6 就开始实现了,但在内核 3.8 中才宣布完成。 同时,随着 Linux 自身的发展以及容器技术持续发展带来的需求,也会有 新的 namespace 被支持,比如在内核 4.6 中就添加了Cgroup。
Control Group
控制组(CGroups)是Linux内核的一个特性,主要用来对共享资源进行隔
离、限制、审计等。
只有能控制分配到容器的资源,才能避免多个容器同时运行时对宿主机系
统的资源竞争。控制组可以提供对容器的内存、CPU、磁盘IO等资源进行限制和计费管
理。
1.安装docker-ce 首先准备安装源,这里使用清华镜像的地址: 网址:https://mirrors.tuna.tsinghua.edu.cn/help/docker-ce/ 参照上面的步骤,即可完成源的部署,配置过程这里省略 Yum源准备好后,开始进行安装 执行: [root@docker-singel ~]# yum list docker-ce --showduplicate | sort -r #列出版本
安装docker- ce,也可以指定版本:
yum install docker-ce -y 或者 docker-ce-版本 -y
同时启动并设置开机自启:
systemctl enable docker && sudo systemctl start docker
最后查看版本等信息:
docker --version
[root@docker-singel ~]# docker info
2.Docker的使用:
镜像常见操作
查看镜像列表
通过docker images命令查看当前镜像列表; 使用man docker-images得到
参数说明:
搜索镜像:
通过docker search查找官方镜像; 使用man docker-search得到参数说明
[root@docker-singel ~]# docker images
本地没有镜像,需要去search镜像
[root@docker-singel ~]# docker search centos
本地没有镜像,需要下载镜像到本地 [root@docker-singel ~]# docker pull nginx #拉取一个nginx镜像
再次查看: [root@docker-singel ~]# docker images
发现已有镜像
配置加速器:
直接pull的话,因为拉取地址或者网速等原因,下载速度受到很大影响,因此这里配置配置一个阿里的加速地址,方法如下:
[root@docker-singel ~]# cd /etc/docker/
[root@docker-singel docker]# vim daemon.json #没有这个文件的话,直接vim或者创建一个
编辑内容如下,红色部分为你自己的阿里加速地址
然后执行:
[root@docker-singel docker]# systemctl daemon-reload[root@docker-singel docker]# systemctl restart docker
再拉取一个centos镜像并查看:
[root@docker-singel docker]# docker pull centos
[root@docker-singel docker]# docker images
运行容器: [root@docker-singel docker]# docker run -it -d -p 8081:80 --name=nginx01 nginx 参数说明: -d:分离模式: 在后台运行
-i:即使没有附加也保持STDIN 打开
-t:分配一个伪终端 --name:指定运行的镜像名称 -p: 端口映射 查看运行的容器状态: [root@docker-singel docker]# docker ps -a
访问验证,上面运行了一个nginx 的容器,并映射到了8081端口
浏览器访问:http://系统IP:8081
交互执行:
这里可以在运行容器的同时进入容器里操作,以centos镜像为例
[root@docker-singel docker]# docker run -it --name=centos1 centos /bin/bash
再次执行查看:
[root@docker-singel docker]# docker ps -a
发现刚才的2个容器已经UP中
exec交互执行:
对于运行中的运行,我们也可以直接执行exec进入容器,以上面运行的nginx为例
[root@docker-singel docker]# docker exec -it nginx01 bash
保存镜像:
[root@docker-singel ~]# docker save nginx -o /backup/docker-nginx.tar
停止镜像:
以上面的nginx 为例
[root@docker-singel ~]# docker stop nginx01
[root@docker-singel ~]# docker ps -a
发现nginx状态已经为Exited
删除容器:
[root@docker-singel ~]# docker rm nginx01
[root@docker-singel ~]# docker ps -a
删除镜像:
[root@docker-singel ~]# docker rmi nginx:latest
[root@docker-singel ~]# docker images
可以看到,只剩下centos镜像
镜像恢复:
进入到刚才备份的目录,执行:
[root@docker-singel backup]# docker load -i docker-nginx.tar
再次执行镜像查看:
[root@docker-singel backup]# docker images
可以看到nginx已经恢复
Docker基础命令总结
搜索镜像
docker search centos 搜索centos的Docker镜像
拉取官方最新版的镜像
docker pull centos,其中的latest是一个标签(tag),表示是当前最新版本centos
查看本地镜像
docker images
查看宿主机上的镜像,Docker镜像保存在/var/lib/docker目录下,当然可以更改
根据仓库名列出镜像
docker image ls centos
删除本地的镜像
docker image rmi [选项] <镜像> <镜像> 可以是 镜像短 ID、镜像长 ID、镜像名 或者 镜像摘要
删除容器:
docker rm 容器名或者ID
查看当前有哪些容器正在运行
docker ps
查看所有容器
docker ps -a
用 nginx 镜像启动一个容器,命名为 webserver,并且映射了 80 端口
docker run --name webserver -d -p 8081:80 nginx
docker exec 命令进入容器
保存镜像
docker save 镜像 -o /路径/保存的名字
恢复镜像
docker load -i 之前保存的镜像名
完