分享

docker Nginx LVS keepalived搭建分布式双机主从热备

 15所 2022-01-08

概述

准备在虚拟机的centos7上搭建搭建docker+Nginx+LVS+keepalived搭建分布式双机主从热备,其架构图如下
双机主从热备图

安装docker(如已经安装,请忽略)

yum install docker #该命令安装过程中的提示一律填 y 再回车即可

安装好docker后设置docker开机启动

systemctl start docker.service
systemctl enable docker.service

设置docker开机启动

docker 里面安装Nginx

直接拿最新的nginx镜像

docker pull nginx

镜像是否成功下载使用下面命令查看是否存在nginx镜像

docker images

查看Nginx是否成功下载
切换到当前用户跟目录,然后建立一个nginx目录,并在nginx目录下新建nginx_master和nginx_backup; 然后分别在这两个文件夹下建立conf, logs, html 三个文件夹(这里之所以要建立nginx_backup是因为方便到时候虚拟机克隆,也可以不建立nginx_backup)
建立nginx_master及其子目录
建立nginx_backup及其子目录
先建立启动一个nginx容器

docker run -d --name nginx nginx

切换目录到nginx_master目录下,然后将docker下的nginx 容器的nginx.conf和conf.d文件copy到nginx_master nginx_backup的conf下

docker cp nginx:/etc/nginx/nginx.conf $PWD/conf
docker cp nginx:/etc/nginx/conf.d $PWD/conf

复制完成后删除刚才启动nginx容器

docker stop nginx
docker rm nginx
docker ps -a

复制完成后在nginx_master目录下查看复制完成后的目录结构

ll $PWD/*

查看nginx_master目录结构
在nginx_master/html目录下新建一个index.html文件,随便输入文字
index.html文件内容
关闭防火墙

systemctl stop firewalld.service

禁止防火墙开机启动

systemctl disable firewalld.service

确保文件创建好后,就可以按照下面命令创建nginx容器

docker run -d -p 80:80                -p 443:443   --name nginx_master  --restart=always  --privileged=true  -v /root/nginx/nginx_master/html:/usr/share/nginx/html  -v /root/nginx/nginx_master/conf/nginx.conf:/etc/nginx/nginx.conf  -v /root/nginx/nginx_master/conf/conf.d:/etc/nginx/conf.d  -v /root/nginx/nginx_master/logs:/var/log/nginx  nginx

# 以上是命令,下面是命令的解析
-d # 表示在一直在后台运行容器
-p 80:80 # 对端口进行映射,将本地80端口映射到容器内部的80端口
--name # 设置创建的容器名称
-v # 将本地目录(文件)挂载到容器指定目录;
--restart=always是重启策略,当docker服务重启后,容器也会自动启动(必须,否则后面启动虚拟机,需要手动启动nginx)
--privileged=true  使创建的容器拥有root权限(必须,没有的话,启动nginx报错,说没有权限)

如果启动的时候不带上 –privileged=true,会出现 nginx: [alert] could not open error log file: open() “/var/log/nginx/error.log” failed (13: Permission denied)
不带上--privileged=true启动nginx报错
启动完查看容器的启动状态是否正常

docker ps -a 

启动和查看状态
启动完,访问nginx_master的nginx,看看是否能访问到index.html的内容
查看是否启动成功访问nginx

安装keepalived

安装命令

yum install keepalived -y

查看是否安装成功,使用如下命令能看到版本号,表示成功

rpm -q -a keepalived

查看keepalived是否安装成功
使用yum命令安装keepalived成功后,在/etc/keepalived目录下有keepalived.conf配置文件,高可用配置就是主要配置该文件
keepalived.conf文件位置
主机的keepalived.conf的配置内容如下

! Configuration File for keepalived

global_defs {
   notification_email {
     xuad@xuad.com
   }
   notification_email_from root@xuad.com
   smtp_server mail.xuad.com
   smtp_connect_timeout 30
   router_id LVS_DEVEL
   vrrp_skip_check_adv_addr
   vrrp_strict
   vrrp_garp_interval 0
   vrrp_gna_interval 0
}

vrrp_script chk_nginx {
    script '/root/keepalived/nginx_check.sh'   # 检查nginx状态的脚本
    interval 2
    weight 3
}

vrrp_instance VI_1 {
    state MASTER     #备份服务器上将MASTER改为BACKUP
    interface ens33	#这个需要根据你服务器的网卡进行选择,我这里是ens33
    virtual_router_id 51	#这个id必须与备机的id一样
    priority 100       #备份服务上将100改为小于100,可配置成90
    advert_int 1
    authentication {
        auth_type PASS
        auth_pass 1111
    }
    virtual_ipaddress {
        192.168.247.120    #这个IP前三位最后与服务器的IP前三位相同,有多个vip可在下面继续增加
    }
    track_script {
        chk_nginx
    }
}

切换到当前用户目录空间,建立一个keepalived目录,这个目录存放的是nginx是否正常启动的检测脚本
创建keepalived目录
进入keepalived目录,创建nginx_check.sh文件,文件内容如下

#!/bin/bash
#version 0.0.1
#
A=`ps -C nginx --no-header |wc -l`
if [ $A -eq 0 ];then
     systemctl restart docker
      sleep 3
            if [ `ps -C nginx --no-header |wc -l` -eq 0 ];then
                  systemctl stop keepalived
fi 
fi

# 脚本说明:当nginx进程不存在时,会自动重启docker服务,docker服务启动时会自动启动nginx容器;再次检查nginx进程,如果不存在,就停止keepalived服务,然后NGINX_BACKUP主机会自动接替NGINX_MASTER的工作。

脚本创建完成后,必须给脚本赋予可以执行的权限,这里为了方便直接给所有权限

chmod 777 nginx_check.sh

启动keepalived并查看其状态

systemctl start keepalived
systemctl status keepalived

查看keepalived是否启动成功

克隆主机成为备机

关闭虚拟机,对主机进行克隆
主机克隆
克隆完成后,选择克隆出来的备机需要改变下MAC地址 重要
刷新MAC地址描述
开启备机服务器,然后修改备机的hostname,将备机的hostname改成salve或者backup都可以,修改完成重启备机

hostnamectl set-hostname salve

由于是从主机克隆来的,所以主机的docker和keepalived、Nginx都已经有了,主要对 /etc/keepalived/keepalived.conf 文件进行进行一定修改就好;另外的nginx容器也可以重新建立一个,命名为:nginx_salve;最后启动主机和备机两台服务机,分别查看keepalived的状态是否都启动了,没有启动就启动

systemctl status keepalived

查看两台机器的keepalived状态
当master节点没有宕机的情况,访问的是master节点下的nginx,当出现宕机的情况下访问的是backup节点下的nginx
访问的是master节点
将主机关机,造成主机宕机现象,就访问了备机的nginx
备机访问

至此使用docker搭建的双机主从热备环境就搭建好了,如有问题,评论区留言

    本站是提供个人知识管理的网络存储空间,所有内容均由用户发布,不代表本站观点。请注意甄别内容中的联系方式、诱导购买等信息,谨防诈骗。如发现有害或侵权内容,请点击一键举报。
    转藏 分享 献花(0

    0条评论

    发表

    请遵守用户 评论公约

    类似文章 更多