ceph是分布式文件系统
在admin节点添加Ceph的yum源仓库,然后再安装ceph-deploy
//如果是别的源就用别的源
sudo subscription-manager repos --enable=rhel-7-server-extras-rpms
sudo yum install -y https://dl.fedoraproject.org/pub/epel/epel-release-latest-7.noarch.rpm
添加ceph仓库到/etc/yum.repos.d/ceph.repo 。把{ceph-stable-release}替换为你想要的ceph版本,如luminous
cat << EOM > /etc/yum.repos.d/ceph.repo
[ceph-noarch]
name=Ceph noarch packages
baseurl=https://download.ceph.com/rpm-luminous/el7/noarch
enabled=1
gpgcheck=1
type=rpm-md
gpgkey=https://download.ceph.com/keys/release.asc
[ceph]
name=Ceph packages for $basearch
baseurl=http://download.ceph.com/rpm-luminous/el7/$basearch
enabled=1
priority=2
gpgcheck=1
type=rpm-md
gpgkey=https://download.ceph.com/keys/release.asc
[ceph-source]
name=Ceph source packages
baseurl=http://download.ceph.com/rpm-luminous/el7/SRPMS
enabled=0
priority=2
gpgcheck=1
type=rpm-md
gpgkey=https://download.ceph.com/keys/release.asc
EOM
sudo yum update
sudo yum install ceph-deploy
admin节点必须可以免密通过ssh登录ceph节点。当ceph-deploy作为一个用户登录到ceph node的时候,这个用户必须拥有免密的sudo权限。
ntp是网络时间同步工具,可以同步各个节点的时间。
建议在ceph节点(特别是ceph monitor节点)安装ntp,以防止时间错误。
sudo yum install ntp ntpdate ntp-doc
如果提示有冲突,就先删除已有的相关软件,然后再执行一次。
确保已经开启了ntp服务,并确保每个节点的ntp都使用了一样的server。
//1.配置启动项
chkconfig ntpd on
//2.同步时间
ntpdate -u cn.pool.ntp.org
//3.启动ntpd服务
systemctl start ntpd
//4.验证ntp服务已经运行
pgrep ntpd
所有的ceph node都需要执行以下步骤:
1.每个节点都安装ssh server
sudo yum install openssh-server
2.确保ssh server在所有ceph node上都在运行。
ceph-deploy必须要作为一个拥有免密sudo权限的用户登录到ceph node,因为它需要在不提供密码的情况下安装软件与配置文件。
最近版本的ceph-deploy提供了一个–username选项去让你指定任意拥有免密sudo权限的用户(包括root,但是不建议用root)。想要使用ceph-deploy的–username {username},你指定的用户必须拥有免密ssh权限登录ceph node,因为ceph deploy不会问你要密码。
ceph推荐在所有ceph node上为ceph-deploy创建特定用户。但是不要用“ceph”作为用户名。集群内采用统一的用户名可以降低使用难度(不必须),但是你要避免使用太明显的用户名,因为黑客会使用一般的用户名进行攻击(比如root,admin,产品名)。下面解释如何创建免密sudo权限用户:
1.在每个ceph节点创建新用户
注意,在admin节点也是这个用户,用户名最好一致!
sudo useradd -d /home/{username} -m {username}
sudo passwd {username}
2.为该用户获取免密sudo权限
echo "{username} ALL = (root) NOPASSWD:ALL" | sudo tee /etc/sudoers.d/{username}
sudo chmod 0440 /etc/sudoers.d/{username}
由于ceph-deploy不会提示输入密码,你必须在admin node生成ssh keys并且分发公钥给每个ceph node。
1.生成ssh keys,但是不要使用sudo或是root用户,把passphrase留空:
ssh-keygen
Generating public/private key pair.
Enter file in which to save the key (/ceph-admin/.ssh/id_rsa):
Enter passphrase (empty for no passphrase):
Enter same passphrase again:
Your identification has been saved in /ceph-admin/.ssh/id_rsa.
Your public key has been saved in /ceph-admin/.ssh/id_rsa.pub.
2.复制公钥到ceph node,把{username}替换为你创建的ceph deploy用户,把node替换为ceph node的ip。
ssh-copy-id {username}@node1
ssh-copy-id {username}@node2
ssh-copy-id {username}@node3
3.(建议)在admin node上修改~/.ssh/config
文件,这样的话ceph-deploy可以在你每次用ceph-deploy登录到ceph node的ceph-deploy用户,而不需要你指定–username {username}。这有利于简化ssh和scp的使用。
Host node1
Hostname node1
User {username}
Host node2
Hostname node2
User {username}
Host node3
Hostname node3
User {username}
ceph osds通过网络彼此协作或向ceph monitors报告。如果网络默认关闭,ceph集群就无法在启动过程中联网,直到你连接上网络。
一些lunix发行版(如centos)的网络接口默认关闭。为了确认ceph守护进程可以彼此沟通,需要确认网络接口开启。例如,在rh与centos,查看/etc/sysconfig/network-scripts
下的ifcfg-{iface}文件里的ONBOOT
设置为yes。
通过ping hostnames(hostname -s)来确保联通性。
note: hostnames需要解析到ip地址,但不能是127.0.0.1。如果你的admin node也被作为一个ceph node,你同样需要确保它解析hostname到ip地址。
如果把防火墙关了就不用看这一步
ceph monitor默认通过6789端口进行沟通。ceph osds默认通过6800:7300之间的端口沟通。Ceph OSDs可以使用多个网络与clients,monitors,其他osds(为了复制),其他osd(为了心跳信号)。
一些发行版(如rh),默认防火墙配置很严格。你也许需要去调整你的防火墙设定去允许访问申请,这样网络内的守护进程可以交流。
rh7的防火墙,在public zone,为ceph monitor节点添加ceph-min service,为OSDs and MDSs添加ceph service,并确保您将设置设置为永久性(permanent)的,以便在重新启动时启用它们。
例如,在monitors:
sudo firewall-cmd --zone=public --add-service=ceph-mon --permanent
在osds 和 mdss:
sudo firewall-cmd --zone=public --add-service=ceph --permanent
一旦你在防火墙配置里加了--permanent
,你可以通过重启防火墙来动态更改配置:
sudo firewall-cmd --reload
对于iptables(与firewall一样功能的另一种防火墙管理工具),为ceph monitors添加6789端口,为ceph osds添加6800:7300端口,例如
sudo iptables -A INPUT -i {iface} -p tcp -s {ip-address}/{netmask} --dport 6789 -j ACCEPT
一旦你完成来iptables的配置,确保你当的节点重启时,你的这些变更是持久化的。例如:
/sbin/service iptables save
On CentOS and RHEL, you may receive an error while trying to execute ceph-deploy commands. If requiretty is set by default on your Ceph nodes, disable it by executing sudo visudo and locate the Defaults requiretty setting. Change it to Defaults:ceph !requiretty or comment it out to ensure that ceph-deploy can connect using the user you created with Create a Ceph Deploy User.
Note If editing, /etc/sudoers, ensure that you use sudo visudo rather than a text editor.
在centos和rh,selinux默认是开启的。为了经验你的安装,建议关闭selinux并且确保您的安装和集群在加强配置之前正常工作。用以下代码关闭selunix:
sudo setenforce 0
修改/etc/selinux/config
文件来永久关闭selinux:
SELINUX=disabled
确保你的package manager安装并启用了首选项包。centos,你也许需要安装epel(第一步我们已经安装了)。在rh,你也许需要启用可选仓库。
sudo yum install yum-plugin-priorities
例如,在rh7,执行以下代码去安装yum-plugin-priorities
且启用rhel-7-server-optional-rpms
仓库:
sudo yum install yum-plugin-priorities --enablerepo=rhel-7-server-optional-rpms
前2步我们做好了安装ceph的前期准备工作,下面开始正式安装ceph。
在admin node上创建一个目录,用来存放ceph-deploy为集群生成的配置文件和key。
mkdir my-cluster
cd my-cluster
ceph-deploy会输出文件到这个目录,一定要确保在当前目录下执行ceph-deploy。
如果在任何时候,你遇到了问题并且向重新开始,执行以下命令去删除ceph packages,并且删除所有的与之相关的data和配置:
ceph-deploy purge {ceph-node} [{ceph-node}]
ceph-deploy purgedata {ceph-node} [{ceph-node}]
ceph-deploy forgetkeys
rm ceph.*
如果你执行了删除,以必须重新安装ceph。最后一个命令删除了所有ceph-deploy在安装过程中写入的文件。
在admin node的你创建的用来保存配置文件的目录(my-cluster)下,用ceph-deploy执行以下步骤:
1.创建集群:
注意,如果你为ceph-deploy创建的用户,例如:userceph,那么在admin node上执行ceph-deploy 命令的用户也要是ceph-deploy
ceph-deploy new {initial-monitor-node(s)}
指定节点的hostname(所以你要去/etc/hosts里加入集群内的主机信息),fqdn(不知道是啥)或hostname:fqdn,例如:
ceph-deploy new node1
用ls和cat命令去检查当前目录的输出。你会看到一个ceph的配置文件(ceph.conf),一个monitor secret keyring(ceph.mon.keyring),还有一个关于新集群的日志文件。可以通过ceph-deploy new -h
查看详细信息
在各个ceph节点安装ceph
ceph-deploy install {ceph-node} [...]
例如:
ceph-deploy install node1 node2 node3
ceph-deploy将会在每个节点安装ceph
也可以自己手动安装
sudo yum -y install ceph ceph-osd ceph-mds ceph-mon ceph-radosgw
初始化monitor
ceph-deploy mon create-initial
一旦你完成了这一步,你的当前目录将会看到如下keyrings:
- ceph.client.admin.keyring
- ceph.bootstrap-mgr.keyring
- ceph.bootstrap-osd.keyring
- ceph.bootstrap-mds.keyring
- ceph.bootstrap-rgw.keyring
- ceph.bootstrap-rbd.keyring
如果进程失败且返回一个类似于“Unable to find /etc/ceph/ceph.client.admin.keyring”的错误信息,请确保ceph.conf中的monitor node的ip是公共ip(也就是可以ping通咯),不是私有ip(如127.0.0.1)
上一步我们初始化了monitor并生成了keyring,现在我们通过ceph-deploy拷贝配置文件和admin key到admin node和ceph node,这样的话你就可以在使用ceph cli时不用每次都去指定monitor address和ceph.client.admin.keyring。
ceph-deploy admin {ceph-node(s)}
例如
ceph-deploy admin node1 node2 node3
ceph-deploy mgr create node1 *Required only for luminous+ builds, i.e >= 12.x builds*
这一步,假设你在每个节点都有一个没有使用的硬盘,名字是/dev/vdb
。确认这个硬盘没有在使用且没有含有任何重要数据。
ceph-deploy osd create –data {device} {ceph-node}
例如
ceph-deploy osd create --data /dev/vdb node1
ceph-deploy osd create --data /dev/vdb node2
ceph-deploy osd create --data /dev/vdb node3
==注意:我安装的时候,osd节点的机器硬盘被lvm(逻辑卷,也就是/dev/mapper/下的的东西)占用了。可以用lvs,lvdisplay,pvs,pvdisplay分别查看逻辑卷和物理卷的详细情况。我移除了逻辑卷,释放了物理卷/dev/sdc==
ssh node1 sudo ceph health
你的集群应该返回HEALTH_OK
。你可以通过以下代码查看更详细的集群状态:
ssh node1 sudo ceph -s
一旦你有了一个基础集群并正在运行,下一步就是去扩展集群。添加一个Ceph Metadata Server
到node1。然后添加一个Ceph Monitor和Ceph Manager到node2和node3去实现可靠性和可用性。
想要使用CephFS,你需要至少一个metadata server。执行以下命令去创建一个metadata server:
ceph-deploy mds create {ceph-node}
例如
ceph-deploy mds create node1
一个ceph存储集群需要至少一个monitor和一个manager去运行。为了高可用,ceoh存储集群一般运行多个monitors,这样的话某个monitor失效了不会拖累整个集群。ceph使用Ceph使用Paxos算法,这需要大多数monitor(也就是说,比monitor总数的一半还多)去组成一个quorum。奇数的monitor往往更好,但这不是必需的。
添加两个ceph monitor到集群:
ceph-deploy mon add {ceph-nodes}
例如:
ceph-deploy mon add node2 node3
注意,如果安装过程中报错了。请做如下处理:
#1.编辑admin节点的之前生成的cenf.conf文件,
#把你要添加的节点hostname,ip加进去
#并加入public_network
[global]
fsid = a443f987-c3d2-4e7e-9783-82640b97814d
mon_initial_members = ERP-CEPH-TEST2,ERP-CEPH-TEST3
mon_host = 10.59.1.136,10.59.1.137
auth_cluster_required = cephx
auth_service_required = cephx
auth_client_required = cephx
public_network = 10.59.1.0/24
#3.再执行一次mon add
ceph-deploy --overwrite-conf mon add node2 node3
一旦你添加了新的monitor,ceph将会开始同步这个monitor并且组成quorum。你可以通过以下命令查看quorum状态:
ceph quorum_status --format json-pretty
tip:当你运行多个monitor时,你需要在每个monitor机器上安装配置ntp。确保ntp与monitor一同运行
ceph manager守护进程使用activ/stanby模式。部署额外的manager守护进程可以确保当一个守护进程或节点失效时,另外一个可以接管而不影响服务。
用以下代码去部署额外的manager守护进程:
ceph-deploy mgr create node2 node3
你应该可以通过以下命令看到处于standby状态的managers:
ssh node1 sudo ceph -s
想要使用Ceph Object Gateway
组件,你必须部署一个rgw实例。执行以下代码去创建一个rgw实例:
ceph-deploy rgw create {gateway-node}
例如:
ceph-deploy rgw create node1
默认情况下,rgw监听7480端口。这个默认端口可以通过编辑运行rgw的节点上的ceph.conf
来实现:
[client]
rgw frontends = civetweb port=80
如果用的是ipv6:
[client]
rgw frontends = civetweb port=[::]:80
想要在ceph存储集群里存储object data,一个ceph客户端必须:
1. 设置一个object name
2. 指定一个pool
Ceph Client检索最新的集群映射,CRUSH算法计算如何将对象映射到placement group,然后计算如何动态地将placement group分配给Ceph OSD守护进程。想要找到object地址,你只需要object名称和pool名称。例如:
ceph osd map {poolname} {object-name}
练习:
1.创建一个文件,指定它的object name,并存入指定pool里
echo {Test-data} > testfile.txt
ceph osd pool create mytest 8
rados put {object-name} {file-path} --pool=mytest
rados put test-object-1 testfile.txt --pool=mytest
2.通过以下命令查看mytest pool里存储的对象
rados -p mytest ls
3.查看object存储位置
ceph osd map {pool-name} {object-name}
ceph osd map mytest test-object-1
4.删除存储的对象
rados rm test-object-1 --pool=mytest
5.删除pool
ceph osd pool rm mytest
注意,因为安全原因,ceph会报错,提示你要把poll名重复两次并加上--yes-i-really-really-mean-it
eph osd pool rm mytest mytest --yes-i-really-really-mean-it
但是即使这样也还会报错,进一步提示你要设置mon节点的ceph.conf的内容,加上:
[mon]
mon_allow_pool_delete = true
这个内容我只在一个mon节点里加上了,然后在另一个节点执行了删除,也生效了。
然后再执行以上删除步骤,就可以删除了。