Инструменты пользователя

Инструменты сайта


asterisk_в_отказоустойчивой_конфигурации

Различия

Здесь показаны различия между двумя версиями данной страницы.

Ссылка на это сравнение

Предыдущая версия справа и слева Предыдущая версия
Следующая версия
Предыдущая версия
asterisk_в_отказоустойчивой_конфигурации [2019/03/13 15:04]
val [Перемещение контейнера на другой узел с помощью Pacemaker]
asterisk_в_отказоустойчивой_конфигурации [2019/04/16 16:15] (текущий)
val [Asterisk в отказоустойчивой конфигурации]
Строка 1: Строка 1:
 ====== Asterisk в отказоустойчивой конфигурации ====== ====== Asterisk в отказоустойчивой конфигурации ======
  
-===== Базовая настройка узлов =====+  * Вебинар не про Asterisk))) а реклама курса [[https://​www.specialist.ru/​course/​un5|Linux. Уровень 6. Создание отказоустойчивых кластерных решений.]] 
 +  * [[https://​youtu.be/​U-LOU6dkBqs|Запись вебинара]] 
 +===== Шаг 1. Анализ сети в классе/​дома ===== 
 + 
 +<​code>​ 
 +cmd 
 + 
 +C:​\>​ipconfig /all 
 +</​code>​ 
 + 
 +===== Шаг 2. Базовая настройка узлов ===== 
 + 
 +  * Импортируем два узла из [[http://​val.bmstu.ru/​unix/​img/​My%20Documents/​debian_9.5_64_03.ova|образа]] в [[https://​www.virtualbox.org/​|VirtualBox]] 
 +  * Называем node1 и node2 
 +  * Подключаем к сети класса/​дома 
 <​code>​ <​code>​
 node1:~# cat /​etc/​hostname node1:~# cat /​etc/​hostname
 +</​code><​code>​
 node1 node1
 +</​code><​code>​
 node1:~# cat /etc/hosts node1:~# cat /etc/hosts
 +</​code><​code>​
 127.0.0.1 ​      ​localhost 127.0.0.1 ​      ​localhost
  
-10.5.12.114     ​node1 +10.5.7.114     ​node1 
-10.5.12.214     ​node2 +10.5.7.214     ​node2 
 +</​code><​code>​
 node1:~# cat /​etc/​resolv.conf node1:~# cat /​etc/​resolv.conf
-nameserver 10.5.12.254 +</​code><​code>​ 
 +nameserver 10.5.7.254 
 +</​code><​code>​
 node1:~# cat /​etc/​network/​interfaces node1:~# cat /​etc/​network/​interfaces
 +</​code><​code>​
 auto lo auto lo
 iface lo inet loopback iface lo inet loopback
Строка 21: Строка 40:
 auto eth0 auto eth0
 iface eth0 inet static iface eth0 inet static
-        address 10.5.12.114+        address 10.5.7.114
         netmask 255.255.255.0         netmask 255.255.255.0
-        gateway 10.5.12.254 +        gateway 10.5.7.254 
-        +</​code><​code>​
 node1:~# init 6 node1:~# init 6
 +</​code><​code>​
 node1:~# apt update node1:~# apt update
 +
 node1:~# ssh-keygen node1:~# ssh-keygen
 +</​code>​
 +  * Настраиваем ip адес на node2 
 +<​code>​
 node1:~# ssh-copy-id node2 node1:~# ssh-copy-id node2
 +</​code><​code>​
 +scp /etc/hosts node2:/etc/
 +scp /​etc/​hostname node2:/etc/
 +scp /​etc/​resolv.conf node2:/etc/
 +scp /​etc/​network/​interfaces node2:/​etc/​network/​
  
-node1:~# scp /etc/hosts node2:/​etc/​ +</code><​code>​
-node1:~# scp /​etc/​hostname node2:/​etc/​ +
-node1:~# scp /​etc/​resolv.conf node2:/​etc/​ +
-node1:~# scp /​etc/​network/​interfaces node2:/​etc/​network/​ +
 node1:~# ssh node2 node1:~# ssh node2
  
 node2:~# cat /​etc/​hostname node2:~# cat /​etc/​hostname
 +</​code><​code>​
 node2 node2
 +</​code><​code>​
 node2:~# cat /​etc/​network/​interfaces node2:~# cat /​etc/​network/​interfaces
 +</​code><​code>​
 auto lo auto lo
 iface lo inet loopback iface lo inet loopback
Строка 47: Строка 73:
 auto eth0 auto eth0
 iface eth0 inet static iface eth0 inet static
-        address 10.5.12.214+        address 10.5.7.214
         netmask 255.255.255.0         netmask 255.255.255.0
-        gateway 10.5.12.254 +        gateway 10.5.7.254 
 +</​code><​code>​
 node2:~# init 6 node2:~# init 6
 +</​code><​code>​
 node2:~# apt update node2:~# apt update
 </​code>​ </​code>​
 +===== Шаг 3. Сервис DRBD =====
 +
 +<​code>​
 +nodeN:~# init 0
 +</​code>​
 +
 +  * Добавляем в оба узла по жесткому диску
  
-===== Сервис DRBD ===== 
 <​code>​ <​code>​
 nodeN:~# lshw -C disk nodeN:~# lshw -C disk
Строка 65: Строка 97:
  
 nodeN:~# cat /​etc/​drbd.d/​global_common.conf nodeN:~# cat /​etc/​drbd.d/​global_common.conf
 +</​code><​code>​
 ... ...
         startup {         startup {
Строка 71: Строка 104:
         }         }
 ... ...
 +</​code><​code>​
 # cat /​etc/​drbd.d/​r0.res # cat /​etc/​drbd.d/​r0.res
 +</​code><​code>​
 resource r0 { resource r0 {
         on node1 {         on node1 {
                 device /dev/drbd0;                 device /dev/drbd0;
                 disk /dev/sdb;                 disk /dev/sdb;
-                address 10.5.12.114:7788;+                address 10.5.7.114:7788;
                 meta-disk internal;                 meta-disk internal;
         }         }
Строка 83: Строка 117:
                 device /dev/drbd0;                 device /dev/drbd0;
                 disk /dev/sdb;                 disk /dev/sdb;
-                address 10.5.12.214:7788;+                address 10.5.7.214:7788;
                 meta-disk internal;                 meta-disk internal;
         }         }
 } }
 +</​code><​code>​
 nodeN:~# drbdadm create-md r0 nodeN:~# drbdadm create-md r0
 +</​code><​code>​
 !!! Одновременно !!! !!! Одновременно !!!
 nodeN:~# systemctl start drbd nodeN:~# systemctl start drbd
Строка 95: Строка 129:
 node1:~# drbdadm -- --overwrite-data-of-peer primary r0 node1:~# drbdadm -- --overwrite-data-of-peer primary r0
  
-node1:~# watch cat /proc/drbd+node2:~# watch cat /proc/drbd 
 + 
 +node1:~# mkfs -t ext4 /dev/drbd0
  
 node1:~# mount /dev/drbd0 /disk2 node1:~# mount /dev/drbd0 /disk2
 </​code>​ </​code>​
  
-===== Технология LXC (часть 1) =====+===== Шаг 4. Технология LXC (часть 1) ===== 
 + 
 +  * Рассказать про технологию в процессе создания образа
  
 <​code>​ <​code>​
 nodeN:~# apt install lxc nodeN:~# apt install lxc
  
-nodeN:~# rmdir /​var/​lib/​lxc/​+nodeN:~# rmdir /​var/​lib/​lxc/ ​
 nodeN:~# ln -s /​disk2/​var/​lib/​lxc/​ /​var/​lib/​lxc nodeN:~# ln -s /​disk2/​var/​lib/​lxc/​ /​var/​lib/​lxc
  
 node1:~# mkdir -p /​disk2/​var/​lib/​lxc/​ node1:~# mkdir -p /​disk2/​var/​lib/​lxc/​
  
-node1:~# lxc-create -t debian -n server+node1:​~# ​time lxc-create -t debian -n server 
 +real    6m19.549s 
 +real    14m13.770s 
 +...
 </​code>​ </​code>​
  
-  * Пока загружается образ, переходим к следующей теме +  * Пока загружается образ, ​можно выполнить темы 12, 13, 5 и сделать перерыв 
-===== Настройка bridge =====+ 
 +===== Шаг 5. Настройка bridge =====
 <​code>​ <​code>​
 node1:~# cat /​etc/​network/​interfaces node1:~# cat /​etc/​network/​interfaces
 +</​code><​code>​
 auto lo auto lo
 iface lo inet loopback iface lo inet loopback
Строка 122: Строка 165:
 auto br0 auto br0
 iface br0 inet static iface br0 inet static
-        address 10.5.12.114+        address 10.5.7.114
         netmask 255.255.255.0         netmask 255.255.255.0
-        gateway 10.5.12.254+        gateway 10.5.7.254
         bridge_ports eth0         bridge_ports eth0
 +</​code><​code>​
 node2:~# cat /​etc/​network/​interfaces node2:~# cat /​etc/​network/​interfaces
 +</​code><​code>​
 auto lo auto lo
 iface lo inet loopback iface lo inet loopback
Строка 133: Строка 177:
 auto br0 auto br0
 iface br0 inet static iface br0 inet static
-        address 10.5.12.214+        address 10.5.7.214
         netmask 255.255.255.0         netmask 255.255.255.0
-        gateway 10.5.12.254+        gateway 10.5.7.254
         bridge_ports eth0         bridge_ports eth0
 </​code>​ </​code>​
  
-===== Настройка дочерней системы =====+===== Шаг 6. Технология LXC (часть 2) ===== 
 + 
 +<​code>​ 
 +node1:~# cat /​var/​lib/​lxc/​server/​config 
 +</​code><​code>​ 
 +... 
 +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 
 +</​code>​ 
 + 
 +===== Шаг 7. Настройка дочерней системы =====
  
 <​code>​ <​code>​
 node1:~# chroot /​var/​lib/​lxc/​server/​rootfs/​ /bin/bash node1:~# chroot /​var/​lib/​lxc/​server/​rootfs/​ /bin/bash
  
-node1:~# PS1='​server:​\w#​ '+root@node1:/# PS1='​server:​\w#​ '
  
 server:/# apt update server:/# apt update
  
-server:/# apt purge resolvconf ​isc-dhcp-client+server:/# apt purge isc-dhcp-client
  
 server:/# apt install nano vim iputils-ping server:/# apt install nano vim iputils-ping
  
 server:/# cat /​etc/​hostname server:/# cat /​etc/​hostname
 +</​code><​code>​
 server server
 +</​code><​code>​
 server:/# cat /etc/hosts server:/# cat /etc/hosts
 +</​code><​code>​
 127.0.0.1 ​      ​localhost 127.0.0.1 ​      ​localhost
  
-10.5.12.123     ​server +10.5.7.123     ​server 
 +</​code><​code>​
 server:/# cat /​etc/​resolv.conf server:/# cat /​etc/​resolv.conf
-nameserver 10.5.12.254+</​code><​code>​ 
 +nameserver 10.5.7.254
 </​code>​ </​code>​
  
-===== Технология LXC (часть 2) ===== +===== Шаг 8. Запуск DRBD и LCX вручную ​=====
 <​code>​ <​code>​
-node1:~# cat /​var/​lib/​lxc/​server/​config +nodeN:~# init 0
-... +
-lxc.network.type = veth +
-lxc.network.link = br0 +
-lxc.network.flags = up +
-lxc.network.ipv4 = 10.5.12.123/​24 +
-lxc.network.ipv4.gateway = 10.5.12.254+
 </​code>​ </​code>​
- +  * В настройке сети обоих узлов разрешить "неразборчивый режим"​ для "​всех"​
-===== Запуск DRBD и LCX вручную =====+
 <​code>​ <​code>​
-nodeN:~# init 0 +!!! Одновременно !!!
- +
-В настройке сети обоих узлов разрешить "неразборчивый режим"​ +
 nodeN:~# systemctl start drbd nodeN:~# systemctl start drbd
  
Строка 192: Строка 241:
 node1:~# lxc-info -n server node1:~# lxc-info -n server
  
-node1:~# lxc-attach ​-n server ​-- bash+node1:~# lxc-start -n server
  
-root@server:~# apt install asterisk +node1:~# lxc-info -n server
-</​code>​+
  
-  * Пока устанавливается Asterisk, переходим к следующей теме +node1:~# lxc-attach -n server -- bash
-===== Пакет Corosync ===== +
-<​code>​ +
-nodeN:~# apt install corosync+
  
-nodeN:~# cat /​etc/​corosync/​corosync.conf +root@server:~# time apt install asterisk 
-... +real    3m20.521s
-bindnetaddr:​ 10.5.12.0 +
-... +
-mcastaddr: 239.255.1.14 +
-... +
- +
-nodeN:~# systemctl restart corosync  +
- +
-nodeN:~# corosync-cmapctl | grep members+
 </​code>​ </​code>​
  
-===== Пакет Pacemaker (базовая ​конфигурация) ===== +  * Пока устанавливается Asterisk, можно сделать перерыв
-<​code>​ +
-nodeN:~# apt install pacemaker+
  
-nodeN:~# crm_mon -1+===== Шаг 9. Минимальная настройка Asterisk =====
  
-nodeN:~# apt install crmsh+  * Можно просто продемонстрировать анонимный звонок на номер 1000
  
-nodeN:~# crm status 
- 
-nodeN:~# 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 
-</​code>​ 
- 
-===== Минимальная настройка Asterisk ===== 
 <​code>​ <​code>​
 root@server:​~#​ cat /​etc/​asterisk/​sip.conf root@server:​~#​ cat /​etc/​asterisk/​sip.conf
 +</​code><​code>​
 [general] [general]
 transport=udp transport=udp
Строка 246: Строка 269:
 type=friend type=friend
 host=dynamic host=dynamic
 +allowsubscribe=no 
 +</​code><​code>​
 root@server:​~#​ cat /​etc/​asterisk/​extensions.conf root@server:​~#​ cat /​etc/​asterisk/​extensions.conf
 +</​code><​code>​
 [default] [default]
  
Строка 256: Строка 281:
 exten => 311,​1,​Answer() exten => 311,​1,​Answer()
      same => n,Echo()      same => n,Echo()
 +</​code><​code>​
 root@server:​~#​ asterisk -rv root@server:​~#​ asterisk -rv
  
Строка 272: Строка 297:
   * Подключаем softphone и тестируем   * Подключаем softphone и тестируем
  
-===== Перемещение контейнера на другой узел вручную =====+===== Шаг 10. Перемещение контейнера на другой узел вручную =====
 <​code>​ <​code>​
 node1:~# lxc-stop -n server node1:~# lxc-stop -n server
Строка 278: Строка 303:
 node1:~# lxc-info -n server node1:~# lxc-info -n server
  
-node1:~# umount /disk2+node1:~# umount /​disk2 ​  #​примерно,​ через минуту
  
 node1:~# drbdadm secondary r0 node1:~# drbdadm secondary r0
Строка 291: Строка 316:
 </​code>​ </​code>​
  
-===== Управление местоположением контейнера с помощью Pacemaker ​=====+  * через минуту, пере подключаем софтфон 
 + 
 +===== Шаг 11. Багфикс lxc для systemd ​=====
 <​code>​ <​code>​
 +node2:~# lxc-stop -n server
 +
 nodeN:~# mkdir /​etc/​systemd/​system/​lxc@server.service.d/​ nodeN:~# mkdir /​etc/​systemd/​system/​lxc@server.service.d/​
  
 nodeN:~# cat /​etc/​systemd/​system/​lxc@server.service.d/​kill_signal_fix.conf nodeN:~# cat /​etc/​systemd/​system/​lxc@server.service.d/​kill_signal_fix.conf
 +</​code><​code>​
 [Service] [Service]
 KillSignal=SIGRTMIN+3 KillSignal=SIGRTMIN+3
 +</​code><​code>​
 +node2:~# systemctl start lxc@server
 +
 +node2:~# systemctl status lxc@server
 +
 +node2:~# lxc-info -n server
  
 node2:~# systemctl stop lxc@server node2:~# systemctl stop lxc@server
  
 +node2:~# lxc-info -n server
 +</​code>​
 +
 +===== Шаг 12. Пакет Corosync =====
 +<​code>​
 +nodeN:~# apt install corosync
 +
 +nodeN:~# cat /​etc/​corosync/​corosync.conf
 +</​code><​code>​
 +...
 +bindnetaddr:​ 10.5.7.0
 +...
 +mcastaddr: 239.255.1.14
 +...
 +</​code><​code>​
 +nodeN:~# systemctl restart corosync ​
 +
 +nodeN:~# corosync-cmapctl | grep members
 +</​code>​
 +
 +===== Шаг 13. Пакет Pacemaker (базовая конфигурация) =====
 +<​code>​
 +nodeN:~# apt install pacemaker
 +
 +nodeN:~# crm_mon -1
 +
 +node1:~# apt install crmsh
 +
 +node1:~# crm status
 +
 +node1:~# crm configure show
 +
 +node1:~# crm
 +</​code><​code>​
 +configure property stonith-enabled=false
 +configure property no-quorum-policy=ignore
 +configure property default-resource-stickiness=100
 +configure show
 +exit
 +</​code>​
 +
 +===== Шаг 14. Управление местоположением контейнера с помощью Pacemaker =====
 +<​code>​
 node2:~# umount /disk2 node2:~# umount /disk2
 +
 +node2:~# drbdadm secondary r0
  
 nodeN:~# systemctl stop drbd nodeN:~# systemctl stop drbd
  
-nodeN:~# apt install psmisc+nodeN:~# apt install psmisc ​   #​сюда входит утилита fuser
  
 node1:~# crm configure node1:~# crm configure
 +</​code><​code>​
 primitive pr_drbd_r0 ocf:​linbit:​drbd params drbd_resource="​r0"​ op monitor interval="​15s"​ 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"​ ms ms_drbd_r0 pr_drbd_r0 meta master-max="​1"​ master-node-max="​1"​ clone-max="​2"​ clone-node-max="​1"​ notify="​true"​
Строка 318: Строка 400:
 group gr_fs_lxc pr_fs_r0 pr_lxc_server group gr_fs_lxc pr_fs_r0 pr_lxc_server
 commit commit
 +exit
 +</​code><​code>​
 +node1:~# crm status
 </​code>​ </​code>​
  
 +===== Шаг 15. Проверки =====
 +
 +  * "​Убиваем"​ по очереди узлы
 +
 +<​code>​
 +nodeN:~# crm_mon
 +
 +nodeN:~# watch cat /proc/drbd
 +</​code>​
asterisk_в_отказоустойчивой_конфигурации.1552478643.txt.gz · Последние изменения: 2019/03/13 15:04 — val