目录
一、环境准备
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 // 数据库名称
安装成功后点击端口进入页面
输入 用户名与密码(自己设置),进行安装