02 Ceph集群规划及部署mimic
2.1 集群规划
最少三台Centos7系统虚拟机用于部署Ceph集群。硬件配置:2C4G,另外每台机器最少挂载三块硬盘(每块盘5G).以下为本次环境规划:
HOST | IP | Service | Mark |
---|---|---|---|
cephmanager01 | public network:192.168.10.51--ens224 <br>cluster network:172.168.10.51--ens192 | mon, mgr,mds | 8c8g<br>系统盘:200G |
cephmanager02 | public network:192.168.10.72--ens224 <br/>cluster network:172.168.10.72--ens192 | mon, mgr,mds | 8c8g<br/>系统盘:200G |
cephmanager03 | public network:192.168.10.75--ens224 <br/>cluster network:172.168.10.75--ens192 | mon, mgr,mds | 8c8g<br/>系统盘:200G |
cephnode001 | public network:192.168.10.76--ens224 <br/>cluster network:172.168.10.76--ens192 | osd | 4c8g<br>系统盘:200G<br>数据盘:50G/块x4 |
cephnode002 | public network:192.168.10.82--ens224 <br/>cluster network:172.168.10.82--ens192 | osd | 4c8g<br/>系统盘:200G<br/>数据盘:50G/块x4 |
cephnode003 | public network:192.168.10.101--ens224 <br/>cluster network:172.168.10.101--ens192 | osd | 4c8g<br/>系统盘:200G<br/>数据盘:50G/块x4 |
组件 | 版本 | 建议配置 | 备注 |
CentOS | CentOS Linux release 7.4.1708 | 管理节点CPU要好 | |
Ceph | 13.2.10 mimic | 数据节点磁盘空间大 |
2.2 环境准备
[在manager节点和node节点执行]
2.2.1基础环境准备
2.2.1.1 防火墙设置
关闭防火墙并设置开机关闭
# systemctl stop firewalld && systemctl disable firewalld && systemctl status firewalld
或者配置防火墙端口(根据情况添加对应端口)
# firewall-cmd --zone=public --add-port=6789/tcp --permanent # firewall-cmd --zone=public --add-port=6800-7100/tcp --permanent # firewall-cmd --reload # firewall-cmd --zone=public --list-all
2.2.1.2 关闭selinux
永久关闭(需要重启)
# sed -i 's/enforcing/disabled/' /etc/selinux/config
临时关闭
# setenforce 0
确认关闭
# getenforce
2.2.1.3 关闭NetworkManager
# systemctl disable NetworkManager && systemctl stop NetworkManager && systemctl status NetworkManager
2.2.1.4 设置主机名并添加主机名与IP对应关系
设置主机名[在对应节点上执行]
# hostnamectl --static set-hostname cephmanager01 # hostnamectl --static set-hostname cephmanager02 # hostnamectl --static set-hostname cephmanager03 # hostnamectl --static set-hostname cephnode001 # hostnamectl --static set-hostname cephnode002 # hostnamectl --static set-hostname cephnode003
修改hosts
# cat >> /etc/hosts << EOF 192.168.10.51 cephmanager01 192.168.10.72 cephmanager02 192.168.10.75 cephmanager03 192.168.10.76 cephnode001 192.168.10.82 cephnode002 192.168.10.101 cephnode003 EOF
2.2.1.5 设置时间同步
1)设置时区并同步互联网时间
# yum install -y ntpdate chrony # timedatectl set-timezone Asia/Shanghai # ntpdate time1.aliyun.com
2)配置所有服务器的时间和时间服务器同步或者同某一台服务器同步[本例同步cephmanager01节点时间]
编辑 /etc/chrony.conf 文件,添加(互联网上的时间服务器可以删除):
server 192.168.10.51 iburst
重启服务并配置开机启动
# systemctl restart chronyd.service && systemctl enable chronyd.service && systemctl status chronyd.service
验证:是否与cephmanager01同步
# chronyc sources
2.2.1.6 设置文件限制
# echo "ulimit -SHn 102400" >> /etc/rc.local # cat >> /etc/security/limits.conf << EOF * soft nofile 65535 * hard nofile 65535 EOF
2.2.1.7 内核参数优化
# cat >> /etc/sysctl.conf << EOF kernel.pid_max = 4194303 vm.swappiness = 0 EOF # sysctl -p
2.2.1.8 read_ahead
通过数据预读并且记载到随机访问内存方式提高磁盘读操作
# echo "8192" > /sys/block/sda/queue/read_ahead_kb
2.2.1.9 I/O Scheduler
SSD要用noop,SATA/SAS使用deadline
# echo "deadline" >/sys/block/sd[x]/queue/scheduler # echo "noop" >/sys/block/sd[x]/queue/scheduler
2.2.1.10 安装可能用到的工具软件
# yum install wget vim lrzsz -y
2.2.2 用户环境准备
2.2.2.1 创建用户
# useradd -d /home/cephuser -m cephuser # passwd cephuser Changing password for user cephuser. New password: ceph_pass Retype new password: ceph_pass
修改visudo文件,使cephuser用户在sudo列表中;
# 在92行” root ALL=(ALL) ALL”下新增一行:” cephuser ALL=(ALL) ALL” # visudo cephuser ALL=(ALL) ALL
2.2.2.2 用户赋权
设置cephuser用户具备无密码sudo(root)权限;切换到cephuser用户下操作
# su - cephuser [cephuser@cephmanager01 ~]$ echo "cephuser ALL = (root) NOPASSWD:ALL" | sudo tee /etc/sudoers.d/cephuser [sudo] password for cephuser: ceph_pass cephuser ALL = (root) NOPASSWD:AL [cephuser@cephmanager01 ~]$ sudo chmod 0440 /etc/sudoers.d/cephuser
2.2.2.3 ssh免密登陆
1)生成秘钥
ceph-deploy不支持密码输入,需要在管理控制节点生成ssh秘钥,并将公钥分发到各ceph节点;
在用户cephuser下生成秘钥,不能使用sudo或root用户;默认在用户目录下生成~/.ssh目录,含生成的秘钥对;“Enter passphrase”时,回车,口令为空;
备注:3个manager节点均设置为ceph管理控制节点,应该使3个manager节点均能ssh免密登陆到其他所有manager节点与node节点
# 分别在cephmanager01,cephmanager02,cephmanager03执行 [root@cephmanager01 ~]# su - cephuser Last login: Sun Jun 28 14:49:09 CST 2020 on pts/4 [cephuser@cephmanager01 ~]$ ssh-keygen -t rsa
2)分发密钥
确认各控制manger与node节点已生成相关用户cephuser;分发成功后,在~/.ssh/下生成known_hosts文件,记录相关登陆信息;
# 需要分别在cephmanager01、cephmanager02、cephmanager03上分发到所有的manager和node节点 [cephuser@cephmanager01 ~]$ ssh-copy-id cephuser@cephmanager02
2.2.3 配置yum源
配置内网yum源服务器,或者配置对应的国内源,这里配置ceph源和epel源
# cat > /etc/yum.repos.d/ceph.repo << EOF [ceph] name=ceph baseurl=http://mirrors.aliyun.com/ceph/rpm-mimic/el7/x86_64/ gpgcheck=0 priority=1 [ceph-noarch] name=cephnoarch baseurl=http://mirrors.aliyun.com/ceph/rpm-mimic/el7/noarch/ gpgcheck=0 priority=1 [ceph-source] name=Ceph source packages baseurl=http://mirrors.aliyun.com/ceph/rpm-mimic/el7/SRPMS gpgcheck=0 priority=1 EOF # wget -O /etc/yum.repos.d/epel-7.repo http://mirrors.aliyun.com/repo/epel-7.repo # yum clean all # yum makecache # 查看yum源 # yum repolist
2.3 安装ceph-deploy
[在规划的全部manager节点安装ceph-deploy工具,本例以cephmanager01为例]
推配置文件、变更维护,添加硬盘等操作都需要用到ceph-deploy,并确认ceph-deploy版本是否为2.0.1
[root@cephmanager01 ~]# yum install ceph-deploy python-setuptools -y # 确认版本 [root@cephmanager01 ~]# ceph-deploy --version
2.4 集群部署
2.4.1 创建集群
[在规划的全部manager节点执行,特殊说明处例外,本例以cephmanager01为例]
在cephuser账户下操作,切忌使用sudo操作;在manager节点上创建一个目录用于存放集群相关配置文件;
[root@cephmanager01 ~]# su - cephuser [cephuser@cephmanager01 ~]$ mkdir cephcluster # 后续ceph-deploy相关操作全部在所创建的目录执行 [cephuser@cephmanager01 ~]$ cd cephcluster/ # 将规划中的MON(monitor)节点纳入集群,即创建集群, # [该操作任意一个cephmanager执行,以cephmanage01为例] [cephuser@cephmanager01 cephcluster]$ ceph-deploy new cephmanager01 cephmanager02 cephmanager03 [cephuser@cephmanager01 cephcluster]$ ls ceph.conf ceph-deploy-ceph.log ceph.mon.keyrin
2.4.2 修改集群配置文件(optional)
生成集群后在集群目录下生成3个文件,其中ceph.conf即是配置文件;
默认可不修改,为使服务按规划启动,可做适当修改;
以下红色字体部分是在默认生成的conf文件上新增的配置
[该操作任意一个cephmanager执行,以cephmanage01为例]
[cephde@controller01 cephcluster]$ cat ceph.conf [global] fsid = 6a71324c-6949-42bc-92ca-325c9d45ae06 mon_initial_members = cephmanager01, cephmanager02, cephmanager03 mon_host = 192.168.10.51,192.168.10.72,192.168.10.75 auth_cluster_required = cephx auth_service_required = cephx auth_client_required = cephx # public network:前端mon网络,client访问网络;确保public network与mon_host在相同网段,否则初始化时可能会有错误; # cluster network:后端osd心跳,数据/流复制恢复等网络 public network = 192.168.10.0/24 cluster network = 172.168.10.0/24 # 默认的副本数为3,根据实际情况变更 osd pool default size = 3 # 默认保护机制不允许删除pool,根据情况设置 mon_allow_pool_delete = true
2.4.3 安装ceph
[在全部manager和node节点执行]
# 建议使用该命令安装在每个节点安装 [root@cephmanager01 ~]# yum -y install epel-release [root@cephmanager01 ~]# yum -y install ceph # 不建议使用,该命令会在对应节点安装,但是源会自动更换为国外官方源,网速会很慢 [root@cephmanager01 ~]# ceph-deploy install --release mimic cephnode01 cephnode02 cephnode03 # 查看版本 [root@controller01 ~]# ceph -v
2.4.4 初始化ceph_mon
[该操作在任意一个cephmanager执行,以cephmanage01为例]
[root@cephmanager01 ~]# su - cephuser Last login: Mon Jun 29 02:17:20 CST 2020 on pts/0 [cephuser@cephmanager01 ~]$ cd cephcluster/ [cephuser@cephmanager01 cephcluster]$ ceph-deploy mon create-initial # 初始化完成后,在集群目录下新增多个秘钥文件 [cephuser@cephmanager01 cephcluster]$ ls -l
# 查看状态 [cephuser@cephmanager01 cephcluster]$ sudo systemctl status ceph-mon@cephmanager01
2.4.5 分发ceph.conf与秘钥
# 分发ceph配置文件与秘钥到其他控制manager节点与node节点; # 注意分发节点本身也需要包含在内,默认没有秘钥文件,需要分发; # 如果被分发节点已经配置文件(统一变更配置文件场景),可以使用如下命令:ceph-deploy --overwrite-conf admin xxx # 分发的配置文件与秘钥到各节点/etc/ceph/目录 [cephuser@cephmanager01 cephcluster]$ ceph-deploy admin cephmanager01 cephmanager02 cephmanager03 cephnode001 cephnode002 cephnode003
完后可以使用ceph -s命令,tail -f ceph-deploy-ceph.log查看安装日志
将cephcluster目录下面的文件拷贝到其余的manager节点:
[cephuser@cephmanager01 cephcluster]$ pwd /home/cephuser/cephcluster [cephuser@cephmanager01 cephcluster]$ scp ceph.conf ceph-deploy-ceph.log ceph.mon.keyring cephuser@cephmanager03:~/cephcluster/ [cephuser@cephmanager01 cephcluster]$ scp ceph.bootstrap-* cephuser@cephmanager02:~/cephcluster/
2.4.6 配置ceph_mgr,用于管理集群
注意:L版之后才需要部署
[在任意manager节点执行,以cephmanager01为例]
[cephuser@cephmanager01 cephcluster]$ ceph-deploy mgr create cephmanager01:cephmanager01_mgr cephmanager02:cephmanager02_mgr cephmanager03:cephmanager03_mgr # 查看状态 [cephuser@cephmanager01 cephcluster]$ systemctl status ceph-mgr@cephmanager01_mgr [cephuser@cephmanager01 cephcluster]$ sudo ss -tunlp |grep mgr
2.4.7 查看集群状态信息
[manager和node节点均可执行]
# 查看monitor状态 [cephuser@cephmanager01 ~]$ sudo ceph mon stat # 查看ceph状态 [cephuser@cephmanager01 ~]$ sudo ceph -s
2.5 OSD
2.5.1 创建OSD
osd位于node节点,可查看node节点磁盘状况,以cephnode001节点为例;
或在manager节点采用命令:ceph-deploy disk list cephnode001 cephnode001 … cephnode00N;
[root@cephnode001 ~]# lsblk
实际创建osd时,可通过manager节点使用ceph-deploy创建[任意一manager节点执行,以cephmanager01为例];
# 参数"--data"指定数据盘,参数"--journal"指定journal日志盘,日志盘可以是logical volume(vg/lv)或GPT patition,是option操作; # 另有命令(L版本):ceph-deploy osd prepare {NODE}:{DISK}[:{/PATH/TO/JOURNAL}]; ceph-deploy osd activate {NODE}:{DISK}[:{/PATH/TO/JOURNAL}],其中[:{/PATH/TO/JOURNAL}]是option操作,可创建具有journal日志的osd守护进程(节点) [cephuser@cephmanager01 cephcluster]$ ceph-deploy osd create cephnode001 --data /dev/sdb [cephuser@cephmanager01 cephcluster]$ ceph-deploy osd create cephnode001 --data /dev/sdc [cephuser@cephmanager01 cephcluster]$ ceph-deploy osd create cephnode001 --data /dev/sdd [cephuser@cephmanager01 cephcluster]$ ceph-deploy osd create cephnode001 --data /dev/sde
本例中有3个node节点(osd),每个node节点运行4个osd进程(在6800~7300端口范围内,每进程监听1个本地端口)[以cephnode001为例];
[root@cephnode001 ~]# lsblk [root@cephnode001 ~]# ps -aux |grep osd # osd进程端口号; [root@cephnode001 ~]# netstat -tunlp | grep osd # ceph-osd进程,根据启动顺序,每个osd进程有特定的序号 [root@cephnode001 ~]# systemctl status ceph-osd@0
如果节点磁盘有数据,可通过命令初始化(谨慎):ceph-deploy disk zap {NODE} {DISK},这里{DISK}可以是物理盘符,也可是分区
2.5.2 查看OSD状态
在manager节点查看,以cephmanager01为例
[cephuser@cephmanager01 cephcluster]$ ceph-deploy osd list cephnode001 [cephuser@cephmanager01 cephcluster]$ sudo ceph osd stat [cephuser@cephmanager01 cephcluster]$ sudo ceph osd tree [cephuser@cephmanager01 cephcluster]$ sudo ceph df
在node节点查看,以cephnode001为例
[root@cephnode001 ~]# lsblk [root@cephnode001 ~]# ps -aux |grep osd [root@cephnode001 ~]# netstat -tunlp | grep osd [root@cephnode001 ~]# systemctl status ceph-osd@0
- PHP变量的判断
- 计算机网络——传输层(王道)
- 计算机网络——物理层&数据链路层(王道)
- 计算机网络——网络层(王道)
- Kite的学习历程SpringCloud之OpenFeign的客户端的创建使用
- 纵观Docker(运维角度)
- 国内centos7服务下快速安装 gitlab-runner
- 从零开始学ReactJS(零)
- CGLib DynamicBeanUtil动态类工具类
- GIT入门_基本操作
- 前后台 导出功能的编写
- 实操演示:华为RIP水平分割实验
- 常用算法简析(附时间复杂度)
- python数据分析实战(二)
- 为什么B站不会是「中国Youtube」
- Procast仿真模拟过程监控软件
- oracle求指定时间连续天数
- Paypal账户遭冻结,里面的钱怎么取出来?
- jmeter,提取符合特定条件的参数值(while和if控制器)
- 同步/异步与阻塞/非阻塞