0% encontró este documento útil (0 votos)
207 vistas13 páginas

Corosync y Pacemaker

Este documento proporciona una introducción al clustering de alta disponibilidad utilizando Corosync y Pacemaker. Explica conceptos clave como recursos, esquemas de configuración de clusters, software utilizado como Corosync y Pacemaker, y nomenclatura común como CIB, PCMK y failover. El autor planea escribir una serie de artículos explicando cómo configurar y administrar un cluster básico de alta disponibilidad con estas herramientas.

Cargado por

luchoalco
Derechos de autor
© © All Rights Reserved
Nos tomamos en serio los derechos de los contenidos. Si sospechas que se trata de tu contenido, reclámalo aquí.
Formatos disponibles
Descarga como ODT, PDF, TXT o lee en línea desde Scribd
0% encontró este documento útil (0 votos)
207 vistas13 páginas

Corosync y Pacemaker

Este documento proporciona una introducción al clustering de alta disponibilidad utilizando Corosync y Pacemaker. Explica conceptos clave como recursos, esquemas de configuración de clusters, software utilizado como Corosync y Pacemaker, y nomenclatura común como CIB, PCMK y failover. El autor planea escribir una serie de artículos explicando cómo configurar y administrar un cluster básico de alta disponibilidad con estas herramientas.

Cargado por

luchoalco
Derechos de autor
© © All Rights Reserved
Nos tomamos en serio los derechos de los contenidos. Si sospechas que se trata de tu contenido, reclámalo aquí.
Formatos disponibles
Descarga como ODT, PDF, TXT o lee en línea desde Scribd
Está en la página 1/ 13

Aproximacin al clustering de alta

disponibilidad
---
(I) Cluster bsico de alta disponibilidad con Corosync+Pacemaker
(II) Cluster bsico de alta disponibilidad con Corosync+Pacemaker
---
Tengo que reconocer que desde que empec en esto de la informtica el tema del clustering
siempre me !a llamado la atenci"n#
Tambin tengo que decir que !asta !ace muy poquito ni siquiera pod$a imaginarme como
funcionaba esto por dentro#
Coincidiendo con el desarrollo de mi Proyecto Integrado para finali%ar el ciclo de &'I (oy a
escribir una serie de art$culos sobre este tema# &s$ que espero que este sea el primero de una serie de
documentaci"n que profundice ms en la alta disponibilidad (de la que por cierto !ay escasa
documentaci"n en )spa*ol)#
&ntes de empe%ar me gustar$a llamar la atenci"n sobre la gran cantidad de posibles configuraciones
y la amplitud de posibilidades en el mundo del clustering# +o entrar en asuntos de clustering de
supercomputaci"n (no estoy preparado en esa materia)#
,- )l concepto de recurso
.o primero que (amos a encontrar al traba/ar con un cluster es un recurso# )s fundamental
comprender el concepto de recurso porque nos abrir la puerta a entendernos con lo que !ay detrs
y con las posibilidades de configuraci"n#
& priori un recurso se corresponde con un ser(icio# )sto quiere decir lo siguiente0
-1 'er(icio !ttp (apac!e) -1 2ecurso !ttp (apac!e)
-1 'er(icio sgbd (mysql) -1 2ecurso sgbd (mysql)
3etc###4
5na (e% comprendida e interiori%ada esta correspondencia podemos decir que un recurso puede ser
algo muc!o ms completo que un ser(icio y que tiene caracter$sticas a*adidas0
6o(ilidad0 5n ser(icio pertenece a una mquina# 5n recurso no pertenece a una mquina
(ya lo (eremos)#
Integraci"n0 Podemos conseguir un grado muy alto de integraci"n entre distintos recursos7
relaciones de locali%aci"n relaciones de orden de arranque y parada etc###
&grupaci"n0 Podr$amos decir que un recurso en algunos casos est compuesto de (arios
ser(icios e incluso de otros recursos#
&s$ que podemos resumir que cuando !ablamos de un cluster de alta disponibilidad nos referimos a
un recurso que se ofrece y no a un ser(icio#
8- )squemas de monta/e
)9isten (arias configuraciones posibles para un cluster de alta disponibilidad#
Tenemos desde un cluster sencillo de dos mquinas (dos nodos llamando a las cosas por su
nombre) a un cluster de + nodos (usando cualquier numero de mquinas)#
)s importante tener en mente el tipo de cluster que necesitamos y que estamos montando# Por
supuesto supongo que cada uno puede in(entarse su propio esquema de monta/e aunque los ms
comunes son0
&cti(o:Pasi(o -1 Configuraci"n bsica de 8 o ms nodos# ;ay un nodo principal o maestro
donde estn corriendo la mayor$a de recursos y una serie de nodos escla(os o de backup que
entrarn en funcionamiento cuando el nodo principal falle#
&cti(o:&cti(o -1 Configuraci"n tambin bsica de 8 o ms nodos# Con este tipo de clusters
se desarrolla (entre otras cosas) lo que se llama <balanceo de carga<# =eneralmente los
recursos estn duplicados (clonados) en (arios nodos y mediante alg>n mecanismo (dns
s?itc!es etc##) repartiremos la carga entre cada nodo#
++, -1 Combinaci"n de (arios tipos de clusters en uno solo# )sta configuraci"n es ms
a(an%ada y requiere que el administrador tenga las cosas muy claras sobre lo que est
!aciendo# )n un mismo cluster (por e/emplo acti(o:pasi(o) podemos combinar un nodo de
backup (de a!$ el nombre) o incluso usar (arios nodos de backup#
+-to-+ -1 Cuando e9iste posibilidad de usar almacenamiento compartido (lase '&+ o
+&') y los requisitos necesarios de !ard?are cada nodo puede usarse para lo que
queramos osea configuraciones de balanceo de carga con clones m>ltiples de backup# )s
una de las configuraciones ms a(an%adas y tengo que decir que por a!ora a m$ me (iene un
poco grande la (erdad#
6s informaci"n sobre esquemas de configuraci"n con dibu/os (bien !ec!os /e/e) se pueden
encontrar en la ?eb:?iki de clusterlabs#org
@- )l soft?are que permite esto
;ay (arias tecnolog$as que permiten la construcci"n de clusters# 6uc!as de ellas son libres y otras
pri(adas7 lo normal en estos casos# Ao (oy a centrarme en la combinaci"n de dos !erramientas que
son ;eartbeat y Pacemaker aunque !ay muc!as otras posibilidades0
Corosync
BpenI&'
.C'
Deepali(ed
Ao !e llegado tarde a esto pero parece que la comunidad de alta disponibilidad !a tendido a
estandari%arse !aciendo uso de esquemas de funcionamiento similiares y configuraciones basadas
en E6. (que aunque feas son fciles a la !ora de mo(er entre distintos programas)#
Fsicamente necesitamos dos elementos completamente distintos y que son0
,# Comunicaci"n entre nodos para la (aloraci"n de sus estados# (!eartbeat)
8# =esti"n de recursos desplegados en el cluster# (pacemaker)
Por lo tanto ser en !eartbeat donde declararemos qu mquinas forman parte del cluster y en
pacemaker qu recursos !ay repartidos por el cluster (y en que nodo y el resto de opciones de
configuraci"n)#
G- Cista%o al soft?are y configuraci"n
'in meternos en muc!o detalle dir que la configuraci"n de !eartbeat es relati(amente sencilla y
en un par de fic!eros de configuraci"n tendremos lista la declaraci"n del cluster#
Para pacemaker el asunto es un poco ms comple/o# )l tema se mane/a por E6. aunque !ay una
buena cantidad de !erramientas que permiten !acer una administraci"n rpida y ob(iando
totalmente los fic!eros de configuraci"n#
C26 s!ell -1 lo ms e9tendido programa en terminal que mane/a el E6.#
H2FH-6C -1 programa grfico en /a(a que realmente mane/a cibadmin por deba/o
mediante ss! pero que presenta un aspecto (isualmente atracti(o e intuiti(o#
;eartbeat gui -1 Interfa% ?eb# .a (erdad es que ni lo !e probado#
)n la mayor$a de manuales se encuentran referencias a C26 s!ell y es lo que yo mostrar en los
siguientes art$culos que escriba (si es que eso ocurre)#
Tengo que decir que !ay muc!as referencias documentales a !eartbeat como >nico soft?are de
gesti"n para el cluster y es cierto# &ntes !eartbeat cumpl$a las funciones de control de recursos
adems de encargarse de la comunicaci"n de estados entre nodos# Esto ya no es as y !ay que !uir
pa(orosamente de todas las documentaciones que usen el fic!ero <:etc:!a#d:!aresources< #
NOTA EDITADA:
'eg>n me comentan los desarrolladores el proyecto "heartbeat" no a a recibir nueas
actuali!aciones dado que 2ed;at y +o(ell:'5') !an apostado fuerte por Corosync#
)n cualquier caso con el desarrollo actual de !eartbeat toda($a se puede traba/ar#
I- +omenclatura propia
&l principio es un l$o tremendo (er tantas abre(iaturas y palabras nue(as as$ que de/o un peque*o
resumen de los conceptos ms importantes0
,# C26 -1 Cluster 2esouce 6anager# )s el soft?are que pro(ee del control sobre los recursos
desplegados en el cluster# Ao !e !ablado de pacemaker mediante la !erramienta C26 '!ell#
8# CIF -1 Cluster Information Fase# )s el fic!ero E6. donde se refle/a la configuraci"n de los
recursos que se !a !ec!o mediante el C26# 'e genera y se propaga automticamente a todos
los nodos del cluster cuando es modificado# )st muy escondido y no es nada recomendable
tocarlo a mano#
@# BCJ -1 Bpen Cluster Jrame?ork# Podriamos llamarlo el standar mediante el cual el C26
interactua con los ser(icios que corren en cada mquina# 6ediante los standares BCJ
(realmente son scripts que interactuan con otros scripts) se mane/an los scripts t$picos de
<:etc:init#d< para obtener el estado de cada ser(icio pararlos arrancarlos etc##
G# 6essaging .ayer -1 Honde se coloca ;eartbeat Bpen&I' u otro soft?are# 'e refiere al
programa o demonio que controla la comunicaci"n de estados entre los nodos#
I# CIP -1 Cirtual IP# =eneralmente un cluster tendr una IP (irtual que identificar al con/unto
de nodos# 'uele ser el primer paso en la configuraci"n de recursos y testeo de
configuraciones#
K# failo(er:failback -1 Cuando un nodo del cluster cae (de/a de funcionar) y cuando (uel(e a
estar acti(o respecti(amente# Cuando se !ace por ra%ones administrati(as tambin puede
llamarse s?itc!o(er#
)sto que yo !e escrito aqu$ pienso que es una buena base para empe%ar a meterse en el mundo del
clustering de alta disponibilidad# & mi me !a costado alcan%ar claridad en estos conceptos bastante
tiempo y tenia muc!as ganas de plasmar este resumen y que le sir(a a otro#
&l !ilo del anterior post <&pro9imaci"n al clustering de &lta Hisponibilidad< (oy a e9plicar como
construir y mane/ar un cluster bsico basado en Corosync+Pacemaker#
)l ob/eti(o es sentar una base desde la que partir a reali%ar configuraciones ms a(an%adas y
e9plicar un poco el mane/o y funcionamiento de Pacemaker mediante la !erramienta C26#
Por a!ora solo (oy a tratar una configuraci"n de tipo acti(o:pasi(o y es posible que ms adelante
escriba algo sobre acti(o:acti(o (con balanceo de carga) u otras configuraciones ms a(an%adas#
.as !erramientas que (oy a usar son "orosync#$acema%er ya se sabe0
Corosync para la <mensa/er$a< entre nodos del cluster#
Pacemaker para la gesti"n de recursos en alta disponibilidad#
;ay otras !erramientas disponibles para la construcci"n de clusters de alta disponibilidad que son0
Deepali(ed#
.C'
Lackamole
;eartbeat
;eartattack
Bpen&I'
Pero yo (oy a centrarme en "orosync#$acema%er porque despus de in(estigar un poco se
detecta rpidamente que son las !erramientas con ms desarrollo proyecci"n de futuro y acti(idad#
He !ec!o !ay algunas !erramientas que estn prcticamente muertas como son ;eartbeat y
Lackamole#
Como base para un cluster de alta disponibilidad la combinaci"n Corosync+Pacemaker cumple
perfectamente con los requerimientos y funcionalidades necesarios teniendo adems la (enta/a de
una comunidad muy acti(a (que puede ayudarnos en determinados calle/ones sin salida)#
;ard?are necesario
)n cada nodo del cluster necesitaremos al menos 8 interfaces de red , para la comunicaci"n directa
entre nodos y otra para los ser(icios ofrecidos al e9terior#
&unque ser$a posible traba/ar con una >nica interfa% es muy recomendable !acerlo de esta manera
por moti(os de estabilidad seguridad escalabilidad etc##
)l reparto de IPs puede (erse en el esquema con las interfaces que son0
et!M para atender a los clientes#
et!, para la red interna de comunicaci"n entre nodos#
IPC0 ,N8#,KO#M#, (que alternati(amente ser asignada al nodo, y al nodo 8)
Instalaci"n
)l proceso de instalaci"n es sencillo0 desde los repositorios oficiales de nuestra distribuci"n fa(orita
(Hebian en mi caso)# )n entornos tipo 2;). tendremos que instalar un repositorio e9terno#
Instalamos los paquetes en todas las mquinas del cluster#
Hebian
(root#) aptitude install corosync pacemaker
2;).
(root#) rpm -Uvh http://download.fedora.redhat.com/pub/epel/5/i!"/epel-
release-5-.noarch.rpm
(root#) w#et -$ /etc/yum.repos.d/pacemaker.repo
http://clusterlabs.or#/rpm/epel-5/clusterlabs.repo
(root#) yum install -y pacemaker corosync heartbeat
'e instala !eartbeat por dependencias cuyos paquetes contienen algunas librer$as necesarias para
Pacemaker#
Configuraci"n y arranque de Corosync
5na configuraci"n bsica del demonio de Corosync se incluye al instalar la !erramienta y algo
definiti(o puede quedar as$0
:etc:corosync:corosync#conf
compatibility: whitetank
totem %
version: &
secauth: off
threads: '
interface %
rin#number: '
bindnetaddr: ()&.(".'.'
mcastaddr: &&".*+.(.(
mcastport: 5+'5
,
,
lo##in# %
fileline: off
to-stderr: yes
to-lo#file: yes
to-syslo#: yes
lo#file: /tmp/corosync.lo#
debu#: off
timestamp: on
lo##er-subsys %
subsys: ./0
debu#: off
,
,
amf %
mode: disabled
,
)sta configuraci"n es com>n (en este caso concreto) a todos los nodos del cluster y no se propaga
automticamente#
Hebemos crear la carpeta <:etc:corosync:ser(ice#d:< y a*adir el siguiente fic!ero0
:etc:corosync:ser(ice#d:pcmk
service %
name: pacemaker
ver: '
,
)l parmetro <(er< determina si es Corosync el que debe arrancar a Pacemaker o no# 'eg>n qu
(ersi"n del soft?are que estemos usando debe estar a , o a M (en , e9iste un script .'F en
:etc:init#d: para Pacemaker y es el sistema operati(o el que lo arranca con M es Corosync el que lo
arranca y no e9iste script .'F)#
Fa/o Hebian necesitamos tocar otro fic!ero de configuraci"n sin el cual Corosync no arrancar
ba/o ning>n concepto0
:etc:default:corosync
12.324yes
Aa podemos arrancar el ser(icio y monitori%ar el cluster0
(root#)/etc/init.d/corosync start
(root#)crm status
444444444444
5ast updated: 2ue /ay ( (:+5:(& &'((
1tack: openais
6urrent 76: nodo( - partition with 8uorum
9ersion: (.'.((-(55+a!db'dce5+"cfdaaff"af((!+f)*ee!)
& :odes confi#ured; & e<pected votes
' 3esources confi#ured.
444444444444
$nline: = nodo( nodo& >
'incroni%aci"n de fic!eros entre nodos
;ay algunos fic!eros interesantes que deben ser iguales entre los nodos del cluster#
+o !ay ning>n mtodo predefinido para !acer una sincroni%aci"n de los mismos as$ que en su
momento desarroll un peque*o script en F&'; que !ace uso de rsync para tal menester#
5sndolo el funcionamiento es transparente# 2ealmente no se si es la me/or opci"n dado que se
usan bastantes recursos del sistemas durante muc!as !oras muertas donde no !ay nada que
sincroni%ar### as$ que estoy abierto a sugerencias#
)st compuesto de dos fic!eros0
:usr:local:bin:cluster:syncPfiles#s!
#?/bin/bash
# @ste script hace uso de rsync para sincroniAar
# ficheros entre los nodos de un cluster.
# @l script esta pensado para eBecutarse varias veces por minuto. (crontab)
# 2odas las ma8uinas 8ue participen deben intercambiar las claves
# para la cone<ion ssh:
# ssh-key#en
# ssh-a#ent C1D@55
# ssh-add
# ssh-copy-id
# .demas; es muy importante 8ue las horas esten sincroniAadas.
# @n caso contrario; el comportamiento es ciertamente problematico.
# 5os nombres de cada ma8uina deben aBustarse a Euname -nE
# :o importa de donde ven#a la lista de nombres mientras se cumpla.
# 7ebe haber un espacio en blanco entre cada nombre de ma8uina.
# 1e comprueba un lock file para 8ue no se superpon#an eBecuciones
# de este script
#########################
# 9ariables #
#########################
5F12.-:$7$14Gnodo( nodo&G
2DF14Euname -nE
5F12.-0F6D@3$14G/etc/rsync.d/sync-files.confG
2DF1-HF74CC
5$6I-0F5@4G/var/run/sync-files.sh.5$6IG
#########################
# Hro#rama #
#########################
# 9alidando eBecucion
if = -e C5$6I-0F5@ >
then
if = GEcat C5$6I-0F5@EG ?4 C2DF1-HF7 >
then
e<it (
fi
else
echo GC2DF1-HF7G J C5$6I-0F5@
fi
# 1incronia
for nodo in C5F12.-:$7$1
do
# 1i el nodo de la lista no es el propio nodo eBecutando este script
# se eBecuta la instruccion de rsync
if = GCnodoG ?4 GC2DF1G >
then
# 1e sincroniAan los ficheros especificados en C5F12.-0F6D@3$1
# Usando como copia maestra el mas reciente.
rsync -urv --files-from4C5F12.-0F6D@3$1 Cnodo:/ /
fi
done
# 0inaliAando eBecucion
rm -f C5$6I-0F5@
A la lista de fic!eros a sincroni%ar0
:etc:rsync#d:syncPfiles#conf
/etc/rsync.d/sync-files.conf
/usr/local/bin/cluster/sync-files.sh
/etc/resolv.conf
/etc/ntp.conf
/etc/corosync/corosync.conf
/etc/corosync/service.d/pcmk
/etc/modules
/etc/sysctl.conf
Para la correcta e/ecuci"n damos permisos al script tipo <c!mod a+9< y a*adimos un par de l$neas
a crontab
:etc:crontab
=...>
K K K K K root /usr/local/bin/cluster/sync-files.sh
K K K K K root sleep ' LL /usr/local/bin/cluster/sync-files.sh
=...>
Como pone en los comentarios del script es importante intercambiar las cla(es de los nodos para
que el proceso de 2sync (ss!) sea totalmente transparente#
&dems es muy interesante indicar que toda comunicaci"n de un nodo con otro se !aga a tra(s de
la interfa% interna (et!,) con lo cual editamos los fic!eros0
:etc:!osts en nodo,
=...>
(&).'.'.( localhost nodo(
()&.(".'.& nodo&
=...>
:etc:!osts en nodo8
=...>
(&).'.'.( localhost nodo&
()&.(".'.& nodo(
=...>
Traba/ando con Pacemaker
6ediante la !erramienta <crm< se interacciona con Pacemaker#
2ealmente mane/amos el cib#9ml (cluster information base) aunque (amos a (er poco E6. por
aqu$#
.as instrucciones de crm pueden introducirse en cualquier nodo y sern propagadas
automticamente por todo el cluster#
Primero indicamos a Pacemaker que nuestro cluster por a!ora solo tiene 8 nodos# +ecesitamos
una configuraci"n un poco especial para ello dado que Pacemaker (iene preparado para traba/ar
con muchos nodos#
rootMnodo(:N# crm confi#ure property stonith-enabled4false
rootMnodo(:N# crm confi#ure property no-8uorum-policy4i#nore
rootMnodo(:N# crm confi#ure rsc-defaults resource-stickiness4(''
Con esto estamos indicando lo siguiente0
'TB+IT; est des!abilitado# 'TB+IT; es un ser(icio que sir(e para garanti%ar que un
nodo est realmente muerto en situaciones de clusters con ser(icios cr$ticos en cuanto a
integridad de datos#
Ignoramos las pol$ticas de Q5B256# +o es necesario para un clusters de 8 nodos y da
problemas si no se des!abilita#
'ituamos el ni(el de <pega/osidad< de un recurso en ,MM# )sto es que un recurso tender a
quedarse donde est (nodo) antes de mo(erse a otro nodo sin moti(o de fuer%a mayor (que
son mo(imiento manual o situaci"n de failo(er)#
2ecursos en alta disponibilidad
.a mayor$a de (eces el primer recurso a crear en alta disponibildad es una IPC (IP (irtual)# 'in ella
no !acemos nada#
Con C26 la instrucci"n es bastante fcil0
rootMnodo(:N# crm confi#ure primitive FH9-( ocf:heartbeat:FHaddr O
params ip4(*&.("!.'.( nic4eth' cidr-netmask4&+ O
op monitor interval45s
)specificamos lo siguiente0
crm configure primiti(e -1 &*adimos un recurso
IPC-, ocf0!eartbeat0IPaddr -1 )l nombre del recurso es <IPC-,< y !ace uso del 2& (resource
agent o script que controla el recurso) <ocf0!eartbeat0IPaddr<#
.os parmetros son la IP la interfa% que atender a esa IP y la mscara de red#
Como opciones el <monitor inter(al< concreta la frecuencia con la que Pacemaker se
asegura de que el recurso est funcionando# )ste (alor es el recomendado en todos sitios#
RC"mo sabemos qu 2esource &gent se usa para cada ser(icioS 6uy fcil el propio C26 buscar
y nos mostrar esa informaci"n0
rootMnodo(:N# crm ra classes
heartbeat
lsb
ocf / heartbeat pacemaker
stonith
rootMnodo(:N# crm ra list ocf heartbeat
=...>
.o@tar#et
.udible.larm
mys8l
mys8l-pro<y
syslo#-n#
tomcat
vmware
=...>
)s posible escribir nuestros propios 2esource &gent aunque los ser(icios ms comunes ya tienen
uno escrito y probado que se distribuye en la instalaci"n del soft?are#
Podemos (er la configuraci"n de nuestro cluster en cualquier momento0
rootMnodo(:N# crm confi#ure show
node nodo(
node nodo&
primitive FH9-( ocf:heartbeat:FHaddr O
params ip4G(*&.("!.'.(G nic4Geth'G netmask4G&55.&55.&55.'G O
op monitor interval4G5sG
property Cid4Gcib-bootstrap-optionsG O
dc-version4G(.'.((-(55+a!db'dce5+"cfdaaff"af((!+f)*ee!)G O
cluster-infrastructure4GopenaisG O
e<pected-8uorum-votes4G&G O
stonith-enabled4GfalseG O
no-8uorum-policy4Gi#noreG
rsc-defaults Cid4Grsc-optionsG O
resource-stickiness4G(''G
Que da como resultado el siguiente status0
rootMnodo&:N# crm status
444444444444
5ast updated: 2ue /ay ( (+:&!:(+ &'((
1tack: openais
6urrent 76: nodo( - partition with 8uorum
9ersion: (.'.((-(55+a!db'dce5+"cfdaaff"af((!+f)*ee!)
& :odes confi#ured; & e<pected votes
( 3esources confi#ured.
444444444444
$nline: = nodo( nodo& >
FH9-( (ocf::heartbeat:FHaddr): 1tarted nodo(
Cuando a*adimos recursos podemos especificar distintas <constraints< o renstricciones que son0
He orden de arranque (es probable que algunos recursos requieran a otros antes de arrancar)#
He colocaci"n (muy importantes seguramente sea necesario que en el nodo que est
colocada una IPC deban correr el resto de recursos)#
He preferencia (especificamos d"nde prefiere un recurso estar)#
.a e9plicaci"n en profundidad de estas caracter$sticas dar$an para escribir muc!o (aunque no es
dif$cil de mane/ar) as$ que de/ar el tema para futuras publicaciones#
Pienso que el ob/eti(o de estos post se !a cumplido que era familiari%arnos con el entorno de
Corosync+Pacemaker y construir algo muy bsico# Tan bsico que nuestro >nico recurso en alta
disponibilidad es una IP /e/e

También podría gustarte

pFad - Phonifier reborn

Pfad - The Proxy pFad of © 2024 Garber Painting. All rights reserved.

Note: This service is not intended for secure transactions such as banking, social media, email, or purchasing. Use at your own risk. We assume no liability whatsoever for broken pages.


Alternative Proxies:

Alternative Proxy

pFad Proxy

pFad v3 Proxy

pFad v4 Proxy