{"id":633,"date":"2014-04-28T20:00:29","date_gmt":"2014-04-28T18:00:29","guid":{"rendered":"http:\/\/vm.piszki.pl\/horizon-workspace-wysokodost%c4%99pny-klaster-bazodanowy-oparty-o-vpostgres"},"modified":"2014-06-04T09:39:36","modified_gmt":"2014-06-04T07:39:36","slug":"horizon-workspace-wysokodost%c4%99pny-klaster-bazodanowy-oparty-o-vpostgres","status":"publish","type":"post","link":"https:\/\/vm.piszki.pl\/?p=633","title":{"rendered":"Horizon Workspace: Wysokodost\u0119pny klaster bazodanowy oparty o vPostgres"},"content":{"rendered":"<p align=\"justify\">W zwi\u0105zku z premier\u0105 Horizon Workspace 1.8 (konieczno\u015b\u0107 wykonanie upgrade), oraz rozpoczynaj\u0105cymi si\u0119 testami naszego nowego rozwi\u0105zania opartego w cz\u0119\u015bci na Workspace, postanowi\u0142em przemodelowa\u0107 ca\u0142kowicie \u015brodowisko w jakim on funkcjonuje. Na pierwszy rzut posz\u0142a <a href=\"http:\/\/myvirtualife.net\/2013\/08\/07\/configuring-redundancy-for-horizon-workspace-virtual-machines-aka-how-to-scale-horizon-workspace\/\">baza danych<\/a>. Ju\u017c od jakiego\u015b czasu jeste\u015bmy posiadaczami element\u00f3w VMware vFabric, w tym <a href=\"http:\/\/blogs.vmware.com\/vfabric\/tag\/vpostgres\">vPostgresa<\/a>, z kt\u00f3rego jeste\u015bmy bardzo zadowoleni (bo kto by nie by\u0142 zadowolony z posiadanego produkcyjnego wsparcia na baz\u0119 danych typu PostgreSQL). W przygotowanym rozwi\u0105zaniu wykorzysta\u0142em trzy instalacje vPostgres Appliance 9.3.2, dwie dzia\u0142aj\u0105ce w trybie instancji g\u0142\u00f3wnej i repliki (jako backup ostateczny) oraz trzeciej dzia\u0142aj\u0105cej aktywnie. Nody dzia\u0142aj\u0105ce w trybie aktywnym s\u0105 replikowane poprzez PGpool-II (zainstalowany osobno na CentOS). W takim schemacie PGpool-II to SPOF, dlatego najlepiej jest przygotowa\u0107 dwie instalacje i u\u017cy\u0107 load balancera (w naszym przypadku na produkcji BIG-IP F5). Lub wykorzysta\u0107 dwie instalacje PGpool-II z w\u0142\u0105czonym Watchdogiem i p\u0142ywaj\u0105cym pomi\u0119dzy maszynami \u201cwirtualnym\u201d adresem IP (tak dzia\u0142a instalacja w labie). Opisywane przeze mnie rozwi\u0105zanie jest jak najbardziej uniwersalne, mo\u017ce by\u0107 z powodzeniem u\u017cyte do uruchomienia <a href=\"http:\/\/vmwaremine.com\/2014\/01\/19\/vcac-6-0-series-part-1-architecture\">klastra PostgreSQL<\/a> dla <a href=\"http:\/\/grantorchard.com\/vcac\/implementation\/configuring-external-vpostgres-database-vcac-6-0\/\">vCloud Automation Center<\/a> (i zapewne w przysz\u0142o\u015bci do vCSA 6.0 kt\u00f3re ma wspiera\u0107 zewn\u0119trzn\u0105 baz\u0119 danych PostgreSQL).<\/p>\n<p><a href=\"https:\/\/vm.piszki.pl\/wp-content\/uploads\/2014\/04\/postgres_cluster.png\"><img loading=\"lazy\" decoding=\"async\" style=\"background-image: none; float: none; padding-top: 0px; padding-left: 0px; margin-left: auto; display: block; padding-right: 0px; margin-right: auto; border: 0px;\" title=\"postgres_cluster\" src=\"https:\/\/vm.piszki.pl\/wp-content\/uploads\/2014\/04\/postgres_cluster_thumb.png\" alt=\"postgres_cluster\" width=\"427\" height=\"169\" border=\"0\" \/><\/a><\/p>\n<p><!--more--><\/p>\n<p align=\"justify\">W pierwszej kolejno\u015bci musimy przygotowa\u0107 wszystkie serwery vPostgres tak, aby <a href=\"http:\/\/myvirtualife.net\/2013\/07\/21\/preparing-vpostgres-as-external-database-for-horizon-workspace\/\">poprawnie<\/a> dzia\u0142a\u0142y z Horizon Workspace.<\/p>\n<p align=\"justify\">W pliku <code>\/<\/code><code>var<\/code><code>\/vmware\/vpostgres\/current\/pgdata\/postgresql.conf <span style=\"font-family: calibri;\">ustawiamy dwie zmienne (uwaga: poni\u017cej linii include postgresql.conf.auto)<\/span>:<\/code><\/p>\n<p><code>max_connections = <\/code><code>600<\/code><\/p>\n<p><code>search_path = <\/code><code>'saas'<\/code><\/p>\n<p align=\"justify\"><code><span style=\"font-family: calibri;\">Nast\u0119pnie restartujemy (jako root) vPostgres poleceniem: service vpostgres_mon stop\/start.<\/span><\/code><\/p>\n<p align=\"justify\"><code><span style=\"font-family: calibri;\">W kolejnym kroku konfigurujemy par\u0119 serwer\u00f3w g\u0142\u00f3wny \u2013&gt; replika. Zak\u0142adamy baz\u0119 danych, mo\u017ce mie\u0107 dowoln\u0105 nazw\u0119, niekoniecznie saas (to samo dotyczy w\u0142a\u015bciciela bazy danych). Wa\u017cne aby za\u0142o\u017cony zosta\u0142 schemat o nazwie saas oraz za\u0142adowane rozszerzenie citext wskazuj\u0105ce na schemat saas, tak jak na poni\u017cszym rysunku (bez tego Workspace b\u0119dzie raportowa\u0142 b\u0142\u0119dy bazy danych):<\/span><\/code><\/p>\n<p><code><a href=\"https:\/\/vm.piszki.pl\/wp-content\/uploads\/2014\/03\/postgres1.png\"><img loading=\"lazy\" decoding=\"async\" style=\"background-image: none; float: none; padding-top: 0px; padding-left: 0px; margin-left: auto; display: block; padding-right: 0px; margin-right: auto; border-width: 0px;\" title=\"postgres1\" src=\"https:\/\/vm.piszki.pl\/wp-content\/uploads\/2014\/03\/postgres1_thumb.png\" alt=\"postgres1\" width=\"424\" height=\"304\" border=\"0\" \/><\/a><\/code><\/p>\n<p align=\"justify\">Mamy przygotowan\u0105 baz\u0119 danych, przechodzimy na drugi serwer, kt\u00f3ry b\u0119dzie replik\u0105, do katalogu: \/opt\/vmware\/vpostgres\/current\/scripts i wykonujemy nast\u0119puj\u0105ce polecenie (jako u\u017cytkownik postgres):<\/p>\n<p>.\/run_as_replica -h IP_MASTER -b -W -U postgres<\/p>\n<p align=\"justify\">Skrypt zainicjuje zamian\u0119 wszystkich potrzebnych ustawie\u0144 na obydwu serwerach vPostgres. Po zako\u0144czeniu jego wykonywania b\u0119dziemy mie\u0107 dzia\u0142aj\u0105c\u0105 poprawnie par\u0119 Master\u2014&gt;Slave.<\/p>\n<p><a href=\"https:\/\/vm.piszki.pl\/wp-content\/uploads\/2014\/03\/postgres2.png\"><img loading=\"lazy\" decoding=\"async\" style=\"background-image: none; float: none; padding-top: 0px; padding-left: 0px; margin-left: auto; display: block; padding-right: 0px; margin-right: auto; border-width: 0px;\" title=\"postgres2\" src=\"https:\/\/vm.piszki.pl\/wp-content\/uploads\/2014\/03\/postgres2_thumb.png\" alt=\"postgres2\" width=\"425\" height=\"172\" border=\"0\" \/><\/a><\/p>\n<p align=\"justify\">Stan replikacji mo\u017cemy sprawdzi\u0107 skryptem show_replication_status:<\/p>\n<p><a href=\"https:\/\/vm.piszki.pl\/wp-content\/uploads\/2014\/03\/postgres3.png\"><img loading=\"lazy\" decoding=\"async\" style=\"background-image: none; float: none; padding-top: 0px; padding-left: 0px; margin-left: auto; display: block; padding-right: 0px; margin-right: auto; border-width: 0px;\" title=\"postgres3\" src=\"https:\/\/vm.piszki.pl\/wp-content\/uploads\/2014\/03\/postgres3_thumb.png\" alt=\"postgres3\" width=\"423\" height=\"74\" border=\"0\" \/><\/a><\/p>\n<p align=\"justify\">Po ewentualnej awarii wystarczy wykona\u0107 skrypt promote_replica_to_primary aby slave przeszed\u0142 w tryb zapisu. Je\u015bli poprzestaniemy na takiej konfiguracji, to po wypromowaniu nowego serwera typu master, musimy zmieni\u0107 \u015bcie\u017ck\u0119 JDBC w Horizon Workspace Connector r\u0119cznie:<\/p>\n<p align=\"justify\"><a href=\"https:\/\/vm.piszki.pl\/wp-content\/uploads\/2014\/03\/horizon4.png\"><img loading=\"lazy\" decoding=\"async\" style=\"background-image: none; float: none; padding-top: 0px; padding-left: 0px; margin-left: auto; display: block; padding-right: 0px; margin-right: auto; border-width: 0px;\" title=\"horizon4\" src=\"https:\/\/vm.piszki.pl\/wp-content\/uploads\/2014\/03\/horizon4_thumb.png\" alt=\"horizon4\" width=\"380\" height=\"155\" border=\"0\" \/><\/a><\/p>\n<p align=\"justify\">Wst\u0119pn\u0105 konfiguracj\u0119 mamy zrobion\u0105, teraz zainstalujemy i skonfigurujemy <a href=\"http:\/\/pgpool.projects.pgfoundry.org\/pgpool-II\/doc\/tutorial-en.html\">PG_POOL<\/a>. Ja wybra\u0142em jako podstaw\u0119 instalacji dystrybucj\u0119 linuksa CentOS, z wielu wzgl\u0119d\u00f3w, jest darmowa i wspierana w bardzo wielu rozwi\u0105zaniach zwi\u0105zanych z vSphere (np. Trend Micro Deep Security). Niestety w wersji 64-bitowej nie ma pakietu PGpool-II, nale\u017cy go <a href=\"http:\/\/www.pgpool.net\/mediawiki\/index.php\/Downloads#CentOS_6_x86_64\">\u015bci\u0105gn\u0105\u0107<\/a> i zainstalowa\u0107 r\u0119cznie. Mo\u017cna oczywi\u015bcie zainstalowa\u0107 go te\u017c bezpo\u015brednio w Appliance vPostgres, ale tutaj nale\u017cy pami\u0119ta\u0107, \u017ce nie jest to do ko\u0144ca \u201cstandardowa\u201d dystrybucja i mo\u017ce sprawia\u0107 nam <a href=\"http:\/\/drillchina.wordpress.com\/2013\/07\/24\/install-pgpool-with-vpostgres\/\">problemy<\/a> przy kolejnym upgrade (je\u015bli w niej namieszamy). Poza tym, stosuj\u0105c loadbalancer, \u0142atwiej jest wygenerowa\u0107 kolejne nody PGpool-II ni\u017c kolejne instancje vPostgres.<\/p>\n<p align=\"justify\">Konfiguracja PGpool-II nie jest trudna, wszystkie potrzebne pliki znajduj\u0105 si\u0119 w \/etc\/pgpool-II. W pliku pgpool.conf ustawiamy nast\u0119puj\u0105ce opcje:<\/p>\n<div class=\"csharpcode\">\n<pre class=\"alt\"><span style=\"font-family: Arial; font-size: xx-small;\">listen_adress = \u2018*\u2019\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 &lt;\u2014s\u0142uchamy na ka\u017cdym interfejsie<\/span><\/pre>\n<pre><span style=\"font-family: Arial; font-size: xx-small;\">port = 5432                 &lt;\u2014domy\u015blnie jest 9999, ale to tylko w przypadku gdy pgpool jest instalowany razem z PostgreSQL<\/span><\/pre>\n<pre class=\"alt\"><span style=\"font-family: Arial; font-size: xx-small;\">backend_hostname0 = \u2018ugdbp1.pulab.local\u2019  &lt;\u2014nazwa pierwszego noda<\/span><\/pre>\n<pre><span style=\"font-family: Arial; font-size: xx-small;\">backend_port0 = 5432        &lt;\u2014port bazy danych<\/span><\/pre>\n<pre class=\"alt\"><span style=\"font-family: Arial; font-size: xx-small;\">backend_weight0 = 1\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 &lt;\u2014priorytet<\/span><\/pre>\n<pre><span style=\"font-family: Arial; font-size: xx-small;\">backend_hostname1 = \u2018ugdbp2.pulab.local\u2019 &lt;\u2014nazwa drugiego noda<\/span><\/pre>\n<pre class=\"alt\"><span style=\"font-family: Arial; font-size: xx-small;\">backend_port1 = 5432<\/span><\/pre>\n<pre><span style=\"font-family: Arial; font-size: xx-small;\">backend_weight1 = 1         &lt;\u2014czyli maj\u0105 ten sam priorytet<\/span><\/pre>\n<pre class=\"alt\"><span style=\"font-family: Arial; font-size: xx-small;\">enable_pool_hba = on\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 &lt;\u2014mo\u017cliwo\u015b\u0107 \u0142\u0105czenia si\u0119 <span class=\"kwrd\">do<\/span> pg_pool z zewn\u0105trz<\/span><\/pre>\n<pre><span style=\"font-family: Arial; font-size: xx-small;\">pool_passwd = \u2018pool_passwd\u2019 &lt;\u2014plik z has\u0142ami uprawnionych u\u017cytkownik\u00f3w<\/span><\/pre>\n<pre class=\"alt\"><span style=\"font-family: Arial; font-size: xx-small;\">num_init_children = 300<\/span><\/pre>\n<pre><span style=\"font-family: Arial; font-size: xx-small;\">max_pool = 2                &lt;\u2014limity po\u0142\u0105cze\u0144, czyli 600=300x2 (patrz wy\u017cej)<\/span><\/pre>\n<pre class=\"alt\"><span style=\"font-family: Arial; font-size: xx-small;\">replication_mode = on\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 &lt;\u2014synchroniczny zapis na obydwa nody<\/span><\/pre>\n<pre><span style=\"font-family: Arial; font-size: xx-small;\">load_balance_mode = on      &lt;\u2014asynchroniczny odczyt z r\u00f3\u017cnych nod\u00f3w<\/span><\/pre>\n<\/div>\n<p align=\"justify\">Konfiguracja Watchdog przedstawia si\u0119 nast\u0119puj\u0105co:<\/p>\n<div class=\"csharpcode\">\n<pre class=\"alt\"><span style=\"font-family: Arial; font-size: xx-small;\">use_watchdog = on<\/span><\/pre>\n<pre><span style=\"font-family: Arial; font-size: xx-small;\">trusted_servers = <span class=\"str\">'192.168.60.1'<\/span>  &lt;\u2014Brama <span class=\"kwrd\">do<\/span> testowania sieci<\/span><\/pre>\n<pre class=\"alt\"><span style=\"font-size: xx-small;\"><span style=\"font-family: Arial;\">ping_path = <span class=\"str\">'\/bin'<\/span><\/span><\/span><\/pre>\n<pre><span style=\"font-family: Arial; font-size: xx-small;\">\u00a0<\/span><\/pre>\n<pre class=\"alt\"><span style=\"font-family: Arial; font-size: xx-small;\">wd_hostname = <span class=\"str\">'192.168.60.134'<\/span> &lt;\u2014Nazwa lokalnego noda<\/span><\/pre>\n<pre><span style=\"font-family: Arial; font-size: xx-small;\">wd_port = 9000<\/span><\/pre>\n<pre class=\"alt\"><span style=\"font-size: xx-small;\"><span style=\"font-family: Arial;\">wd_authkey = <span class=\"str\">''<\/span><\/span><\/span><\/pre>\n<pre><span style=\"font-family: Arial; font-size: xx-small;\">\u00a0<\/span><\/pre>\n<pre class=\"alt\"><span style=\"font-family: Arial; font-size: xx-small;\">delegate_IP = <span class=\"str\">'192.168.60.136'<\/span>    &lt;-- P\u0142ywaj\u0105cy adres<\/span><\/pre>\n<pre><span style=\"font-size: xx-small;\"><span style=\"font-family: Arial;\">ifconfig_path = <span class=\"str\">'\/sbin'<\/span><\/span><\/span><\/pre>\n<pre class=\"alt\"><span style=\"font-size: xx-small;\"><span style=\"font-family: Arial;\">if_up_cmd = <span class=\"str\">'ifconfig eth1:0 inet $_IP_$ netmask 255.255.255.0'<\/span><\/span><\/span><\/pre>\n<pre><span style=\"font-size: xx-small;\"><span style=\"font-family: Arial;\">if_down_cmd = <span class=\"str\">'ifconfig eth1:0 down'<\/span><\/span><\/span><\/pre>\n<pre class=\"alt\"><span style=\"font-size: xx-small;\"><span style=\"font-family: Arial;\">arping_path = <span class=\"str\">'\/usr\/sbin'<\/span><\/span><\/span><\/pre>\n<pre><span style=\"font-size: xx-small;\"><span style=\"font-family: Arial;\">arping_cmd = <span class=\"str\">'arping -U $_IP_$ -w 1'<\/span><\/span><\/span><\/pre>\n<pre class=\"alt\"><span style=\"font-family: Arial; font-size: xx-small;\">\u00a0<\/span><\/pre>\n<pre><span style=\"font-family: Arial; font-size: xx-small;\">clear_memqcache_on_escalation = on<\/span><\/pre>\n<pre class=\"alt\"><span style=\"font-size: xx-small;\"><span style=\"font-family: Arial;\">wd_escalation_command = <span class=\"str\">''<\/span><\/span><\/span><\/pre>\n<pre><span style=\"font-size: xx-small;\"><span style=\"font-family: Arial;\">wd_lifecheck_method = <span class=\"str\">'heartbeat'<\/span><\/span><\/span><\/pre>\n<pre class=\"alt\"><span style=\"font-family: Arial; font-size: xx-small;\">wd_interval = 10<\/span><\/pre>\n<pre><span style=\"font-family: Arial; font-size: xx-small;\">wd_heartbeat_port = 9694<\/span><\/pre>\n<pre class=\"alt\"><span style=\"font-family: Arial; font-size: xx-small;\">wd_heartbeat_keepalive = 2<\/span><\/pre>\n<pre><span style=\"font-family: Arial; font-size: xx-small;\">wd_heartbeat_deadtime = 30<\/span><\/pre>\n<pre class=\"alt\"><span style=\"font-family: Arial; font-size: xx-small;\">\u00a0<\/span><\/pre>\n<pre><span style=\"font-family: Arial; font-size: xx-small;\">heartbeat_destination0 = <span class=\"str\">'192.168.60.135'<\/span>    &lt;\u2014adres drugiego serwera Watchdog<\/span><\/pre>\n<pre class=\"alt\"><span style=\"font-family: Arial; font-size: xx-small;\">heartbeat_destination_port0 = 9694<\/span><\/pre>\n<pre><span style=\"font-size: xx-small;\"><span style=\"font-family: Arial;\">heartbeat_device0 = <span class=\"str\">'eth1'<\/span><\/span><\/span><\/pre>\n<pre class=\"alt\"><span style=\"font-family: Arial; font-size: xx-small;\">\u00a0<\/span><\/pre>\n<pre><span style=\"font-family: Arial; font-size: xx-small;\">wd_life_point = 3<\/span><\/pre>\n<pre class=\"alt\"><span style=\"font-size: xx-small;\"><span style=\"font-family: Arial;\">wd_lifecheck_query = <span class=\"str\">'SELECT 1'<\/span><\/span><\/span><\/pre>\n<pre><span style=\"font-size: xx-small;\"><span style=\"font-family: Arial;\">wd_lifecheck_dbname = <span class=\"str\">'template1'<\/span><\/span><\/span><\/pre>\n<pre class=\"alt\"><span style=\"font-size: xx-small;\"><span style=\"font-family: Arial;\">wd_lifecheck_user = <span class=\"str\">'nobody'<\/span><\/span><\/span><\/pre>\n<pre><span style=\"font-size: xx-small;\"><span style=\"font-family: Arial;\">wd_lifecheck_password = <span class=\"str\">''<\/span><\/span><\/span><\/pre>\n<pre class=\"alt\"><span style=\"font-family: Arial; font-size: xx-small;\">\u00a0<\/span><\/pre>\n<pre><span style=\"font-family: Arial; font-size: xx-small;\">other_pgpool_hostname0 = <span class=\"str\">'192.168.60.135'<\/span> &lt;\u2014adres drugiego serwera PGpool<\/span><\/pre>\n<pre class=\"alt\"><span style=\"font-family: Arial; font-size: xx-small;\">other_pgpool_port0 = 5432<\/span><\/pre>\n<pre><span style=\"font-family: Arial; font-size: xx-small;\">other_wd_port0 = 9000<\/span><\/pre>\n<\/div>\n<div align=\"justify\"><\/div>\n<p align=\"justify\"><span style=\"font-family: Calibri;\">Na drugim serwerze konfiguracja jest dok\u0142adnie odwrotna (adresy IP). Je\u015bli wszystko dzia\u0142a poprawnie, mo\u017cemy swobodnie wy\u0142\u0105cza\u0107 poszczeg\u00f3lne serwery PGpool-II i adres \u201cwirtualny\u201d b\u0119dzie poprawnie przenoszony pomi\u0119dzy maszynami:<\/span><\/p>\n<p><a href=\"https:\/\/vm.piszki.pl\/wp-content\/uploads\/2014\/04\/watchdog1.jpg\"><img loading=\"lazy\" decoding=\"async\" style=\"background-image: none; float: none; padding-top: 0px; padding-left: 0px; margin-left: auto; display: block; padding-right: 0px; margin-right: auto; border: 0px;\" title=\"watchdog\" src=\"https:\/\/vm.piszki.pl\/wp-content\/uploads\/2014\/04\/watchdog_thumb1.jpg\" alt=\"watchdog\" width=\"383\" height=\"139\" border=\"0\" \/><\/a><\/p>\n<p align=\"justify\">W pliku pool_hba.conf ustawiamy dozwolone metody po\u0142\u0105cze\u0144, obowi\u0105zuje dok\u0142adnie ta sama zasada co w PostgreSQL (mo\u017cemy ustawi\u0107 host all all 0.0.0.0\/0 md5). W pliku pool_passwd musimy wpisa\u0107 wszystkich u\u017cytkownik\u00f3w z baz danych kt\u00f3rzy b\u0119d\u0105 si\u0119 \u0142\u0105czy\u0107 do PostgreSQL poprzez PGpool-II w schemacie USER:MD5HASH. Wa\u017cna uwaga, w dokumentacji hash mo\u017cna wygenerowa\u0107 poleceniem pg_md5, b\u0142\u0105d, to polecenie generuje <a href=\"http:\/\/stackoverflow.com\/questions\/13179628\/pgpool-ii-authentication-failure\">b\u0142\u0119dny<\/a> hash. Prawid\u0142owy nale\u017cy wyci\u0105gn\u0105\u0107 bezpo\u015brednio z bazy danych (je\u015bli u\u017cywamy pgAdmina to wystarczy klikn\u0105\u0107 na dan\u0105 rol\u0119). Natomiast je\u015bli chcemy wykorzysta\u0107 pgpoolAdmin, to w pliku pcp.conf zapisane has\u0142a musz\u0105 zosta\u0107 wygenerowane za pomoc\u0105 pg_md5. I to w zasadzie wszystko, PGpool-II jest ca\u0142kowicie prze\u017aroczysty, nie generuje obci\u0105\u017cenia na maszynie, super rozwi\u0105zanie.<\/p>\n<p align=\"justify\">Na koniec kilka s\u0142\u00f3w o awarii. W przypadku pary Master\u2014&gt;Slave schemat jest znany, pada master, promujemy drugiego noda do roli mastera i prze\u0142\u0105czamy aplikacj\u0119 na wypromowany serwer. Po usuni\u0119ciu awarii, po prostu podpinamy odzyskany serwer jako slave. W przypadku gdy mamy dwa aktywne nody, awaria jednego nie wp\u0142ywa na prac\u0119 aplikacji, PGpool-II po prostu przestaje si\u0119 \u0142\u0105czy\u0107 do drugiego noda i wszystkie zapytania przekazuje do pierwszego. Po usuni\u0119ciu awarii, absolutnie nie mo\u017cemy tak po prostu uruchomi\u0107 odzyskanego serwera. Nale\u017cy wy\u0142\u0105czy\u0107 aplikacj\u0119 i usp\u00f3jni\u0107 bazy danych (pod\u0142\u0105czy\u0107 si\u0119 jako slave, wszystko si\u0119 skopiuje samo, i wypromowa\u0107 serwer), i dopiero w\u0142\u0105czy\u0107 aplikacj\u0119. R\u00f3\u017cnica jak wida\u0107 sprowadza si\u0119 do jednego, w wariancie pierwszym wy\u0142\u0105czamy aplikacj\u0119 kiedy musimy, a w drugim kiedy chcemy <img decoding=\"async\" class=\"wlEmoticon wlEmoticon-smile\" src=\"https:\/\/vm.piszki.pl\/wp-content\/uploads\/2014\/03\/wlEmoticon-smile3.png\" alt=\"U\u015bmiech\" \/><\/p>\n<p align=\"justify\">Mo\u017cna te\u017c wykorzysta\u0107 mechanizmy failover dostarczone razem z PGpool-II, jeszcze ich nie testowa\u0142em, jak ju\u017c uzupe\u0142ni\u0119 wiedz\u0119 to postaram si\u0119 zda\u0107 relacj\u0119 czy ten mechanizm dzia\u0142a poprawnie.<\/p>\n<p align=\"justify\"><a href=\"http:\/\/lab.piszki.pl\/horizon-workspace-high-availability-vpostgres-cluster\/\">English<\/a><\/p>\n<div style='text-align:left' class='yasr-auto-insert-visitor'><\/div>","protected":false},"excerpt":{"rendered":"<p>W zwi\u0105zku z premier\u0105 Horizon Workspace 1.8 (konieczno\u015b\u0107 wykonanie upgrade), oraz rozpoczynaj\u0105cymi si\u0119 testami naszego nowego rozwi\u0105zania opartego w cz\u0119\u015bci na Workspace, postanowi\u0142em przemodelowa\u0107 ca\u0142kowicie \u015brodowisko w jakim on funkcjonuje. Na pierwszy rzut posz\u0142a baza danych. Ju\u017c od jakiego\u015b czasu &hellip; <a href=\"https:\/\/vm.piszki.pl\/?p=633\">Continue reading <span class=\"meta-nav\">&rarr;<\/span><\/a><\/p>\n","protected":false},"author":1,"featured_media":1529,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"yasr_overall_rating":0,"yasr_post_is_review":"","yasr_auto_insert_disabled":"","yasr_review_type":"","footnotes":""},"categories":[45],"tags":[5,47,46,43],"class_list":["post-633","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-poradniki","tag-horizon-workspace","tag-pgpool-ii","tag-postgresql","tag-vpostgres"],"yasr_visitor_votes":{"stars_attributes":{"read_only":false,"span_bottom":false},"number_of_votes":1,"sum_votes":5},"_links":{"self":[{"href":"https:\/\/vm.piszki.pl\/index.php?rest_route=\/wp\/v2\/posts\/633"}],"collection":[{"href":"https:\/\/vm.piszki.pl\/index.php?rest_route=\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/vm.piszki.pl\/index.php?rest_route=\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/vm.piszki.pl\/index.php?rest_route=\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/vm.piszki.pl\/index.php?rest_route=%2Fwp%2Fv2%2Fcomments&post=633"}],"version-history":[{"count":13,"href":"https:\/\/vm.piszki.pl\/index.php?rest_route=\/wp\/v2\/posts\/633\/revisions"}],"predecessor-version":[{"id":1096,"href":"https:\/\/vm.piszki.pl\/index.php?rest_route=\/wp\/v2\/posts\/633\/revisions\/1096"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/vm.piszki.pl\/index.php?rest_route=\/wp\/v2\/media\/1529"}],"wp:attachment":[{"href":"https:\/\/vm.piszki.pl\/index.php?rest_route=%2Fwp%2Fv2%2Fmedia&parent=633"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/vm.piszki.pl\/index.php?rest_route=%2Fwp%2Fv2%2Fcategories&post=633"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/vm.piszki.pl\/index.php?rest_route=%2Fwp%2Fv2%2Ftags&post=633"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}