1. 程式人生 > >[docker]docker啟動一個小叢集--link

[docker]docker啟動一個小叢集--link

1,docker實現以下架構---所有container在同一臺機器


2,下載映象

docker pull ubuntu
docker pull django
docker pull haproxy
docker pull redis

3,啟動映象

每個映象給個bash

由於需要--link來互聯容器
建立順序: redis-master--->redis-slave--->app--->haproxy
docker run -it --name redis-master redis bash
docker run -it --name redis-slave1 --link redis-master:master redis /bin/bash
docker run -it --name redis-slave2 --link redis-master:master redis /bin/bash
docker run -it --name APP1 --link redis-master:db -v ~/Projects/Django/App1:/usr/src/app django /bin/bash
docker run -it --name APP2 --link redis-master:db -v ~/Projects/Django/App2:/usr/src/app django bash
docker run -it --name HAProxy --link APP1:APP1 --link APP2:APP2 -p 6301:6301 -v ~/Projects/HAProxy:/tmp haproxy /bin/bash

4,配置redis
配置redis主-原始配置檔案自己新安裝一臺匯出
bind 0.0.0.0
daemonize yes
pidfile /var/run/redis_6379.pid

配置redis從
bind 0.0.0.0
daemonize yes
pidfile /var/run/redis_6379.pid
slaveof master 6379

測試:主庫
redis-cli
set master xxx

client: redis-cli ; get master

5,配置app-基於django
cd /usr/src/app/dockerweb
django-admin.py startproject redisweb
./manage.py startapp helloworld
修改views.
from django.shortcuts import render
from django.http improt HttpResponse
# Create your views here.

import redis

def Hello(request):
	str=redis.__file__
	str+="<br>"
	r=redis.Redis(host='db',port=6379,db=0)
	info=r.info()
	str+=("Set Hi <br>")
	r.set("Hi","HelloWorld-APP1")
	str+=("Get Hi: %s <br>"%r.get("Hi"))
	str+="Redis Info: <br>"
	str+=("key: Info Value")
	for key in info:
		str+=("%s:%s<br>"%(key,info[key]))
	return HttpResponse(str)

修改url
from helloworld.views import Hello

urlpatterns = [
    url(r'^helloworld$', Hello),
    url(r'^admin/', admin.site.urls),
]

同步資料庫:
./manage.py makemigrations
./manage.py migrate
python manage.py runserver 0.0.0.0:8001
APP1 APP2一樣
6,配置haproxy
cd /usr/local/sbin
cat > haproxy.cfg
global
    log         127.0.0.1 local2

    chroot      /usr/local/sbin
    maxconn     4000
    daemon
    nbproc      4
    pidfile     /usr/local/sbin/haproxy.pid


defaults
    mode                    http
    log                     global
    option                  httplog
    option                  dontlognull
    option http-server-close
    option forwardfor       except 127.0.0.0/8
    option                  redispatch
    retries                 3
    timeout http-request    10s
    timeout queue           1m
    timeout connect         10s
    timeout client          1m
    timeout server          1m
    timeout http-keep-alive 10s
    timeout check           10s
    maxconn                 3000
    balance                 roundrobin


frontend  redis_proxy 
    bind *:6301
    mode http
    stats enable
    stats uri     /haproxy-stats
    default_backend             app


backend app
    balance     roundrobin
    server APP1 APP1:8001 check inter 2000 rise 2 fall 5
    server APP2 APP2:8001 check inter 2000 rise 2 fall 5
7,訪問測試