pacemaker+corosync實現集群管理

前言:

高可用集群,是指以減少服務中斷(如因服務器宕機等引起的服務中斷)時間為目的的服務器集群技術。簡單的說,集群就是一組計算機,它們作為一個整體向用戶提供一組網絡資源。這些單個的計算機系統就是集群的節點。
高可用集群的出現是為了減少由計算機硬件和軟件易錯性所帶來的損失。它通過保護用戶的業務程序對外不間斷提供的服務,把因軟件/硬件/人為造成的故障對業務的影響降低到最小程度。

什么是pacemaker :

Pacemaker是一個集群資源管理器。它利用集群基礎構件(OpenAIS 、heartbeat或corosync)提供的消息和成員管理能力來探測并從節點或資源級別的故障中恢復,以實現群集服務(亦稱資源)的最大可用性。

Corosync
Corosync是集群管理套件的一部分,他在傳遞信息的時候可以通過一個簡單的配置文件來定義信息傳遞的方式和協議等。也就是說,corosync是Messaging Layer集群信息層軟件,需要pacemaker資源管理器,才能構成一個完整的高可用集群。它也是運行于心跳層的開源軟件。(是集群框架引擎程序)

實驗搭建:

準備三臺7.3的虛擬機
server1:ip為172.25.5.111 作為管理節點和HA節點
server2:ip為172.25.5.112 作為HA節點
server3:ip為172.25.5.113 作為iscsi共享磁盤

三臺虛擬機關火墻,selinux狀態disabled,

首先需要配好高可用yum源(server1和server2):

在這里插入圖片描述
在這里插入圖片描述
yum源配好之后安裝工具(一和二都裝)

yum install pacemaker pcs corosync -y
systemctl start pcsd
systemctl enable pcsd
passwd hacluster        為高可用用戶設定密碼
yum install bash-* -y     安裝pcs相關命令

在這里插入圖片描述

因為官方規定為了安全起見要生成ssh密鑰,給自己和server2發送一份
server2重復相同操作

ssh-keygen
ssh-copy-id server1
ssh-copy-id server2

發送不了你看下自己的解析寫好沒:
在這里插入圖片描述

在server1上

pcs cluster auth server1 server2 
pcs cluster setup --name mycluster server1 server2 
pcs cluster start --all 
pcs cluster enable --all 
pcs status
pcs property set stonith-enabled=false
pcs property set no-quorum-policy=ignore
crm_verify -L
pcs resource list
pcs resource standards

在server1和server2上安裝httpd,并寫入網頁
在這里插入圖片描述

在server1上創建vip:

pcs resource create vip ocf:heartbeat:IPaddr2 ip=172.25.5.100 cidr_netmask=32 op monitor interval=30s

在server2上查看

crm_mon

測試:

pcs cluster stop server1
crm_mon
pcs cluster start server1

在sever1上添加httpd資源和組

pcs resource create apache systemd:httpd op monitor interval=1min
pcs resource group add apache_group vip apache
crm_mon
pcs constraint order vip then apache

添加fence柵設備

在server1、server2和物理機上分別安裝fence

yum install fence-virt -y
mkdir /etc/cluster

在物理機上

fence_virtd -c  ##配置fence
Interface [virbr0]: br0		##設備選擇br0,其他用默認生成fence_xvm.key
mkdir /etc/cluster
dd if=/dev/urandom of=/etc/cluster/fence_xvm.key bs=128 count=1把fence_xvm.key分發到HA節點,通過這個key來管理節點
scp fence_xvm.key root@server1:/etc/cluster/
scp fence_xvm.key root@server2:/etc/cluster/systemctl start fence_virtd.service

在server1上識別并添加fence

注意:server1(主機名):server1(虛擬機名)

stonith_admin -I
pcs stonith create vmfence fenxe_xvm pcmk_host_map="server1:server1;server2:server2" op monitor interval=1min

測試:

寫壞server2的內核,通過fence重啟

pcs property set stonith-enabled=true
echo c >/proc/sysrq-trigger

添加iscsi網絡共享磁盤

server3作為共享磁盤
為server3添加一塊20G的虛擬磁盤

fdisk /dev/vda     建個分區
partprobe

安裝共享磁盤服務并設置

yum install targetcli -y
targetcli
/backstores/block create my_disk1 /dev/vdaiscsi/ create iqn.2019-06.com.example:server3iscsi/iqn.2019-06.com.cc.example:server3:/tpg1/luns create /backstores/block/my_disk1
iscsi/iqn.2019-06.com.cc.example:server3/tpg1/acls create iqn.2019-06.com.example:client
exit

在server1和server2上安裝iscsi
并編寫文件

yum install iscsi-* -y
cat /etc/iscsi/initiatorname.iscsi
InitiatorName=iscsi/iqn.2019-06.com.cc.example:client
systemctl restart iscsid

識別并登陸共享磁盤

iscsiadm -m discovery -t st -p 172.25.5.113
iscsiadm -m node -l
partprobe
cat /proc/partitions

在共享磁盤上創建一個分區并格式化

fdisk /dev/sdb
mkfs.ext4 /dev/sdb1
partprobe

在server2同步并查看

partprobe 
cat /proc/partitions

添加mysql數據庫資源

在server1和server2上分別安裝mariadb

yum install mariadb-* -y
sysemctl start mariadb

server1掛載到共享磁盤并登陸數據庫

chown mysql.mysql /var/lib/mysql
mount /dev/sdb1 /var/lib/mysql
systemctl start mariadb
mysql -uroot

關閉server1的mariadb并在server2登陸數據庫

server1           systemctl stop mariadbserver2           mount /dev/sdb1 /var/lib/mysqlsystemctl start mariadbmysql -uroot

測試完畢卸載并關閉mariadb

umount /var/lib/mysql
systemctl stop mariadb

刪除之前創建的apache組
并創建新的vip和組

pcs resource delete apache_group
pcs resource create vip1 ocf:heartbeat:IPaddr2 ip=172.25.11.200 cidr_netmask=32 op monitor interval=30s
pcs resource create mysql_data ocf:heartbeat:Filesystem device=/dev/sdb1 directory=/var/lib/mysql fstype=xfs op monitor interval=30s
df
crm_mon
pcs resource create mariadb systemd:mariadb op monitor interval=1min
pcs resource group add mysql_group vip1 mariadb
crm_mon

在server1登陸mysql測試

mysql -uroot

在server2把內核寫崩測試fence

pcs property set stonith-enabled=true
echo c >/proc/sysrq-trigger

解決fence資源的bug

目的:寫崩server2內核,在server2重啟過程中,資源會回到server1上,當server2重啟以后,資源也會一直在server1上

解決辦法:
刪除之前創建資源、組、fence

pcs resource delete mysql_group
pcs resource delete vmfence
pcs property set stonith-enabled=false
crm_verify -L -V

重新添加資源、組、fence

pcs resource create vip1 ocf:heartbeat:IPaddr2 ip=172.25.5.200 cidr_netmask=32 op monitor interval=30s
pcs resource create mysql_data ocf:heartbeat:Filesystem device=/dev/sdb1 directory=/var/lib/mysql fstype=xfs op monitor interval=30s
pcs resource create mariadb systemd:mariadb op monitor interval=1min
pcs resource group add mysql_group vip1 mariadb

更改resource-stickiness值

pcs resource defaults
pcs resource defaults resource-stickiness=100
pcs resource defaults

添加fence并再次更改resource-stickiness值

pcs stonith create vmfence fenxe_xvm pcmk_host_map="server1:server1;server2:server2" op monitor interval=1min
pcs resource defaults resource-stickiness=0
pcs resource defaults
pcs property set stonith-enabled=true

測試:
寫崩server2內核,在server2重啟過程中,資源會回到server1上,當server2重啟以后,資源也會一直在server1上

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/news/542053.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/542053.shtml
英文地址,請注明出處:http://en.pswp.cn/news/542053.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

分頁導航的實現方法

這個導航是閱讀了精通css這本書后做的demo&#xff0c;感覺以前寫的真的是弱爆了 <!DOCTYPE html> <html lang"en"> <head><meta charset"UTF-8"><title>Document</title><style type"text/css">ol.n…

更換mysql_這些被你忽視的MySQL細節,可能會讓你丟飯碗!

我們在 MySQL 入門篇主要介紹了基本的 SQL 命令、數據類型和函數&#xff0c;在具備以上知識后&#xff0c;你就可以進行 MySQL 的開發工作了&#xff0c;但是如果要成為一個合格的開發人員&#xff0c;你還要具備一些更高級的技能&#xff0c;下面我們就來探討一下 MySQL 都需…

Java RandomAccessFile skipBytes()方法與示例

RandomAccessFile類skipBytes()方法 (RandomAccessFile Class skipBytes() method) skipBytes() method is available in java.io package. skipBytes()方法在java.io包中可用。 skipBytes() method is used to skip the given number of bytes in this file and possibly set …

rhcs集群套件—紅帽6的高可用

含義及理解&#xff1a; RHCS是Red Hat Cluster Suite的縮寫&#xff0c;也就是紅帽子集群套件&#xff0c;RHCS是一個能夠提供高可用性、高可靠性、負載均衡、存儲共享且經濟廉價的集群工具集合&#xff0c;&#xff0c;它將集群系統中三大集群架構&#xff08;高可用性集群、…

MapReduce二次排序

2019獨角獸企業重金招聘Python工程師標準>>> 默認情況下&#xff0c;Map輸出的結果會對Key進行默認的排序&#xff0c;但是有時候需要對Key排序的同時還需要對Value進行排序&#xff0c;這時候就要用到二次排序了。下面我們來說說二次排序 1、二次排序原理 我們把二…

數據有序_詳解數據庫插入性能優化:合并+事務+有序數據進行INSERT操作

概述對于一些數據量較大的系統&#xff0c;數據庫面臨的問題除了查詢效率低下&#xff0c;還有就是數據入庫時間長。特別像報表系統&#xff0c;每天花費在數據導入上的時間可能會長達幾個小時或十幾個小時之久。因此&#xff0c;優化數據庫插入性能是很有意義的。其實最有效的…

Java ProcessBuilder environment()方法與示例

ProcessBuilder類的environment()方法 (ProcessBuilder Class environment() method) environment() method is available in java.lang package. environment()方法在java.lang包中可用。 environment() method is used to return Map interfaces of this process builder env…

容器內應用日志收集方案

容器化應用日志收集挑戰 應用日志的收集、分析和監控是日常運維工作重要的部分&#xff0c;妥善地處理應用日志收集往往是應用容器化重要的一個課題。 Docker處理日志的方法是通過docker engine捕捉每一個容器進程的STDOUT和STDERR&#xff0c;通過為contrainer制定不同log dri…

python統計行號_利用Python進行數據分析(第三篇上)

上一篇文章我記錄了自己在入門 Python 學習的一些基礎內容以及實際操作代碼時所碰到的一些問題。這篇我將會記錄我在學習和運用 Python 進行數據分析的過程&#xff1a;介紹 Numpy 和 Pandas 兩個包運用 Numpy 和 Pandas 分析一維、二維數據數據分析的基本過程實戰項目【用 Pyt…

lnmp架構搭建—源碼編譯(nginx、mysql、php)

含義及理解&#xff1a; LNMP LinuxNginxMysqlPHP&#xff1a;LNMP是指一組通常一起使用來運行動態網站或者服務器的自由軟件名稱首字母縮寫。L指Linux&#xff0c;N指Nginx&#xff0c;M一般指MySQL&#xff0c;也可以指MariaDB&#xff0c;P一般指PHP&#xff0c;也可以指P…

Java PipedInputStream available()方法與示例

PipedInputStream類的available()方法 (PipedInputStream Class available() method) available() method is available in java.io package. available()方法在java.io包中可用。 available() method is used to return the number of available bytes left that can be read …

解析xml_Mybatis中mapper的xml解析詳解

上一篇文章分析了mapper注解關鍵類MapperAnnotationBuilder&#xff0c;今天來看mapper的項目了解析關鍵類XMLMapperBuilder。基礎介紹回顧下之前是在分析configuration的初始化過程&#xff0c;已經進行到了最后一步mapperElement(root.evalNode("mappers"))&#x…

lnmp—MemCache的作用

含義及理解&#xff1a; 1 . memcache是一個高性能的分布式的內存對象緩存系統&#xff0c;用于動態web應用以減輕數據庫負擔。通過在內存里維護一個統一的巨大的hash表&#xff0c;來存儲經常被讀寫的一些數組與文件&#xff0c;從而極大的提高網站的運行效率。 memcache是一…

Java ListResourceBundle getKeys()方法與示例

ListResourceBundle類的getContents()方法 (ListResourceBundle Class getContents() method) getContents() method is available in java.util package. getContents()方法在java.util包中可用。 getContents() method is used to return an enumeration of all the keys tha…

orale用戶密碼過期處理

使用具有管理權限的用戶登錄1、查看用戶的proifle是哪個&#xff0c;一般是default&#xff1a;SELECT username,PROFILE FROM dba_users;2、查看指定概要文件&#xff08;如default&#xff09;的密碼有效期設置&#xff1a;sql>SELECT * FROM dba_profiles s WHERE s.prof…

python字典怎么設置_在python中設置字典中的屬性

在python中設置字典中的屬性是否可以在python中從字典創建一個對象&#xff0c;使每個鍵都是該對象的屬性&#xff1f;像這樣的東西&#xff1a;d { name: Oscar, lastName: Reyes, age:32 }e Employee(d)print e.name # Oscarprint e.age 10 # 42我認為這幾乎與這個問題相反…

Java ObjectInputStream readByte()方法與示例

ObjectInputStream類readByte()方法 (ObjectInputStream Class readByte() method) readByte() method is available in java.io package. readByte()方法在java.io包中可用。 readByte() method is used to read a byte (i.e. 8 bit) of data from this ObjectInputStream. re…

openresty—實現緩存前移

含義及理解&#xff1a; OpenResty(又稱&#xff1a;ngx_openresty) 是一個基于 NGINX 的可伸縮的 Web 平臺&#xff0c;由中國人章亦春發起&#xff0c;提供了很多高質量的第三方模塊。 其目標是讓Web服務直接跑在Nginx服務內部&#xff0c;充分利用Nginx的非阻塞I/O模型&am…

Nginx+Keepalived+Tomcat之動靜分離的web集群

NginxKeepalivedTomcat之動靜分離的web集群 博客分類&#xff1a; webserverNginxKeepalivedTomcat之動靜分離的web集群為小公司提供大概一天持續在100萬/日之間訪問的高性能、高可用、高并發訪問及動靜分離的web集群方案NginxKeepalived 高可用、反向代理NginxPHP …

安裝完成后的配置_cent os7 默認安裝后的一般配置

在安裝cent os7后&#xff0c;進入系統會出現一些命令無法執行。這是因為最小化沒有安裝包含的軟件包。這時候先要配置一下基本的IP參數&#xff0c;(包括動態&#xff0c;靜態&#xff0c;或者是雙網卡綁定)。我們在虛擬機中模擬操作一下&#xff0c;配置文件在/etc/sysconfig…