Juju

Using Juju Charms 6~13 – Service(Scaling, Removing, Groups, HA, Bundle, Units, Actions, Storage)

Scaling Charms

Expanding service capacity

#增加一個service節點在本地host(不指定--to)
$ juju add-unit rabitmq-server
#增加一個service節點在machine 1
$ juju add-unit --to 1 rabitmq-server
#增加特定數量節點(n)、特定環境(e)
$ juju add-unit -n 10 mysql -e hpcloud

Scaling back

#刪除特定編號(ex: 2號)的節點
$ juju remove-unit mediawiki/2
#銷毀特定編號(ex: 1號)機器
$ juju destroy-machine 1

Removing services and environments

Remove a service

#刪除特定服務(ex: mysql),若有Relation存在則會斷開
$ juju remove-service mysql

Remove machines

#移除特定編號(ex: 1號)機器
$ juju remove-machine 1

Destroying the environment

#銷毀執行環境(移除所有節點及服務)
$ juju destroy-environment <environment>

Caveats

#解決units的error,讓其繼續運作,解除中斷的情況
$ juju resolved <unit>

Groups of Services

#替佈署的service命名
$ juju deploy mysql <name>
$ juju deploy mysql wikidb
#使用已命好的名稱建立連結(-n可以設定unit的數量,換句話說就是建立了一個群組)
$ juju deploy mysql masterdb
$ juju deploy mysql slavedb -n2
$ juju add-relation masterdb:master slavedb:slave
#可以針對命好名的群組作設定
$ juju set slavedb some_param=new_value

Service High Availability (HA)

Distribution groups

#若系統有啟用 Availability Zones 或 Availability Sets ,佈署數個Service時,就會存在HA的特性
$ juju deploy -n 10 <service>

Availability Zones

#機器佈署在不同的zone,可以達到HA(distribution groups)的效果
$ juju bootstrap --to zone=us-east-1b
$ juju add-machine zone=us-east-1c

Azure Availability Sets

Azure的預設HA機制,預設是開啟的,功能是要確保所有的unit不會在同一時間失效


Creating and using Bundles

Bundle 可以透過線上的store下載,也可以透過本地端yaml檔來安裝

Local deploy via command-line

#在本地端佈署Bundle yaml要使用juju quickstart,因此必須先行安裝
$ sudo add-apt-repository ppa:juju/stable
$ sudo apt-get install juju-quickstart
#務必使用bundle proof來確保可能會發生的錯誤
$ juju bundle proof ../path-your-bundle-name
#啟用本地bundle
$ juju quickstart bundle.yaml

Using Units

juju ssh

#遠端連線到某一個unit
$ juju ssh mysql/3

juju scp

#遠端複製檔案(從machine 2到本地)
$ juju scp 2:/var/file .
# 同時複製多個不同的遠端檔案
$ juju scp -v 2:/var/file 1:/var/file .
# 複製整個遠端的資料夾
$ juju scp -r 2:/var/log/ .
#複製本地的檔案到遠端
$ juju scp -e <environment> test.txt apache2/1:

juju run

#遠端下CLI指令(ex: uname)在所有machine上
$ juju run "uname -a" --all
# 遠端下CLI指令(ex: uptime)在特定machine上
$ juju run "uptime" --machine=2
# 遠端下CLI指令(ex: uptime)在所有運行此service的unit上
$ juju run "uptime" --service=mysql
# 遠端下CLI指令(ex: uptime)在特定unit上
$ juju run "uptime" --unit=nfs1/0

Juju Actions

#秀出service可執行的action
$ juju action defined mysql
backup: Take a backup of the database
...
# 命令service執行action
$ juju action do mysql/0 backup
Action queued with id: <ID>
#擷取某個action執行結果
$ juju action fetch <ID>
#查詢某個action目前的狀況
$ juju action status <ID>

Storage support

用juju storage指令,可以提出儲存媒體需求(storage requirements),進而使用制定的參數做規範。


文章參考資料

  1. Juju – Scaling Charms
  2. Juju – Removing services, units and environments
  3. Juju – Groups of Services
  4. Juju – Service High Availability (HA)
  5. Juju – Creating and using Bundles
  6. Juju – Using Units
  7. Juju – Juju Actions
  8. Juju – Storage support