HA for Rancher
Như các bạn đã tìm hiểu ở phần trước, định nghĩa về rancher, nó hỗ trợ docker swarm như thế nào, cơ bản về rancher. Hôm nay, mình sẽ trình bày về cách cấu hình HA cho rancher. 1. Yêu cầu Mô hình: Các single node trong HA rancher cần phải có đủ tối thiểu các yêu cầu như sau: Chạy trên ...
Như các bạn đã tìm hiểu ở phần trước, định nghĩa về rancher, nó hỗ trợ docker swarm như thế nào, cơ bản về rancher. Hôm nay, mình sẽ trình bày về cách cấu hình HA cho rancher.
1. Yêu cầu
Mô hình:
Các single node trong HA rancher cần phải có đủ tối thiểu các yêu cầu như sau:
- Chạy trên nhân Linux hỗ trợ được Docker 1.10.3 trở lên
- 1GB RAM
- MYSQL server phải có cấu hình max connection > 150
- Option 1: Chạy với Antelope với default COMPACT
- Option 2: Chạy MySQL 5.7 với Barracuda với ROW_FORMAT là dynamic
- Các port phải được mở:
- Global: TCP Ports 22 , 80, 443, 18080
- Access giữa các node:
- UDP port: 500, 4500
- TCP port: 2181, 2376, 2888, 3888, 6379
- MySQL
- External Load Balancer
2. Chuẩn bị
- Image rancher/server:latest là tag sẽ được build dưới đây
- Chuẩn bị một cơ sở dữ liệu MySQL với RAM tối thiểu 1. Theo mặc định, người dùng sẽ chỉ có thể truy cập cơ sở dữ liệu từ localhost. Bạn sẽ cần phải cấp quyền truy cập cho người dùng mới cho các mạng, nơi các nút Rancher của bạn.
- Cấu hình external load balancer sẽ cân bằng lưu lượng trên các cổng 80 và 443 trên các node chạy máy chủ Rancher. Tùy thuộc vào nhà cung cấp cloud, nó có thể là cần thiết để bắt đầu các node trước khi có thể cấu hình external load balancer. LB phải hỗ trợ WebSockets và forward cho header, để cho các chức năng của rancher hoạt động đúng.
- Chuẩn bị các node để dung trong HA. Sử dụng image rancher/server. Hiện tại có 3 cluster size:
- 1 node: ko HA
- 3 node: 1 host có thể fail
- 5 node: 2 host có thể fail
- Trên các node, chạy rancher server sẽ tự sinh ra các file scripts HA startup. Các file script này sẽ connect tới Mysql database bên ngoài. Nó sẽ dung để bootstrap quá trình deploy HA. Thậm chí, rancher server container được sử dụng trong bước này sẽ được thay thế bởi 1 HA config rancher server
3. Thực hiện
3.1 Dựng server Mysql external
Như bài viết lần trước, mình có cài 1 rancheros và chạy trực tiếp rancher server trên đó. Các DB sẽ lưu trữ tại ngay container chứa nó. Nếu container đó bị stop thì thật tai hại đúng không. Vì vậy nên mới cần phải tạo 1 server làm db riêng để tránh mất mát thông tin.
Ở đây mình sẽ dựng 1 server chạy mysql 5.5 làm external database. Tạo 1 DB cuongtv, có user và pass là cuongtv. IP server: 10.0.1.6
$ mysql -uroot -p Enter password: Welcome to the MySQL monitor. Commands end with ; or g. Your MySQL connection id is 42 Server version: 5.5.53-0ubuntu0.14.04.1 (Ubuntu) Copyright (c) 2000, 2016, Oracle and/or its affiliates. All rights reserved. Oracle is a registered trademark of Oracle Corporation and/or its affiliates. Other names may be trademarks of their respective owners. Type 'help;' or 'h' for help. Type 'c' to clear the current input statement. mysql> CREATE DATABASE IF NOT EXISTS cuongtv COLLATE = 'utf8_general_ci' CHARACTER SET = 'utf8'; Query OK, 1 row affected (0.00 sec) mysql> GRANT ALL ON cuongtv.* TO 'cuongtv'@'%' IDENTIFIED BY 'cuongtv'; Query OK, 0 rows affected (0.00 sec) mysql> GRANT ALL ON cuongtv.* TO 'cuongtv'@'localhost' IDENTIFIED BY 'cuongtv'; Query OK, 0 rows affected (0.00 sec)
3.2 Dựng external load balancer
Ở đây mình sẽ thay thế = cách sử dụng round robin trong reverse proxy. Bước đầu tiên: cài nginx trên server $yum install nginx
Sau đó tạo file cấu hình cuongtv.conf trong /etc/nginx/conf.d/ Chú ý: rancher server chạy qua websocket nên cần mở ra trong nginx nhé.
upstream cuongtv { server 10.0.1.129:8080; server 10.0.1.196:8080; server 10.0.1.191:8080; } server { listen 8081; server_name cuongtv; location / { proxy_http_version 1.1; proxy_set_header Upgrade $http_upgrade; proxy_set_header Connection "upgrade"; proxy_set_header X-Real-IP $remote_addr; proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; proxy_set_header Host $http_host; proxy_pass http://cuongtv; } }
3.3 Chuẩn bị các node chạy rancher server
ở đây mình chuẩn bị 3 máy chạy rancher: 10.0.1.129, 10.0.1.191 và 10.0.1.196. Để tiện cho việc setup, mình sẽ pull trước image rancher/server về ở cả 3 server.
$ docker pull rancher/server:latest latest: Pulling from rancher/server 96c6a1f3c3b0: Pull complete ed40d4bcb313: Pull complete b171f9dbc13b: Pull complete ccfc4df4fbba: Pull complete 9e4d5a1238bb: Pull complete f986ba0d224d: Pull complete 303d9649bb89: Pull complete 56825bfb5bb7: Pull complete 86a35696481e: Pull complete eb2848176ff4: Pull complete fabbcc718243: Pull complete 35489637da84: Pull complete 5c005e2df0e8: Pull complete 64ba16c4c9f4: Pull complete Digest: sha256:d5a798d1274bcf6813fc9866660dc8559b7e17cdce47608bce28d134bd4f2dc1 Status: Downloaded newer image for rancher/server:latest
Ta đã thiết lập external database tại server 10.0.1.6 nên sẽ chạy rancher/server với db trên server 10.0.1.6 với câu lệnh:
sudo docker run -d -p 8080:8080 -e CATTLE_DB_CATTLE_MYSQL_HOST=10.0.1.6 -e CATTLE_DB_CATTLE_MYSQL_PORT=3306 -e CATTLE_DB_CATTLE_MYSQL_NAME=cuongtv -e CATTLE_DB_CATTLE_USERNAME=cuongtv -e CATTLE_DB_CATTLE_PASSWORD=cuongtv -v /var/run/docker.sock:/var/run/docker.sock rancher/server
Sau khi thực hiện xong câu lệnh này trên cả 3 node, ta kiểm tra lại xem đã chạy rancher server hay chưa:
$ docker ps CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES b5aa8b66d25d rancher/server "/usr/bin/s6-svscan /" 39 minutes ago Up 39 minutes 3306/tcp, 0.0.0.0:8080->8080/tcp pensive_brahmagupta
ok vậy là đang chạy. Sau khi chạy thì các bạn cần phải chờ 10-15’ để rancher đọc db và load giao diện nên tới bước này cần sự kiên nhẫn từ phía người cài đặt