目錄
一、環境準備
1. 兩臺VMware Centos7 虛擬機
Master節點
- 運行內存2G
- 處理器2核
- 能夠ping通互聯網
- 內網ip:192.168.100.10 ;外網ip:192.168.200.10(外網必須有)
Node1節點
- 運行內存1G
- 處理器1核
- 能夠ping通互聯網
- 內網ip:192.168.100.20 ;外網ip:192.168.200.20(外網必須有)
準確來說應該準備三臺虛擬機,但由於資源緊張,我這裏使用兩臺虛擬機做演視,操作步驟其實都相差不大。
Master負責 倉庫節點與server節點
Node1負責 Client節點
節點角色
主機名
功能 Server節點
(主要作爲系統的運行指令的發送節點)
master
Rancher-server、haproxy、
數據庫服務
Client節點
(主要爲服務運行的節點,可以使用一個或者多個均可)
node1
Server服務、代理 Registry節點
(主要作爲系統所有的運行的鏡像倉庫節點)
node2
倉庫
本次實驗環境採用server+client兩個節點部署,client節點可以根據需求自主擴展。 倉庫可以使用上節部署在 Master 節點的Harbor私有倉庫。
二、安裝Docker
Master節點 + Node1節點均要設置,不能遺漏
嘿嘿我就不做詳細描述了喲各位,不懂請點擊 Centos 7指定版本安裝Docker
https://blog.csdn.net/qq_40791253/article/details/84251998
三、安裝數據庫 Mariadb 服務
1. 安裝 Mariadb
//下載mariadb
# yum install -y mariadb mariadb-server
//啓動並設置開機自啓mariadb服務
# systemctl enable mariadb
Created symlink from /etc/systemd/system/multi-user.target.wants/mariadb.service to /usr/lib/systemd/system/mariadb.service.# systemctl restart mariadb
# systemctl start mariadb
//初始化設置
# mysql_secure_installation
Enter current password for root (enter for none):
OK, successfully used password, moving on...
Set root password? [Y/n] y
Remove anonymous users? [Y/n] y
Disallow root login remotely? [Y/n] n
Remove test database and access to it? [Y/n] y
Reload privilege tables now? [Y/n] y
2. 創建 cattle 數據庫並賦權
# mysql -uroot -p123456
MariaDB [(none)]> CREATE DATABASE IF NOT EXISTS cattle COLLATE = 'utf8_general_ci' CHARACTER SET = 'utf8';
Query OK, 1 row affected (0.00 sec)
MariaDB [(none)]> GRANT ALL ON cattle.* TO 'cattle'@'%' IDENTIFIED BY 'cattle';
Query OK, 0 rows affected (0.00 sec)
MariaDB [(none)]> GRANT ALL ON cattle.* TO 'cattle'@'localhost' IDENTIFIED BY 'cattle';
Query OK, 0 rows affected (0.00 sec)
MariaDB [(none)]> exit
Bye
四、啓動Rancher-server服務
1. 配置Master節點
# Launch on each node in your HA cluster
$ docker run -d --restart=unless-stopped -p 8080:8080 -p 9345:9345 rancher/server \
--db-host myhost.example.com --db-port 3306 --db-user username --db-pass password --db-name cattle \
--advertise-address <IP_of_the_Node>
參數解讀:
-p 端口映射 --db-host 主機IP
--db-port 3306 --db-user 數據庫用戶名
--db-pass 數據庫密碼 --db-name 數據庫名
--advertise-address 本機IP
Master節點
# docker run -d --restart=unless-stopped -p 8080:8080 -p 9345:9345 rancher/server --db-host 192.168.200.10 --db-port 3306 --db-user cattle --db-pass cattle --db-name cattle --advertise-address 192.168.200.10
f9809ad2bf590826733d51f22160a00405fc5afaf3cb72184aa4a932c639674e
推薦使用Chrome瀏覽器 輸入 IP地址:8080端口號訪問Rancher頁面
你可以將Rancher/server鏡像上傳至上節所搭建的Harbor平臺
此舉是爲了方便Node1節點下載Rancher/server鏡像 (此操作可選)
//登錄Harbor平臺
# docker login 192.168.200.10
Username: admin
Password: //默認密碼爲 Harbor12345,此時輸入密碼是看不見得
Login Succeeded
//爲rancher-server鏡像打上標籤
# docker tag rancher/server:latest 192.168.200.10/library/rancher/server:v1
//上傳鏡像至Harbor平臺
# docker push 192.168.200.10/library/rancher/server:v1
2. 配置Node1節點
2.1 修改 docker 基本配置
修改 daemon.json 文件 添加 Docker倉庫地址 "insecure-registries": [ "192.168.200.10"]
//修改 daemon.json 文件 添加 Docker倉庫地址 "insecure-registries": [ "192.168.200.10"]
# vi /etc/docker/daemon.json
# cat /etc/docker/daemon.json
{
"registry-mirrors": ["https://tc3xfheh.mirror.aliyuncs.com"],
"insecure-registries": [ "192.168.200.10"]
}
//生效配置,重啓docker
# systemctl daemon-reload
# systemctl restart docker
# systemctl enable docker
2.2 啓動Rancher
//登錄Harbor平臺
# docker login 192.168.200.10
Username: admin
Password:
Login Succeeded
//拉取rancher-server鏡像
# docker pull 192.168.200.10/library/rancher/server:v1
//啓動Rancher-server
# docker run -d --restart=unless-stopped -p 8080:8080 -p 9345:9345 192.168.200.10/library/rancher/server:v1 --db-host 192.168.200.10 --db-port 3306 --db-user cattle --db-pass cattle --db-name cattle --advertise-address 192.168.200.20
3c8df6860cc97b61dd2538eb6022a07c0c2da4eb3ce4a510f631e4284d66d10d
--db-host 192.168.200.10 --db-port 3306 --db-user cattle --db-pass cattle --db-name cattle
這裏填寫Master節點所安裝的數據庫信息
容器運行後在瀏覽器輸入 IP地址:8080端口 訪問Rancher服務
點擊ADMIN-High Availability,查看高可用主機
五、配置HA管理
Master、Node1節點
haproxy服務最好安裝在單獨節點,這裏資源緊張,所以我們就直接部署在Master節點上。
1. 安裝haproxy服務
# yum install -y haproxy
2. 重寫haproxy.cfg文件
//備份 haproxy.cfg 文件
# mv /etc/haproxy/haproxy.cfg /etc/haproxy/haproxy.cfg.bak
# vi /etc/haproxy/haproxy.cfg
global
maxconn 4096
ssl-server-verify none
defaults
mode http
balance roundrobin
option redispatch
option forwardfor
timeout connect 5s
timeout queue 5s
timeout client 36000s
timeout server 36000s
frontend http-in
mode tcp
#bind *:443 ssl crt /etc/haproxy/certificate.pem
bind *:8099 //監聽的端口
default_backend rancher_servers
acl is_websocket hdr(Upgrade) -i WebSocket
acl is_websocket hdr_beg(Host) -i ws
use_backend rancher_servers if is_websocket
backend rancher_servers
server websrv1 192.168.200.10:8080 weight 1 maxconn 1024 //Rancher server IP:Port
server websrv2 192.168.200.20:8080 weight 1 maxconn 1024 //Rancher server IP:Port
3. 啓動haporxy服務管理
# haproxy -f /etc/haproxy/haproxy.cfg &
可能會彈出 # [WARNING] 092/172303 (13502) : config : 'option forwardfor' ignored for frontend 'http-in' as it requires HTTP mode.
直接回車就OK了
4. 測試高可用性
首先停止Master節點的Rancher-server容器,然後訪問Node1:8099
# docker stop f9
# docker start f9 (啓動Master節點剛剛停止的Rancher服務)
六、添加Node1主機
Node1節點
# sudo docker run -e CATTLE_AGENT_IP="192.168.200.20" --rm --privileged -v /var/run/docker.sock:/var/run/docker.sock -v /var/lib/rancher:/var/lib/rancher rancher/agent:v1.2.11 http://192.168.200.10:8080/v1/scripts/A6FD0916521AEE275F42:1546214400000:cAAoLEt0Z2fPErLv8R5chM5aJ6U
運行結果:
INFO: Running Agent Registration Process, CATTLE_URL=http://192.168.200.10:8080/v1
INFO: Attempting to connect to: http://192.168.200.10:8080/v1
INFO: http://192.168.200.10:8080/v1 is accessible
INFO: Configured Host Registration URL info: CATTLE_URL=http://192.168.200.10:8080/v1 ENV_URL=http://192.168.200.10:8080/v1
INFO: Inspecting host capabilities
INFO: Boot2Docker: false
INFO: Host writable: true
INFO: Token: xxxxxxxx
INFO: Running registration
INFO: Printing Environment
INFO: ENV: CATTLE_ACCESS_KEY=AFAEF916AB6595AE0DC6
INFO: ENV: CATTLE_AGENT_IP=192.168.200.20
INFO: ENV: CATTLE_HOME=/var/lib/cattle
INFO: ENV: CATTLE_REGISTRATION_ACCESS_KEY=registrationToken
INFO: ENV: CATTLE_REGISTRATION_SECRET_KEY=xxxxxxx
INFO: ENV: CATTLE_SECRET_KEY=xxxxxxx
INFO: ENV: CATTLE_URL=http://192.168.200.10:8080/v1
INFO: ENV: DETECTED_CATTLE_AGENT_IP=192.168.200.20
INFO: ENV: RANCHER_AGENT_IMAGE=rancher/agent:v1.2.11
INFO: Launched Rancher Agent: d533059605b9ce06e09db5da8c0ed628b631b1a37778136afa2153541a43ea7f
點擊 關閉 後,過一會兒便能看見自己所添加的 主機
七、嘗試添加owncloud應用
這裏我們利用 docker-compose 搭建一個 owncloud 私有云盤
owncloud 的 docker-compose 代碼
version: '2'
services:
owncloud:
image: owncloud:9
restart: unless-stopped
links:
- mysql:mysql
volumes:
- "/data/db/owncloud:/var/www/html/data"
ports:
- 5679:80
mysql:
image: mysql:5.7
restart: unless-stopped
volumes:
- "/data/db/mysql:/var/lib/mysql"
ports:
- 13306:3306
environment:
MYSQL_ROOT_PASSWORD: "123456"
MYSQL_DATABASE: ownCloud
參數解釋
owncloud:
image: owncloud:9
restart: unless-stopped // 除非停止,不然一直重啓
links:
- mysql:mysql
volumes:
- "/data/db/owncloud:/var/www/html/data" // 宿主機目錄:容器目錄
ports:
- 5679:80 // 宿主機端口:80
mysql:
image: mysql:5.7
restart: unless-stopped // 除非停止,不然一直重啓
volumes:
- "/data/db/mysql:/var/lib/mysql" // 宿主機目錄:容器目錄
ports:
- 13306:3306 // 宿主機端口:3306
environment:
MYSQL_ROOT_PASSWORD: "123456" // 數據庫密碼
MYSQL_DATABASE: owncloud // 數據庫名稱
安裝成功後點擊端口進入頁面
輸入 用戶名與密碼(自己設置),進行安裝