Docker+keepalived+nginx實現(xiàn)主從熱備的方法示例
前言
為解決單點故障,我們需要配置主從熱備方案,服務(wù)器數(shù)量有限,故使用Docker模擬安裝配置。
本次配置默認已經(jīng)安裝了Docker。
配置環(huán)境:centos7 64位
docker版本:Docker version 17.12.1-ce, build 7390fc6
1,拉取centos7鏡像
docker pull centos:7
2,創(chuàng)建容器
docker run -it -d --name centos1 -d centos:7
3,進入容器centos1
docker exec -it centos1 bash
4,安裝常用工具
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,將容器打包成新的鏡像,以后直接以該鏡像創(chuàng)建容器
docker commit -a 'cfh' -m 'centos with common tools' centos1 centos_base
6,刪除之前創(chuàng)建的centos1 容器,重新以基礎(chǔ)鏡像創(chuàng)建容器,安裝keepalived+nginx
docker rm -f centos1 #容器內(nèi)需要使用systemctl服務(wù),需要加上/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 來源:掘金 著作權(quán)歸作者所有。商業(yè)轉(zhuǎn)載請聯(lián)系作者獲得授權(quán),非商業(yè)轉(zhuǎn)載請注明出處。
7,安裝nginx
#使用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 #查看是否啟動成功,出現(xiàn)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 安裝成系統(tǒng)服務(wù)
mkdir /etc/keepalivedcp /usr/local/keepalived/etc/keepalived/keepalived.conf /etc/keepalived/然后復(fù)制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/可以設(shè)置開機啟動:chkconfig keepalived on,到此我們安裝完畢! #若啟動報錯,則執(zhí)行下面命令 cd /usr/sbin/ rm -f keepalived cp /usr/local/keepalived/sbin/keepalived /usr/sbin/ #常用命令 systemctl daemon-reload 重新加載systemctl enable keepalived.service 設(shè)置開機自動啟動systemctl disable keepalived.service 取消開機自動啟動systemctl start keepalived.service 啟動systemctl stop keepalived.service停止systemctl status keepalived.service 查看服務(wù)狀態(tài)
10,修改/etc/keepalived/keepalived.conf文件
#備份配置文件
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,添加心跳檢測文件
vim nginx_check.sh
#以下是腳本內(nèi)容
#!/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,給腳本賦予執(zhí)行權(quán)限
chmod +x nginx_check.sh
13,設(shè)置開機啟動
systemctl enable keepalived.service #開啟keepalived systemctl start keepalived.service
14,檢測虛擬IP是否成功,在宿主機里面執(zhí)行下面命令,如果出現(xiàn)nginx歡迎界面表示成功
curl 172.17.0.100
15,將centos_temp 容器重新打包成鏡像,然后利用這個新鏡像再創(chuàng)建兩個容器,實現(xiàn)熱備效果
docker commit -a 'cfh' -m 'centos with keepalived nginx' centos_temp centos_kn
16,刪除所有容器
docker rm -f `docker ps -a -q`
17,用centos_kn 鏡像創(chuàng)建主服務(wù)器容器
docker run --privileged -tid --name centos_master --restart=always centos_kn /usr/sbin/init docker exec -it centos_master bash
18,修改centos_master里面nginx 歡迎頁,
vim /usr/share/nginx/html/index.html

19,創(chuàng)建從服務(wù)器容器
docker run --privileged -tid --name centos_slave --restart=always centos_kn /usr/sbin/init
docker exec -it centos_slave bash
#修改keepalived.conf 配置文件,主要是state和priority兩個參數(shù)的調(diào)整,其中master節(jié)點的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,修改完成之后重新加載
systemctl daemon-reload systemctl restart keepalived.service
21,修改nginx歡迎頁(若nginx沒啟動則執(zhí)行 systemctl start nginx.service)
vim /usr/share/nginx/html/index.html

22,測試
A> 分別在宿主機,centos_master,centos_slave中進行一下命令測試,如果顯示都為Master的歡迎頁面,說明配置成功1/3
curl 172.17.0.100
B> 此時停止centos_master容器( docker stop centos_master ),保留centos_slave容器,執(zhí)行以下命令,若切換到Slave頁面,則說明keepalived配置成功2/3
curl 172.17.0.100
C> 重啟centos_master 容器,此時執(zhí)行以下命令,看是從Slave切換到了Master,如果切換成功,說明我們配置到此成功了。
curl 172.17.0.100
說明,測試過程中,重啟容器之后,nginx沒有啟動,需要進入容器啟動一下,不然訪問不到Master頁面了,但是可以Ping通。
執(zhí)行下面命令,配置nginx隨機啟動,這樣不用每次重啟容器還需要手動啟動nginx
chkconfig nginx on
以上就是整個配置過程,希望對大家的學(xué)習有所幫助,也希望大家多多支持腳本之家。
相關(guān)文章
Elasticsearch/Kibana密碼設(shè)置方法
這篇文章主要介紹了Elasticsearch/Kibana密碼設(shè)置,本文分步驟給大家介紹的非常詳細,對大家的學(xué)習或工作具有一定的參考借鑒價值,需要的朋友可以參考下2023-06-06
Docker如何訪問到宿主機MYSQL的實現(xiàn)方法
使用?Docker?能實現(xiàn)服務(wù)的容器化,并使用容器間網(wǎng)絡(luò)在它們之間進行通信,本文主要介紹了Docker如何訪問到宿主機MYSQL的實現(xiàn)方法,感興趣的可以了解一下,感興趣的可以了解一下2023-09-09
Docker安裝MySQL并使用Navicat連接的使用示例
在Docker里運行MySQL的方式還是很方便的,本文主要介紹了Docker安裝MySQL并使用Navicat連接的使用示例,具有一定的參考價值,感興趣的可以了解一下2023-10-10
Docker 容器指定自定義網(wǎng)段的固定IP/靜態(tài)IP地址
這篇文章主要介紹了Docker 容器指定自定義網(wǎng)段的固定IP/靜態(tài)IP地址的相關(guān)資料,需要的朋友可以參考下2016-12-12

