docker-ubuntu中基于keepalived+niginx模拟主从热备完整过程

2023-12-11 17:01

本文主要是介绍docker-ubuntu中基于keepalived+niginx模拟主从热备完整过程,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

一、环境准备

🔗在Ubuntu中安装docker

二、主机

1、环境搭建

1.1 镜像拉取

docker pull ubuntu:16.04

1.2 创建网桥

docker network create -d=bridge --subnet=192.168.126.0/24 br1

1.3 启动容器

docker run -it --name ubuntu-1 --privileged -v /home/vac/linux:/mnt/software -p 8801:80 --net=br1 ubuntu:16.04 bash

1.4 下载工具包

先更新以下

apt update

ifconfig、route命令使用的net-tools工具包

apt -y install net-tools

vim编辑器

apt -y install vim

ping命令工具包

apt -y install iputils-ping

1.5 下载nginx

apt -y install nginx

1.6 下载keepalived

apt -y install keepalived

2、配置

2.1 配置keepalived

编辑keepalived.conf文件

vim /etc/keepalived/keepalived.conf

输入以下内容

! Configuration File for keepalivedglobal_defs {#路由id:当前安装keepalived节点主机的标识符,全局唯一router_id keep_130
}vrrp_instance VI_1 {# 表示的状态,当前的130服务器为nginx的主节点,MASTER/BACKUPstate MASTER# 当前实例绑定的网卡interface eth0# 保证主备节点一致virtual_router_id 51# 优先级/权重,谁的优先级高,在MASTER挂掉以后,就能成为MASTERpriority 100# 主备之间同步检查的时间间隔,默认1sadvert_int 1# 认证授权的密码,防止非法节点的进入authentication {auth_type PASSauth_pass 1111}virtual_ipaddress {192.168.200.16}
}

2.2 配置nginx

2.2.1 查看nginx.conf

输入命令

vim /etc/nginx/nginx.conf

内容如下

user www-data;
worker_processes auto;
pid /run/nginx.pid;events {worker_connections 768;# multi_accept on;
}http {### Basic Settings##sendfile on;tcp_nopush on;tcp_nodelay on;keepalive_timeout 65;types_hash_max_size 2048;# server_tokens off;# server_names_hash_bucket_size 64;# server_name_in_redirect off;include /etc/nginx/mime.types;default_type application/octet-stream;### SSL Settings##ssl_protocols TLSv1 TLSv1.1 TLSv1.2; # Dropping SSLv3, ref: POODLEssl_prefer_server_ciphers on;### Logging Settings##access_log /var/log/nginx/access.log;error_log /var/log/nginx/error.log;### Gzip Settings##gzip on;gzip_disable "msie6";# gzip_vary on;# gzip_proxied any;# gzip_comp_level 6;# gzip_buffers 16 8k;# gzip_http_version 1.1;# gzip_types text/plain text/css application/json application/javascript text/xml application/xml application/xml+rss text/javascript;### Virtual Host Configs##include /etc/nginx/conf.d/*.conf;include /etc/nginx/sites-enabled/*;
}#mail {
#       # See sample authentication script at:
#       # http://wiki.nginx.org/ImapAuthenticateWithApachePhpScript
# 
#       # auth_http localhost/auth.php;
#       # pop3_capabilities "TOP" "USER";
#       # imap_capabilities "IMAP4rev1" "UIDPLUS";
# 
#       server {
#               listen     localhost:110;
#               protocol   pop3;
#               proxy      on;
#       }
# 
#       server {
#               listen     localhost:143;
#               protocol   imap;
#               proxy      on;
#       }
#}
2.2.2 修改index.html

输入命令

vim /usr/share/nginx/html/index.html

输入以下内容

<!DOCTYPE html>
<html>
<head>
<title>Welcome to nginx!</title>
<style>body {width: 35em;margin: 0 auto;font-family: Tahoma, Verdana, Arial, sans-serif;}
</style>
</head>
<body>
<h1>Welcome to nginx!(192.168.126.2)</h1>
<p>If you see this page, the nginx web server is successfully installed and
working. Further configuration is required.</p><p>For online documentation and support please refer to
<a href="http://nginx.org/">nginx.org</a>.<br/>
Commercial support is available at
<a href="http://nginx.com/">nginx.com</a>.</p><p><em>Thank you for using nginx.</em></p>
</body>
</html>

3、启动

3.1 启动nginx

输入命令

nginx

3.2 启动keepalived

keepalived -l -f /etc/keepalived/keepalived.conf

4、状态查看

4.1 查看nginx状态

输入命令

service nginx status

打印返回

 * nginx is running

4.2 查看keepalived进程

输入命令

ps -ef|grep keepalived

打印返回

root    31     1  1 07:50 ?        00:00:00 keepalived -l -f /etc/keepalived/keepalived.conf
root    32    31  3 07:50 ?        00:00:00 keepalived -l -f /etc/keepalived/keepalived.conf
root    33    31  4 07:50 ?        00:00:00 keepalived -l -f /etc/keepalived/keepalived.conf
root    35    11  0 07:51 pts/1    00:00:00 grep --color=auto keepalived

4.3 查看vip挂载情况

输入命令

ip a

打印返回

1: lo: <LOOPBACK,UP,LOWER_UP> mtu 65536 qdisc noqueue state UNKNOWN group default qlen 1000link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00inet 127.0.0.1/8 scope host lovalid_lft forever preferred_lft forever
24: eth0@if25: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc noqueue state UP group default link/ether 02:42:c0:a8:7e:02 brd ff:ff:ff:ff:ff:ff link-netnsid 0inet 192.168.126.2/24 brd 192.168.126.255 scope global eth0valid_lft forever preferred_lft foreverinet 192.168.200.16/32 scope global eth0valid_lft forever preferred_lft forever

4、停止

4.1 停止nginx

nginx -s stop

4.2 停止keepalived

pkill keepalived

三、从机

1、方法一

1.1 重复主机环境步骤

1.2 将步骤 1.2 创建网桥的IP地址改成其他段

docker network create -d=bridge --subnet=192.168.127.0/24 br1

1.3 将步骤2.1 配置keepalived内容改为如下

! Configuration File for keepalivedglobal_defs {#路由id:当前安装keepalived节点主机的标识符,全局唯一router_id keep_131
}vrrp_instance VI_1 {# 表示的状态,当前的130服务器为nginx的主节点,MASTER/BACKUPstate BACKUP# 当前实例绑定的网卡interface eth0# 保证主备节点一致virtual_router_id 51# 优先级/权重,谁的优先级高,在MASTER挂掉以后,就能成为MASTERpriority 80# 主备之间同步检查的时间间隔,默认1sadvert_int 1# 认证授权的密码,防止非法节点的进入authentication {auth_type PASSauth_pass 1111}virtual_ipaddress {192.168.200.16}
}

2、方法二(推荐!省事)

2.1 将主机虚拟机关机完整克隆一份作为从机

2.2 修改keepalived的配置

输入命令

vim /etc/keepalived/keepalived.conf

内容如下

! Configuration File for keepalivedglobal_defs {#路由id:当前安装keepalived节点主机的标识符,全局唯一router_id keep_131
}vrrp_instance VI_1 {# 表示的状态,当前的130服务器为nginx的主节点,MASTER/BACKUPstate BACKUP# 当前实例绑定的网卡interface eth0# 保证主备节点一致virtual_router_id 51# 优先级/权重,谁的优先级高,在MASTER挂掉以后,就能成为MASTERpriority 50# 主备之间同步检查的时间间隔,默认1sadvert_int 1# 认证授权的密码,防止非法节点的进入authentication {auth_type PASSauth_pass 1111}virtual_ipaddress {192.168.200.16}
}

2.3 启动keepalived服务

keepalived -l -f /etc/keepalived/keepalived.conf

2.4 启动nginx服务

nginx

注: keepalived过程中出现的其他问题,详见 🔗在docker的ubuntu中安装keepalived

四、路由环境

具体路由如下图
主要路由环境

1、主机

1.1 网卡情况

输入命令

ip a

打印返回

1: lo: <LOOPBACK,UP,LOWER_UP> mtu 65536 qdisc noqueue state UNKNOWN group default qlen 1000link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00inet 127.0.0.1/8 scope host lovalid_lft forever preferred_lft foreverinet6 ::1/128 scope host valid_lft forever preferred_lft forever
2: ens33: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc fq_codel state UP group default qlen 1000link/ether 00:0c:29:b6:5d:6c brd ff:ff:ff:ff:ff:ffaltname enp2s1inet 192.168.100.157/24 brd 192.168.100.255 scope global dynamic noprefixroute ens33valid_lft 59332sec preferred_lft 59332secinet6 fe80::f040:fdbe:78e1:5077/64 scope link noprefixroute valid_lft forever preferred_lft forever
3: docker0: <NO-CARRIER,BROADCAST,MULTICAST,UP> mtu 1500 qdisc noqueue state DOWN group default link/ether 02:42:65:2d:ef:09 brd ff:ff:ff:ff:ff:ffinet 172.17.0.1/16 brd 172.17.255.255 scope global docker0valid_lft forever preferred_lft foreverinet6 fe80::42:65ff:fe2d:ef09/64 scope link valid_lft forever preferred_lft forever
18: br-5485ae4ce244: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc noqueue state UP group default link/ether 02:42:46:41:1a:20 brd ff:ff:ff:ff:ff:ffinet 192.168.126.1/24 brd 192.168.126.255 scope global br-5485ae4ce244valid_lft forever preferred_lft foreverinet6 fe80::42:46ff:fe41:1a20/64 scope link valid_lft forever preferred_lft forever
25: vethd5c0922@if24: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc noqueue master br-5485ae4ce244 state UP group default link/ether a2:75:3c:3c:0d:62 brd ff:ff:ff:ff:ff:ff link-netnsid 0inet6 fe80::a075:3cff:fe3c:d62/64 scope link valid_lft forever preferred_lft forever
27: vethec20693@if26: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc noqueue master br-4bd1ee90e211 state UP group default link/ether 92:80:a3:b4:06:4a brd ff:ff:ff:ff:ff:ff link-netnsid 1inet6 fe80::9080:a3ff:feb4:64a/64 scope link valid_lft forever preferred_lft forever

1.2 查看路由

输入命令

route -n

打印返回

Kernel IP routing table
Destination     Gateway         Genmask         Flags Metric Ref    Use Iface
0.0.0.0         192.168.100.1   0.0.0.0         UG    100    0        0 ens33
169.254.0.0     0.0.0.0         255.255.0.0     U     1000   0        0 ens33
172.17.0.0      0.0.0.0         255.255.0.0     U     0      0        0 docker0
192.168.100.0   0.0.0.0         255.255.255.0   U     100    0        0 ens33
192.168.126.0   0.0.0.0         255.255.255.0   U     0      0        0 br-5485ae4ce244

1.3 添加路由

主机到从机的路由

route add -net 192.168.127.0/24 gw 192.168.100.158

主机到vip的路由

route add -net 192.168.200.0/24 gw 192.168.126.2

vip到从机的路由

route add -net 192.168.200.0/24 gw 192.168.100.158

1.4 最后路由表

输入命令

route -n

打印返回

Kernel IP routing table
Destination     Gateway         Genmask         Flags Metric Ref    Use Iface
0.0.0.0         192.168.100.1   0.0.0.0         UG    100    0        0 ens33
169.254.0.0     0.0.0.0         255.255.0.0     U     1000   0        0 ens33
172.17.0.0      0.0.0.0         255.255.0.0     U     0      0        0 docker0
192.168.100.0   0.0.0.0         255.255.255.0   U     100    0        0 ens33
192.168.126.0   0.0.0.0         255.255.255.0   U     0      0        0 br-5485ae4ce244
192.168.127.0   192.168.100.158 255.255.255.0   UG    0      0        0 ens33
192.168.200.0   192.168.126.2   255.255.255.0   UG    0      0        0 br-5485ae4ce244
192.168.200.0   192.168.100.158 255.255.255.0   UG    0      0        0 ens33

2、从机

2.1 网卡情况

输入命令

ip a

打印返回

1: lo: <LOOPBACK,UP,LOWER_UP> mtu 65536 qdisc noqueue state UNKNOWN group default qlen 1000link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00inet 127.0.0.1/8 scope host lovalid_lft forever preferred_lft foreverinet6 ::1/128 scope host valid_lft forever preferred_lft forever
2: ens33: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc fq_codel state UP group default qlen 1000link/ether 00:0c:29:6a:2e:27 brd ff:ff:ff:ff:ff:ffaltname enp2s1inet 192.168.100.158/24 brd 192.168.100.255 scope global dynamic noprefixroute ens33valid_lft 64476sec preferred_lft 64476secinet6 fe80::5d22:1c65:d887:63e6/64 scope link noprefixroute valid_lft forever preferred_lft forever
3: docker0: <NO-CARRIER,BROADCAST,MULTICAST,UP> mtu 1500 qdisc noqueue state DOWN group default link/ether 02:42:69:89:fc:8c brd ff:ff:ff:ff:ff:ffinet 172.17.0.1/16 brd 172.17.255.255 scope global docker0valid_lft forever preferred_lft foreverinet6 fe80::42:69ff:fe89:fc8c/64 scope link valid_lft forever preferred_lft forever
4: br-c0c4641ba16b: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc noqueue state UP group default link/ether 02:42:a3:ee:77:97 brd ff:ff:ff:ff:ff:ffinet 192.168.127.1/24 brd 192.168.127.255 scope global br-c0c4641ba16bvalid_lft forever preferred_lft foreverinet6 fe80::42:a3ff:feee:7797/64 scope link valid_lft forever preferred_lft forever
10: vethbe7b7fe@if9: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc noqueue master br-c0c4641ba16b state UP group default link/ether 1a:e7:2f:a9:3b:8e brd ff:ff:ff:ff:ff:ff link-netnsid 0inet6 fe80::18e7:2fff:fea9:3b8e/64 scope link valid_lft forever preferred_lft forever

2.2 查看路由

输入命令

route -n

打印返回

Kernel IP routing table
Destination     Gateway         Genmask         Flags Metric Ref    Use Iface
0.0.0.0         192.168.100.1   0.0.0.0         UG    100    0        0 ens33
169.254.0.0     0.0.0.0         255.255.0.0     U     1000   0        0 ens33
172.17.0.0      0.0.0.0         255.255.0.0     U     0      0        0 docker0
192.168.100.0   0.0.0.0         255.255.255.0   U     100    0        0 ens33
192.168.127.0   0.0.0.0         255.255.255.0   U     0      0        0 br-c0c4641ba16b

2.3 添加路由

从机到主机的路由

route add -net 192.168.126.0/24 gw 192.168.100.157

从机到vip的路由

route add -net 192.168.200.0/24 gw 192.168.127.2

vip到主机的路由

route add -net 192.168.200.0/24 gw 192.168.100.157

2.4 最后路由情况

route -n
Kernel IP routing table
Destination     Gateway         Genmask         Flags Metric Ref    Use Iface
0.0.0.0         192.168.100.1   0.0.0.0         UG    100    0        0 ens33
169.254.0.0     0.0.0.0         255.255.0.0     U     1000   0        0 ens33
172.17.0.0      0.0.0.0         255.255.0.0     U     0      0        0 docker0
192.168.100.0   0.0.0.0         255.255.255.0   U     100    0        0 ens33
192.168.126.0   192.168.100.157 255.255.255.0   UG    0      0        0 ens33
192.168.127.0   0.0.0.0         255.255.255.0   U     0      0        0 br-c0c4641ba16b
192.168.200.0   192.168.126.2   255.255.255.0   UG    0      0        0 br-c0c4641ba16b
192.168.200.0   192.168.100.157 255.255.255.0   UG    0      0        0 ens33

3、宿主机(windows主机)

3.1 添加路由

vip到主机

route add 192.168.200.0 mask 255.255.255.0 192.168.100.157

vip到从机

route add 192.168.200.0 mask 255.255.255.0 192.168.100.158

这篇关于docker-ubuntu中基于keepalived+niginx模拟主从热备完整过程的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/481425

相关文章

通过Docker容器部署Python环境的全流程

《通过Docker容器部署Python环境的全流程》在现代化开发流程中,Docker因其轻量化、环境隔离和跨平台一致性的特性,已成为部署Python应用的标准工具,本文将详细演示如何通过Docker容... 目录引言一、docker与python的协同优势二、核心步骤详解三、进阶配置技巧四、生产环境最佳实践

MyBatis分页查询实战案例完整流程

《MyBatis分页查询实战案例完整流程》MyBatis是一个强大的Java持久层框架,支持自定义SQL和高级映射,本案例以员工工资信息管理为例,详细讲解如何在IDEA中使用MyBatis结合Page... 目录1. MyBATis框架简介2. 分页查询原理与应用场景2.1 分页查询的基本原理2.1.1 分

MyBatis Plus实现时间字段自动填充的完整方案

《MyBatisPlus实现时间字段自动填充的完整方案》在日常开发中,我们经常需要记录数据的创建时间和更新时间,传统的做法是在每次插入或更新操作时手动设置这些时间字段,这种方式不仅繁琐,还容易遗漏,... 目录前言解决目标技术栈实现步骤1. 实体类注解配置2. 创建元数据处理器3. 服务层代码优化填充机制详

Python实现Excel批量样式修改器(附完整代码)

《Python实现Excel批量样式修改器(附完整代码)》这篇文章主要为大家详细介绍了如何使用Python实现一个Excel批量样式修改器,文中的示例代码讲解详细,感兴趣的小伙伴可以跟随小编一起学习一... 目录前言功能特性核心功能界面特性系统要求安装说明使用指南基本操作流程高级功能技术实现核心技术栈关键函

oracle 11g导入\导出(expdp impdp)之导入过程

《oracle11g导入导出(expdpimpdp)之导入过程》导出需使用SEC.DMP格式,无分号;建立expdir目录(E:/exp)并确保存在;导入在cmd下执行,需sys用户权限;若需修... 目录准备文件导入(impdp)1、建立directory2、导入语句 3、更改密码总结上一个环节,我们讲了

Java使用jar命令配置服务器端口的完整指南

《Java使用jar命令配置服务器端口的完整指南》本文将详细介绍如何使用java-jar命令启动应用,并重点讲解如何配置服务器端口,同时提供一个实用的Web工具来简化这一过程,希望对大家有所帮助... 目录1. Java Jar文件简介1.1 什么是Jar文件1.2 创建可执行Jar文件2. 使用java

Spring 中的切面与事务结合使用完整示例

《Spring中的切面与事务结合使用完整示例》本文给大家介绍Spring中的切面与事务结合使用完整示例,本文通过实例代码给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友参考... 目录 一、前置知识:Spring AOP 与 事务的关系 事务本质上就是一个“切面”二、核心组件三、完

使用docker搭建嵌入式Linux开发环境

《使用docker搭建嵌入式Linux开发环境》本文主要介绍了使用docker搭建嵌入式Linux开发环境,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面... 目录1、前言2、安装docker3、编写容器管理脚本4、创建容器1、前言在日常开发全志、rk等不同

ShardingProxy读写分离之原理、配置与实践过程

《ShardingProxy读写分离之原理、配置与实践过程》ShardingProxy是ApacheShardingSphere的数据库中间件,通过三层架构实现读写分离,解决高并发场景下数据库性能瓶... 目录一、ShardingProxy技术定位与读写分离核心价值1.1 技术定位1.2 读写分离核心价值二

MyBatis-plus处理存储json数据过程

《MyBatis-plus处理存储json数据过程》文章介绍MyBatis-Plus3.4.21处理对象与集合的差异:对象可用内置Handler配合autoResultMap,集合需自定义处理器继承F... 目录1、如果是对象2、如果需要转换的是List集合总结对象和集合分两种情况处理,目前我用的MP的版本