ToB企服应用市场:ToB评测及商务社交产业平台

标题: 2.3ceph集群部署准备-软件准备下 [打印本页]

作者: 王海鱼    时间: 2024-9-9 02:42
标题: 2.3ceph集群部署准备-软件准备下
部署时钟服务器

在分布式集群中,时钟同步是至关重要的,由于分布式的各个组件通常运行在不同的节点上,为了实现组件之间的同步,组件之间必须借助时间来确保不会混乱。
在生产情况中,我们通常发起在集群内部安装多个时钟服务器,确保所有节点都能得到低延长的同等的时钟,之以是要安装多个,是因为时钟服务器太过于重要,以至于如果只有单个时钟服务器,一旦其不可用,将会导致各个节点的时钟紊乱,进一步导致集群不可用,业务制止。
现在在linux平台有多种时钟体系,我们推荐利用chrony时钟服务来给集群的各个节点做时钟的同步。
开始前,我们确保节点的时区和时钟格式符合利用,所有节点保持同等,制止不须要的问题
  1. ansible all -i nodes -m shell -a '/usr/bin/timedatectl'
  2. timedatectl set-timezone Asia/Shanghai
  3. echo "LC_TIME=en_DK.UTF-8" >> /etc/default/locale
复制代码
在我们的情况中,我们选取deployhost节点作为我们集群的时钟服务器,首先安装软件包chrony
  1. sudo apt install chrony
  2. ansible all -i nodes -m shell -a 'apt install chrony -y'
复制代码
完成后,对chrony server举行配置,这个chrony服务,除了给集群节点同步时钟外,还要到互联网的公共时钟服务器同步本身的时钟,以确保自身的时钟也是正确的,注意,在利用ntp源之前,最好先ping一下延长情况,选取延长最低的ntp源,推荐利用腾讯云的时钟服务器来做我们的chrony的上级时钟服务器,当然假犹如砚们地点的情况,离阿里云的时钟服务器更近的话也可以利用阿里云的时钟服务器作为上级服务器:
  1. ping ntp1.tencent.com
  2. ping ntp2.aliyun.com
  3. chrony作为服务器时配置文件为
  4. nano /etc/chrony/chrony.conf
  5. 这个字段就是指定上级时钟服务器,默认它是使用Pool的方式,我们不用Pool方式而是指定server
  6. 一般来说我们可以配置多个server,这里我们就配置两个
  7. server  ntp1.tencent.com iburst
  8. server  ntp2.tencent.com iburst
  9. 下面这些字段默认即可
  10. keyfile /etc/chrony/chrony.keys
  11. driftfile /var/lib/chrony/chrony.drift
  12. logdir /var/log/chrony
  13. maxupdateskew 100.0
  14. rtcsync
  15. makestep 1 3
  16. 我们还规定了只有来自192.168.183网段的主机才能够进行时钟同步服务
  17. 同学们根据自己实际的网络环境来进行添加
  18. allow 192.168.183.0/24
  19. 这里local这一个字段表示,当chrony服务器无法连接到上级服务器的时候,它自己就成为一个时钟服务器
  20. local stratum 10
复制代码
保存修改后,我们重启时钟服务,然后举行验证systemctl restart chrony.service
chrony进程起来后,我们查看一下chrony服务是否正常运行,重要是看chrony是否能正常与上级时钟服务器对时
  1. root@debian:~# chronyc tracking
  2. Reference ID    : 6A37B8C7 (106.55.184.199) --> 表示当前我们的时钟服务器所对应的上级时钟服务器
  3. Stratum         : 3 --> 服务器距离源时间有多远,这里本服务器为第3层
  4. Ref time (UTC)  : Tue Feb 27 06:38:07 2024 --> chrony同步的最后一次UTC时间
  5. System time     : 0.000192805 seconds fast of NTP time --> 系统时间比NTP服务器时间快或慢多少
  6. Last offset     : +0.000419843 seconds
  7. RMS offset      : 0.000562249 seconds
  8. Frequency       : 3.282 ppm fast
  9. Residual freq   : +0.203 ppm
  10. Skew            : 7.279 ppm
  11. Root delay      : 0.009290155 seconds
  12. Root dispersion : 0.018624386 seconds
  13. Update interval : 64.8 seconds
  14. Leap status     : Normal
  15. root@debian:~# chronyc sources
  16. 210 Number of sources = 1
  17. MS Name/IP address         Stratum Poll Reach LastRx Last sample               
  18. ===============================================================================
  19. ^* 106.55.184.199                2   7   377    14  -1818us[-1981us] +/-   22ms
复制代码
如上述所示,chrony服务器端就正常运行了,客户端的配置则更为简朴,只需要将配置文件的server指向我们自建的chrony服务即可
  1. nano /etc/chrony/chrony.conf
  2. server  192.168.183.100 iburst
  3. 修改完成后重启本地的chrony服务
  4. root@debian:~# systemctl restart chrony.service
复制代码
修改完一台节点的配置后,我们可以利用ansible工具,将配置文件分发到所有的节点上,并批量重启这些节点的chrony服务,确保所有节点的配置是同等且正确的。
服务端的chrony可以查抄一下客户端的同步情况
  1. root@debian:~# chronyc clients
  2. Hostname                      NTP   Drop Int IntL Last     Cmd   Drop Int  Last
  3. ===============================================================================
  4. 192.168.183.100                  1      0   -   -    40       0      0   -     -
  5. 192.168.183.101                  1      0   -   -    31       0      0   -     -
  6. 192.168.183.102                  1      0   -   -    16       0      0   -     -
复制代码
由输出可知,客户端的同步请求正常完成同步,到此,所有节点就实现了低延长的时钟同步,由于内网的网络延长极低,这种时钟同步包管了集群的时钟同等性,有效地规避了时钟带来的问题。
集群节点的其他配置

防火墙与selinux

  1. ufw status
  2. ufw disable
  3. sed -i 's/enforcing/disabled/g' /etc/selinux/config
复制代码
Debian Buster体系最小化安装,其默认不安装ufw和selinux,以是无需单独关闭,如果有安装,则需要查抄是否关闭
关于关闭防火墙和selinux可能带来安全风险的问题,现实上我们可以这么思量:
集群主机通常处于内部网络,一般情况下所有集群节点都是不允许访问外部网络的,只有像rgw、块网关这类服务节点才允许配置外部ip,因此在拓扑上就实现了一定水平的隔离,重要的安全加固也应该放在网关节点上
当然,如果不希望关闭防火墙和selinux,也可以为其添加iptables规则,放行关于ceph组件的干系端口和ip段,这样做安全性会更好,只是步骤较多较为繁琐。
ssh安全配置

我们对sshd举行一定的设定,修改/etc/ssh/sshd_config文件:
  1. Protocol 2 -> 取消注释,强制仅接受更安全的sshv2
  2. GSSAPIAuthentication no -> 禁止使用其他方法认证
  3. PasswordAuthentication no ->禁止密码认证
  4. PubkeyAuthentication yes -> 允许用key认证
  5. UseDNS no -> 取消注释,不解析用户dns,加快ssh的连接接速度
  6. PermitEmptyPasswords no -> 禁止空密码登录
  7. PermitRootLogin no -> 禁止root用户登录
复制代码
前面有提到,现在集群属于创建阶段,利用root用户来去创建集群可以制止许多不须要的麻烦,尤其是权限问题,以是关于安全配置这一块,我们将在后续集群部署好之后,来禁止密码登录和禁止利用root的登录,只允许利用key登录的方式,生产部署中我们也应该遵循这样一个好的安全习惯。
下令行汗青记录

在现实运维过程中,我们会执行各种下令,为shell汗青操纵记录增长时间戳是个很好的习惯,只管平时我们Linux的下令行汗青记录通常是不受关注的,但是在需要定位干系问题故障的时间,这个汗青记录的时间戳就非常的有效,从生产实践来看,许多问题可能是因为管理职员下令利用的不规范或者是误操纵而引发的,因此根据时间戳来确定哪一些下令是导致问题的根源,偶然候黑白常有效的,给shell下令行执行的汗青记录,添加时间戳的方法比较简朴,只需要在/etc/profile下面增长这么一行即可:
  1. echo 'HISTTIMEFORMAT="%F %T "'>>/etc/profile
  2. source /etc/profile
复制代码
在完成profile的配置并确认无误后,我们仍然发起利用ansible的copy模块将配置同步到所有节点,这样所有节点的配置也就同等且正确了。
创建运维专用账户及sudo权限

在集群搭建好之后,为了更方便利用ansible工具对集群节点举行管理,所有节点都应该配置一个专用的非root用户,并且配置当前节点到集群其他节点的ssh免密登录,这是因为,线上情况的运维管理,如果默认利用root,可能会有一些风险,以是发起单独创建管理用户并且授予免密的sudo权限,虽然免密的sudo权限也很大,但是毕竟跟root相比,它实在还是有一点差别的,习惯利用sudo,而不是直接利用root的用户来举行集群的管理操纵,也是我们线上运维职员的重要的,好的习惯。
在我们的情况中,我们安装debian体系的时间,默认要求创建一个用户,我们就创建了一个名为cluster的用户,以是我们这里就不重新创建了,继承下面的操纵:
  1. 首先安装sudo模块
  2. apt install -y sudo
  3. 然后,如果没有创建用户的话,先创建用户,如果已经有用户了,直接设置免密的sudo权限
  4. useradd -m cluster -s /bin/bash
  5. echo "cluster ALL = (root,ceph) NOPASSWD:ALL" | tee /etc/sudoers.d/cluster
  6. chmod 0440 /etc/sudoers.d/cluster
  7. 最后设置一下cluster用户的密码,即便不需要密码做sudo,出于安全考虑,也应该为用户设置密码
  8. passwd cluster
复制代码
上述操纵可以编写为shell脚本,利用ansible的copy模块举行分发,并利用shell模块举行执行,使得所有节点的配置同等且正确。
运维账户的免密key登录

在集群搭建好之后,为了更方便利用ansible工具对集群节点举行管理,所有节点都应该配置一个专用的非root用户,并且配置当前节点到集群其他节点的ssh免密登录,这是因为,线上情况的运维管理,如果默认利用root,可能会有一些风险,以是发起单独创建管理用户并且授予免密的sudo权限,虽然免密的sudo权限也很大,但是毕竟跟root相比,它实在还是有一点差别的,习惯利用sudo,而不是直接利用root的用户来举行集群的管理操纵,也是我们线上运维职员的重要的,好的习惯。
  1. 首先生成本地的ssh key
  2. ssh-keygen -t rsa -b 4096 -C "deployhost"
  3. 方便起见,我们使用脚本在集群节点上创建用户并导入deployhost的公钥,使得deployhost节点可以免密登录到其他所有集群节点
  4. #!/bin/bash
  5. useradd -m clusteruser -s /bin/bash
  6. mkdir /home/clusteruser/.ssh
  7. chmod 700 /home/clusteruser/.ssh
  8. ansible all -i nodes -m copy -a 'src=add_user.sh dest=/tmp/'
  9. ansible all -i nodes -m shell -a '/bin/bash /tmp/add_user.sh'
  10. 将公钥分发到其他节点上,最后修改权限
  11. ansible all -i nodes -m copy -a 'src=/home/clusteruser/.ssh/id_rsa.pub dest=/home/clusteruser/.ssh/authorized_keys'
  12. ansible all -i nodes -m shell -a 'chown clusteruser.clusteruser -R /home/clusteruser/.ssh'
  13. ansible all -i nodes -m shell -a 'chmod 600 /home/clusteruser/.ssh/authorized_keys'
复制代码
我们将利用cluster这个用户来举行集群的运维管理,在集群搭建方面,我们仍然可以利用root的用户来举行集群的搭建,因为这样可以省去许多的麻烦。
关于ceph集群在搭建之前,硬件和软件方面的准备,我们到现在为止就已经准备完成了,后面我们将正式开始ceph集群的搭建。

免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!更多信息从访问主页:qidao123.com:ToB企服之家,中国第一个企服评测及商务社交产业平台。




欢迎光临 ToB企服应用市场:ToB评测及商务社交产业平台 (https://dis.qidao123.com/) Powered by Discuz! X3.4