rexray docker ceph-rbd 实现无状态数据库docker容器实战
1.前提条件1.1有了一个可用的ceph 集群1.2 有2台虚拟机可以用于验证测试,虚拟机能上网,DNS设置正常。关于如何创建ceph集群,请参考文章:测试虚拟机:IP 10.20.4.21110.20.4.212内核版本:4.14.89centos7 1811一. 在测试虚拟机上安装ceph 相关组件yum install -y ceph-common ...
1.前提条件
1.1有了一个可用的ceph 集群 其中mon1节点的IP 10.20.4.1
1.2 有2台虚拟机可以用于验证测试,虚拟机能上网,DNS设置正常。
关于如何创建ceph集群,请参考文章:https://blog.csdn.net/happyfreeangel/article/details/85171736
测试虚拟机:
IP 10.20.4.211 10.20.4.212 内核版本:4.14.89 centos7 1811
一. 在测试虚拟机上安装ceph 相关组件
yum install -y ceph-common
copy ceph集群离的mon节点下/etc/ceph/文件夹中的配置文件到10.20.4.211 和10.20.4.212 /etc/ceph
scp -r root@10.20.4.1:/etc/ceph /etc/
[root@superset1 ceph]# ip addr | grep ‘10.20’
inet 10.20.4.211/16 brd 10.20.255.255 scope global noprefixroute ens160
[root@superset1 ceph]# pwd
/etc/ceph
[root@superset1 ceph]# tree
.
├── ceph.client.admin.keyring
├── ceph.conf
├── rbdmap
└── rbdmap.rpmnew
0 directories, 4 files
[root@superset1 ceph]#
2. 测试ceph客户端 10.20.4.211 10.20.4.212 是否正常.
[root@superset1 ceph]# ceph -s
cluster:
id: 82d6ce06-6e92-4c2a-ab26-11ff63b7e67d
health: HEALTH_OK
services:
mon: 3 daemons, quorum mon1,mon2,mon3
mgr: mon1(active), standbys: mon2, mon3
osd: 3 osds: 3 up, 3 in
data:
pools: 3 pools, 248 pgs
objects: 192 objects, 434MiB
usage: 4.14GiB used, 1.46TiB / 1.46TiB avail
pgs: 248 active+clean
io:
client: 339B/s wr, 0op/s rd, 0op/s wr
[root@superset1 ceph]#
[root@superset2 postgresql]# ceph -s
cluster:
id: 82d6ce06-6e92-4c2a-ab26-11ff63b7e67d
health: HEALTH_OK
services:
mon: 3 daemons, quorum mon1,mon2,mon3
mgr: mon1(active), standbys: mon2, mon3
osd: 3 osds: 3 up, 3 in
data:
pools: 3 pools, 248 pgs
objects: 192 objects, 434MiB
usage: 4.14GiB used, 1.46TiB / 1.46TiB avail
pgs: 248 active+clean
io:
client: 5.96KiB/s wr, 0op/s rd, 1op/s wr
[root@superset2 postgresql]#
二. 安装rexray 组件
1.下载安装rexray ( 本虚拟机必须能上网,dns 解析正常)
curl -sSL https://rexray.io/install | sh -s
2. 配置rexray 服务
可以打开
https://rexrayconfig.cfapps.io/ 进行配置,
点击
点击download 保存起来
config.yml 内容如下:
libstorage:
service: rbd
integration:
volume:
operations:
create:
default:
size: 10
rbd:
scp config.yml root@10.20.4.211:/etc/rexray/
scp cofig.yml root@10.20.4.212:/etc/rexray/
3.启动rexray服务
systemctl enable rexray;systemctl start rexray;systemctl status rexray;
看到如上图状态,表示rexray 运转正常.
4.(可选,可以不用安装) 安装docker plugin install rexray/rbd
docker plugin install rexray/rbd
[root@localhost postgresql]#
Plugin “rexray/rbd” is requesting the following privileges:
- network: [host]
- mount: [/dev]
- mount: [/etc/ceph]
- allow-all-devices: [true]
- capabilities: [CAP_SYS_ADMIN]
Do you grant the above permissions? [y/N] y
latest: Pulling from rexray/rbd
783623f39b58: Download complete
Digest: sha256:a9a75b74c15ea17d199efe97cc73086f06b8545d455acf0a1671995ee607af43
Status: Downloaded newer image for rexray/rbd:latest
Installed plugin rexray/rbd
三. 部署postgresql
-
创建 /var/server/postgresql 目录
mkdir -p /var/server/postgresql -
把下面的脚本保存起来,为文件内容:start-postgres-docker.sh
然后设置chmod +x start-postgres-docker.sh ,执行这个脚本. -
[root@superset1 postgresql]# more start-postgres-docker.sh
#!/usr/bin/env bash
file_path= ( c d " (cd " (cd"(dirname “$0”)"; pwd)
cd ${file_path}
docker stop postgresql
docker rm postgresql
firewall-cmd --add-port=5432/tcp --permanent --zone=public
firewall-cmd --reload
docker run --name postgresql
–restart always
–volume-driver=rexray
-v test_data:/var/lib/postgresql/data
-p 5432:5432
-e POSTGRES_USER=centos
-e POSTGRES_PASSWORD=secret
-d postgres:9.6.2
postgres -c max_connections=500
四。验证是否实现了存储独立。
使用SQL客户端工具dataGrip 或其他工具也可以,或直接命令行进入docker 容器操作也可以.
在10.20.4.211 上执行
create table people(name varchar(100) primary key , age integer default 0);
insert into people(name,age) values(“Happy”,40);
select * from people;
在10.20.4.212 上执行
select * from people;
可能遇到的错误及解决办法:
- docker driver plugin rexray not found.
这是因为rexray 在本虚拟机里没有正常启动。
可能是你忘记配置了rexray /etc/rexray/config.yml
2.docker: Error response from daemon: VolumeDriver.Mount: docker-legacy: Mount: test_data: failed: resource not found.
See ‘docker run --help’.
这个是因为一个存储挂的目录默认同时只能在一台虚拟机上挂载。
只要把其他挂载test_data的虚拟机的 docker停掉 docker stop postgres 即可。
更多推荐
所有评论(0)