- ubuntu12.04环境下使用kvm ioctl接口实现最简单的虚拟机
- Ubuntu 通过无线网络安装Ubuntu Server启动系统后连接无线网络的方法
- 在Ubuntu上搭建网桥的方法
- ubuntu 虚拟机上网方式及相关配置详解
CFSDN坚持开源创造价值,我们致力于搭建一个资源共享平台,让每一个IT人在这里找到属于你的精彩世界.
这篇CFSDN的博客文章Docker+keepalived+nginx实现主从热备的方法示例由作者收集整理,如果你对这篇文章有兴趣,记得点赞哟.
前言 。
为解决单点故障,我们需要配置主从热备方案,服务器数量有限,故使用Docker模拟安装配置.
本次配置默认已经安装了Docker.
配置环境:centos7 64位 。
docker版本:Docker version 17.12.1-ce, build 7390fc6 。
1,拉取centos7镜像 。
1
|
docker pull centos:7
|
2,创建容器 。
1
|
docker run -it -d --name centos1 -d centos:7
|
3,进入容器centos1 。
1
|
docker
exec
-it centos1
bash
|
4,安装常用工具 。
1
2
|
yum updateyum
install
-y vimyum
install
-y wgetyum
install
-y gcc-c++ yum
install
-y pcre pcre-devel yum
install
-y zlib zlib-devel yum
install
-y openssl openssl--develyum
install
-y popt-develyum
install
-y initscripts
yum
install
-y net-tools
|
5,将容器打包成新的镜像,以后直接以该镜像创建容器 。
1
|
docker commit -a
'cfh'
-m
'centos with common tools'
centos1 centos_base
|
6,删除之前创建的centos1 容器,重新以基础镜像创建容器,安装keepalived+nginx 。
1
2
3
4
5
6
7
8
9
|
docker
rm
-f centos1
#容器内需要使用systemctl服务,需要加上/usr/sbin/init
docker run -it --name centos_temp -d --privileged centos_base
/usr/sbin/init
docker
exec
-it centos_temp
bash
作者:江湖救急
链接:https:
//juejin
.im
/post/5dc517386fb9a04a9272110b
来源:掘金
著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。
|
7,安装nginx 。
1
2
3
4
5
6
7
8
|
#使用yum安装nginx需要包括Nginx的库,安装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.开始编译keepalivedcd /usr/local/keepalived-1.2.18/ && ./configure --prefix=/usr/local/keepalived 。
5.make一下 make && make install 。
9,将keepalived 安装成系统服务 。
1
2
3
4
5
6
7
8
9
|
mkdir
/etc/keepalivedcp
/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/
可以设置开机启动: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文件 。
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
|
#备份配置文件
cp
/etc/keepalived/keepalived
.conf
/etc/keepalived/keepalived
.conf.backup
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,添加心跳检测文件 。
1
2
3
4
5
6
7
8
9
10
11
|
vim nginx_check.sh
#以下是脚本内容
#!/bin/bash
A=`
ps
-C nginx –no-header |
wc
-l`
if
[ $A -
eq
0 ];
then
/usr/local/nginx/sbin/nginx
sleep
2
if
[ `
ps
-C nginx --no-header |
wc
-l` -
eq
0 ];
then
killall keepalived
fi
fi
|
12,给脚本赋予执行权限 。
1
|
chmod
+x nginx_check.sh
|
13,设置开机启动 。
1
2
3
4
|
systemctl
enable
keepalived.service
#开启keepalived
systemctl start keepalived.service
|
14,检测虚拟IP是否成功,在宿主机里面执行下面命令,如果出现nginx欢迎界面表示成功 。
1
|
curl 172.17.0.100
|
15,将centos_temp 容器重新打包成镜像,然后利用这个新镜像再创建两个容器,实现热备效果 。
1
|
docker commit -a
'cfh'
-m
'centos with keepalived nginx'
centos_temp centos_kn
|
16,删除所有容器 。
1
|
docker
rm
-f `docker
ps
-a -q`
|
17,用centos_kn 镜像创建主服务器容器 。
1
2
3
|
docker run --privileged -tid --name centos_master --restart=always centos_kn
/usr/sbin/init
docker
exec
-it centos_master
bash
|
18,修改centos_master里面nginx 欢迎页.
1
|
vim
/usr/share/nginx/html/index
.html
|
19,创建从服务器容器 。
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
|
docker run --privileged -tid --name centos_slave --restart=always centos_kn
/usr/sbin/init
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
}
}
|
20,修改完成之后重新加载 。
1
2
|
systemctl daemon-reload
systemctl restart keepalived.service
|
21,修改nginx欢迎页(若nginx没启动则执行 systemctl start nginx.service) 。
1
|
vim
/usr/share/nginx/html/index
.html
|
22,测试 。
A> 分别在宿主机,centos_master,centos_slave中进行一下命令测试,如果显示都为Master的欢迎页面,说明配置成功1/3 。
1
|
curl 172.17.0.100
|
B> 此时停止centos_master容器( docker stop centos_master ),保留centos_slave容器,执行以下命令,若切换到Slave页面,则说明keepalived配置成功2/3 。
1
|
curl 172.17.0.100
|
C> 重启centos_master 容器,此时执行以下命令,看是从Slave切换到了Master,如果切换成功,说明我们配置到此成功了.
1
|
curl 172.17.0.100
|
说明,测试过程中,重启容器之后,nginx没有启动,需要进入容器启动一下,不然访问不到Master页面了,但是可以Ping通.
执行下面命令,配置nginx随机启动,这样不用每次重启容器还需要手动启动nginx 。
1
|
chkconfig nginx on
|
以上就是整个配置过程,希望对大家的学习有所帮助,也希望大家多多支持我.
原文链接:https://juejin.im/post/5dc517386fb9a04a9272110b 。
最后此篇关于Docker+keepalived+nginx实现主从热备的方法示例的文章就讲到这里了,如果你想了解更多关于Docker+keepalived+nginx实现主从热备的方法示例的内容请搜索CFSDN的文章或继续浏览相关文章,希望大家以后支持我的博客! 。
我们打算做一主两从的配置。我们的目标如下。我们有大量的传入记录,因此我们计划执行以下操作: Master - has only past 7 days records Slave 1 - as sam
我已经成功地设置了一个主从环境,它绝对可以正常工作。 我遇到的唯一问题是从表中选择计数,它们不相同但是在 5 分钟后从主选择,在从属上创建 50 行,也创建 50 行(这就是为什么我说我'我确定它工作
我有一个与 MariaDb 实例相关的业务需求,该实例应该在具有故障转移功能的主从配置中工作。 查看我看到的文档,可以配置多集群主机 (galera) 或简单的主从副本。 配置主从+故障转移有什么建议
我想将 qml 与主从界面一起使用,但我不知道如何以正确的方式将当前项目传递到详细信息 View 。主视图中的 ListView 使用 C++ 模型(QSQLTableModel 的附加组件,它工作正
我有一个主从 fragment 布局,看起来像这样: 当从 ListView 中选择一个数字时,详细 View 中的值会发生变化(即单选按钮文本发生变化)。我有以下问题:当我在 ListView 中单
当主服务器已经有大量数据时,有没有办法复制mysql。我尝试了常规方法,但很难获取MASTER_LOG_POS值。从服务器如何能够复制主服务器上先前存在的数据。 最佳答案 通常,您会从现有数据库的完整
如果主数据库出现故障,我想切换从数据库。我找到了 Master/Slave开关,但它用于读写(看起来很合乎逻辑,但不是这种情况)。你能在 zend 中给出“db failure”策略吗? 最佳答案 看
场景: 我们的架构基于 memcached,随着用户群数量的增加,我们需要将缓存复制到多个服务器。 我们可以使用repcached实用程序轻松地在两台服务器之间进行复制。 我们希望以这样的方式负载平衡
单机配置启动 Redis安装 下载地址: http://redis.io/download 安装步骤: 1: 安装gcc编译器:yum install gcc 2:
我有一些关于主从数据复制的问题,是否有机会重新同步它们,以便在主从数据中拥有相同的数据,而无需尝试在从属数据上手动添加与主数据相同的数据? 最佳答案 一种选择是对主服务器进行备份并使用它来完全替换副本
我有一个Master和一个Slave 操作系统:MySQL5.6 & RHEL 7.0 复制状态:运行良好 一切工作正常且正确我想检查数据是否在服务器之间正确复制(主到从),并在 mysqlrplsy
我是 pgbouncer 1.7 的新手,我想用主从配置来配置它。 我已经使用 repmgr 配置了 postgres 9.3 流复制,我想使用 pgbouncer 进行负载平衡和连接池,以便在主服务
我想将一个从站连接到 Master-Jenkins,但是在尝试连接时出现以下错误: [05/02/18 15:26:59] [SSH] Opening SSH connection to Key e
我在 Windows 计算机上运行 SonarQube Server 和 Jenkins 实例。 我已经创建了 Jenkins 作业来使用 SonarQube 生成代码覆盖率报告。该作业在 Linux
我有一个这个模型(它不是实际代码,为了清楚起见,我省略了 INotifyPropertyChanged 实现)。 public class Project { public Ob
我正在使用分开的主细节剑道 ui 网格。主网格位于标签条 1 (tabstrip.select(0)) 内。添加/编辑字段(用于主网格)位于首页的标签条 2 (tabstrip.select(1))
我有 5 个选项卡栏项目。第五项是 UISplitViewController。在肖像模式下,在应用程序启动时,我可以看到详细信息屏幕,而不是主屏幕。我期待着大师的到来。在横向模式下,主从细节工作正常
作为 swift 的新手,我正在尝试使用 Master View Controller,在其中我使用 JSON 阅读博客并将其存储在核心数据中。一切都很好,只是我不明白如何在向右滑动和删除时从核心数据
我正在尝试使用主从复制配置 MySQL 数据库。在我意识到必须使用此复制来设置环境之前,我已经有 2 台独立的服务器运行它们自己的 MySQL 数据库。这些服务器中的每一个的配置都完全相同。 MySQ
我有一个正在运行的 Django 应用程序。我使用的数据库后端是 PostGreSql。一切对我来说都很好。 现在我想为我的数据库创建一个主从复制,这样: 无论 master 发生什么变化,都会在 s
我是一名优秀的程序员,十分优秀!