Docker+keepalived+nginx实现主从热备的范例

为解决单点故障,我们需要配置主从热备方案,服务器数量有限,故使用Docker模拟安装配置。

本次配置默认已经安装了Docker。

配置环境:Ubuntu20.04 64位

docker版本:Docker version 17.12.1-ce, build 7390fc6

1,拉取centos7镜像

sudo docker pull centos:7

2,创建容器

sudo docker run -it -d --name centos1 -d centos:7

3,进入容器centos1

sudo docker exec -it centos1 bash

4,安装常用工具

yum update
yum provides '*/applydeltarpm'
yum -y  install deltarpm
yum install psmisc
yum install -y vim wget
yum install -y pcre pcre-devel 
yum install -y zlib zlib-devel 
yum install -y openssl openssl--devel 
yum install -y popt-devel initscripts net-tools
yum install -y gcc-c++ 
======================================================
如果上述更新失败,那就是国外的源速度太慢了,需要替换成国内的源地址再重复上述操作,替换源看下面
1. 备份自带源
# 首先要确认你有 wget 命令, 并且连着网
# cd /etc/yum.repos.d/
# mkdir repo
# mv *.repo repo
2. 下载国内源文件
# cd /etc/yum.repos.d/

# 1). 下载 CentOS7 源文件地址
# wget http://mirrors.163.com/.help/CentOS7-Base-163.repo

# 2). 因为网易没有 epel 源 所以要从阿里下载
# wget http://mirrors.aliyun.com/repo/epel-7.repo
3. 清除并初始化源数据缓存
# 1). 清除源数据缓存
# yum clean all

# 2). 初始化源数据缓存
# yum makecache

5,将容器打包成新的镜像,以后直接以该镜像创建容器

sudo docker commit -a 'cfh' -m 'centos with common tools' centos1 centos_base

6,删除之前创建的centos1 容器,重新以基础镜像创建容器,安装keepalived+nginx

sudo docker rm -f centos1
#容器内需要使用systemctl服务,需要加上/usr/sbin/init
sudo docker run -it --name centos_temp -d --privileged centos_base /usr/sbin/init
sudo docker exec -it centos_temp bash

7,安装nginx

rpm -Uvh http://nginx.org/packages/centos/7/noarch/RPMS/nginx-release-centos-7-0.el7.ngx.noarch.rpm
# 使用下面命令安装nginx
yum install -y nginx
#启动nginx
systemctl start nginx.service
#查看是否启动成功,出现nginx欢迎界面表示安装成功
curl 172.17.0.2

8,安装keepalived

1.下载keepalived 
    wget http://www.keepalived.org/software/keepalived-1.2.18.tar.gz

2.解压安装:
    tar -zxvf keepalived-1.2.18.tar.gz -C /usr/local/
3.下载插件openssl 
    yum install -y openssl openssl-devel(需要安装一个软件包)
4.开始编译keepalived
    cd /usr/local/keepalived-1.2.18/ && ./configure --prefix=/usr/local/keepalived
5.make一下 
    make && make install

9,将keepalived 安装成系统服务

mkdir /etc/keepalived
cp /usr/local/keepalived/etc/keepalived/keepalived.conf /etc/keepalived/
然后复制keepalived脚本文件:
cp /usr/local/keepalived/etc/rc.d/init.d/keepalived /etc/init.d/
cp /usr/local/keepalived/etc/sysconfig/keepalived /etc/sysconfig/
ln -s /usr/local/sbin/keepalived /usr/sbin/keepalived
可以设置开机启动:chkconfig keepalived on,到此我们安装完毕!
 
#若启动报错,则执行下面命令
cd /usr/sbin/
rm -f keepalived 
cp /usr/local/keepalived/sbin/keepalived /usr/sbin/
 
#常用命令
systemctl daemon-reload 重新加载
systemctl enable keepalived.service 设置开机自动启动
systemctl disable keepalived.service 取消开机自动启动
systemctl start keepalived.service 启动
systemctl stop keepalived.service 停止
systemctl status keepalived.service 查看服务状态

10,修改/etc/keepalived/keepalived.conf文件

#备份配置文件
cp /etc/keepalived/keepalived.conf /etc/keepalived/keepalived.conf.backup

cd /etc/keepalived/
 
rm -f keepalived.conf
vim keepalived.conf
#配置文件如下
 
vrrp_script chk_nginx {
  script "/etc/keepalived/nginx_check.sh"
  interval 2
  weight -20
}
 
vrrp_instance VI_1 {
  state MASTER
  interface eth0
  virtual_router_id 121
  mcast_src_ip 172.17.0.6
  priority 100
  nopreempt
  advert_int 1
  authentication {
    auth_type PASS
    auth_pass 1111
  }
 
  track_script {
    chk_nginx
  }
 
  virtual_ipaddress {
    172.17.0.100
  }
}

11,添加心跳检测文件

vim nginx_check.sh
#以下是脚本内容
#!/bin/bash
A=`ps -C nginx –no-header |wc -l`
if [ $A -eq 0 ];then
  /usr/sbin/nginx
  sleep 2
  if [ `ps -C nginx --no-header |wc -l` -eq 0 ];then
    killall keepalived
  fi
fi

12,给脚本赋予执行权限设置开机启动

chmod +x nginx_check.sh

systemctl enable keepalived.service
systemctl enable nginx.service
#开启keepalived
systemctl start keepalived.service
systemctl nginx keepalived.service

chkconfig keepalived on
chkconfig nginx on

13,检测虚拟IP是否成功,在宿主机里面执行下面命令,如果出现nginx欢迎界面表示成功

curl 172.17.0.100

14,将centos_temp 容器重新打包成镜像,然后利用这个新镜像再创建两个容器,实现热备效果

sudo docker commit -a 'cfh' -m 'centos with keepalived nginx' centos_temp centos_kn

15,删除所有容器

sudo docker rm -f centos_temp

16,用centos_kn 镜像创建主服务器容器

sudo docker run --privileged -tid --name centos_master --restart=always centos_kn /usr/sbin/init
sudo docker exec -it centos_master bash

17,修改centos_master里面nginx 欢迎页,

vim /usr/share/nginx/html/index.html
Title修改为Master nginx

18,创建从服务器容器 

sudo docker run --privileged -tid --name centos_slave --restart=always centos_kn /usr/sbin/init
sudo docker exec -it centos_slave bash
 
#修改keepalived.conf 配置文件,主要是state和priority两个参数的调整,其中master节点的priority值一定要比slave大才行
 
vrrp_script chk_nginx {
  script "/etc/keepalived/nginx_check.sh"
  interval 2
  weight -20
}
 
vrrp_instance VI_1 {
  state SLAVE
  interface eth0
  virtual_router_id 121
  mcast_src_ip 172.17.0.6
  priority 80
  nopreempt
  advert_int 1
  authentication {
    auth_type PASS
    auth_pass 1111
  }
 
  track_script {
    chk_nginx
  }
 
  virtual_ipaddress {
    172.17.0.100
  }
}

19,修改完成之后重新加载

systemctl daemon-reload
systemctl restart keepalived.service

20,修改nginx欢迎页(若nginx没启动则执行 systemctl start nginx.service)

vim /usr/share/nginx/html/index.html
修改标题为Slave nginx

21,测试

A> 分别在宿主机,centos_master,centos_slave中进行一下命令测试,如果显示都为Master的欢迎页面,说明配置成功1/3

B> 此时停止centos_master容器( docker stop centos_master ),保留centos_slave容器,执行以下命令,若切换到Slave页面,则说明keepalived配置成功2/3

C> 重启centos_master 容器,此时执行以下命令,看是从Slave切换到了Master,如果切换成功,说明我们配置到此成功了。

说明,测试过程中,重启容器之后,nginx没有启动,需要进入容器启动一下,不然访问不到Master页面了,但是可以Ping通。

执行下面命令,配置nginx随机启动,这样不用每次重启容器还需要手动启动nginx

chkconfig nginx on

 

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
Docker+Consul+Nginx+keepalived是一种常用的云原生架构方案,它结合了容器化、服务发现、负载均衡和高可用等多种技术手段,可用于构建高可用、弹性、可扩展的应用系统。 该方案的主要组件包括: 1. Docker:用于容器化应用程序和服务,提供了高效、轻量、可移植的应用打包和部署方式。 2. Consul:用于服务发现和配置管理,支持多数据中心、跨平台、高度可扩展的分布式系统。 3. Nginx:用于负载均衡和反向代理,支持高并发、高可用的流量分发。 4. keepalived:用于实现高可用的服务和节点,提供了基于 VRRP 协议的故障转移和自动切换功能。 在该方案中,Docker 容器作为应用程序和服务的运行环境,使用 Consul 进行服务注册和发现,并通过 Nginx 进行流量分发和负载均衡。同时,使用 keepalived 实现高可用的服务和节点,确保系统的稳定性和可用性。 项目描述可以按照以下步骤进行撰写: 1. 项目背景和目的:简要介绍本项目的背景和目的,说明为什么选择 Docker+Consul+Nginx+keepalived 方案。 2. 技术架构:详细介绍该方案的技术架构和组件,包括 Docker、Consul、Nginxkeepalived 的作用和使用方式。 3. 系统功能:描述系统的主要功能和特点,包括服务发现、负载均衡、高可用等方面。 4. 实现方式:介绍系统的具体实现方式和实现步骤,包括 Docker 镜像的构建、应用程序的容器化、Consul 的配置和使用、Nginx 的配置和使用、keepalived 的配置和使用等。 5. 测试和验证:对系统进行测试和验证,验证系统的功能和性能是否符合预期,是否满足高可用和弹性的要求。 6. 总结和展望:对本项目进行总结和展望,分析该方案的优缺点和适用范围,展望未来的发展方向和趋势。

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值