Portworx安装和使用
Portworx介绍
Portworx是一家美国存储初创公司,它研发了业界第一个容器定义存储系统Portworx。Portworx提供了全新的、统一的Scale out存储栈,其核心架构是共享的、松耦合的、分布式、基于元数据的块存储层(卷、块设备、全局共享卷和文件访问等)。portworx本身作为容器服务的方式部署,在每个集群节点呈现为PX的容器。
容器的数据卷简单可以分为:本地存储、共享存储;使用本地数据卷存储,当该卷所在的机器出现故障,严重可导致数据永远丢失。
Portworx (px-dev)在各个节点上保存多份备份,可以很好解决上面的问题,并可以把各个服务器上的磁盘充分利用起来组成一个存储池。
它使用Gossip Protocol的通信方式类似流言传播,每个节点状态的变化和更新,立即通过一传十,十传百的方式在集群内广播,而不是由某几个节点逐一传递,所以通信效率非常高效。
一、环境准备
准备3个虚拟机,并额外为每个虚拟机添加一个虚拟8G的磁盘(sdb)
a.master private:10.2.22.11
b.node1 private:10.2.22.12
c.node2 private:10.2.22.13
二、准备etcd,在master机器上
//需要服务发现工具 etcd 或 consul 下载
$ wget https://github.com/coreos/etcd/releases/download/v3.0.14/etcd-v3.0.14-linux-amd64.tar.gz
//解压
$ tar -xzvf etcd-v3.0.14-linux-amd64.tar.gz
//启动服务
$ cd etcd-v3.0.14-linux-amd64
$ ./etcd --name infra0 --initial-advertise-peer-urls http://10.2.22.11:2380 --listen-peer-urls http://10.2.22.11:2380 --listen-client-urls http://10.2.22.11:2379,http://127.0.0.1:2379 --advertise-client-urls http://10.2.22.11:2379 --initial-cluster-token etcd-cluster-1 --initial-cluster infra0=http://10.2.22.11:2380 --initial-cluster-state new
三、运行portworx容器
//检查存储设备: sdb磁盘
$ lsblk
//创建配置文件目录:
$ mkdir -p /etc/pwx
//下载样例文件:
$ wget https://raw.githubusercontent.com/portworx/px-dev/master/conf/config.json
$ cp -p config.json /etc/pwx
//修改config.json
$ vim /etc/pwx/config.json
{
"clusterid": "5ac2ed6f-7e4e-4e1d-8e8c-3a6df1fb61a5",
"kvdb": [
"etcd:http://10.2.22.11:2379"
],
"storage": {
"devices": [
"/dev/sdb"
]
}
}
//clusterid 集群的id,每台都一样
// /dev/sdb 上面lsblk 列出的磁盘
//运行portworx容器:(注意需要开放一些端口,具体看日志)
$ docker pull portworx/px-dev
$ docker run --restart=always --name px -d --net=host \
--privileged=true \
-v /run/docker/plugins:/run/docker/plugins \
-v /var/lib/osd:/var/lib/osd:shared \
-v /dev:/dev \
-v /etc/pwx:/etc/pwx \
-v /opt/pwx/bin:/export_bin:shared \
-v /var/run/docker.sock:/var/run/docker.sock \
-v /var/cores:/var/cores \
-v /usr/src:/usr/src \
--ipc=host \
portworx/px-dev
$ docker logs px -f 查看日志
//查看状态
$ /opt/pwx/bin/pxctl status
//Status: PX is operational 说明成功
另为两台以同样方式启动
//docker-compose运行容器
$ git clone https://github.com/portworx/px-dev.git
$ cd px-dev/quick-start
$ docker-compose run portworx -daemon -k etcd:http://10.2.22.11:2379 -c 5ac2ed6f-7e4e-4e1d-8e8c-3a6df1fb61a5 -s /dev/sdb
四、数据共享
//创建卷, 以pxd驱动类型
$ docker volume create -d pxd --name=redis_vol --opt fs=ext4 --opt size=1G
//查看卷
$ /opt/pwx/bin/pxctl volume list
//在node1上启动redis 开启数据持久化
$ docker run --name some-redis -v redis_vol:/data --volume-driver=pxd -d redis redis-server --appendonly yes
//启动redis客户端
$ docker run -it --link some-redis:redis --rm redis redis-cli -h redis -p 6379
//写入数据
$ redis:6379> set foo abcd
$ redis:6379> get foo
"abcd"
//停止redis
$ docker kill some-redis
//在node2上启动redis
$ docker run --name other-redis -v redis_vol:/data --volume-driver=pxd -d redis redis-server --appendonly yes
//启动redis客户端 并进入
$ docker run -it --link other-redis:redis --rm redis redis-cli -h redis -p 6379
//查看数据,还存在
$redis:6379> get foo
"abcd"
//创建一个卷的快照
//查看卷
$ /opt/pwx/bin/pxctl volume list
//根据redis_vol卷的ID 创建一个快照
$ /opt/pwx/bin/pxctl snap create 1013827046371938942
//生成了一个卷的快照ID
Volume successfully snapped: 889729860013179865
//备份好快照后,改一下数据
$ docker run -it --link other-redis:redis --rm redis redis-cli -h redis -p 6379
$ redis:6379> get foo
"abcd"
$ redis:6379> set foo foobar
OK
$ redis:6379> get foo
"foobar"
//启动redis server 指定备份的卷ID
$ docker run --name snap-redis -v 889729860013179865:/data --volume-driver=pxd -d redis redis-server --appendonly yes
$ docker run -it --link snap-redis:redis --rm redis redis-cli -h redis -p 6379
$ redis:6379> get foo
"abcd"
得到的数据,是当时备份的值
五、增加删除替换磁盘
//为了向节点添加更多的存储,该节点必须处于维护模式
//显示系统中的驱动器列表
$ /opt/pwx/bin/pxctl service drive show
//进入维护模式
$ /opt/pwx/bin/pxctl service maintenance --enter
输入Y
//或
$ /opt/pwx/bin/pxctl service maintenance --enter -y
//增加磁盘
$ /opt/pwx/bin/pxctl service drive add /dev/sdc
//将sde替换成sdc
$ /opt/pwx/bin/pxctl service drive replace --source /dev/sde --target /dev/sdc --operation start
//退出维护模式
$ /opt/pwx/bin/pxctl service maintenance --exit
六、常用命令
//显示集群中的卷
$ /opt/pwx/bin/pxctl volume list
//查看本地卷
$ docker volume ls
//删除卷
/opt/pwx/bin/pxctl volume delete 卷名或ID
//修改属性
$ /opt/pwx/bin/pxctl volume update redis_vol --shared=on
$ /opt/pwx/bin/pxctl volume update redis_vol --scale=10
//查看卷信息
$/opt/pwx/bin/pxctl volume inspect redis_vol
//当有个节点挂掉了,但是它占用了集群中的卷,在另一台正常机器上 用此命令分离卷
$ /opt/pwx/bin/pxctl host attach 845707146523643463(ID) 连接
$ /opt/pwx/bin/pxctl host detach 845707146523643463 分离
//显示状态
$ /opt/pwx/bin/pxctl status
//显示集群节点
$ /opt/pwx/bin/pxctl cluster list
//删除脱机节点
$ /opt/pwx/bin/pxctl cluster delete a56a4821-6f17-474d-b2c0-3e2b01cd0bc3
网友评论