vault backup: 2026-11-07 16:33:44

This commit is contained in:
cheney
2026-11-07 16:33:55 +08:00
commit 7015312702
1208 changed files with 132432 additions and 0 deletions
@@ -0,0 +1,114 @@
## 摘要
        试验由安装了docker的A、B两台电脑完成,在两台电脑上创建docker桥接网络然后依托于网桥在每台电脑中运行一个docker容器,并在容器中安装 keepalived组件,最后采用断网的方式测试虚拟ip的漂移情况。
#### (1)软件环境:
- 宿主机系统:centos7
- docker 版本:19.03.0
- 镜像版本:centos:7
- keepalived版本:2.0.7
#### (2)逻辑环境:
| | | | |
|---|---|---|---|
|宿主机名|宿主机IP|容器IP|虚拟IP|
|宿主机1|192.168.234.130|192.168.234.132|192.168.234.140|
|宿主机2|192.168.234.131|192.168.23|
![](https://img-blog.csdnimg.cn/20210409174404771.png?x-oss-process=image/watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L2hhbXN0ZXIyMDQ=,size_16,color_FFFFFF,t_70)
##  安装步骤
        以宿主机1安装步骤为例讲解试验的安装过程
#### (1)创建网络和容器
**创建网络**
        docker有**bridge、host、container、none**四种网络模式,其中**bridge**是dokcer网络的默认设置。安装完docker,系统会自动添加一个供docker使用的网桥docker0,我们创建一个新的容器时,容器通过DHCP获取一个与docker0同网段的IP地址。并默认连接到docker0网桥,以此实现容器与宿主机的网络互通。但默认**bridge**网络的IP是172段的,而我们通常需要docker容器可以和局域网中其他机器相互访问,因此我们需要创建指定IP段的自定义**bridge。**
> docker network create -d macvlan --subnet=192.168.234.0/24 --gateway=192.168.234.2 -o parent=ens33 mynet
- -d 指定 Docker 网络 driver 为macvlan
- --subnet 指定 macvlan 网络所在的网络段
- --gateway 指定网关
- -o parent 指定用来分配 macvlan 网络的物理网卡
**创建容器**
> docker run  -itd --privileged=true --name test --net mynet --ip 192.168.234.132 centos:7  /bin/bash
-  **-i**  打开STDIN,用于控制台交互 
-  **-t** 分配tty设备,该可以支持终端登录,默认为false
- **-d** 让容器在后台运行
- **--privileged** 特权模式(默认关闭),用于容器启动后台服务
- **--net** 指定容器网络
- **--ip** 指定容器IP
**进入容器**
> docker exec -it test sh
#### (2)安装依赖包
> yum install -y curl gcc openssl openssl-devel libnl libnl-devel libnfnetlink-devel
#### (3)安装依赖命令
> # 安装make编译命令      
>
> **yum -y install cmake**
>
> # 安装ifconfig命令      
>
> **yum -y install net-tools**
>
> # 安装wget命令      
>
> **yum -y install wget**
#### **(4)安装keepalived**
```cobol
#下载安装包 wget http://www.keepalived.org/software/keepalived-2.0.7.tar.gz # 解压缩 tar xvf keepalived-2.0.7.tar.gz cd keepalived-2.0.7 # 设置编译位置 ./configure --prefix=/usr/local/keepalived  --sysconf=/etc # 编译安装 make && make install # 将keepalived主程序加入到环境变量 cp /usr/local/keepalived/sbin/keepalived /usr/sbin/keepalived # keepalived启动脚本(源码目录下),放到/etc/init.d/目录下就可以使用service命令便捷调用 cp /usr/local/keepalived-2.0.7/keepalived/etc/init.d/keepalived  /etc/init.d/keepalived
```
#### (5)**配置keepalived.conf**
        **vi /etc/keepalived/keepalived.conf**
```cobol
global_defs { notification_email { …… } … vrrp_strict # 此配置注释掉后外界才能ping通虚拟IP ……} vrrp_instance VI_1 { state MASTER #主从标识MASTER/BACKUP interface ens33 # 网卡 virtual_router_id 51 #路由ID主从必须一致 priority 101 # 权重用于选举 advert_int 1 # 1代表1秒检查一次 authentication { auth_type PASS auth_pass 1111 } virtual_ipaddress { 192.168.234.140 # 虚拟IP }}
```
#### **(6)配置启动命令**
> # 安装service命令
> **yum install initscripts -y**
> # 添加service 命令
> **chkconfig --add keepalived**
#### **(7)启动keepalived**
> # 启动服务
>  **service keepalived start|stop**
```cobol
sh-4.2# service keepalived startFailed to get D-Bus connection: Operation not permitted Starting keepalived: [ ok ]
```
> # 查看虚拟ip命令
> **ip addr show eth0**
```cobol
sh-4.2# ip addr show eth021: eth0@if2: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc noqueue state UP group default link/ether 02:42:c0:a8:ea:84 brd ff:ff:ff:ff:ff:ff link-netnsid 0 inet 192.168.234.132/24 brd 192.168.234.255 scope global eth0 valid_lft forever preferred_lft forever inet 192.168.234.140/32 scope global eth0 valid_lft forever preferred_lft forever
```
## 总结
 到此宿主机1的安装已完成,宿主机2的安装与其安装过程完全相同(注意keepalived.conf配置),在keepalived中我将宿主机1运行容器安装的keepalived设置为MASTER而宿主机2运行容器安装的keepalived设置为BACKUP,正常启动情况下虚拟IP 140 绑定在MASTER网卡上,当我将宿主机1关闭容器的情况下,BACKUP会自动获取虚拟IP 140 而当MASTER再次启动时虚拟IP会自动回到MASTER,以上就是我使用docker容器测试keepalived高可用的过程,希望对有需要的同学有用。
(补充:我尝试过使用host方式运行keepalived,但当关闭容器时宿主机虚拟IP不会在本机下载掉造成双虚拟IP在线也就是脑裂现象。)