在docker的ubuntu中安装keepalived

准备:Ubuntu20.04系统,已安装docker
目的:在docker容器中安装ubuntu,基于keepalived模拟主从热备
其他:需要centos安装请参考
🔗在docker的centos中安装keepalived

一、安装过程

1、环境(确认下,不需要一致)

1.1 主机系统

命令

lsb_release -a

打印返回

No LSB modules are available.
Distributor ID: Ubuntu
Description:    Ubuntu 20.04.1 LTS
Release:        20.04
Codename:       focal

1.2 docker环境

命令

docker version

打印返回

Client: Docker Engine - Community
 Version:           24.0.7
 API version:       1.43
 Go version:        go1.20.10
 Git commit:        afdd53b
 Built:             Thu Oct 26 09:08:01 2023
 OS/Arch:           linux/amd64
 Context:           default

Server: Docker Engine - Community
 Engine:
  Version:          24.0.7
  API version:      1.43 (minimum version 1.12)
  Go version:       go1.20.10
  Git commit:       311b9ff
  Built:            Thu Oct 26 09:08:01 2023
  OS/Arch:          linux/amd64
  Experimental:     false
 containerd:
  Version:          1.6.25
  GitCommit:        d8f198a4ed8892c764191ef7b3b06d8a2eeb5c7f
 runc:
  Version:          1.1.10
  GitCommit:        v1.1.10-0-g18a0cb0
 docker-init:
  Version:          0.19.0
  GitCommit:        de40ad0

2、安装ubuntu(有坑!当前测通了16.04版本)

2.1 拉取镜像

docker pull ubuntu:16.04

2.2 查看镜像

命令

docker images

打印返回

REPOSITORY                           TAG       IMAGE ID       CREATED        SIZE
ubuntu                               16.04     b6f507652425   2 years ago    135MB

3、启动ubuntu镜像

docker run -it -p 17080:80 --privileged -v /home/ca/linux:/mnt/software --name ubuntu-1 ubuntu:16.04 bash
Tip:建议添加 -v /home/ca/linux:/mnt/software,可与宿主机共享文件!

4、安装依赖工具

# 先更新下包,不然有些东西下载不下来(apt和apt-get这里用到的都是一样的作用)
apt update
# ping命令工具包
apt -y install iputils-ping
# ip 命令工具包
apt -y install iproute2
# ifconfig命令工具包(可选,iproute2就够用,看习惯用ip addr还是ifconfig命令)
apt -y install net-tools
# vim编辑器
apt -y install vim 
# ssh服务器(可选)
apt -y install openssh-server
Tip:如需要ssh连接到该ubuntu,参考  使用远程工具连接Linux系统

5、安装keepalived

5.1 方法一 使用apt直接安装(推荐!!!简单基本没坑)

5.1.1 下载安装
apt -y install keepalived
5.1.1 查看安装位置
whereis keepalived

打印返回

keepalived: /usr/sbin/keepalived /etc/keepalived /usr/share/man/man8/keepalived.8.gz

5.2 方法二 使用安装包安装

#下载安装包
wget http://www.keepalived.org/software/keepalived-2.2.7.tar.gz
# 也可以直接cp一个下载好的安装包,从目录挂载下
cp /home/ca/linux/keepalived-2.2.7.tar.gz /home

# 解压缩
tar xvf keepalived-2.2.7.tar.gz
 
cd keepalived-2.2.7
 
# 设置编译位置
./configure --prefix=/usr/local/keepalived  --sysconf=/etc
 
# 下载make
apt install make
 
# 编译安装
make && make install

5.3 配置keepalived.conf

5.3.1 先查看网卡信息

命令

ip addr

ifconfig

打印返回(看到网卡eth0,虚ip需要配置在这上)

1: lo: <LOOPBACK,UP,LOWER_UP> mtu 65536 qdisc noqueue state UNKNOWN group default qlen 1000
    link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00
    inet 127.0.0.1/8 scope host lo
       valid_lft forever preferred_lft forever
12: eth0@if13: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc noqueue state UP group default 
    link/ether 02:42:ac:11:00:03 brd ff:ff:ff:ff:ff:ff link-netnsid 0
    inet 172.17.0.6/16 brd 172.17.255.255 scope global eth0
       valid_lft forever preferred_lft forever
5.3.2 配置keepalived.conf
vim /etc/keepalived/keepalived.conf 

内容如下

! Configuration File for keepalived

global_defs {
   #路由id:当前安装keepalived节点主机的标识符,全局唯一
   router_id keep_131
}

vrrp_instance VI_1 {
    # 表示的状态,当前的131服务器为nginx的主节点,MASTER/BACKUP
    state MASTER
    # 当前实例绑定的网卡(根据自己实际网卡配置)
    interface eth0
    # 保证主备节点一致
    virtual_router_id 51
    # 优先级/权重,谁的优先级高,在MASTER挂掉以后,就能成为MASTER
    priority 100
    # 主备之间同步检查的时间间隔,默认1s
    advert_int 1
    # 认证授权的密码,防止非法节点的进入
    authentication {
        auth_type PASS
        auth_pass 1111
    }
    # 虚ip地址(vip),实现ip漂移的地址(根据自己需求配置)
    virtual_ipaddress {
        192.168.10.100
    }
}

6、启动keepalived服务

service keepalived start

# 一般容器中的系统没有权限使用systemctl(不推荐或不能用)
systemctl start keepalived.service

# 推荐使用该命令
keepalived -l -f /etc/keepalived/keepalived.conf
Tip:不管当前在什么路径下,写完整路径(绝对路径)即: /etc/keepalived/keepalived.conf,关联配置文件!否则找不到。

打印返回(成功了!)

Starting Keepalived v1.2.24 (02/14,2019)
Keepalived[3214]: Starting Keepalived v1.2.24 (02/14,2019)
Opening file '/etc/keepalived/keepalived.conf'.
Keepalived[3214]: Opening file '/etc/keepalived/keepalived.conf'.
Keepalived[3215]: Starting Healthcheck child process, pid=3216
Keepalived_healthcheckers[3216]: Initializing ipvs
Keepalived[3215]: Starting VRRP child process, pid=3217
Keepalived_vrrp[3217]: Registering Kernel netlink reflector
Keepalived_vrrp[3217]: Registering Kernel netlink command channel
Keepalived_vrrp[3217]: Registering gratuitous ARP shared channel
Keepalived_vrrp[3217]: Unable to load ipset library
Keepalived_vrrp[3217]: Unable to initialise ipsets
Keepalived_vrrp[3217]: Opening file '/etc/keepalived/keepalived.conf'.
Keepalived_vrrp[3217]: Using LinkWatch kernel netlink reflector...
Keepalived_vrrp[3217]: VRRP_Instance(VI_1) Entering MASTER STATE

7、查看keepalived服务

7.1 查看运行状态

systemctl管理查看

systemctl status keepalived.service

或直接查看进程

ps -ef|grep keepalived

打印返回如下:

root        1319       1  0 Nov28 ?        00:00:00 keepalived -l -f /etc/keepalived/keepalived.conf
root        1320    1319  0 Nov28 ?        00:00:18 keepalived -l -f /etc/keepalived/keepalived.conf
root        1806       1  0 05:50 pts/0    00:00:00 grep --color=auto keepalived

7.2 查看ip挂载情况

命令

ip addr

打印返回,可以看到192.168.10.100的IP已经成功挂载

1: lo: <LOOPBACK,UP,LOWER_UP> mtu 65536 qdisc noqueue state UNKNOWN group default qlen 1000
    link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00
    inet 127.0.0.1/8 scope host lo
       valid_lft forever preferred_lft forever
10: eth0@if11: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc noqueue state UP group default 
    link/ether 02:42:ac:11:00:03 brd ff:ff:ff:ff:ff:ff link-netnsid 0
    inet 172.17.0.6/16 brd 172.17.255.255 scope global eth0
       valid_lft forever preferred_lft forever
    inet 192.168.10.100/32 scope global eth0
       valid_lft forever preferred_lft forever

8、关闭keepalived服务

service keepalived stop

或杀死keepalived相关进程

pkill keepalived

二、一些问题?

1、keepalived安装问题

输入命令apt -y install keepalived后打印如下,下载不了

Reading package lists... Done
Building dependency tree
Reading state information... Done
E: Unable to locate package keepalived
原因: docker拉取的镜像启动后,先更新软件库缓存

解决办法

apt update

再执行安装命令 apt -y install keepalived

2、keepalived启动问题

问题重现

Can't open PID file /var/run/keepalived.pid (yet?) after start: No such file or directory
Failed to start LVS and VRRP High Availability Monitor.

解决方法

chmod 644 /etc/keepalived/keepalived.conf

3、关于systemctl命令执行问题

问题重现

Failed to connect to bus: No such file or directory
原因: 提示是连不上bus,也就是说无法挂载 dbus,但即使挂载上dbus依旧会报错(已测试)
容器里面是没有 systemd 进程的,所以不能正常开启 systemctl ,docker只是提供了进程隔离。
解决方法:
可以安装一个systemctl来替换,参考知乎网友给出的具体的解释和方法 🔗如何在 Docker 容器中使用 systemctl

4、关于ifconfig不显示keepalived虚拟ip挂载问题

4.1 执行ip addr命令打印返回

root@32a9780c118c:/etc/keepalived# ip addr
1: lo: <LOOPBACK,UP,LOWER_UP> mtu 65536 qdisc noqueue state UNKNOWN group default qlen 1000
    link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00
    inet 127.0.0.1/8 scope host lo
       valid_lft forever preferred_lft forever
10: eth0@if11: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc noqueue state UP group default 
    link/ether 02:42:ac:11:00:03 brd ff:ff:ff:ff:ff:ff link-netnsid 0
    inet 172.17.0.6/16 brd 172.17.255.255 scope global eth0
       valid_lft forever preferred_lft forever
    inet 192.168.10.100/32 scope global eth0
       valid_lft forever preferred_lft forever

4.2 执行ifconfig命令打印返回

root@32a9780c118c:/etc/keepalived# ifconfig
eth0      Link encap:Ethernet  HWaddr 02:42:ac:11:00:03  
          inet addr:172.17.0.6  Bcast:172.17.255.255  Mask:255.255.0.0
          UP BROADCAST RUNNING MULTICAST  MTU:1500  Metric:1
          RX packets:30455 errors:0 dropped:0 overruns:0 frame:0
          TX packets:42295 errors:0 dropped:0 overruns:0 carrier:0
          collisions:0 txqueuelen:0 
          RX bytes:78111330 (78.1 MB)  TX bytes:2339216 (2.3 MB)

lo        Link encap:Local Loopback  
          inet addr:127.0.0.1  Mask:255.0.0.0
          UP LOOPBACK RUNNING  MTU:65536  Metric:1
          RX packets:4 errors:0 dropped:0 overruns:0 frame:0
          TX packets:4 errors:0 dropped:0 overruns:0 carrier:0
          collisions:0 txqueuelen:1000 
          RX bytes:336 (336.0 B)  TX bytes:336 (336.0 B)
原因:
未知,但iproute2是更新的版本,且真实显示了挂载的vip,实验可用, 以ip addr 显示为准
待求知???
  • 17
    点赞
  • 16
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值