在DOCKER 环境下使用keepalived+Nginx实现高可用
- 1、环境准备
- 2、制作keepalived+Nginx 的image
- 2.1 编制并启动基础版本的centos
- 2.2 搭建keepalived,Nginx 环境
- 2.3验证环境
- 2.4 保存docker image
- 3、编排容器以及编制配置文件
- 3.1 编制docker-compose
- 3.2 编制keepalived 配置文件
- 3.2.1 主机配置文件
- 3.2.2 备机配置文件
- 3.2.3 主备切换通知脚本
- 3.3 编制nginx 主页面
- 3.3.1 主机页面
- 3.3.1 备机页面
- 4、 验证
- 4.1 启动容器并查看状态
- 4.2 双机主备切换验证
- 4.2.1 关闭主机
- 4.2.2 关闭keepalived 服务
- 4.2.3 关闭nginx服务
1、环境准备
1
2安装docker-desktop
2、制作keepalived+Nginx 的image
2.1 编制并启动基础版本的centos
docker-compose.yml 文件如下:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35version: '3.9' services: keepalivebase: image: 'centos:8' container_name: 'keepalivebase' privileged: true entrypoint: "/sbin/init" stdin_open: true tty: true networks: keepalive-ha: ipv4_address: '172.29.0.11' portainer: image: portainer/portainer:latest container_name: portainer restart: always environment: TZ: Asia/Shanghai LANG: en_US.UTF-8 ports: - "9000:9000" volumes: - /var/run/docker.sock:/var/run/docker.sock networks: keepalive-ha: ipv4_address: '172.29.0.50' networks: keepalive-ha: name: keepalive-ha driver: bridge # driver: overlay ipam: config: - subnet: '172.29.0.0/16'
2.2 搭建keepalived,Nginx 环境
进入docker-compose.yml目录,执行
1
2docker-compose up
安装工具
1
2
3
4yum install -y net-tools yum install -y psmisc yum install rsyslog
安装keepalived
1
2
3yum list keepalived yum install -y keepalived
安装nginx
1
2yum install -y nginx
修改 keepalived 启动参数
1
2
3
4vi /etc/sysconfig/keepalived 把启动参数修改为 KEEPALIVED_OPTIONS="-D -d -S 0"
修改日志输出配置
1
2
3
4vi /etc/rsyslog.conf 增加内容 local0.* /var/log/keepalived.log
2.3验证环境
重启动日志服务
1
2systemctl restart rsyslog
启动 nginx服务,并且启动正常
1
2systemctl start nginx
启动 keepalived服务,并且启动正常
1
2systemctl start keepalived
设置服务自启动
1
2
3systemctl enable nginx systemctl enable keepalived
2.4 保存docker image
查询当前运行的docker
1
2docker ps
保存docker image
1
2docker commit -a "zwwang" -m "centos7+keepalived+nginx" 424a09930292 centos8_keepalived_nginx:v1
3、编排容器以及编制配置文件
3.1 编制docker-compose
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76version: '3.9' services: keepalive01: image: 'centos8_keepalived_nginx:v1' container_name: 'keepalive01' privileged: true entrypoint: "/sbin/init" environment: - TZ=Asia/Shanghai volumes: - ./keepalived_master.conf:/etc/keepalived/keepalived.conf - ./backup.sh:/etc/keepalived/backup.sh - ./fault.sh:/etc/keepalived/fault.sh - ./master.sh:/etc/keepalived/master.sh - ./index-master.html:/usr/share/nginx/html/index.html command: /bin/bash -c "chmod +x /etc/keepalived/*.sh && chmod -x /etc/keepalived/keepalived.conf" ports: - "80:80" networks: keepalive-ha: ipv4_address: '172.29.0.11' keepalive02: image: 'centos8_keepalived_nginx:v1' container_name: 'keepalive02' privileged: true environment: - TZ=Asia/Shanghai entrypoint: "/sbin/init" volumes: - ./keepalived_buckup.conf:/etc/keepalived/keepalived.conf - ./backup.sh:/etc/keepalived/backup.sh - ./fault.sh:/etc/keepalived/fault.sh - ./master.sh:/etc/keepalived/master.sh - ./index-slave.html:/usr/share/nginx/html/index.html command: /bin/bash -c "chmod +x /etc/keepalived/*.sh && chmod -x /etc/keepalived/keepalived.conf" ports: - "81:80" networks: keepalive-ha: ipv4_address: '172.29.0.12' cul_test: image: 'centos:8' container_name: 'cul_test' privileged: true environment: - TZ=Asia/Shanghai entrypoint: "/sbin/init" stdin_open: true tty: true networks: keepalive-ha: ipv4_address: '172.29.0.13' portainer: image: portainer/portainer:latest container_name: portainer restart: always environment: TZ: Asia/Shanghai LANG: en_US.UTF-8 ports: - "9000:9000" volumes: - /var/run/docker.sock:/var/run/docker.sock networks: keepalive-ha: ipv4_address: '172.29.0.50' networks: keepalive-ha: name: keepalive-ha driver: bridge # driver: overlay ipam: config: - subnet: '172.29.0.0/16'
3.2 编制keepalived 配置文件
3.2.1 主机配置文件
文件名为keepalived_master.conf
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71! Configuration File for keepalived global_defs { notification_email { acassen@firewall.loc } notification_email_from 647956023@qq.com smtp_server 182.254.38.18 smtp_connect_timeout 30 router_id study01 # VRRP的ipv4和ipv6的广播地址,配置了VIP的网卡向这个地址广播来宣告自己的配置信息,下面是默认值 # # vrrp_mcast_group4 224.0.0.18 # # vrrp_mcast_group6 ff02::12 } vrrp_script check_httpd { script "/usr/bin/killall -0 nginx" interval 2 } vrrp_instance VI_1 { # 定义初始状态,可以是MASTER或者BACKUP state MASTER # 工作接口,通告选举使用哪个接口进行 interface eth0 # ID还是虚拟MAC最后一段地址的信息,取值范围0-255 virtual_router_id 51 # 使用哪个虚拟MAC地址 # use_vmac XX:XX:XX:XX:XX # 监控本机上的哪个网卡,网卡一旦故障则需要把VIP转移出去 track_interface { eth0 # ens33 } # 如果你上面定义了MASTER,这里的优先级就需要定义的比其他的高 priority 100 # 采用单播方式,指定本机和备机ip # unicast_src_ip 10.244.97.4 # local-IP # unicast_peer { # 10.244.97.5 # peer-IP # } # 通告频率,单位为秒 advert_int 1 # advert_int 0.5 # 通信认证机制,这里是明文认证还有一种是加密认证 authentication { auth_type PASS auth_pass 1111 } # 三个指令,如果主机状态变成Master|Backup|Fault之后会去执行的通知脚本,脚本要自己写 notify_master "/etc/keepalived/master.sh" notify_backup "/etc/keepalived/backup.sh" notify_fault "/etc/keepalived/fault.sh" track_script { check_httpd } virtual_ipaddress { # 192.168.31.9 # IP/掩码 dev 配置在哪个网卡 # 192.168.200.16/24 dev eth1 # IP/掩码 dev 配置在哪个网卡的哪个别名上 172.29.0.20/24 dev eth0 label eth0:0 } # 虚拟路由,在需要的情况下可以设置lvs主机 数据包在哪个网卡进来从哪个网卡出去 # virtual_routes { # 192.168.110.0/24 dev eth2 # } # 工作模式,nopreempt表示工作在非抢占模式,默认是抢占模式 preempt # nopreempt|preempt # 如果是抢占默认则可以设置等多久再抢占,默认5分钟 preempt delay 3 }
3.2.2 备机配置文件
文件名为keepalived_buckup.conf
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39! Configuration File for keepalived global_defs { notification_email { acassen@firewall.loc } notification_email_from 647956023@qq.com smtp_server 182.254.38.18 smtp_connect_timeout 30 router_id study02 } vrrp_script check_httpd { # script "/usr/bin/killall -0 httpd" script "/usr/bin/killall -0 nginx" interval 2 } vrrp_instance VI_1 { state BACKUP interface eth0 virtual_router_id 51 priority 95 advert_int 1 # advert_int 0.5 authentication { auth_type PASS auth_pass 1111 } notify_master "/etc/keepalived/master.sh" notify_backup "/etc/keepalived/backup.sh" notify_fault "/etc/keepalived/fault.sh" track_script { check_httpd } virtual_ipaddress { # 192.168.31.9 172.29.0.20/24 dev eth0 label eth0:0 } preempt delay 3 }
3.2.3 主备切换通知脚本
master.sh
1
2
3
4
5
6#!/bin/bash LOGFILE=/var/log/keepalived-state.log :>$LOGFILE echo "[MASTER]" >> $LOGFILE date >> $LOGFILE
backup.sh
1
2
3
4
5
6#!/bin/bash LOGFILE=/var/log/keepalived-state.log :>$LOGFILE echo "[BACKUP]" >> $LOGFILE date >> $LOGFILE
fault.sh
1
2
3
4
5#!/bin/bash LOGFILE=/var/log/keepalived-state.log echo "[Fault]" >> $LOGFILE date >> $LOGFILE
3.3 编制nginx 主页面
3.3.1 主机页面
index-master.html
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30<!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8"> <meta name="viewport" content="width=device-width, initial-scale=1.0"> <meta http-equiv="X-UA-Compatible" content="ie=edge"> <title>master</title> <style> #box{ margin: 0px auto; font-family: 'Times New Roman', Times, serif; font-size: 30px; font-style: initial; color: aliceblue; } body{ background-color: black } </style> </head> <body> <div id="box"> master </div> </body> </html>
3.3.1 备机页面
index-slave.html
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32<!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8"> <meta name="viewport" content="width=device-width, initial-scale=1.0"> <meta http-equiv="X-UA-Compatible" content="ie=edge"> <title>slave</title> <style> #box{ margin: 0px auto; font-family: 'Times New Roman', Times, serif; font-size: 30px; font-style: initial; color: aliceblue; } body{ background-color: black } </style> </head> <body> <div id="box"> slave </div> </body> </html>
4、 验证
4.1 启动容器并查看状态
进入docker-compose 对应的目录执行
1
2docker-compose up
进入主机shell,使用ifconfig,结果如下:
进入备机shell,结果如下:
出现如上结果说明,系统主备已经启动
也可以分别查看 keepalived-state.log 文件中的主备状态
1
2more /var/log/keepalived-state.log
如果出现问题可用,如下指令查看日志
1
2tail -f /var/log/message
4.2 双机主备切换验证
4.2.1 关闭主机
关闭主机后,备机自动出现服务ip
当主机再次启动后,服务ip切换至主机
4.2.2 关闭keepalived 服务
关闭keepalived 服务后,服务ip自动切换至备机
当主机keepalived服务再次启动后,服务ip自动切换至主机
4.2.3 关闭nginx服务
停止nginx服务后,服务ip自动切换至备机
当nginx服务重新启动后,服务ip自动切换至主机
最后
以上就是文静大炮最近收集整理的关于在DOCKER 环境下使用keepalived+Nginx实现高可用1、环境准备2、制作keepalived+Nginx 的image3、编排容器以及编制配置文件4、 验证的全部内容,更多相关在DOCKER内容请搜索靠谱客的其他文章。
发表评论 取消回复