DRBD + 1C 8.2 + Postgress настройка отказоустойчивого кластера на базе Ubuntu Server 12.10

Обновляем систему

aptitude update
aptitude full-upgrade

Поставим необходимые пакеты

apt-get install ntp ntpdate drbd8-utils drbdlinks mc ssh console-cyrillic libxslt1.1 libreadline5 heartbeat

Настройка hostname:
Конфигурация одинакова на обоих нодах:
nano /etc/hosts

127.0.0.1 localhost
10.10.10.26 node1.kas.lh node1
10.10.10.27 node2.kas.lh node2

Правим /etc/drbd.conf на обоих нодах нашего кластера

global {
usage-count no;
}
common {
syncer { rate 100M; }
protocol C;
}
resource data {
startup {
wfc-timeout 0;
degr-wfc-timeout
120;
}
disk { on-io-error detach; }
on node1 {
device /dev/drbd0;
disk /dev/sdb;
address 10.10.10.26:7791;
meta-disk internal;
}
on node2{
device /dev/drbd0;
disk /dev/sdb;
address 10.10.10.27:7791;
meta-disk internal;
}
}

resource: Ссылаемся на ресурс, который будет управлять по DRBD, и мы его называли «Postgres»
disk: Указываем устройство которое будет использовать DRBD (диск или раздел)
address: IP-адрес и порт, который будет использовать DRBD (мы указали Cross-Over интерфейсы)
syncer: Скорость передачи данных между узлами

drbdadm create-md data

[root@node1 ~]# drbdadm create-md data

[root@node2 ~]# drbdadm create-md data

[root@node2 ~]# drbdadm data

[root@node1 ~]# drbdsetup /dev/drbd0 primary -o

Запускаем первоначальную синхронизацию и идем пить чай/курить/спать )))

[root@node1 ~]# watch cat /proc/drbd

Every 2.0s: cat /proc/drbd Tue Dec 18 08:02:12 2012

version: 8.3.13 (api:88/proto:86-96)
srcversion: 697DE8B1973B1D8914F04DB
0: cs:SyncSource ro:Primary/Secondary ds:UpToDate/Inconsistent C r——
ns:17387520 nr:0 dw:0 dr:17388184 al:0 bm:1061 lo:0 pe:0 ua:0 ap:0 ep:1 wo:f oos:716593244
[>………………..] sync’ed: 2.4% (699796/716776)Mfinish: 1:51:54 speed: 106,704 (102,884) K/sec
После успешной синхронизации имеем
Every 2.0s: cat /proc/drbd Tue Dec 18 10:01:34 2012

version: 8.3.13 (api:88/proto:86-96)
srcversion: 697DE8B1973B1D8914F04DB
0: cs:Connected ro:Primary/Secondary ds:UpToDate/UpToDate C r——
ns:733980764 nr:0 dw:0 dr:733981428 al:0 bm:44799 lo:0 pe:0 ua:0 ap:0 ep:1 wo:f oos:0

Отформатируем диск
root@node1:~# mkfs.ext3 /dev/drbd0
mke2fs 1.42.5 (29-Jul-2012)
Filesystem label=
OS type: Linux
Block size=4096 (log=2)
Fragment size=4096 (log=2)
Stride=0 blocks, Stripe width=0 blocks
45875200 inodes, 183495191 blocks
9174759 blocks (5.00%) reserved for the super user
First data block=0
Maximum filesystem blocks=4294967296
5600 block groups
32768 blocks per group, 32768 fragments per group
8192 inodes per group
Superblock backups stored on blocks:
32768, 98304, 163840, 229376, 294912, 819200, 884736, 1605632, 2654208,
4096000, 7962624, 11239424, 20480000, 23887872, 71663616, 78675968,
102400000

Allocating group tables: done

 

Создаем файлы

root@node1:/etc/ha.d# cat authkeys
auth 1
1 sha1 password

root@node1:/etc/ha.d# cat ha.cf
logfacility local0
ucast eth0 10.10.10.27
auto_failback on
node node1 node2

root@node1:/etc/ha.d# cat haresources
node1 10.10.10.25/24/eth0:1 drbddisk Filesystem::/dev/drbd0::/cluster::ext3
root@node1:/etc/ha.d#
root@node2:/etc/ha.d# cat authkeys
auth 1
1 sha1 password

root@node2:/etc/ha.d# cat ha.cf
logfacility local0
ucast eth0 10.10.10.26
auto_failback on
node node1 node2

root@node2:/etc/ha.d# cat haresources
node1 10.10.10.25/24/eth0:1 drbddisk Filesystem::/dev/drbd0::/cluster::ext3
root@node1#chmod 600 /etc/ha.d/authkeys
root@node2#chmod 600 /etc/ha.d/authkeys

service drbd start на обоих серверах
service heartbeat start на обоих серверах

Для проверки работоспособности кластера можно использовать утилиты ifconfig, df, ps.
Сервер, который в настоящий момент является ведущим, должен иметь:
настроенный интерфейс eth0:1 с IP-адресом 10.10.10.25
смонтированную директорию /cluster

Получилось? итак, приступаем к установке и настройке связки SAMBA (для аутентификации в домене) PostgreSQL и 1С 8.2

Дальше действия идентичны на обоих серверах

root@node1# apt-get install samba samba-common winbind krb5-user libkrb5-3 krb5-config
root@node2# apt-get install samba samba-common winbind krb5-user libkrb5-3 krb5-config

nano /etc/krb5.conf

———————————————-
[libdefaults]
default_realm = kas.LH
kdc_timesync = 1
ccache_type = 4
forwardable = true
proxiable = true
v4_instance_resolve = false
v4_name_convert = {
host = {
rcmd = host
ftp = ftp
}
plain = {
something = something-else
}
}
fcc-mit-ticketflags = true

[realms]
kas.LH = {
kdc = dc8
kdc = dc10
admin_server = dc8
default_domain = kas.LH
}

[domain_realm]
.kas.lh = kas.LH
kas.lh = kas.LH
[login]
krb4_convert = false
krb4_get_tickets = false

———————————————-
Получаем билет кербероса

kinit lexit
Password for lexit@kas.LH:

nano /etc/samba/smb.conf
———————————————-
[global]
workgroup = kas
server string =
#security = DOMAIN
# Если у вас AD, то используйте следующие опции:
security = ADS
realm = kas.LH

map to guest = Bad User
obey pam restrictions = Yes
password server = kerberos.artpaint
passdb backend = tdbsam
unix password sync = Yes

syslog = 0
log file = /var/log/samba/log.%m
max log size = 1000

socket options = TCP_NODELAY IPTOS_LOWDELAY SO_RCVBUF=8192 SO_SNDBUF=8192
dns proxy = No
wins server = 192.168.10.8

usershare allow guests = Yes
# panic action = /usr/share/samba/panic-action %d
idmap uid = 10000-20000
idmap gid = 10000-20000

winbind enum users = Yes
winbind enum groups = Yes
winbind use default domain = Yes

[tmp]
comment = Temporary files
path = /tmp
read only = No

create mask = 0644
directory mask = 0744
guest ok = Yes

[IPC$]
path = /tmp
hosts allow = 192.168.0.0/24, 10.10.10.0/24, 127.0.0.1

hosts deny = 0.0.0.0/0

———————————————-
cat /etc/nsswitch.conf
passwd: compat winbind
group: compat winbind
shadow: compat

hosts: files dns
networks: files

protocols: db files
services: db files
ethers: db files
rpc: db files

netgroup: nis

———————————————
sudo net ads join -U lexit
Enter lexit’s password:
Using short domain name — kas
Joined ‘NODE1’ to realm ‘kas.lh’
———————————————

root@node1:~# service smbd restart
smbd stop/waiting
smbd start/running, process 3705
root@node1:~# service winbind restart
winbind stop/waiting
winbind start/running, process 3723
root@node1:~#

Проверяем
wbinfo -t
checking the trust secret via RPC calls succeeded

wbinfo -u
user1
user2

wbinfo -g
user1
user2

Изменяем параметры ядра:
/sbin/sysctl -w kernel.shmmax=40000000000
/sbin/sysctl -w kernel.shmall=40000000000

echo «kernel.shmmax = 40000000000» >> /etc/sysctl.conf
echo «kernel.shmall = 40000000000» >> /etc/sysctl.conf
sysctl -p

sudo aptitude -R install libicu48 libxslt1.1 libxml2

root@node1:~/postgresql# locale-gen en_US ru_RU.UTF-8
Generating locales…
en_US.ISO-8859-1… done
ru_RU.UTF-8… done
Generation complete.

wget ftp://updates.etersoft.ru/pub/Etersoft/Postgres@Etersoft/8.3.8/x86_64/Ubuntu/9.10/postgresql-8.3eter-contrib_8.3.8-eter2.1ubuntu_amd64.deb
wget ftp://updates.etersoft.ru/pub/Etersoft/Postgres@Etersoft/8.3.8/x86_64/Ubuntu/9.10/postgresql-8.3eter-server_8.3.8-eter2.1ubuntu_amd64.deb
wget ftp://updates.etersoft.ru/pub/Etersoft/Postgres@Etersoft/8.3.8/x86_64/Ubuntu/9.10/postgresql-8.3eter_8.3.8-eter2.1ubuntu_amd64.deb

dpkg -i postgresql-8.3eter*

mkdir /cluster/var/lib/pgsql -p
chown postgres:postgres /cluster/var/lib/pgsql -R
cp -R /var/lib/pgsql /cluster/var/lib/pgsql

Правим /etc/init.d/postgresql

Переменные
PGDATA=/cluster/var/lib/pgsql/data
PGLOG=/cluster/var/lib/pgsql/pgstartup.log

На главной ноде
root@node1:~/postgresql# /etc/init.d/postgresql start
Initializing database: [ DONE ]

Starting postgresql service: [ DONE ]

Правим /cluster/var/lib/pgsql/data/pg_hba.conf
Было
host all all 0.0.0.0/0 md5
Стало
host all all 0.0.0.0/0 trust

 

root@node1:~/postgresql# /etc/init.d/postgresql restart
Stopping postgresql service: [ DONE ]

Starting postgresql service: [ DONE ]
root@node1:~/postgresql#

root@node1:~/postgresql# psql -h localhost -U postgres template1
Welcome to psql 8.3.8-eter1, the PostgreSQL interactive terminal.

Type: \copyright for distribution terms
\h for help with SQL commands
\? for help with psql commands
\g or terminate with semicolon to execute query
\q to quit

template1=# ALTER USER postgres WITH PASSWORD ‘SECRET’;
ALTER ROLE
template1=# \q

Правим в исходное /cluster/var/lib/pgsql/data/pg_hba.conf

host all all 0.0.0.0/0 md5

Рестартим постгрес
/etc/init.d/postgresql restart

touch /etc/ha.d/resource.d/pgsql
chmod +x /etc/ha.d/resource.d/pgsql

—————————————-
nano /etc/ha.d/resource.d/pgsql

#!/bin/sh -e

PGVERSION=8.3.8
PGMAJORVERSION=`echo «$PGVERSION» | sed ‘s/^\([0-9]*\.[0-9]*\).*$/\1/’`
PGENGINE=/usr/bin
PGPORT=5432
PGDATA=/cluster/var/lib/pgsql/data
LC_ALL=ru_RU.UTF-8
SU=su
PGLOG=/cluster/var/lib/pgsql/pgstartup.log
SERVNAME=postgresql
NAME=postgresql

start(){
$SU -s /bin/sh -l postgres -c «$PGENGINE/postmaster -p ‘$PGPORT’ -D ‘$PGDATA’ ${PGOPTS} &» >> «$PGLOG» 2>&1 < /dev/null
sleep 2
pid=`pidof -s «$PGENGINE/postmaster»`
if [ $pid ] && [ -f «$PGDATA/postmaster.pid» ]
then
if [ -d /var/lock/subsys ] ; then
touch /var/lock/subsys/${NAME}
else
mkdir -p /var/lock/subsys
touch /var/lock/subsys/${NAME}
fi
head -n 1 «$PGDATA/postmaster.pid» > «/var/run/postmaster.${PGPORT}.pid»
fi
}

stop(){
$SU -l -s /bin/sh -c «$PGENGINE/pg_ctl stop -D $PGDATA -m fast» postgres > /dev/null 2>&1 < /dev/null
rm -f /var/run/postmaster.${PGPORT}.pid > /dev/null 2>&1
rm -f /var/lock/subsys/${NAME} > /dev/null 2>&1
rm -f $PGDATA/postmaster.pid > /dev/null 2>&1
echo
}

restart(){
stop
start
}

reload(){
if [ -e /var/lock/subsys/${NAME} ] ; then
$SU -l -s /bin/sh -c «$PGENGINE/pg_ctl reload -D ‘$PGDATA’ -s» postgres > /dev/null 2>&1 < /dev/null
fi
}

status() {
$SU -l -s /bin/sh -c «$PGENGINE/pg_ctl status -D ‘$PGDATA’ -s» postgres
}

case «$1» in
start)
echo «* Starting PostgreSQL server …»
start
return 0
;;
stop)
echo «* Stoping service PostgreSQL …»
stop
return 0
;;
status)
status
return 0
;;
restart)
restart
return 0
;;
reload|force-reload)
reload
return 0
;;
*)
echo $»Usage: $0 {start|stop|status|restart|reload|force-reload}»
exit 1
esac
exit 0
——————————————————————————————

т.к постгрес будет запускаться у нас средствами HA правим /etc/ha.d/haresources на обоих серверах
node1 10.10.10.25/24/eth0:1 drbddisk Filesystem::/dev/drbd0::/cluster::ext3 pgsql

 

root@node1:~# cd /home/lexit/
root@node1:~# mkdir 1c
root@node1:~# cd 1c

wget http://users.v8.1c.ru/getdist.jsp?path=Platform/8_2_17_143/deb64.tar.gz

После распаковки имеем

root@node1:~/1c# ls -lh
total 355M
-rw-r—r— 1 12119 10513 24M Nov 14 21:03 1c-enterprise82-common_8.2.17-143_amd64.deb
-rw-r—r— 1 12119 10513 972K Nov 14 21:03 1c-enterprise82-common-nls_8.2.17-143_amd64.deb
-rw-r—r— 1 12119 10513 123M Nov 14 21:03 1c-enterprise82-server_8.2.17-143_amd64.deb
-rw-r—r— 1 12119 10513 32M Nov 14 21:04 1c-enterprise82-server-nls_8.2.17-143_amd64.deb
-rw-r—r— 1 12119 10513 175K Nov 14 21:04 1c-enterprise82-ws_8.2.17-143_amd64.deb
-rw-r—r— 1 12119 10513 9.4K Nov 14 21:04 1c-enterprise82-ws-nls_8.2.17-143_amd64.deb
-rw-rw-r— 1 lexit root 177M Dec 18 16:42 deb64.tar.gz

dpkg -i *.deb понеслась!

root@node1:~/1c# ln -s /usr/lib/locale/en_US.utf8 /usr/lib/locale/en_US
root@node1:~/1c# ln -s /usr/share/locale/en /usr/share/locale/en_US
root@node1:~/1c# chown -R usr1cv82:grp1cv82 /opt/1C
root@node1:~/1c# cd /etc/init.d/
root@node1:/etc/init.d# sudo chown root:root srv1cv82
root@node1:/etc/init.d# sudo mkdir /var/log/1c
root@node1:/etc/init.d# sudo chown usr1cv82:grp1cv82 /var/log/1c
root@node1:/etc/init.d# sudo touch /opt/1C/v8.2/x86_64/conf/logcfg.xml
root@node1:/etc/init.d# chown usr1cv82:grp1cv82 /opt/1C/v8.2/x86_64/conf/logcfg.xml
root@node1:/etc/init.d# nano /opt/1C/v8.2/x86_64/conf/logcfg.xml
———————————————-
<?xml version=»1.0″ encoding=»UTF-8″?>
<config xmlns=»http://v8.1c.ru/v8/tech-log»>
<log location=»/var/log/1c/» history=»168″>

<event>
<eq property=»name» value=»EXCP»/>
</event>
<property name=»all»/>

</log>
</config>
———————————————-

root@node1:/etc/init.d# sudo update-rc.d srv1cv82 defaults
update-rc.d: warning: /etc/init.d/srv1cv82 missing LSB information
update-rc.d: see <http://wiki.debian.org/LSBInitScripts>
Adding system startup for /etc/init.d/srv1cv82 …
/etc/rc0.d/K20srv1cv82 -> ../init.d/srv1cv82
/etc/rc1.d/K20srv1cv82 -> ../init.d/srv1cv82
/etc/rc6.d/K20srv1cv82 -> ../init.d/srv1cv82
/etc/rc2.d/S20srv1cv82 -> ../init.d/srv1cv82
/etc/rc3.d/S20srv1cv82 -> ../init.d/srv1cv82
/etc/rc4.d/S20srv1cv82 -> ../init.d/srv1cv82
/etc/rc5.d/S20srv1cv82 -> ../init.d/srv1cv82
root@node1:/etc/init.d# service srv1cv82 start
Starting 1C:Enterprise 8.2 server: OK
root@node1:/etc/init.d#

 

На второй ноде все по аналогии

Проверяем
root@node1:/etc/init.d# ps axj | grep v8
1 3166 3166 3166 ? -1 Ssl 10366 0:00 /opt/1C/v8.2/x86_64/ragent -daemon
3166 3175 3166 3166 ? -1 Sl 10366 0:00 /opt/1C/v8.2/x86_64/rmngr -port 1541 -range 1560:1591
3166 3189 3166 3166 ? -1 Sl 10366 0:00 /opt/1C/v8.2/x86_64/rphost -range 1560:1591 -reghost node1 -regport 1541 -pid 2d6ab096-4912-11e2-999b-000c29a46c3a
2535 3234 3233 2448 pts/0 3233 S+ 0 0:00 grep —color=auto v8
root@node1:/etc/init.d#

root@node1:/cluster# ps axj | grep postgr
2476 2485 2485 2485 ? -1 Ss 26 0:00 postgres: writer process
2476 2486 2486 2486 ? -1 Ss 26 0:00 postgres: wal writer process
2476 2487 2487 2487 ? -1 Ss 26 0:00 postgres: autovacuum launcher process
2476 2488 2488 2488 ? -1 Ss 26 0:00 postgres: stats collector process
2395 2493 2492 1798 pts/1 2492 S+ 0 0:00 grep —color=auto postgr
root@node1:/cluster#

root@node2:~# ps axj | grep v8
1 1496 1496 1496 ? -1 Ssl 1001 0:00 /opt/1C/v8.2/x86_64/ragent -daemon
1496 1505 1496 1496 ? -1 Sl 1001 0:00 /opt/1C/v8.2/x86_64/rmngr -port 1541 -range 1560:1591
1496 1519 1496 1496 ? -1 Sl 1001 0:00 /opt/1C/v8.2/x86_64/rphost -range 1560:1591 -reghost node2 -regport 1541 -pid 32278a6e-4912-11e2-6597-000c294902c0
2108 2183 2182 2020 pts/1 2182 S+ 0 0:00 grep —color=auto v8
root@node2:~# ps axj | grep postgr
2108 2185 2184 2020 pts/1 2184 S+ 0 0:00 grep —color=auto postgr
root@node2:/opt/1C/v8.2/x86_64/utils# ./config_server
ls: cannot access /lib/libc-*.so: No such file or directory
Usage: file [-bchikLlNnprsvz0] [—apple] [—mime-encoding] [—mime-type]
[-e testname] [-F separator] [-f namefile] [-m magicfiles] file …
file -C [-m magicfiles]
file [—help]
./config_server: line 149: [: =: unary operator expected
ls: cannot access /lib64/libc-*.so: No such file or directory
Usage: file [-bchikLlNnprsvz0] [—apple] [—mime-encoding] [—mime-type]
[-e testname] [-F separator] [-f namefile] [-m magicfiles] file …
file -C [-m magicfiles]
file [—help]
./config_server: line 149: [: =: unary operator expected
./config_server: line 193: [: too many arguments
./config_server: line 193: [: too many arguments
./config_server: line 193: [: too many arguments
./config_server: line 193: [: too many arguments
./config_server: line 193: [: too many arguments
Can not detect font directory, please specify it!
root@node2:/opt/1C/v8.2/x86_64/utils#

 

Ага! Первые грабли редактируем Config_server

1. В начало функции getLibPath
добавить

checkPath lib/x86_64-linux-gnu $ARCH && { echo /usr/lib/x86_64-linux-gnu; return; }
2. тело функции checkInstalledLibs
заменить на

SYSTEM_LIB_PATH=»/usr/lib»
checkLib MagickWand Wand || checkLib Wand || askToInstall ImageMagick
checkLib gsf-1 || askToInstall libgsf

SYSTEM_LIB_PATH=»/usr/lib/x86_64-linux-gnu»
checkLib freetype || askToInstall FreeType
checkLib glib-2.0 || askToInstall libglib
checkLib odbc || askToInstall UnixODBC
root@node2:/opt/1C/v8.2/x86_64/utils# ./config_server
Please install following package: ImageMagick
Please install following package: libgsf
Please install following package: libglib
Please install following package: UnixODBC
Can not detect font directory, please specify it!
root@node2:/opt/1C/v8.2/x86_64/utils#

Так то лучше )))
aptitude install ttf-mscorefonts-installer
aptitude install t1utils libt1-5
wget http://altruistic.lbl.gov/mirrors/ubuntu/pool/universe/t/ttf2pt1/ttf2pt1_3.4.4-1.3_amd64.deb
dpkg -i ttf2pt1_3.4.4-1.3_amd64.deb
apt-get install unixodbc
apt-get install imagemagick
apt-get install libgsf-bin
apt-get install libglib2.0-dev
На этом настройка кластера под БД завершена… Итак, имеем два сервера: node1 и node2 Выполняем следующие шаги:
Ставим на клиентскую машину консоль Администрирование сервера 1С: Предприятие

Добавляем 2 кластера в консоль

На обоих серверах выполнить следующие настройки

— В список резервирования node1 добавить node2 (должен быть 2-м в списке)
— В список резервирования node2 добавить node1 (должен быть 1-м в списке)
— Дождаться синхронизации списка информационных баз и сеансов
— На клиентах в параметрах подключения к ИБ указать в поле «Имя сервера» строку node1;node2
— Для терминальных клиентов изменить параметр запуска 1С следующим образом: вместо /S node1/baza указать /S node1;node2/UPP (крайне важная настройка)

На node1 добавить новый рабочий сервер node2. В настройках указать диапазон портов со сдвигом, чтобы не пересекался со стандартным. Например, если у нас 5 рабочих процессов, то рабочий диапазон портов 1560-1568 — в этом случае нужно указать диапазон 1590-1598
— На node2 добавить новый рабочий сервер node1. В настройках указать диапазон портов указываем также со сдвигом

 

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *

Time limit is exhausted. Please reload the CAPTCHA.

Этот сайт использует Akismet для борьбы со спамом. Узнайте, как обрабатываются ваши данные комментариев.