docker-000
ติดตามข่าวสารเกี่ยวกับ Docker 1.12 มานิดหน่อย
มีความสามารถใหม่ ๆ เพียบเลย
นั่นคือเรื่องของ Docker Swarm Mode ทำให้เราจัดการได้ง่ายขึ้น

ดังนั้นเพื่อให้เข้าใจจึงลองนำมาใช้งานกับ Elasticsearch กันดีกว่า
เพราะว่า การลงมือทำน่าจะทำให้เราเข้าใจและแก้ไขปัญหาไปพร้อม ๆ กัน

โดย Software ที่ใช้งานคือ Docker for Mac 1.12 beta

docker-00

สิ่งที่ต้องการคือทำการ Scale Elasticsearch จาก 1 node ไปสัก 10 node กัน

ทุกอย่างทำบน Local หรือเครื่อง Mac นี่แหละนะ
ยังไม่ได้ไปใช้ Cloud อะไรเลย

มีเป้าหมายเพื่อให้ Elasticsearch มี 10 node ให้ใช้บริการ
โดยจัดการผ่าน Docker Swarm

ปล. ลอง 20 node แล้วเครื่องร้อนมาก ๆ !!
และยังไม่ทำ Cluster ของ Elasticsearch นะ

มาเริ่มกันเลย

1. ทำการสร้าง Swarm cluster ก่อน

ด้วยคำสั่ง

$docker swarm init

2. ทำการสร้าง Elasticsearch cluster ขึ้นมา 1 node ด้วย Docker service

ชื่อ service คือ elasticsearch
ด้วยคำสั่ง

$docker network create -d overlay mynet
$docker service create --name elasticsearch --network mynet  --publish 9200:9200 elasticsearch

ลองดูสถานะของ service เป็นอย่างไรด้วยคำสั่งดังนี้
รอไปจนกว่า REPLICAS จะเป็น 1/1 นะครับ ไม่นาน
โดยจะทำการ join node ให้เองนะ

$docker service ls
ID                           NAME           REPLICAS      IMAGE          COMMAND
97dpatv5dvky  elastic search           1/1         elasticsearch

หรือดูสถานะของแต่ละ task ใน service ชื่อว่า elasticsearch ได้

$docker service tasks elasticsearch
ID                         NAME             SERVICE        IMAGE          LAST STATE             DESIRED STATE  NODE
eb5sbk8gi3mg8e9hwt4i7jshm  elasticsearch.1  elasticsearch  elasticsearch  Running 5 minutes ago  Running        moby

เมื่อทุกอย่างพร้อมลองเข้าไปดูหน้าแรกของ Elasticsearch หน่อยสิ
จะ curl หรือเปิดหน้า web ก็ได้นะครับ

docker-01

3. ทำการ Scale Elasticsearch ไปเป็น 10 node กันเลยดีกว่า

ด้วยคำสั่งที่ง่ายมาก ๆ คือ

$docker service scale elasticsearch=10

จากนั้นก็รอสักครู่ ใจเย็น ๆ หน่อยนะครับ
รอให้ REPLICAS เป็น 10/10
เมื่อทุกอย่างพร้อมก็เป็นดังรูป
ได้ Elasticsearch จำนวน 10 node มาให้ใช้แล้ว

docker-02

โดยทุก ๆ task ที่เราเห็นนั้น มันคือ container นั่นเอง
ตรวจสอบโดยใช้คำสั่ง

$docker ps

แสดงดังรูป

docker-03

4. ยังไม่พอนะถ้ามี node ใดก็ตาม fail หรือถูกลบไป

Docker จะทำการ restart ขึ้นมาให้เอง
ดังนั้นลองมาลบ node ที่ 1 กัน ด้วยคำสั่ง

$docker rm -f d0d128565d3e

ลองไปดูค่า REPLICAS จะเหลือ 9/10
แต่เมื่อเวลาผ่านไปสักครู่จะกลับมาเป็น 10/10 ให้เองโดยอัตโนมัติ

ในระหว่างที่รอ ให้ทำการ access มายัง Elasticsearch จะพบว่าชื่อ node จะเปลี่ยนไป
นั่นแสดงว่า Docker Swarm มี Load balance ในตัวให้นั่นเอง
แสดงดังรูป

docker-04

ด้วยความสามารถพื้นฐานต่าง ๆ เหล่านี้

มันทำให้เราจัดการ service ต่าง ๆ บน Cluster ด้วย Swarm Mode อย่างง่ายดาย
ดูแล้วชีวิตน่าจะดีขึ้นมาก
ส่วนรายละเอียดไว้ไปอ่านเพิ่มเติมในเอกสารต่อไปสำหรับ Docker Swarm Mode

docker-05

ปล. ถ้าอยากลบ service ก็ใช้คำสั่ง

$docker service scale elasticsearch=0

หรือถ้าต้องการลบ service ทิ้งไปเลยใช้คำสั่ง

$docker service rm elasticsearch

Reference Websites
https://blog.docker.com/2016/06/docker-1-12-built-in-orchestration/
https://medium.com/@LachlanEvenson/15-minutes-with-docker-swarm-mode-e6c38b9dafa0#.v9tovb8g7