keepalived高可用 | 部署Ceph分布式存储
2023-12-25 18:18:56
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上面
[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)
装包 --> 修改配置文件 --> 起服务
[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)
[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服务器
[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服务
[root@proxy ~]# systemctl restart named
测试:
# 在客户端
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放到光驱里
- 挂载光驱 配置开机挂载光驱
mkdir /ceph
vim /etc/fstab
/dev/sr0 /ceph iso9660 defaults 0 0
mount -a
- 配置本地yum源 安装ceph服务软件包
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同时管理集群的管理主机 还是集群中的存储服务器。
[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
- 三台机器都做主机名映射(不要删除源文件)
[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服务器作服务器
- 修改NTP服务的配置文件并重启
[root@node1 ~]# vim /etc/chrony.conf
allow 192.168.2.0/24 #修改26行
local stratum 10 #修改29行(去注释即可)
[root@node1 ~]# systemctl restart chronyd
- node2和node3作客户端
[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
[root@node1 ~]# yum -y install ceph-deploy
[root@node1 ~]# mkdir ceph-cluster
[root@node1 ~]# cd ceph-cluster
- 给所有ceph节点安装ceph相关软件包
[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目录下操作
#生成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操作)硬盘名称根据实际情况填写,不能照抄。
ceph-deploy disk zap 主机名:磁盘名 主机名:磁盘名
[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集群,磁盘名称根据实际情况填写
#每个磁盘都会被自动分成两个分区;一个固定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 清除当前配置
删除所有安装的软件
[root@node1 ceph-cluster]# ceph-deploy purge node1
[root@node1 ceph-cluster]# ceph-deploy purge node2
[root@node1 ceph-cluster]# ceph-deploy purge node3
删除所有配置文件和数据
[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)
[root@node1 ceph-cluster]# ceph-deploy mds create node3
- 创建储存池(文件系统由innode(存储数据信息)和block(存储数据)组成)
划分空间存储 innode 信息和 block信息
[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
- 创建文件系统
[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共享
暂停服务防止有人实时读写文件
[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主机查看用户名和密码
[root@node1 ~]# cat /etc/ceph/ceph.client.admin.keyring
[client.admin]
key = AQA0KtlcRGz5JxAA/K0AD/uNuLI1RqPsNGC7zg==
/etc/rc.local是开机启动脚本,任何命令放在该文件中都是开机自启。
ceph-common是ceph的客户端软件。
[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软件包。
[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。
[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台网站服务器中的任意一台 然后在有备份文件的网站主机解压备份文件
[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
- 启动网站服务
[root@web1 ~]# /usr/local/nginx/sbin/nginx
[root@web2 ~]# /usr/local/nginx/sbin/nginx
[root@web3 ~]# /usr/local/nginx/sbin/nginx
文章来源:https://blog.csdn.net/shengweiit/article/details/135193074
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。 如若内容造成侵权/违法违规/事实不符,请联系我的编程经验分享网邮箱:veading@qq.com进行投诉反馈,一经查实,立即删除!
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。 如若内容造成侵权/违法违规/事实不符,请联系我的编程经验分享网邮箱:veading@qq.com进行投诉反馈,一经查实,立即删除!