====== Asterisk в отказоустойчивой конфигурации ======
* [[https://youtu.be/U-LOU6dkBqs|Запись вебинара]]
* Вебинар не про Asterisk))) а реклама курса [[https://www.specialist.ru/course/un5|Linux. Уровень 6. Создание отказоустойчивых кластерных решений.]]
===== Шаг 1. Анализ сети в классе/дома =====
cmd
C:\>ipconfig /all
===== Шаг 2. Базовая настройка узлов =====
* Импортируем два узла из [[http://val.bmstu.ru/unix/img/My%20Documents/debian_9.5_64_03.ova|образа]] в [[https://www.virtualbox.org/|VirtualBox]]
* Называем node1 и node2
* Подключаем к сети класса/дома
node1:~# cat /etc/hostname
node1
node1:~# cat /etc/hosts
127.0.0.1 localhost
10.5.7.114 node1
10.5.7.214 node2
node1:~# cat /etc/resolv.conf
nameserver 10.5.7.254
node1:~# cat /etc/network/interfaces
auto lo
iface lo inet loopback
auto eth0
iface eth0 inet static
address 10.5.7.114
netmask 255.255.255.0
gateway 10.5.7.254
node1:~# init 6
node1:~# apt update
node1:~# ssh-keygen
* Настраиваем ip адес на node2
node1:~# ssh-copy-id node2
scp /etc/hosts node2:/etc/
scp /etc/hostname node2:/etc/
scp /etc/resolv.conf node2:/etc/
scp /etc/network/interfaces node2:/etc/network/
node1:~# ssh node2
node2:~# cat /etc/hostname
node2
node2:~# cat /etc/network/interfaces
auto lo
iface lo inet loopback
auto eth0
iface eth0 inet static
address 10.5.7.214
netmask 255.255.255.0
gateway 10.5.7.254
node2:~# init 6
node2:~# apt update
===== Шаг 3. Сервис DRBD =====
nodeN:~# init 0
* Добавляем в оба узла по жесткому диску
nodeN:~# lshw -C disk
nodeN:~# mkdir /disk2
nodeN:~# apt install drbd8-utils
nodeN:~# cat /etc/drbd.d/global_common.conf
...
startup {
...
wfc-timeout 30;
}
...
# cat /etc/drbd.d/r0.res
resource r0 {
on node1 {
device /dev/drbd0;
disk /dev/sdb;
address 10.5.7.114:7788;
meta-disk internal;
}
on node2 {
device /dev/drbd0;
disk /dev/sdb;
address 10.5.7.214:7788;
meta-disk internal;
}
}
nodeN:~# drbdadm create-md r0
!!! Одновременно !!!
nodeN:~# systemctl start drbd
node1:~# drbdadm -- --overwrite-data-of-peer primary r0
node2:~# watch cat /proc/drbd
node1:~# mkfs -t ext4 /dev/drbd0
node1:~# mount /dev/drbd0 /disk2
===== Шаг 4. Технология LXC (часть 1) =====
* Рассказать про технологию в процессе создания образа
nodeN:~# apt install lxc
nodeN:~# rmdir /var/lib/lxc/
nodeN:~# ln -s /disk2/var/lib/lxc/ /var/lib/lxc
node1:~# mkdir -p /disk2/var/lib/lxc/
node1:~# time lxc-create -t debian -n server
real 6m19.549s
real 14m13.770s
...
* Пока загружается образ, можно выполнить темы 12, 13, 5 и сделать перерыв
===== Шаг 5. Настройка bridge =====
node1:~# cat /etc/network/interfaces
auto lo
iface lo inet loopback
auto br0
iface br0 inet static
address 10.5.7.114
netmask 255.255.255.0
gateway 10.5.7.254
bridge_ports eth0
node2:~# cat /etc/network/interfaces
auto lo
iface lo inet loopback
auto br0
iface br0 inet static
address 10.5.7.214
netmask 255.255.255.0
gateway 10.5.7.254
bridge_ports eth0
===== Шаг 6. Технология LXC (часть 2) =====
node1:~# cat /var/lib/lxc/server/config
...
lxc.network.type = veth
lxc.network.link = br0
lxc.network.flags = up
lxc.network.ipv4 = 10.5.7.123/24
lxc.network.ipv4.gateway = 10.5.7.254
===== Шаг 7. Настройка дочерней системы =====
node1:~# chroot /var/lib/lxc/server/rootfs/ /bin/bash
root@node1:/# PS1='server:\w# '
server:/# apt update
server:/# apt purge isc-dhcp-client
server:/# apt install nano vim iputils-ping
server:/# cat /etc/hostname
server
server:/# cat /etc/hosts
127.0.0.1 localhost
10.5.7.123 server
server:/# cat /etc/resolv.conf
nameserver 10.5.7.254
===== Шаг 8. Запуск DRBD и LCX вручную =====
nodeN:~# init 0
* В настройке сети обоих узлов разрешить "неразборчивый режим" для "всех"
!!! Одновременно !!!
nodeN:~# systemctl start drbd
nodeN:~# cat /proc/drbd
node1:~# drbdadm primary r0
node1:~# mount /dev/drbd0 /disk2
node1:~# lxc-info -n server
node1:~# lxc-start -n server
node1:~# lxc-info -n server
node1:~# lxc-attach -n server -- bash
root@server:~# time apt install asterisk
real 3m20.521s
* Пока устанавливается Asterisk, можно сделать перерыв
===== Шаг 9. Минимальная настройка Asterisk =====
* Можно просто продемонстрировать анонимный звонок на номер 1000
root@server:~# cat /etc/asterisk/sip.conf
[general]
transport=udp
disallow=all
allow=alaw
[401]
secret=tpassword401
type=friend
host=dynamic
allowsubscribe=no
root@server:~# cat /etc/asterisk/extensions.conf
[default]
exten => 301,1,Answer()
exten => 301,n,Playback(hello-world)
exten => 301,n,Hangup()
exten => 311,1,Answer()
same => n,Echo()
root@server:~# asterisk -rv
server*CLI> core reload
server*CLI> sip show users
server*CLI> sip show peers
server*CLI> dialplan show default
server*CLI> exit
* Подключаем softphone и тестируем
===== Шаг 10. Перемещение контейнера на другой узел вручную =====
node1:~# lxc-stop -n server
node1:~# lxc-info -n server
node1:~# umount /disk2 #примерно, через минуту
node1:~# drbdadm secondary r0
node1:~# cat /proc/drbd
node2:~# drbdadm primary r0
node2:~# mount /dev/drbd0 /disk2
node2:~# lxc-start -n server
* через минуту, пере подключаем софтфон
===== Шаг 11. Багфикс lxc для systemd =====
node2:~# lxc-stop -n server
nodeN:~# mkdir /etc/systemd/system/lxc@server.service.d/
nodeN:~# cat /etc/systemd/system/lxc@server.service.d/kill_signal_fix.conf
[Service]
KillSignal=SIGRTMIN+3
node2:~# systemctl start lxc@server
node2:~# systemctl status lxc@server
node2:~# lxc-info -n server
node2:~# systemctl stop lxc@server
node2:~# lxc-info -n server
===== Шаг 12. Пакет Corosync =====
nodeN:~# apt install corosync
nodeN:~# cat /etc/corosync/corosync.conf
...
bindnetaddr: 10.5.7.0
...
mcastaddr: 239.255.1.14
...
nodeN:~# systemctl restart corosync
nodeN:~# corosync-cmapctl | grep members
===== Шаг 13. Пакет Pacemaker (базовая конфигурация) =====
nodeN:~# apt install pacemaker
nodeN:~# crm_mon -1
node1:~# apt install crmsh
node1:~# crm status
node1:~# crm configure show
node1:~# crm
configure property stonith-enabled=false
configure property no-quorum-policy=ignore
configure property default-resource-stickiness=100
configure show
exit
===== Шаг 14. Управление местоположением контейнера с помощью Pacemaker =====
node2:~# umount /disk2
node2:~# drbdadm secondary r0
nodeN:~# systemctl stop drbd
nodeN:~# apt install psmisc #сюда входит утилита fuser
node1:~# crm configure
primitive pr_drbd_r0 ocf:linbit:drbd params drbd_resource="r0" op monitor interval="15s"
ms ms_drbd_r0 pr_drbd_r0 meta master-max="1" master-node-max="1" clone-max="2" clone-node-max="1" notify="true"
primitive pr_fs_r0 ocf:heartbeat:Filesystem params device="/dev/drbd0" directory="/disk2" fstype="ext4"
colocation col_fs_on_drbd inf: pr_fs_r0 ms_drbd_r0:Master
order or_fs_after_drbd inf: ms_drbd_r0:promote pr_fs_r0:start
primitive pr_lxc_server systemd:lxc@server
group gr_fs_lxc pr_fs_r0 pr_lxc_server
commit
exit
node1:~# crm status
===== Шаг 15. Проверки =====
* "Убиваем" по очереди узлы
nodeN:~# crm_mon
nodeN:~# watch cat /proc/drbd