ติดตามข่าวสารเกี่ยวกับ Docker 1.12 มานิดหน่อย
มีความสามารถใหม่ ๆ เพียบเลย
นั่นคือเรื่องของ Docker Swarm Mode ทำให้เราจัดการได้ง่ายขึ้น
ดังนั้นเพื่อให้เข้าใจจึงลองนำมาใช้งานกับ Elasticsearch กันดีกว่า
เพราะว่า การลงมือทำน่าจะทำให้เราเข้าใจและแก้ไขปัญหาไปพร้อม ๆ กัน
โดย Software ที่ใช้งานคือ Docker for Mac 1.12 beta
สิ่งที่ต้องการคือทำการ 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 ก็ได้นะครับ
3. ทำการ Scale Elasticsearch ไปเป็น 10 node กันเลยดีกว่า
ด้วยคำสั่งที่ง่ายมาก ๆ คือ
$docker service scale elasticsearch=10
จากนั้นก็รอสักครู่ ใจเย็น ๆ หน่อยนะครับ
รอให้ REPLICAS เป็น 10/10
เมื่อทุกอย่างพร้อมก็เป็นดังรูป
ได้ Elasticsearch จำนวน 10 node มาให้ใช้แล้ว
โดยทุก ๆ task ที่เราเห็นนั้น มันคือ container นั่นเอง
ตรวจสอบโดยใช้คำสั่ง
$docker ps
แสดงดังรูป
4. ยังไม่พอนะถ้ามี node ใดก็ตาม fail หรือถูกลบไป
Docker จะทำการ restart ขึ้นมาให้เอง
ดังนั้นลองมาลบ node ที่ 1 กัน ด้วยคำสั่ง
$docker rm -f d0d128565d3e
ลองไปดูค่า REPLICAS จะเหลือ 9/10
แต่เมื่อเวลาผ่านไปสักครู่จะกลับมาเป็น 10/10 ให้เองโดยอัตโนมัติ
ในระหว่างที่รอ ให้ทำการ access มายัง Elasticsearch จะพบว่าชื่อ node จะเปลี่ยนไป
นั่นแสดงว่า Docker Swarm มี Load balance ในตัวให้นั่นเอง
แสดงดังรูป
ด้วยความสามารถพื้นฐานต่าง ๆ เหล่านี้
มันทำให้เราจัดการ service ต่าง ๆ บน Cluster ด้วย Swarm Mode อย่างง่ายดาย
ดูแล้วชีวิตน่าจะดีขึ้นมาก
ส่วนรายละเอียดไว้ไปอ่านเพิ่มเติมในเอกสารต่อไปสำหรับ Docker Swarm Mode
ปล. ถ้าอยากลบ 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