keepalived高可用 | 部署Ceph分布式存储

keepalived高可用 | 部署Ceph分布式存储

前序文章: https://blog.csdn.net/shengweiit/article/details/135168233

keepalived高可用

部署两台代理服务器,实现如下效果:

  • 利用keepalived实现两台代理服务器高可用
  • 配置vip为192.168.4.80
  • 修改对应的域名解析记录

1. 配置第二台haproxy代理服务器

部署HAProxy

因为我们之前在192.168.4.5上面部署过HAProxy 所以 在192.168.4.6上面安装好HAProxy后可以将4.5上面的配置文件拷贝到4.6上面

shell 复制代码
[root@proxy2 ~]# yum -y install haproxy
[root@proxy2 ~]# scp 192.168.4.5:/etc/haproxy/haproxy.cfg /etc/haproxy/
[root@proxy2 ~]# systemctl start haproxy
[root@proxy2 ~]# systemctl enable haproxy

2.为两台代理服务器配置keepalived

配置第一台代理服务器proxy (192.168.4.5)

装包 --> 修改配置文件 --> 起服务

shell 复制代码
[root@proxy ~]# sed -i '36,$d' /etc/keepalived/keepalived.conf # 删除36行之后的
[root@proxy ~]# yum install -y keepalived  # 装包
[root@proxy ~]# vim /etc/keepalived/keepalived.conf
global_defs {
  router_id  proxy1                #设置路由ID号
  vrrp_iptables                    #设置防火墙规则(手动添加该行)
}
vrrp_instance VI_1 {
  state MASTER                         #主服务器为MASTER(备服务器需要修改为BACKUP)
  interface eth0                    #网卡名称(不能照抄网卡名)
  virtual_router_id 51                
  priority 100                     #服务器优先级,优先级高优先获取VIP
  advert_int 1
  authentication {
    auth_type pass
    auth_pass 1111                #主备服务器密码必须一致
  }
  virtual_ipaddress {                #谁是主服务器谁获得该VIP (这个是以后的公网IP)
192.168.4.80 
}    
}
[root@proxy ~]# systemctl start keepalived
[root@proxy ~]# systemctl enable keepalived

配置第二台代理服务器proxy (192.168.4.6)

shell 复制代码
[root@proxy2 ~]# yum install -y keepalived
[root@proxy2 ~]# scp 192.168.4.5:/etc/keepalived/keepalived.conf /etc/keepalived/
global_defs {
  router_id  proxy2                        #设置路由ID号
vrrp_iptables                               #设置防火墙规则(手动添加该行)
}
vrrp_instance VI_1 {
  state BACKUP                         #主服务器为MASTER(备服务器需要修改为BACKUP)
  interface eth0                    #网卡名称(不能照抄网卡名)
  virtual_router_id 51                
  priority 50                         #服务器优先级,优先级高优先获取VIP
  advert_int 1
  authentication {
    auth_type pass
    auth_pass 1111                       #主备服务器密码必须一致
  }
  virtual_ipaddress {                   #谁是主服务器谁获得该VIP
192.168.4.80 
}    
}
[root@proxy2 ~]# systemctl start keepalived
[root@proxy2 ~]# systemctl enable keepalived

修改DNS服务器

把www.lab.com的主机名的地址解析到 vip 192.168.4.80。192.168.4.5为DNS服务器

shell 复制代码
[root@proxy ~]# vim /var/named/lab.com.zone
$TTL 1D
@       IN SOA  @ rname.invalid. (
                                        0       ; serial
                                        1D      ; refresh
                                        1H      ; retry
                                        1W      ; expire
                                        3H )    ; minimum
@       NS      dns.lab.com.
dns     A       192.168.4.5
www     A       192.168.4.80

重启DNS服务

shell 复制代码
[root@proxy ~]# systemctl restart named

测试:

shell 复制代码
# 在客户端
host www.lab.com # 解析到的ip地址是 192.168.4.80
ping 192.168.4.80 # ping通 说明网络中有192.168.4.80
# 在优先级高的keepalived服务器上查看vip地址 
ip a s | grep 192

部署ceph分布式存储

部署ceph分布式存储实现如下效果:

  • 使用三台服务器部署ceph分布式存储
  • 实现ceph文件系统共享
  • 将网站数据从NFS迁移到ceph存储


准备硬件

复制代码
克隆3台虚拟机
每台虚拟机分别添加2块盘 20G
每台虚拟机添加一个光驱
检查盘和光驱是否添加正确

实验环境准备

1. 给三台主机配置本地yum源安装ceph服务软件包

  • 把ceph10.ios放到光驱里
  • 挂载光驱 配置开机挂载光驱
shell 复制代码
mkdir /ceph
vim /etc/fstab
/dev/sr0 /ceph iso9660 defaults 0 0
mount -a 
  • 配置本地yum源 安装ceph服务软件包
shell 复制代码
vim  /etc/yum.repos.d/ceph.repo
[mon]
name=mon
baseurl=file:///ceph/MON
enabled=1
gpgcheck=0
[osd]
name=osd
baseurl=file:///ceph/OSD
enabled=1
gpgcheck=0
[tools]
name=tools
baseurl=file:///ceph/Tools
enabled=1
gpgcheck=0

yum repolist                #验证YUM源软件数量
  • 在node1配置ssh密钥 ,让node1可用无密码连接node1,node2,node3 。让node1同时管理集群的管理主机 还是集群中的存储服务器。
shell 复制代码
[root@node1 ~]# ssh-keygen  -f /root/.ssh/id_rsa  -N  ''
#-f后面跟密钥文件的名称(创建密钥到哪个文件)
#-N  ''设置密钥的密码为空(不要给密钥配置密码)

#通过ssh-copy-id将密钥传递给node1,node2,node3
[root@node1 ~]# for i in   41  42  43
do
ssh-copy-id  192.168.2.$i
done
  • 三台机器都做主机名映射(不要删除源文件)
shell 复制代码
[root@node1 ~]# vim /etc/hosts      #修改文件,手动添加如下内容(不要删除原文件的数据)
192.168.2.41    node1
192.168.2.42     node2
192.168.2.43    node3

[root@node1 ~]# for i in 41 42 43
do
     scp /etc/hosts 192.168.2.$i:/etc
done
  • 配置NTP服务 同步时间
    说明:统一使用node1服务器作服务器
  1. 修改NTP服务的配置文件并重启
shell 复制代码
[root@node1 ~]# vim /etc/chrony.conf
allow 192.168.2.0/24        #修改26行
local stratum 10            #修改29行(去注释即可)
[root@node1 ~]# systemctl restart chronyd
  1. node2和node3作客户端
shell 复制代码
[root@node2 ~]# vim /etc/chrony.conf
server 192.168.2.41   iburst              #配置文件第二行,手动加入该行内容
[root@node2 ~]# systemctl restart chronyd
[root@node2 ~]# chronyc sources -v # 验证


[root@node3 ~]# vim /etc/chrony.conf
server 192.168.2.41   iburst              #配置文件第二行,手动加入该行内容
[root@node3 ~]# systemctl restart chronyd
[root@node3 ~]# chronyc sources -v

2. 部署ceph集群

  • 在node1主机安装管理工具ceph-deploy
shell 复制代码
[root@node1 ~]# yum -y install ceph-deploy
[root@node1 ~]# mkdir ceph-cluster
[root@node1 ~]# cd ceph-cluster
  • 给所有ceph节点安装ceph相关软件包
shell 复制代码
[root@node1 ceph-cluster]# for i in node1 node2 node3
do
     ssh $i "yum -y install ceph-mon ceph-osd ceph-mds"
done
  • 初始化mon服务 一定要在ceph-cluster目录下操作
shell 复制代码
#生成ceph配置文件
[root@node1 ceph-cluster]# ceph-deploy new node1 node2 node3
#拷贝ceph配置文件给node1,node2,node3,启动所有主机的mon服务
[root@node1 ceph-cluster]# ceph-deploy mon create-initial

[root@node1 ceph-cluster]# ceph -s                    #查看状态(此时失败是正常的)
    cluster 9f3e04b8-7dbb-43da-abe6-b9e3f5e46d2e
     health HEALTH_ERR   # 此时还没有加存储盘
     monmap e2: 3 mons at
 {node1=192.168.2.41:6789/0,node2=192.168.2.42:6789/0,node3=192.168.2.43:6789/0}
     
osdmap e45: 0 osds: 0 up, 0 in
  • 使用ceph-deploy工具初始化数据磁盘(仅node1操作)硬盘名称根据实际情况填写,不能照抄。
shell 复制代码
ceph-deploy disk zap 主机名:磁盘名 主机名:磁盘名
shell 复制代码
[root@node1 ceph-cluster]# ceph-deploy disk  zap  node1:sdb  node1:sdc    
[root@node1 ceph-cluster]# ceph-deploy disk  zap  node2:sdb  node2:sdc
[root@node1 ceph-cluster]# ceph-deploy disk  zap  node3:sdb  node3:sdc
  • 初始化OSD集群,磁盘名称根据实际情况填写
shell 复制代码
#每个磁盘都会被自动分成两个分区;一个固定5G大小;一个为剩余所有容量
#5G分区为Journal缓存;剩余所有空间为数据盘。
[root@node1 ceph-cluster]# ceph-deploy osd create  node1:sdb  node1:sdc  
[root@node1 ceph-cluster]# ceph-deploy osd create  node2:sdb  node2:sdc
[root@node1 ceph-cluster]# ceph-deploy osd create  node3:sdb  node3:sdc 
[root@node1 ceph-cluster]# ceph -s                 #查看集群状态,状态为OK

有效空间:

如果要重新创建,(错误的统一解决办法)

在管理主机node1 清除当前配置

删除所有安装的软件

shell 复制代码
[root@node1 ceph-cluster]# ceph-deploy purge node1
[root@node1 ceph-cluster]# ceph-deploy purge node2
[root@node1 ceph-cluster]# ceph-deploy purge node3

删除所有配置文件和数据

shell 复制代码
[root@node1 ceph-cluster]# ceph-deploy purgedata node1
[root@node1 ceph-cluster]# ceph-deploy purgedata node2
[root@node1 ceph-cluster]# ceph-deploy purgedata node3

检查集群环境:

  1. yum源

  2. NTP服务

  3. SSH

  4. 主机名绑定

3. 部署ceph文件系统

把ceph集群提供的磁盘存储空间给三台网站服务器存储网页文件

  • 启动MDS服务(可以在node1或node2或node3启动,也可以在多台主机启动mds)
shell 复制代码
[root@node1 ceph-cluster]# ceph-deploy mds create node3
  • 创建储存池(文件系统由innode(存储数据信息)和block(存储数据)组成)
    划分空间存储 innode 信息和 block信息
shell 复制代码
[root@node1 ceph-cluster]# ceph osd pool create cephfs_data 64
[root@node1 ceph-cluster]# ceph osd pool create cephfs_metadata 64
[root@node1 ceph-cluster]# ceph osd lspools      #查看共享池
0 rbd,1 cephfs_data,2 cephfs_metadata
  • 创建文件系统
shell 复制代码
[root@node1 ceph-cluster]# ceph fs new myfs1 cephfs_metadata cephfs_data  # cephfs_metadata存放innode cephfs_data存放数据
[root@node1 ceph-cluster]# ceph fs ls
name: myfs1, metadata pool: cephfs_metadata, data pools: [cephfs_data ]

4. 迁移网站数据到ceph集群

当前网站集群的网页文件是存放在NFS31服务器里

迁移网站数据就是把存储在NFS31服务器里的网页存放到ceph集群创建的文件系统里

具体操作如下:

  • 卸载web1,web2,web3的NFS共享
    暂停服务防止有人实时读写文件
shell 复制代码
[root@web1 ~]# /usr/local/nginx/sbin/nginx -s stop
[root@web2 ~]# /usr/local/nginx/sbin/nginx -s stop
[root@web3 ~]# /usr/local/nginx/sbin/nginx -s stop
[root@web1 ~]# umount /usr/local/nginx/html
[root@web2 ~]# umount /usr/local/nginx/html
[root@web3 ~]# umount /usr/local/nginx/html
[root@web1 ~]# vim /etc/fstab
#192.168.2.31:/web_share/html /usr/local/nginx/html/ nfs defaults 0 0
[root@web2 ~]# vim /etc/fstab
#192.168.2.31:/web_share/html /usr/local/nginx/html/ nfs defaults 0 0
[root@web3 ~]# vim /etc/fstab
#192.168.2.31:/web_share/html /usr/local/nginx/html/ nfs defaults 0 0
  • web服务器永久挂载Ceph文件系统(web1、web2、web3都需要操作)
    有三种解决方案,使用其中任意一种都可以,无论使用那种方式挂载ceph文件系统都需要用户名和密码 所以需要事先在ceph集群中的任意一台服务器上获取用户名和密码,统一在node1主机查看用户名和密码
shell 复制代码
[root@node1 ~]# cat /etc/ceph/ceph.client.admin.keyring 
[client.admin]
    key = AQA0KtlcRGz5JxAA/K0AD/uNuLI1RqPsNGC7zg==

/etc/rc.local是开机启动脚本,任何命令放在该文件中都是开机自启。

ceph-common是ceph的客户端软件。

shell 复制代码
[root@web1 ~]# yum -y install ceph-common
[root@web2 ~]# yum -y install ceph-common
[root@web3 ~]# yum -y install ceph-common
[root@web1 ~]#  mount -t ceph 192.168.2.41:6789:/ /usr/local/nginx/html/ \
-o name=admin,secret=AQA0KtlcRGz5JxAA/K0AD/uNuLI1RqPsNGC7zg==
# 系统重启之后依旧挂载
[root@web1 ~]# echo 'mount -t ceph 192.168.2.41:6789:/ /usr/local/nginx/html/ \
-o name=admin,secret=AQA0KtlcRGz5JxAA/K0AD/uNuLI1RqPsNGC7zg==' >> /etc/rc.local 
[root@web1 ~]# chmod +x /etc/rc.local

[root@web2 ~]#  mount -t ceph 192.168.2.41:6789:/ /usr/local/nginx/html/ \
-o name=admin,secret=AQA0KtlcRGz5JxAA/K0AD/uNuLI1RqPsNGC7zg==
[root@web2 ~]# echo 'mount -t ceph 192.168.2.41:6789:/ /usr/local/nginx/html/ \
-o name=admin,secret=AQA0KtlcRGz5JxAA/K0AD/uNuLI1RqPsNGC7zg==' >> /etc/rc.local 
[root@web2 ~]# chmod +x /etc/rc.local
[root@web3 ~]#  mount -t ceph 192.168.2.41:6789:/ /usr/local/nginx/html/ \
-o name=admin,secret=AQA0KtlcRGz5JxAA/K0AD/uNuLI1RqPsNGC7zg==
[root@web3 ~]# echo 'mount -t ceph 192.168.2.41:6789:/ /usr/local/nginx/html/ \
-o name=admin,secret=AQA0KtlcRGz5JxAA/K0AD/uNuLI1RqPsNGC7zg==' >> /etc/rc.local 
[root@web3 ~]# chmod +x /etc/rc.local

另一种解决方案,还可以通过fstab实现永久挂载。

提示:如果希望使用fstab实现永久挂载,客户端需要额外安装libcephfs1软件包。

shell 复制代码
[root@web1 ~]# yum -y install libcephfs1
[root@web1 ~]# vim /etc/fstab
... ...
192.168.2.41:6789:/ /usr/local/nginx/html/    ceph   defaults,_netdev,name=admin,secret=AQCVcu9cWXkgKhAAWSa7qCFnFVbNCTB2DwGIOA== 0 0

第三种挂载方案:对于高可用的问题,可以在mount时同时写入多个IP。

shell 复制代码
[root@web1 ~]# mount -t ceph  \
192.168.2.41:6789,192.168.2.42:6789,192.168.2.43:6789:/ /usr/local/nginx/html  \
-o name=admin,secret=密钥
永久修改:
[root@web1 ~]# vim /etc/fstab
192.168.2.41:6789,192.168.2.42:6789,192.168.2.43:6789:/ /usr/local/nginx/html/ \
ceph defaults,_netdev,name=admin,secret=密钥 0 0
  • 迁移NFS服务器中的数据到ceph
    在nfs备份网页文件 然后把备份文件拷贝给3台网站服务器中的任意一台 然后在有备份文件的网站主机解压备份文件
shell 复制代码
[root@nfs ~]# cd /web_share/html/
[root@nfs html]# tar -czpf /root/html.tar.gz ./*
[root@nfs html]# scp /root/html.tar.gz 192.168.2.11:/usr/local/nginx/html/
登陆web1将数据恢复到Ceph共享目录
[root@web1 html]# tar -xf html.tar.gz
[root@web1 html]# rm -rf html.tar.gz
  • 启动网站服务
shell 复制代码
[root@web1 ~]# /usr/local/nginx/sbin/nginx
[root@web2 ~]# /usr/local/nginx/sbin/nginx
[root@web3 ~]# /usr/local/nginx/sbin/nginx
相关推荐
KIDAKN2 小时前
RabbitMQ 初步认识
分布式·rabbitmq
pan3035074792 小时前
Kafka 和 RabbitMQ的选择
分布式·kafka·rabbitmq
hzulwy5 小时前
Kafka基础理论
分布式·kafka
明达智控技术6 小时前
MR30分布式IO在全自动中药煎药机中的应用
分布式·物联网·自动化
jakeswang7 小时前
细说分布式ID
分布式
失散138 小时前
分布式专题——1.2 Redis7核心数据结构
java·数据结构·redis·分布式·架构
王中阳Go9 小时前
头一次见问这么多kafka的问题
分布式·kafka
boonya10 小时前
Kafka核心原理与常见面试问题解析
分布式·面试·kafka
KIDAKN11 小时前
RabbitMQ 重试机制 和 TTL
分布式·rabbitmq
JAVA学习通12 小时前
【RabbitMQ】----初识 RabbitMQ
分布式·rabbitmq