1、主机的安装规划
1.1、硬件规划
CPU | Memory | Network | Disk1 | Disk2 | Disk3 |
---|---|---|---|---|---|
4个 | 8G | 1个 | 40G(安装系统) | 50G(docker 使用) | 50G(docker 使用) |
1.2、系统规划:
镜像文件:CentOS Linux release 7.2.1511 (Infrastructure Server + 中文语言支持)
内核版本:3.10.0-327.el7.x86_64
注:
应该使用最小化安装也是可以的,但这次未能测试
1.3、网络规划:
具体配置请参照实际情况进行,主机需具有访问公网的权限
2、主机初始化:
主机名
]# hostnamectl --static set-hostname LS-daocloud01-219-xx
]# hostnamectl status
DNS
]# vim /etc/sysconfig/network-scripts/ifcfg-ens160
DNS1=223.5.5.5
DNS2=223.6.6.6
关闭 NetworkManager
]# systemctl disable NetworkManager
关闭防火墙:
]# systemctl disable firewalld.service
关闭 SELinux
]# vim /etc/selinux/config
SELINUX=disabled
修改 YUM 源
]# mv /etc/yum.repos.d/CentOS-Base.repo /etc/yum.repos.d/CentOS-Base.repo.backup
]# wget -O /etc/yum.repos.d/CentOS-Base.repo http://mirrors.aliyun.com/repo/Centos-7.repo
]# yum makecache
安装启动 NTP 服务
]# yum -y install ntp
]# systemctl enable ntpd
配置主机名自解析
]# vim /etc/hosts
192.168.135.xx test-135-xx
重启主机
shutdown -r now
gulu-web\WEB-INF\classes\cn\migu\qywechat\controller
/usr/local/tomcat/webapps/gulu-web/WEB-INF/classes/cn/migu/qywechat/controller/
3、安装 docker
为 /var/lib/docker 创建单独的分区
docker 安装后,会在该分区内存放 docker 使用的镜像,容器,网络等相关组件。因此为随着使用逐渐增大,为以后维护方便,建议设置单独的分区
]# mkdir /var/lib/docker
]# vcreate /dev/sdc
]# vgcreate docker-vg /dev/sdc
]# lvcreate -l 100%FREE -n lv_docker docker-vg
]# mkfs -t xfs /dev/mapper/docker--vg-lv_docker
]# vim /etc/fstab
/dev/docker-vg/lv_docker /var/lib/docker xfs defaults 0 0
]# mount -a
]# df -h
...
/dev/mapper/docker--vg-lv_docker 20G 33M 20G 1% /var/lib/docker
安装 docker
]# yum install docker
更改 docker 的存储模式
docker 在基于 rhel 的分支默认使用的 devicemapper,并且默认配置成 loop-lvm 模式运行。这种模式使用文件来作为虚拟池(thin pool)构建镜像和容器的层。但这种模式并不适用于生产,因此要更改为 direct-lvm 模式。direct-lvm 通过 dm-thin 内核模块,直接使用raw分区,在高负载和高密度下具有性能优势。
下面演示通过 docker-storage-setup 工具设置 direct-lvm 模式:
此例中,使用空白磁盘 /dev/sdb 进行实验
修改配置文件 :
]# vim /etc/sysconfig/docker-storage-setup
DEVS=/dev/vdb
VG=docker
SETUP_LVM_THIN_POOL=yes
执行
]# docker-storage-setup
执行完成后,注释掉 DEVS 那一行
]# vim /etc/sysconfig/docker-storage-setup
#DEVS=/dev/sdb
启动 docker 并查看相关信息
]# systemctl start docker
]# docker info
Containers: 0
Running: 0
Paused: 0
Stopped: 0
Images: 0
Server Version: 1.10.3
Storage Driver: devicemapper
Pool Name: docker-docker--pool
Pool Blocksize: 524.3 kB
Base Device Size: 10.74 GB
Backing Filesystem: xfs
Data file:
Metadata file:
Data Space Used: 20.45 MB
Data Space Total: 25.74 GB
Data Space Available: 25.72 GB
Metadata Space Used: 57.34 kB
Metadata Space Total: 67.11 MB
Metadata Space Available: 67.05 MB
... 以下省略 ...
确认没有问题后,将 docker 设置为开机启动
]# systemctl enable docker
Created symlink from /etc/systemd/system/multi-user.target.wants/docker.service to /usr/lib/systemd/system/docker.service.
注1:
该操作也可手工进行,但比较烦琐,有兴趣的可以参照官网内容
https://docs.docker.com/engine/userguide/storagedriver/device-mapper-driver/
注2:
direct-lvm 模式下 lv 自动扩展的配置文件位于:
/etc/lvm/profile/docker--docker-pool-extend.profile
常用配置选项如下:
# 定义创建 DATA thin pool 的大小,默认为 VG 的 40%
DATA_SIZE=40%FREE
# 定义 DATA pool 最小值,默认为 2G,如果 VG 小于 2G 则创建失败
MIN_DATA_SIZE=2G
# 定义 thin pool 的 CHUNK 大小,默认 512k
CHUNK_SIZE=512K
# 定义是否自动扩容 thin pool 大小,默认为自动扩容
AUTO_EXTEND_POOL=yes
# 定义自动扩容的百分比,默认为当前 pool 使用 60% 时自动扩容,100 表示 disable,最小为 50 lvmthin — LVM thin provisioning
POOL_AUTOEXTEND_THRESHOLD=60
# 定义每次扩容的大小,默认为 20%,即当前 pool 大小为 100G,那么自动扩容 20G,扩容后大小为 120G, 100 表示 disable
POOL_AUTOEXTEND_PERCENT=20
注3:
如果以前启动过 docker 在配置完 direct-lvm 后,还需要先清理源数据,执行如下命令:
rm -rf /var/lib/docker/*
附A:direct-lvm 的扩容:
扩展 VG: docker
]# vgextend docker /dev/sdd
扩展逻辑卷:docker-pool
]# lvextend -l +100%FREE -n docker/docker-pool
重新加载 devicemapper 的 thin pool
- 获取 pool 名,输出内容中,冒号前面的就是 pool 名
]# dmsetup status | grep thin-pool
docker-docker--pool: 0 167493632 thin-pool 1 21/16384 39/163568 - rw no_discard_passdown queue_if_no_space -
- 导出设备的 mapper 表
]# dmsetup table docker-docker--pool
0 167493632 thin-pool 253:3 253:4 1024 0 1 skip_block_zeroing
- 计算当前 thin pool 使用的真实扇区总数。
我们可以使用 blockdev 来获取数据 lv 的真实大小,然后再计算出实际扇区数量,即 85756739584/512 = 167493632
]# blockdev --getsize64 /dev/docker/docker-pool
85756739584
比对该值与上条命令(dmsetup table)输出内容的第二列的值是否一致,如果不一致,使用以下方法进行更新
- 重新加载当前 thin pool 的扇区数量
]# dmsetup suspend docker-docker--pool \
&& sudo dmsetup reload docker-docker--pool --table '0 167493632 thin-pool 253:3 253:4 1024 0 1 skip_block_zeroing' \
&& sudo dmsetup resume docker-docker--pool