环境描述:
1.Mesos1.7.0+Marathon1.6.3 3个mesos-agent,3个mesos-master,5个zookeeper,
一个calico SDN网络 172.30.0.0/16.(bgp+mesos-agent1,mesos-agent2,mesos-agent3)
2. 操作系统 centos7 1810 +docker-ce 18.0.9
3. Ceph集群一个, 所有mesos-agent 上安装了ceph客户端
4.所有 mesos-agent 上都安装了rexray 服务
5.测试验证 把有状态服务(下面用postgresql数据库演示有状态的数据存储)变成无状态服务带来的开发和运维的方便性:
完整的json配置如下:
{
“id”: “/demo/postgres5”,
“cmd”: null,
“cpus”: 1,
“mem”: 2048,
“disk”: 10240,
“instances”: 1,
“acceptedResourceRoles”: [
“*”
],
“container”: {
“type”: “DOCKER”,
“docker”: {
“forcePullImage”: false,
“image”: “postgres:11.1-alpine”,
“parameters”: [
{
“key”: “expose”,
“value”: “5432”
},
{
“key”: “volume-driver”,
“value”: “rexray”
},
{
“key”: “volume”,
“value”: “demo_postgresql_data:/var/lib/postgresql/data”
}
],
“privileged”: true
},
“volumes”: [],
“portMappings”: [
{
“containerPort”: 0,
“labels”: {},
“protocol”: “tcp”,
“servicePort”: 10002
}
]
},
“env”: {
“POSTGRES_USER”: “postgresql”,
“POSTGRES_PASSWORD”: “kaixin.com”
},
“healthChecks”: [
{
“gracePeriodSeconds”: 300,
“intervalSeconds”: 60,
“maxConsecutiveFailures”: 3,
“port”: 5432,
“protocol”: “MESOS_TCP”,
“ipProtocol”: “IPv4”,
“timeoutSeconds”: 20,
“delaySeconds”: 15
}
],
“labels”: {
“org.projectcalico.label.role”: “database”
},
“networks”: [
{
“name”: “database”,
“mode”: “container”
}
],
“portDefinitions”: [],
“args”: [
“postgres”,
“-c”,
“max_connections=200”
],
“upgradeStrategy”: {
“maximumOverCapacity”: 0,
“minimumHealthCapacity”: 0.5
}
}
现在使用工具往数据库随便写入一条记录.
create table test(name varchar(50) primary key);
insert into test(name) values(‘myname’);
然后关闭或删除 postgresql 或重新启动mesos-agent3
然后,刷新marathon,
数据库实例漂移到了mesos-agent1上了。
我们看看数据到底还在吗?
使用DataGrid连接 172.30.139.3 postgresql 数据库,
select * from test;
测试成功.
之前插入的数据还在.
至此,有状态的服务变成无状态的服务已经成功实施.