Docker 에 Keepalived + Nginx 를 설치 하고 높 은 사용 가능
글 목록
준비 작업
centos 미 러 를 다운로드 하고 환경 설정
$ docker pull centos # centos
$ docker images #
$ docker run -itd --name centos centos #
$ docker exec -it centos bash #
$ yum -y upgrade #
$ yum install -y yum-utils vim make wget gcc openssl openssl-devel popt-devel #
다운로드 설치 Nginx
yum 원본 설정
공식 참고 문서http://nginx.org/en/linux_packages.html
$ cat /etc/yum.repos.d/nginx.repo
[nginx-stable]
name=nginx stable repo
baseurl=http://nginx.org/packages/centos/$releasever/$basearch/
gpgcheck=1
enabled=1
gpgkey=https://nginx.org/keys/nginx_signing.key
module_hotfixes=true
[nginx-mainline]
name=nginx mainline repo
baseurl=http://nginx.org/packages/mainline/centos/$releasever/$basearch/
gpgcheck=1
enabled=0
gpgkey=https://nginx.org/keys/nginx_signing.key
module_hotfixes=true
$ yum install -y nginx # Nginx
$ whereis nginx # , /etc/nginx
$ nginx -t #
$ nginx #
$ curl localhost #
다운로드 설치 Keepalived
Keepalived 홈 페이지 최신 버 전 다운로드
$ mkdir -p /mnt/software && cd /mnt/software
$ wget https://www.keepalived.org/software/keepalived-2.0.20.tar.gz
$ docker cp keepalived-2.0.20.tar.gz centos:/mnt/ # !! copy
$ tar -zxvf keepalived-2.0.20.tar.gz
컴 파일 설치
$ cd keepalived-2.0.20
$ ./configure --prefix=/usr/local/keepalived
컴 파일 이 끝 난 후 다음 과 같은 경고 가 나타 날 수 있 습 니 다.
*** WARNING - this build will not support IPVS with IPv6. Please install libnl/libnl-3 dev libraries to support IPv6 with IPVS.
제시 대로
$ yum -y install libnl libnl-devel
No match for argument: libnl
No match for argument: libnl-devel
Error: Unable to find a match: libnl libnl-devel
what 에 일치 하 는 소프트웨어 원본 이 없 습 니까?VRRP 기능 만 사용 하면 됩 니 다. VRRP Framework 사용, VRRP VMAC 사용, VRRP authentication 을 Yes 로 확보 하면 됩 니 다. 물론 따로 RPM 을 찾 아 libnl 을 설치 할 수도 있 습 니 다.
https://centos.pkgs.org/7/centos-x86_64/libnl-1.1.4-3.el7.x86_64.rpm.html
$ wget http://mirror.centos.org/centos/7/os/x86_64/Packages/libnl-1.1.4-3.el7.x86_64.rpm
$ wget http://mirror.centos.org/centos/7/os/x86_64/Packages/libnl-devel-1.1.4-3.el7.x86_64.rpm
$ rpm -ivh libnl-1.1.4-3.el7.x86_64.rpm
$ rpm -ivh libnl-devel-1.1.4-3.el7.x86_64.rpm
$ ./configure --prefix=/usr/local/keepalived
$ make && make install
Keepalived 설정
$ cp /mnt/software/keepalived-2.0.20/keepalived/etc/init.d/keepalived /etc/init.d/
$ cp /mnt/software/keepalived-2.0.20/keepalived/etc/sysconfig/keepalived /etc/sysconfig/
$ cp /usr/local/keepalived/sbin/keepalived /usr/sbin/
$ mkdir -p /etc/keepalived
$ cp /usr/local/keepalived/etc/keepalived/keepalived.conf /etc/keepalived/
$ chmod +x /etc/init.d/keepalived
$ ip address # ip 172.17.0.2 eth0
1: lo: <LOOPBACK,UP,LOWER_UP> mtu 65536 qdisc noqueue state UNKNOWN group default qlen 1000
link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00
inet 127.0.0.1/8 scope host lo
valid_lft forever preferred_lft forever
2: tunl0@NONE: <NOARP> mtu 1480 qdisc noop state DOWN group default qlen 1000
link/ipip 0.0.0.0 brd 0.0.0.0
3: ip6tnl0@NONE: <NOARP> mtu 1452 qdisc noop state DOWN group default qlen 1000
link/tunnel6 :: brd ::
22: eth0@if23: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc noqueue state UP group default
link/ether 02:42:ac:11:00:02 brd ff:ff:ff:ff:ff:ff link-netnsid 0
inet 172.17.0.2/16 brd 172.17.255.255 scope global eth0
valid_lft forever preferred_lft forever
기본적으로 Keepalived 설정 파일 을 / etc / keepalived / keepalived. conf 에 놓 습 니 다.
! Configuration File for keepalived
global_defs {
# ,
router_id LVS_DEVEL
enable_script_security
#
script_user root
}
vrrp_script chk_nginx {
script "/etc/keepalived/check.sh"
# 2 nginx
interval 2
# , -5
weight -5
# require 2 failures for KO
fall 2
# require 2 successes for OK
rise 2
}
vrrp_instance VI_1 {
# MASTER BACKUP
state MASTER
#
interface eth0
# virtual_router_id
virtual_router_id 51
# MASTER BACKUP BACKUP 99
priority 100
# MASTER BACKUP ,
advert_int 1
#
authentication {
#
auth_type PASS
auth_pass 1111
}
# IP, ,
virtual_ipaddress {
172.17.0.200
172.17.0.210
}
track_script {
chk_nginx
}
}
$ cd /etc/keepalived
$ touch check.sh
$ chmod +x check.sh
check. sh 스 크 립 트 내용 은 다음 과 같 습 니 다.
#!/bin/bash
Nginx=`ps -ef | grep nginx | grep -v grep | wc -l`
echo 'nginx status ' $Nginx
if [ $Nginx -eq 0 ]
then
echo 'nginx shutdown...'
nginx
echo 'start nginx ...'
sleep 2
if [ `ps -ef | grep nginx | grep -v grep | wc -l` -eq 0 ]
then
ps -ef | grep keepalived | grep -v grep | awk '{print $2}' | xargs kill -9
echo 'kill keepalived...'
else
echo 'nginx started...'
fi
fi
echo 'script end...'
스 크 립 트 역할: nginx 프로 세 스 가 존재 하지 않 을 때 자동 으로 nginx 서 비 스 를 다시 시작 합 니 다. 2 초 동안 휴면 하고 nginx 프로 세 스 를 다시 검사 합 니 다. 존재 하지 않 으 면 keepalived 서 비 스 를 중단 합 니 다.
테스트 스 크 립 트:
$ ps ax|grep nginx
40 pts/1 S+ 0:00 grep --color=auto nginx
$ ./check.sh
nginx status 0
nginx shutdown...
start nginx ...
nginx started...
script end...
$ ps ax|grep nginx
48 ? Ss 0:00 nginx: master process nginx
49 ? S 0:00 nginx: worker process
57 pts/1 S+ 0:00 grep --color=auto nginx
설정 검사
$ keepalived -t
이로써 Keepalived 와 Nginx 가 모두 설정 되 었 습 니 다.
테스트
용기 스냅 샷 만 들 기
$ docker ps -a | grep centos
ace32d2fa597 centos "/bin/bash" About an hour ago Up About an hour centos
$ docker commit ace32d2fa597 centos_keepalived_nginx:0.0.1 #
$ docker images | grep centos_keepalived_nginx
centos_keepalived_nginx 0.0.1 801e75c18232 51 seconds ago 569MB
마스터 용기 만 들 기
스냅 샷 에 따라 마스터 용 기 를 만 듭 니 다.
$ docker run --privileged -itd -p 6698:80 --name keepalived_master --hostname keepalived_master centos_keepalived_nginx:0.0.1 /usr/sbin/init
$ docker run --privileged -itd -p 6699:80 --name keepalived_slave --hostname keepalived_slave centos_keepalived_nginx:0.0.1 /usr/sbin/init
maser 용기 에 들 어가 설정 수정
$ docker exec -it keepalived_master bash # master
$ vi /usr/share/nginx/html/index.html # slave
$ nginx
$ curl localhoast
slave 용기 에 들 어가 설정 수정
$ docker exec -it keepalived_master bash # master
$ vi /usr/share/nginx/html/index.html # slave
$ nginx
$ curl localhoast
테스트 Keepalived
master 용기 의 keepalived 를 시작 합 니 다.
$ docker exec -it keepalived_master bash
$ keepalived
$ curl 172.17.0.200 # curl 172.17.0.210
$ ip address
1: lo: <LOOPBACK,UP,LOWER_UP> mtu 65536 qdisc noqueue state UNKNOWN group default qlen 1000
link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00
inet 127.0.0.1/8 scope host lo
valid_lft forever preferred_lft forever
2: tunl0@NONE: <NOARP> mtu 1480 qdisc noop state DOWN group default qlen 1000
link/ipip 0.0.0.0 brd 0.0.0.0
3: ip6tnl0@NONE: <NOARP> mtu 1452 qdisc noop state DOWN group default qlen 1000
link/tunnel6 :: brd ::
36: eth0@if37: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc noqueue state UP group default
link/ether 02:42:ac:11:00:02 brd ff:ff:ff:ff:ff:ff link-netnsid 0
inet 172.17.0.2/16 brd 172.17.255.255 scope global eth0
valid_lft forever preferred_lft forever
inet 172.17.0.200/32 scope global eth0
valid_lft forever preferred_lft forever
inet 172.17.0.210/32 scope global eth0
valid_lft forever preferred_lft forever
slave 용기 의 keepalived 를 시작 합 니 다.
$ docker exec -it keepalived_slave bash
$ vi /etc/keepalived/keepalived.conf # state BACKUP priority 100 99
$ keepalived
$ curl 172.17.0.200 # curl 172.17.0.210
요약:
어서 오 세 요. 같이 소통...
이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 AI 엔진은 머신러닝 분석(스마트 모델이 방금 만들어져 부정확한 경우가 있을 수 있음)을 통해 가장 유사한 기사를 추천합니다:
첫 번째 Docker for Mac참고 , 나는 옆에 있는 Mac에 Docker를 설치하고 컨테이너를 세워 보고 싶다. Docker Hub를 처음 사용할 때는 계정을 만들어야 합니다. Docker.dmg을 실행하면 Docker가 설치됩니다. Dock...
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
CC BY-SA 2.5, CC BY-SA 3.0 및 CC BY-SA 4.0에 따라 라이센스가 부여됩니다.