Отладка при запуске контейнера docker
Posted in Новости on 13 апреля, 2016 by admin
docker start -a < container_name >
docker start -a < container_name >
Условные обозначения :
node1 - mongo-master.server.com - first_ip
node2 - mongo-slave1.server.com - second_ip
node3 - mongo-slave2.server.com - third_ip
1. Создаем на сервере окружение :
mkdir -p /opt/mongo
cd /opt/mongo
openssl rand -base64 741 > mongodb-keyfile
chmod 600 mongodb-keyfile
chown 999 mongodb-keyfile
2. Собираем и стартуем контейнер на node1 :
docker run --name mongo -v /opt/mongo/mongo-files/data:/data/db -v /opt/mongo/mongo-files:/opt/keyfile --hostname="mongo-master.server.com" -p 27017:27017 -d mongo:2.6.5 --smallfiles
3. Заходим в контейнер
docker exec -it mongo /bin/bash
4. Конфигурируем mongo-master :
mongo
use admin
db.createUser( {
user: "siteUserAdmin",
pwd: "password",
roles: [ { role: "userAdminAnyDatabase", db: "admin" } ]
});
db.createUser( {
user: "siteRootAdmin",
pwd: "password",
roles: [ { role: "root", db: "admin" } ]
});
exit
5. Выходим из контейнера :
exit
docker stop mongo
6. Удаляем текущий контейнер и запускаем новый с ключом :
docker run --name mongo -v /opt/mongo/mongo-files/data:/data/db -v /opt/mongo/mongo-files:/opt/keyfile --hostname="mongo-master.server.com" --add-host mongo-master.server.com:
7. Заходим на node1 в контейнер и включаем репликацию :
docker exec -it mongo /bin/bash
mongo
use admin
db.auth("siteRootAdmin", "password");
rs.initiate()
{
"info2" : "no configuration explicitly specified -- making one",
"me" : "node1.example.com:27017",
"info" : "Config now saved locally. Should come online in about a minute.",
"ok" : 1
}
rs.conf()
{
"_id" : "rs0",
"version" : 1,r
"members" : [
{
"_id" : 0,
"host" : "node1.example.com:27017"
}
]
}
8. Стартуем node2 , node3 mongo docker
docker run --name mongo -v /opt/mongo/mongo-files/data:/data/db -v /opt/mongo/mongo-files:/opt/keyfile --hostname="mongo-slave1.server.com" --add-host mongo-master.server.com:
9. После успешного старта node2, node3 заходим в mongo на мастере и подключаем слейвы :
rs.add("mongo-slave1.server.com")
rs.add("mongo-slave2.server.com")
и проверяем статус :
rs.status()
Итак, на сервере ни с того ни с сего начались проблемы — апач валился по MaxClients. Никаких манипуляций не производилось. Ищем виновника. Смотрим, что делают только что созданные процессы через strace :
root@xxx # strace -p 6806
Process 6806 attached - interrupt to quit
flock(226, LOCK_EXl^C
Process 6806 detached
Видим, что процесс ждет блокировки файлового дескриптора 226.
Далее, смотрим, что это за файл :
root@xxx # ls -la /proc/6806/fd/226
lrwx------ 1 root root 64 Mar 12 18:04 /proc/6806/fd/226 -> /var/www/xxx/data/mod-tmp/sess_udo951qv42mqk3s0l2ggmiqq66
Далее выведем все процессы, которые используют файл :
lsof /var/www/xxx/data/mod-tmp/sess_udo951qv42mqk3s0l2ggmiqq66
Видим, что их много.
Смотрим в один из процессов через lsof -p pid и смотрим, из какого каталога работает процесс.
Топология сети :
| 1.1.1.1 | —— | 2.2.2.2 | —- | 192.168.1.0/24 |
1.1.1.1 — Debian машина без NAT
2.2.2.2 — внешний адрес sonicwall
192.168.1.0/24 — nat за sonicwall, к которому требуется получить доступ из 1.1.1.1
Debian :
1. Ставим openswan :
apt-get update
apt-get upgrade
apt-get install openswan
2. Авторизация будет через PSK ( pre shared key )
cat /etc/ipsec.secret
1.1.1.1 2.2.2.2: PSK "mysecretkey"
3. Далее отключаем правила редиректа трафика и включаем forwarding :
root@xxx:/# sysctl -p
net.ipv4.ip_forward = 1
net.ipv4.conf.all.accept_redirects = 0
net.ipv4.conf.all.send_redirects = 0
4. Вносим правила в iptables :
iptables -A INPUT -s 192.168.1.0/24 -j ACCEPT
iptables -A INPUT -p esp -j ACCEPT
iptables -A INPUT -p udp -m udp --dport 500 -j ACCEPT
iptables -A INPUT -p udp -m udp --dport 4500 -j ACCEPT
iptables -A PREROUTING -s 192.168.1.0/24 -j ACCEPT
iptables -A OUTPUT -p esp -j ACCEPT
iptables -A OUTPUT -p udp -m udp --dport 500 -j ACCEPT
iptables -A OUTPUT -p udp -m udp --sport 4500 -j ACCEPT
iptables -t nat -A POSTROUTING -d 192.168.1.0/24 -j SNAT --to-source 1.1.1.1
iptables -t nat -A POSTROUTING -d 192.168.1.0/24 -j ACCEPT
iptables -t nat -A POSTROUTING -j ACCEPT --destination 192.168.1.0/255.255.255.0
iptables -t nat -A PREROUTING -j ACCEPT --source 192.168.1.0/255.255.255.0
5. Проверяем корректность настроек ( для OpenVZ также со стороны ноды делаем — https://openvz.org/IPsec )
root@xxx:/# ipsec verify
Checking your system to see if IPsec got installed and started correctly:
Version check and ipsec on-path [OK]
Linux Openswan U2.6.38/K2.6.32-042stab108.8 (netkey)
Checking for IPsec support in kernel [OK]
SAref kernel support [N/A]
NETKEY: Testing XFRM related proc values [OK]
[OK]
[OK]
Checking that pluto is running [OK]
Pluto listening for IKE on udp 500 [OK]
Pluto listening for NAT-T on udp 4500 [OK]
Two or more interfaces found, checking IP forwarding [FAILED]
Checking NAT and MASQUERADEing [OK]
Checking for 'ip' command [OK]
Checking /bin/sh is not /bin/dash [WARNING]
Checking for 'iptables' command [OK]
Opportunistic Encryption Support [DISABLED]
6. Приводим конфиг /etc/ipsec.conf к виду :
config setup
nat_traversal=yes
oe=off
nhelpers=0
virtual_private=%v4:192.168.1.0/24
plutostderrlog=/var/log/pluto.log
conn sonicwall
type=tunnel
left=1.1.1.1
leftsubnet=1.1.1.1/32
rightxauthserver=yes
leftid=1.1.1.1
right=2.2.2.2
rightid=2.2.2.2
keyingtries=0
pfs=no
aggrmode=no
auth=esp
esp=3des-sha1
ike=3des-sha1
authby=secret
keyexchange=ike
rightsubnet=192.168.1.0/24
# This allows the VPN to come up automatically when openswan starts
auto=start
ikelifetime=8h
keylife=1h
compress=no
7. Перезагружаем :
/etc/init.d/ipsec restart
Sonicwall :
1. Создаем новое VPN подключение
2. General :
Policy Type - Site-to-Site
Authenication Method - IKE using Preshared Secret
Name - любое имя
IPSEC Primary Gateway Name or Address - 1.1.1.1
IPSEC Secondary Gateway Name or Address - 2.2.2.2
Shared secret - указываем пароль из /etc/ipsec.secret
Local IKE ID - IP Address - 2.2.2.2
Peer IKE ID - IP Address - 1.1.1.1
3. Network :
Local Networks
Choose local network from host - выбираем группу, в которой состоит 192.168.1.0/24 подсеть
Remote Networks
Choose destination network from list - выбираем или создаем группу 1.1.1.1/32
4. Proposals :
IKE Phase 1
Exchange - Main
DH Group - 5
Encryption - 3DES
Authentication - SHA1
Life Time ( seconds ) - 28800
IKE Phase 2
Protocol - ESP
Encryption - 3DES
Authentication - SHA1
Enable Perfect Forward Secrecy - Disable
Life Time ( seconds ) - 28800
5. Advanced :
Enable Keep Alive - enable
All other disable
Default LAN Gateway - 0.0.0.0
6. Применяем изменения и на странице VPN в Sonicwall должен напротив нашего соединения загореться зеленый кружок.
Если moodle установлен в корень сайта ( DOCROOT ) и доступен как, http://site.com/ , то для активации slash arguments нужно в nginx в конфиге сайта в блоке server прописать :
rewrite ^/(.*\.php)(/)(.*)$ /$1?file=/$3 last;