Разработка прикладного API системы распределенной общей памяти МАКС DSM Павел Бойко Листинг 1. Пример простейшей программы с МАКС DSM 1 MDSM_DECLARE(X) // Объявляем группу распределенных переменных с именем «X». 2 int i ; // В данном примере группа содержит всего одну переменную. 3 MDSM_DECLARE_END // 4 5 int main () 6 { 7 int result = 2; 8 9 MDSM_ACCESS_RW( X ) // Демонстрируется доступ на запись 10 MDSM_ITEM( i ) = result + 1; // к переменным группы «X». 11 MDSM_ACCESS_END // 12 13 MDSM_ACCESS_RO( X ) // Демонстрируется доступ на чтение. 14 result = MDSM_ITEM( i ) – 3; // 15 MDSM_ACCESS_END // 16 17 return result; 18 } ----------------------------------------------------------------------------------------- Сборка установочного образа Ubuntu Игорь Орещенков # cp /var/log/syslog /target/var/log/syslog.setup # apt-get install debmirror apt-move genisoimage xz-utils vsftpd listen_ipv6=YES anonymous_enable=NO local_enable=YES write_enable=YES # dhclient -v # service vsftpd restart $ mkdir ./{iso,cdrom} # mount -rt iso9660 /dev/cdrom ./cdrom $ cp -r ./cdrom/{*,.disk} ./iso/ $ chmod -R ug+w ./iso # umount /dev/cdrom $ rmdir ./cdrom $ mv initrd.gz ./iso/ $ mv vmlinuz ./iso/linux #!/bin/sh genisoimage -r -J -V TESTCD -no-emul-boot -boot-load-size 4 -boot-info-table -b isolinux.bin -c boot.cat -o test.iso ./iso $ sh mkcd.sh $ cd ./iso/.disk $ rm mini-info $ touch base_installable $ echo main > base_components $ echo full_cd/single > cd_type $ echo Ubuntu 17.04 "zesty" - i386 Unofficial \(20170511\) > info $ cd ~ $ sh mkcd.sh $ debmirror --nosource -m --progress --ignore-release-gpg --passive --method=http --host=archive.ubuntu.com --root=ubuntu --dist=zesty --section=main/debian-installer --arch=i386 ./repo $ mv ./repo/{dists,pool} ./iso/ $ rm -fr ./repo $ sh mkcd.sh $ tar cf iso.tar ./iso $ rm -fr ./iso $ tar xf iso.tar # dpkg-query -f '${binary:Package}\n' -W > list.txt # apt-get --reinstall -d install `cat list.txt` LOCALDIR=/home/user/repo DIST=zesty FILECACHE=/home/user/apt DELETE=yes $ mkdir /home/user/apt # mv /var/cache/apt/archives/*.deb /home/user/apt/ $ apt-move localupdate $ cd /home/user/repo $ apt-ftparchive packages ./pool | gzip -9 > dists/zesty/main/binary-i386/Packages.gz $ rm ./dists/zesty/Release $ cd .. $ cp -r ./repo/{dists,pool} ./iso/ Origin: Ubuntu Label: Ubuntu Suite: zesty Version: 17.04 Codename: zesty Components: main Architectures: i386 Description: Ubuntu Zesty 17.04 $ cd /home/user/iso/dists/zesty $ apt-ftparchive release . >> Release $ rm InRelease Release.gpg $ cd /home/user $ sh mkcd.sh $ find dists -type f $ cd ./iso $ md5sum `find ! -name "md5sum.txt" ! -name "isolinux.bin" ! -name "boot.cat" -follow -type f` > md5sum.txt $ md5sum -c --quiet md5sum.txt ----------------------------------------------------------------------------------------- «Лаборатория Касперского»: уроки WannaCry cmd.exe /c vssadmin delete shadows /all /quiet & wmic shadowcopy delete & bcdedit /set {default} bootstatuspolicy ignoreallfailures & bcdedit /set {default} recoveryenabled no & wbadmin delete catalog -quiet ----------------------------------------------------------------------------------------- Установка и настройка Postgres-XL в CentOS7 Вячеслав Королев # yum install nano wget net-tools python-devel # yum install glibc gcc make autoconf automake libtool glib2 pcre slang gettext cvs readline-devel zlib-devel # yum groupinstall 'Development Tools'" # nano /etc/yum.repos.d/CentOS-Base.repo exclude=postgresql* # yum update # nano /etc/sysconfig/selinux SELINUX=disabled # reboot # cd /usr/src/ # wget http://files.postgres-xl.org/postgres-xl-9.5r1.4.tar.gz # tar -xvzf postgres-xl-9.5r1.4.tar.gz # cd postgres-xl-9.5r1.4 # ./configure # ./configure --with-python # gmake # gmake install # cat /etc/passwd | grep postgres # adduser postgres # echo 'export PGUSER=postgres' >> /etc/profile # echo 'export PGHOME=/usr/local/pgsql' >> /etc/profile # echo 'export PATH=$PATH:$PGHOME/bin' >> /etc/profile # echo 'export LD_LIBRARY_PATH=$PGHOME/lib' >> /etc/profile # mkdir /usr/local/pgsql/data_coord1 # mkdir /usr/local/pgsql/data_datanode_1 # mkdir /mnt/data_datanode_2 # mkdir /usr/local/pgsql/data_gtm # chown postgres /usr/local/pgsql/data_coord1 # chown postgres /usr/local/pgsql/data_datanode_1 # chown postgres /mnt/data_datanode_2 # chown postgres /usr/local/pgsql/data_gtm # mkdir /usr/local/pgsql/data_coord # mkdir /usr/local/pgsql/data_datanode # mkdir /usr/local/pgsql/data_gtm # chown postgres /usr/local/pgsql/data_coord # chown postgres /usr/local/pgsql/data_datanode # chown postgres /usr/local/pgsql/data_gtm # su - postgres $ /usr/local/pgsql/bin/initgtm -D /usr/local/pgsql/data_gtm -Z gtm $ /usr/local/pgsql/bin/initdb -D /usr/local/pgsql/data_coord1 --nodename coord1 $ /usr/local/pgsql/bin/initdb -D /usr/local/pgsql/data_datanode_1 --nodename datanode_1 $ /usr/local/pgsql/bin/initdb -D /mnt/data_datanode_2 --nodename datanode_2 $ nano /usr/local/pgsql/data_gtm/gtm.conf nodename = 'gtm1' # Имя элемента Postgres_XL listen_addresses = '*' # Прослушиваются все интерфейсы port = 6666 # Порт, который будет прослушиваться startup = ACT # Режим работы - Активный log_file = 'gtm.log' # Имя Лог-файла log_min_messages = WARNING # Уровень логирования $ nano /usr/local/pgsql/data_coord1/postgresql.conf listen_addresses ='*' # Прослушиваются все интерфейсы port = 5433 # Порт, который будет прослушиваться pooler_port = 40100 gtm_host = '10.10.49.152' # IP адрес основного GTM gtm_port = 6666 # Порт адрес основного GTM pgxc_node_name = 'coord1' # Имя элемента Postgres_XL $ nano /usr/local/pgsql/data_coord1/pg_hba.conf # IPv4 local connections: host all all 127.0.0.1/32 trust host all all 10.10.0.0/16 trust # IPv6 local connections: #host all all ::1/128 trust $ nano /usr/local/pgsql/data_datanode_1/postgresql.conf listen_addresses ='*' # Прослушиваются все интерфейсы port = 15432 # Порт, который будет прослушиваться pooler_port = 40101 gtm_host = '10.10.49.152' # IP адрес основного GTM gtm_port = 6666 # Порт адрес основного GTM pgxc_node_name = 'datanode_1' # Имя элемента Postgres_XL $ nano /mnt/data_datanode_2/postgresql.conf listen_addresses ='*' # Прослушиваются все интерфейсы port = 15433 # Порт, который будет прослушиваться pooler_port = 40102 gtm_host = '10.10.49.152' # IP адрес основного GTM gtm_port = 6666 # Порт адрес основного GTM pgxc_node_name = 'datanode_2' # Имя элемента Postgres_XL $ nano /mnt/data_datanode_2/pg_hba.conf # IPv4 local connections: host all all 127.0.0.1/32 trust host all all 10.10.0.0/16 trust # IPv6 local connections: #host all all ::1/128 trust $ nano /usr/local/pgsql/data_gtm/gtm.conf nodename = 'gtm2' # Имя элемента Postgres_XL listen_addresses = '*' # Прослушиваются все интерфейсы port = 6666 # Порт, который будет прослушиваться startup = STANDBY # Режим работы - Активный active_host = '10.10.49.152' # IP основного GTM сервера active_port = 6666 # Порт основного GTM сервера log_file = 'gtm.log' # Имя Лог-файла log_min_messages = WARNING # Уровень логирования synchronous_backup = on $ gtm_ctl start -Z gtm -D /usr/local/pgsql/data_gtm >logfile_gtm 2>&1 & $ gtm_ctl stop -Z gtm -D /usr/local/pgsql/data_gtm $ pg_ctl start -D /usr/local/pgsql/data_coord1 -Z coordinator -l logfile_coord 2>&1 & $ pg_ctl start -D /usr/local/pgsql/data_coord -Z coordinator -l logfile_coord 2>&1 & $ pg_ctl stop -D /usr/local/pgsql/data_coord1 -Z coordinator $ pg_ctl start -D /usr/local/pgsql/data_datanode_1 -Z datanode -l logfile_datanode_1 2>&1 & $ pg_ctl start -D /mnt/data_datanode_2 -Z datanode -l logfile_datanode_2 2>&1 & $ pg_ctl start -D /usr/local/pgsql/data_datanode -Z datanode -l logfile_datanode 2>&1 & $ pg_ctl stop -D /mnt/data_datanode_2 -Z datanode # netstat -ltupn | grep 'postgres' # netstat -ltupn | grep 'gtm' # su - postgres $ psql -p 5433 postgres=# delete from pgxc_node; postgres=# create node coord1 with (type=coordinator, host='10.10.49.152', port=5433); postgres=# create node datanode_1 with (type=datanode, host='10.10.49.152', port=15432); postgres=# create node datanode_2 with (type=datanode, host='10.10.49.152', port=15433); postgres=# create node coord2 with (type=coordinator, host='10.10.49.154', port=5433); postgres=# create node datanode_3 with (type=datanode, host='10.10.49.154', port=15432); postgres=# SELECT pgxc_pool_reload(); postgres=# select * from pgxc_node; postgres=# EXECUTE DIRECT ON (datanode_1) 'create node coord1 with (type=coordinator, host=''10.10.49.152'', port=5433)'; postgres=# EXECUTE DIRECT ON (datanode_1) 'create node datanode_2 with (type=datanode, host=''10.10.49.152'', port=15433)'; postgres=# EXECUTE DIRECT ON (datanode_1) 'create node coord2 with (type=coordinator, host=''10.10.49.154'', port=5433)'; postgres=# EXECUTE DIRECT ON (datanode_1) 'create node datanode_3 with (type=datanode, host=''10.10.49.154'', port=15432)'; postgres=# EXECUTE DIRECT ON (datanode_1) 'ALTER NODE datanode_1 WITH (TYPE = ''datanode'', HOST = ''10.10.49.152'', PORT = 15432)'; postgres=# EXECUTE DIRECT ON (datanode_1) 'SELECT pgxc_pool_reload()'; postgres=# EXECUTE DIRECT ON (datanode_1) 'select * from pgxc_node'; # touch /etc/systemd/system/postgres-xl-start.service # chmod 664 /etc/systemd/system/postgres-xl-start.service # nano /etc/systemd/system/postgres-xl-start.service [Unit] Description=Claster Postgres XL Start After=network.target [Service] #Type=notify Type=oneshot User=root ExecStart=/usr/bin/start_postgres_xl.sh #ExecStop=/usr/local/pgsql/bin/gtm_ctl stop -Z gtm -D /usr/local/pgsql/data_gtm #TimeoutSec=20s [Install] WantedBy=multi-user.target # touch /usr/bin/start_postgres_xl.sh # chmod +x /usr/bin/start_postgres_xl.sh # nano /usr/bin/start_postgres_xl.sh #! /bin/sh PATH=/usr/local/sbin:/usr/local/bin:/sbin:/bin:/usr/sbin:/usr/bin set -e su - postgres -c '/usr/local/pgsql/bin/pg_ctl -Z coordinator start -D /usr/local/pgsql/data_coord1/' >>/usr/local/pgsql/data_coord1/logfile_coord 2>&1 su - postgres -c '/usr/local/pgsql/bin/pg_ctl -Z datanode start -D /usr/local/pgsql/data_datanode_1/' >>/usr/local/pgsql/data_datanode_1/logfile_datanode_1 2>&1 su - postgres -c '/usr/local/pgsql/bin/pg_ctl -Z datanode start -D /mnt/data_datanode_2/' >>/mnt/data_datanode_2/logfile_datanode_2 2>&1 su - postgres -c '/usr/local/pgsql/bin/gtm_ctl -Z gtm start -D /usr/local/pgsql/data_gtm/' >>/usr/local/pgsql/data_gtm/logfile_gtm 2>&1 exit 0 #! /bin/sh PATH=/usr/local/sbin:/usr/local/bin:/sbin:/bin:/usr/sbin:/usr/bin set -e su - postgres -c '/usr/local/pgsql/bin/pg_ctl -Z coordinator start -D /usr/local/pgsql/data_coord/' >>/usr/local/pgsql/data_coord/logfile_coord 2>&1 su - postgres -c '/usr/local/pgsql/bin/pg_ctl -Z datanode start -D /usr/local/pgsql/data_datanode/' >>/usr/local/pgsql/data_datanode/logfile_datanode 2>&1 su - postgres -c '/usr/local/pgsql/bin/gtm_ctl -Z gtm start -D /usr/local/pgsql/data_gtm/' >>/usr/local/pgsql/data_gtm/logfile_gtm 2>&1 su - postgres -c '/usr/local/pgsql/bin/gtm_ctl -Z gtm start -D /usr/local/pgsql/data_gtm/' >>/usr/local/pgsql/data_gtm/logfile_gtm 2>&1 exit 0 # systemctl daemon-reload # systemctl enable postgres-xl-start # systemctl start postgres-xl-start postgres=# CREATE TABLE log1 ( id SERIAL PRIMARY KEY, log_mess text, log_date timestamp DEFAULT now() ) distribute by REPLICATION; postgres=# CREATE TABLE log2 ( id SERIAL PRIMARY KEY, log_mess text, log_date timestamp DEFAULT now() ) DISTRIBUTE BY HASH (id); INSERT INTO log1 (log_mess) SELECT s FROM generate_series(1, 100) s; INSERT INTO log2 (log_mess) SELECT s FROM generate_series(1, 100) s; postgres=# explain analyze select count(*) from log1; postgres=# explain analyze select count(*) from log2; $ psql -p 15432 postgres=# \d postgres=# SELECT * FROM log1; postgres=# SELECT * FROM log2; -----------------------------------------------------------------------------------------