dever há 7 anos atrás
pai
commit
9517657c8d
4 ficheiros alterados com 23 adições e 3 exclusões
  1. 2 2
      README.md
  2. 3 0
      src/docker/conf/web.conf
  3. 4 0
      src/shell/swarm/scale
  4. 14 1
      src/tool/cluster.py

+ 2 - 2
README.md

@@ -215,13 +215,13 @@ dm shell
 1、增加default功能,直接使用dever run web时,只运行里面default定义的进程
 2、增加lvs、consul等组件
 3、增加集群(简易版本):
-ds init:开启集群,之后将得到集群主机ip
+ds init:开启集群,之后将得到集群主机ip,如果内网ip较多,请直接输入ds init ip
 ds join ip:加入到集群中
 之后的操作和dm一样
 ds run web:启动web服务组集群
 ds run web-nginx:启动nginx集群
 ds rm web-nginx:删除nginx集群
-ds update web-nginx:更新nginx集群(此命令比较复杂,最好参考docker service update)
+ds num web-nginx 10:将nginx集群的数量增加到10
 
 之后将把consul和daemon加入进去,并实现可视化
 </pre>

+ 3 - 0
src/docker/conf/web.conf

@@ -32,6 +32,9 @@ volumes = {container}web:/www,{container}conf/web/php7:/etc/php7
 alias = php,composer,pecl,apk,/install.sh->phpInstall
 
 [nginx]
+#num = 3
+# num和cluster都可以设置有多少个nginx进程,不同的是,cluster仅对ds有效
+cluster = 3
 port = 80:80,443:443
 volumes = {container}web:/www,{container}conf/web/nginx:/etc/nginx,{container}logs/nginx/{name}/logs:/var/log/nginx
 alias = nginx

+ 4 - 0
src/shell/swarm/scale

@@ -0,0 +1,4 @@
+#!/usr/bin/env sh
+set -e
+
+docker service scale $1

+ 14 - 1
src/tool/cluster.py

@@ -22,6 +22,8 @@ class Cluster(Docker):
 	def handle(self, method, config, item, action='run', slave=False):
 		if slave == False:
 			self.rely(config, action)
+		if 'cluster' in config:
+			config['num'] = config['cluster']
 		if 'num' not in config:
 			config['num'] = 1
 		num = int(config['num'])
@@ -59,6 +61,13 @@ class Cluster_Action(Docker_Action):
 	def node():
 		Swarm.node()
 
+	@staticmethod
+	def num():
+		name = Args.name
+		num = Args.param
+		print 'setting ' + name + ', please wait...'
+		Swarm.scale(name, num)
+
 	@staticmethod
 	def restart(**param):
 		print 'reloading ' + param['name'] + ', please wait...'
@@ -337,4 +346,8 @@ class Swarm(object):
 		return result
 	@staticmethod
 	def join(token, ip):
-		Core.shell('swarm.join ' + token + ' ' + ip, bg=True)
+		Core.shell('swarm.join ' + token + ' ' + ip, bg=True)
+
+	@staticmethod
+	def scale(name, num):
+		Core.shell('swarm.scale ' + name + '=' + num, bg=True)