\documentclass{report}
\usepackage[utf8]{inputenc}
\usepackage[T1]{fontenc}
\usepackage{textcomp}
\usepackage{geometry}
\geometry{top=15mm, bottom=15mm, left=1cm, right=1cm}
\usepackage[french]{babel}
\usepackage{pslatex}
\usepackage[colorlinks=true,urlcolor=black]{hyperref}
\usepackage{graphicx}
\usepackage{fancyhdr}
\pagestyle{fancy}
\renewcommand{\footrulewidth}{0.4pt}
\fancyfoot[L]{Uubu.fr}
\fancyfoot[R]{lun. janv. 26 14:09:48 CET 2015}
\lfoot{\Large \textit{Uubu.fr}}
\hypersetup{pdfinfo={
Title={votequorum},
Author={Sylvain Girod},
Creator={Bash script from uubu.fr's format version 1},
Producer={Bash script and PDFLaTeX},
Subject={configuration pour votequorum},
CreationDate={D:20150126140948},
ModDate={D:20150126140948},
Keywords={clustering;cluster messaging layer}
}}
\begin{document}
 
\begin{center}
{\Huge votequorum }
\end{center}
\vspace{1cm}
 
\begin{flushleft}
 
{\large configuration pour votequorum}
 
\vspace{10mm}
 
\hspace{1mm} L'extrait corosync.conf suivant va activer le service votequorum avec corosync:
 
{\ttfamily
quorum \{\\ \hspace{2mm}provider: corosync\_votequorum\\ \}\\
}
\vspace{8mm}
 
\hspace{1mm}  votequorum lis sa configuration depuis corosync.conf. Certaines valeurs peuvent être changé en temps réel, d'autres sont seulement lues au lancement de corosync. Il est très important que ces valeurs soient consistantes entre tous les nœuds participant au cluster.
\vspace{5mm} \\
 
 
\hspace{1mm}  votequorum requière une valeur \textbf{expected\_votes} pour fonctionner, qui peut être fait de 2 manières. Le nombre de votes attendus sera automatiquement calculé quand la section \textbf{nodelist} est présente dans corosync.conf, ou \textbf{expected\_votes} peut être spécifié dans la section \textbf{quorum}. Le manque des 2 définissions désactive votequorum. Si les 2 sont présents, la valeur de la section quorum a précédence.
\vspace{5mm} \\
 
 
\hspace{1mm} Exemple (sans nodelist) d'un cluster de 8 nœuds (chaque nœud a 1 vote):
 
{\ttfamily
quorum \{\\ \hspace{2mm}provider: corosync\_votequorum\\ \hspace{2mm}expected\_votes: 8\\ \}\\
}
\vspace{8mm}
 
\hspace{1mm} Exemple (avec nodelist) d'un cluster de 3 nœuds (chaque nœud a 1 vote):
 
{\ttfamily
quorum \{\\ \hspace{2mm}provider: corosync\_votequorum\\ \}\\ \hspace{2mm}\\ nodelist \{\\ \hspace{2mm}node \{\\ \hspace{2mm}\hspace{2mm}ring0\_addr: 192.168.1.1\\ \hspace{2mm}\}\\ \hspace{2mm}node \{\\ \hspace{2mm}\hspace{2mm}ring0\_addr: 192.168.1.2\\ \hspace{2mm}\}\\ \hspace{2mm}node \{\\ \hspace{2mm}\hspace{2mm}ring0\_addr: 192.168.1.3\\ \hspace{2mm}\}\\ \}\\
}
\vspace{8mm}
 
\vspace{1cm}{\huge Fonctionnalités spéciales }
 
\
 
\hspace{1mm}  \textbf{two\_node: 1} active les opération de cluster à 2 nœuds (défaut: 0). Ce mode est un cas qui nécessite une considération spéciale. Avec un cluster à 2 nœuds, chaque nœud avec un simple vote, il y a donc 2 votes dans le cluster. Utiliser le calcule de majorité (50\% de vote + 1) pour calculer le quorum implique que le quorum est de 2. Cela signifie que les 2 nœuds doivent toujours être en fonction pour que le quorum soit opérationnel.
\vspace{5mm} \\
 
 
\hspace{1mm} Activer le two\_node, le quorum est définis artificiellement à 1:
 
{\ttfamily
quorum \{\\ \hspace{2mm}provider: corosync\_votequorum\\ \hspace{2mm}expected\_votes: 2\\ \hspace{2mm}two\_node: 1\\ \}\\
}
\vspace{8mm}
 
\hspace{1mm} ou:
 
{\ttfamily
quorum \{\\ \hspace{2mm}provider: corosync\_votequorum\\ \hspace{2mm}two\_node: 1\\ \}\\ \hspace{2mm}\\ nodelist \{\\ \hspace{2mm}node \{\\ \hspace{2mm}\hspace{2mm}ring0\_addr: 192.168.1.1\\ \hspace{2mm}\}\\ \hspace{2mm}node \{\\ \hspace{2mm}\hspace{2mm}ring0\_addr: 192.168.1.2\\ \hspace{2mm}\}\\ \}\\
}
\vspace{8mm}
 
\hspace{1mm}  Notes: activer le two\_node active automatiquement wait\_for\_all. Il reste possible de changer wait\_for\_all dans la configuratio. Si plus de 2 nœuds sont joins au cluster, l'option two\_node est automatiquement désactivé.
\vspace{5mm} \\
 
 
\hspace{1mm}  \textbf{wait\_for\_all: 1} (défaut: 0). le fonctionnement général de votequorum est de basculer d'un état 'inquorate' à un état 'quorate' dès que possible. Par exemple, dans un cluster à 8 nœuds, où tous les nœuds ont un vote à 1, expected\_votes est à 8, et quorum est à 5 ( 50\% + 1 ). Dès qu'au moins 5 nœuds sont visibles entre-eux, la partition d'au moins 5 devient 'quorate' et peut commencer à opérer. Quand WFA est activé, le cluster attend que tous les nœuds sont visibles au moins un fois. C'est utile combiné avec \textbf{last\_man\_standing}.
\vspace{5mm} \\
 
 
\hspace{1mm} Exemple de configuration:
 
{\ttfamily
quorum \{\\ \hspace{2mm}provider: corosync\_votequorum\\ \hspace{2mm}expected\_votes: 8\\ \hspace{2mm}wait\_for\_all: 1\\ \}\\
}
\vspace{8mm}
 
\hspace{1mm}  \textbf{last\_man\_standing: 1 / last\_man\_standing\_window: 10000}. Active le LMS (Last Man Standing), défaut: 0. Le fonctionnement général de votequorum est de définir \textbf{expected\_votes} et \textbf{quorum} au démarrage et d'utiliser ces valeurs durant toute la duées du cluster. En utilisant l'exemple d'un cluster 8 nœuds où chaque nœud a 1 vote, \textbf{expected\_votes} est définis à 8 et quorum à 5. Cette condition permet un total de 3 pannes. Si une 4ème panne se produit, le cluster devient 'inquorate' et il va stopper les services. LMS permet au cluster de recalculer dynamiquement \textbf{expected\_votes} et quorum sous des conditions spécifiques. Il est essentiel d'active WFA en utilisant LMS. En utilisant un cluster à 8 nœud, LMS permet de poursuivre le quorum opérant en perdant en cascade, jusqu'à 6 nœuds.
\vspace{5mm} \\
 
 
\vspace{1cm}{\huge Exemple }
 
\
 
\begin{description} \normalsize
\item[\hspace{1mm} -]{Le cluster est pleinement opérationnel avec 8 nœuds ( expected\_votes: 8, quorum: 5)}
\item[\hspace{1mm} -]{3 nœuds tombent en panne, le cluster reste en quorum avec 5 mœuds}
\item[\hspace{1mm} -]{Après \textbf{last\_man\_standing\_window} millisecondes, \textbf{expected\_votes} et \textbf{quorum} sont recalculés: expected\_votes: 5 quorum: 3.}
\item[\hspace{1mm} -]{À ce point, 2 nœuds supplémentaires peuvent être en panne et le quorum est maintenu avec 3 nœuds.}
\item[\hspace{1mm} -]{Encore une fois, les valeurs sont recalculées: expected\_votes: 3 quorum: 2}
\item[\hspace{1mm} -]{À ce point, 1 nœud peut tomber en panne et le quorum est maintenu avec 2 nœuds}
\item[\hspace{1mm} -]{Une fois de plus: expected\_votes: 2 quorum: 2}
\end{description}
 
\hspace{1mm}  Notes: pour que le cluster descende automatiquement de 2 nœuds à 1 nœuds, \textbf{auto\_tie\_breaker} doit également être activé.
\vspace{5mm} \\
 
 
\hspace{1mm} Exemple de configuration:
 
{\ttfamily
quorum \{\\ \hspace{2mm}provider: corosync\_votequorum\\ \hspace{2mm}expected\_votes: 8\\ \hspace{2mm}last\_man\_standing: 1\\ \}\\
}
\vspace{8mm}
 
\hspace{1mm} ou (augmente le timeout à 20 secondes):
 
{\ttfamily
quorum \{\\ \hspace{2mm}provider: corosync\_votequorum\\ \hspace{2mm}expected\_votes: 8\\ \hspace{2mm}last\_man\_standing: 1\\ \hspace{2mm}last\_man\_standing\_window: 20000\\ \}\\
}
\vspace{8mm}
 
\hspace{1mm}  \textbf{auto\_tie\_breaker: 1} active ATB (Auto Tie Breaker), défaut: 0. Le fonctionnement général de votequorum permet de perdre simultanément 50\% -1 nœud, assumant que chaque nœud a 1 vote. Quand ATB est activé, le cluster pour perdre jusqu'à 50\% de nœuds en même temps. Par défaut le cluster, ou le jeu de nœuds qui sont en contacte avec le nœud qui a le nodeid le plus faible restera en quorum. Les autres nœuds deviennent 'inquorate'. Ce mode peut être changé avec:
\vspace{5mm} \\
 
 
\hspace{1mm}  \textbf{auto\_tie\_breaker\_node: lowest|highest|<list of node IDs>} 'lowest' est le défaut. Alternativement il est possible de spécifier un id de nœud qui sera requis pour maintenir le quorum. Si une liste de nœud est donnée, les nœuds sont évalués dans l'ordre, donc si le premier est présent il sera utilisé pour déterminer la partition 'quorate', si ce nœud n'est pas disponible, le second est vérifié.
\vspace{5mm} \\
 
 
\hspace{1mm} exemple de configuration:
 
{\ttfamily
quorum \{\\ \hspace{2mm}provider: corosync\_votequorum\\ \hspace{2mm}expected\_votes: 8\\ \hspace{2mm}auto\_tie\_breaker: 1\\ \hspace{2mm}auto\_tie\_breaker\_node: lowest\\ \}\\
}
\vspace{8mm}
 
\hspace{1mm} autre exemple:
 
{\ttfamily
quorum \{\\ \hspace{2mm}provider: corosync\_votequorum\\ \hspace{2mm}expected\_votes: 8\\ \hspace{2mm}auto\_tie\_breaker: 1\\ \hspace{2mm}auto\_tie\_breaker\_node: 1 3 5\\ \}\\
}
\vspace{8mm}
 
\hspace{1mm}  \textbf{allow\_downscale: 1}, active l'AD (Allow Downscale), défaut: 0. Votequorum ne descend jamais les votes du quorum. Avec AD activé, les expected\_votes et quorum sont recalculés quand un nœud quitte le cluster dan un état clean.
\vspace{5mm} \\
 
 
\begin{description} \normalsize
\item[\hspace{1mm} 1)]{Un cluster de N nœuds ( N est supérieur à 3).}
\item[\hspace{1mm} 2)]{expected\_votes est à 3}
\item[\hspace{1mm} 3)]{Seul 3 nœuds fonctionnent}
\item[\hspace{1mm} 4)]{l'admin souhaite augmenter le traitement et ajouter 10 nœuds}
\item[\hspace{1mm} 5)]{expected\_votes est automatiquement définis à 13}
\item[\hspace{1mm} 6)]{expected\_votes minimum est de 3 (définis dans la configuration)}
\item[\hspace{1mm} -]{À ce point, le votequorum fonctionne normalement.}
\item[\hspace{1mm} 7)]{L'admin souhaite supprimer des nœuds du cluster}
\item[\hspace{1mm} 8)]{En utilisant un shutdown ordonné, l'admin peut réduire la taille du cluster automatiquement jusqu'à 3, mais pas en dessous.}
\end{description}
 
\hspace{1mm} Exemples de configuration:
 
{\ttfamily
quorum \{\\ \hspace{2mm}provider: corosync\_votequorum\\ \hspace{2mm}expected\_votes: 3\\ \hspace{2mm}allow\_downscale: 1\\ \}\\
}
\vspace{8mm}
 
\hspace{1mm}  \textbf{expected\_votes\_tracking: 1} Active l'EVT (Expected Votes Tracking), défaut: 0. l'EVT stocke la plus haute valeur vue des votes attendus sur disque et l'utilise comme valeur minimum pour les votes attendus en l'absence d'une haute autorité. C'est utile quand un groupe de nœuds devient détaché du cluster principal et après un redémarrage pouvant avoir suffisamment de votes pour fournir un quorum, qui peut se produire en utilisant allow\_downscale. Noter que même si la version en mémoire de expected\_votes est réduite, par exemple en utilisant corosync-quorumtool, la valeur stockée supérieur à la valeur vue, qui n'est jamais réduite. La valeur est maintenue dans le fichier /var/lib/corosync/ev\_tracking qui peut être supprimée si vous n'avez pas besoin d'expected\_votes.
\vspace{5mm} \\
 
 
\vspace{1cm}{\huge Notes }
 
\
 
\begin{description} \normalsize
\item[\hspace{1mm} -]{WFA / LMS / ATB / AD peuvent être combinés ensembles}
\item[\hspace{1mm} -]{Pour changer les votes par défau pour un nœud il y a 2 options:}
\end{description}
 
\hspace{1mm} nodelist:
 
{\ttfamily
nodelist \{\\ \hspace{2mm}node \{\\ \hspace{2mm}\hspace{2mm}ring0\_addr: 192.168.1.1\\ \hspace{2mm}\hspace{2mm}quorum\_votes: 3\\ \hspace{2mm}\}\\ \hspace{2mm}....\\ \}\\
}
\vspace{8mm}
 
\hspace{1mm} ou quorum (déprécié):
 
{\ttfamily
quorum \{\\ \hspace{2mm}provider: corosync\_votequorum\\ \hspace{2mm}expected\_votes: 2\\ \hspace{2mm}votes: 2\\ \}\\
}
\vspace{8mm}
 
\hspace{1mm}  Dans le cas où votes dans nodelist et quorum sont définis, la valeur de nodelist est utilisée.
\vspace{5mm} \\
\hspace{1mm}  Seul votes, quorum\_votes, expected\_votes et two\_node peuvent être changé en temps réels. Le reste nécessite de redémarrer le cluster.
\vspace{5mm} \\
 
\end{flushleft}
\end{document}
