corosync v2 + pacemaker + crmsh 實現mariadb高可用

高可用mariadb拓撲圖

corosync+pacemaker+crmsh+mariadb.png

一、設計前提

    1、時間同步 # ntpdate 172.16.0.1 或者 # chronyc sources

    2、所有的主機對應的IP地址解析可以正常工作, 主機名要與命令#uname -n 所得的結果一致

         因此,/etc/hosts中的內容為以下內容

        172.16.23.10 node1.rj.com node1 
	    172.16.23.11 node2.rj.com node2 
        172.16.23.12 node3.rj.com node3

二、環境的建立及安裝orosync ,pacemaker ,crmsh 

        三臺機器都安裝好ansible (對于ansible集群管理工具而言需要雙機互信,其中node1當做堡壘機)

	# ssh-keygen  
	# for i in {10..12}; do ssh-copy-id -i 172.16.23.$i ; done ; 此條命令將公鑰發送給三臺機器,其中包括自己也就是堡壘機
	# vim /etc/ansible/hosts 
		[mariadb]
		172.16.23.10
		172.16.23.11
		172.16.23.12
	# ansible mariadb -m ping 測試三臺主機與堡壘機之間的連通性 
	# vim /etc/hosts 主機名解析配置
		172.16.23.10 node1.rj.com node1
		172.16.23.11 node2.rj.com node2
		172.16.23.12 node3.rj.com node3
	# ansible mariadb -m command -a "ntpdate 172.16.0.1"  同步三臺主機的時間 
	# ansible mariadb -m yum -a "name=pacemaker,mariadb-server state=present" 在三臺主機上安裝 mariadb ,corosync 和 pacemaker

        注:yum 安裝pacemaker 的時候,其corosync也會自動安裝上

        # vim /etc/corosync/corosync.conf 
		加入以下信息
		totem {
			version: 2
			crypto_cipher: aes256
			crypto_hash: sha1
			interface {
				ringnumber: 0
				bindnetaddr: 172.16.0.0
				mcastaddr: 239.255.23.1
				mcastport: 5405
				ttl: 1
			}
		logging {
			fileline: off
			to_stderr: no
			to_logfile: yes
			logfile: /var/log/cluster/corosync.log
			to_syslog: no
			debug: off
			timestamp: on
			logger_subsys {
				subsys: QUORUM
				debug: off
			}
		quorum {
			provider: corosync_votequorum
			node {
				ring0_addr: node1.rj.com
				nodeid:1 
			}
			node {
				ring0_addr: node2.rj.com
				nodeid:2 
			}
			
			node {
				ring0_addr: node3.rj.com
				nodeid:3
				}
				
    # corosync-keygen 
	# ansible mariadb -m copy -a "src=/etc/corosync/authkey dest=/etc/corosync/"
	# ansible mariadb -m copy -a "src=/etc/corosync/corosync.conf dest=/etc/corosync/"
	# ansible mariadb -m service -a "name=corosync state=persent"
	# ansible mariadb -m service -a "name=pacemaker state=persent"
	#  tcpdump -i eno16777736 -nn port 5405

        使用tcpdump抓包工具可以來查看三臺主機之間傳遞的心跳信息

ttttttt.png

        注:mariadb在集群資源的配置中必需是開機自啟動的

        這樣corosync才能實別其Unitfile 文件,而不能在配置前啟動所以服務一定是關閉的

	# ansible mariadb -m service -a "name=mariadb enabled=on"
	# ansible mariadb -m service -a "name=corosync enabled=on"
    # ansible mariadb -m service -a "name=pacemaker enabled=on"
	# mkdir rpm && cd rpm 
	# wget 172.18.0.1/pub/Sources/7.x86_64/crmsh/crmsh-2.1.4-1.1.x86_64.rpm 下載crmsh及其所依賴的rpm包 
	# wget 172.18.0.1/pub/Sources/7.x86_64/crmsh/pssh*.rpm
	# wget 172.18.0.1/pub/Sources/7.x86_64/crmsh/python-passh*.rpm 
	# ansible mariadb -m copy -a "src=/root/rpm dest=/root/"
	# for i in {1..3}; do ssh node$i yum -y install /root/rpm/*; done

        查看corosync引擎是否已經正常啟動

        # ansible mariadb -e command -a "grep -e 'Corosync Cluster Engine' -e 'configuration file' /var/log/messages" 
        	Feb 13 11:27:35 node1 systemd: Stopped Corosync Cluster Engine.
        	Feb 13 14:08:03 node1 systemd: Starting Corosync Cluster Engine...
        	Feb 13 14:08:04 node1 corosync: Starting Corosync Cluster Engine (corosync): [  OK  ]
        	Feb 13 14:08:04 node1 systemd: Started Corosync Cluster Engine.
        	Feb 13 14:28:16 node1 systemd: Mounted NFSD configuration filesystem.
        	Feb 13 14:28:44 node1 smartd[787]: Opened configuration file /etc/smartmontools/smartd.conf
        	Feb 13 14:32:12 node1 systemd: Starting Corosync Cluster Engine...
        	Feb 13 14:32:13 node1 corosync: Starting Corosync Cluster Engine (corosync): [  OK  ]
        	Feb 13 14:32:13 node1 systemd: Started Corosync Cluster Engine.
        	Feb 13 14:43:03 node1 systemd: Started Corosync Cluster Engine.

        查看其成員之間的結點通知信息是否正常 

        # ansible mariadb -e command -a "grep TOTEM /var/log/messages"

        查看啟動過程中是否有錯誤信息產生 

        # ansible mariadb -e command -a "grep 'ERROR' /var/log/messages"

        查看pacemaker是否已經正常啟動

        # ansible mariadb -e command -a "grep 'pacemaker' /var/log/messages "

        使用以下命令查看結點的狀態

        # crm status  
		Last updated: Mon Feb 13 15:43:08 2017		Last change: Mon Feb 13 14:33:58 2017 by hacluster via crmd on node3.rj.com
		Stack: corosync
		Current DC: node3.rj.com (version 1.1.13-10.el7-44eb2dd) - partition with quorum
		3 nodes and 0 resources configured

		Online: [ node1.rj.com node2.rj.com node3.rj.com ]

        查看pacemaker 和與corosync所啟動的進程 

        # ansible mariadb -m command -a "ps auxf " | grep pacemaker
		root       1720  0.0  1.3 130484  6384 ?        Ss   14:33   0:00 /usr/sbin/pacemakerd -f
		haclust+   1729  0.0  2.7 132816 13268 ?        Ss   14:33   0:01  \_ /usr/libexec/pacemaker/cib
		root       1730  0.0  1.4 133968  6956 ?        Ss   14:33   0:00  \_ /usr/libexec/pacemaker/stonithd
		root       1731  0.0  0.8 102936  4108 ?        Ss   14:33   0:00  \_ /usr/libexec/pacemaker/lrmd
		haclust+   1732  0.0  1.3 124780  6736 ?        Ss   14:33   0:00  \_ /usr/libexec/pacemaker/attrd
		haclust+   1733  0.0  0.7 114896  3668 ?        Ss   14:33   0:00  \_ /usr/libexec/pacemaker/pengine
		haclust+   1734  0.0  1.5 143160  7484 ?        Ss   14:33   0:00  \_ /usr/libexec/pacemaker/crmd
        # ansible marriadb -m command -a "ps auxf" | grep corosync 
	     root       1483  0.6  7.9 134848 38436 ?        Ssl  14:32   0:28 corosync

三、利用crmsh來配置corosync的IP地址資源及mariadb資源  

        如果想要查看某種類別下的所用資源代理的列表,可以使用類似以下的命令來實現

    #crm ra list lsb 
	#crm ra list ocf heartbeat 
	#crm ra list ocf pacemaker 
	#crm ra list ocf stonith

配置vip 

    # crm configure property stonith-enabled=false 關閉stonsth設備
	# crm configure primitive DBIP ocf:heartbeat:IPaddr params ip=172.16.23.23 添加vip資源代理  
	# crm configure verify 查看是否有錯誤
	# crm configure commit 用來提交配置信息 
	# crm configure show  可以用來查看配置信息
		node 1: node1.rj.com
		node 2: node2.rj.com
		node 3: node3.rj.com
		primitive DBIP IPaddr \
			params ip=172.16.23.23
		property cib-bootstrap-options: \
			have-watchdog=false \
			dc-version=1.1.13-10.el7-44eb2dd \
			cluster-infrastructure=corosync \
			stonith-enabled=false
	# crm node standby node1.rj.com	當將node1結點成為備用結點時 
	# ansible mariadb -m command -a "ip addr list" 查看其vip的變化信息
	# crm ra info systemd:mairadb 用來查看systemd類型的mariadb資源的語法格式 
		systemd unit file for mariadb (systemd:mariadb)

		MariaDB database server

		Operations' defaults (advisory minimum):

			start         timeout=15
			stop          timeout=15
			status        timeout=15
			restart       timeout=15
			monitor       timeout=15 interval=15 start-delay=15

vip資源 

node1 noline pirector.png 

    當node1 # crm node standby node1.rj.com 時

ansible 查看vip信息.png

       定義mariadbg資源并設定監控

	# crm configure primitive MDB systemd:mariadb op start timeout=15s op stop timeout=15s op monitor interval=15s timeout=15s 
	# crm configure group DBservice DBIP MDB
	# crm configure verify 
	# crm configure commit 
	# crm configure show  
		node 1: node1.rj.com \
			attributes standby=on
		node 2: node2.rj.com \
			attributes standby=off
		node 3: node3.rj.com \
			attributes standby=off
		primitive DBIP IPaddr \
			params ip=172.16.23.23
		primitive MDB systemd:mariadb \
			op start timeout=15s interval=0 \
			op stop timeout=15s interval=0 \
			op monitor interval=15s timeout=15s
		group DBservice DBIP MDB
		property cib-bootstrap-options: \
			have-watchdog=false \
			dc-version=1.1.13-10.el7-44eb2dd \
			cluster-infrastructure=corosync \
			stonith-enabled=false \
			no-quorum-policy=ignore

        為mariadb服務加入數據庫資源,并配置遠程用戶遠程接入進行測試 

注:此時有一個資源已經啟動,但其它的兩個mariadb服務啟動之后才能進行對數據庫的更改

               但更改完后旋得再將那兩個結點的數據庫停止調

	node1 node2 node3上執行: #  mysql -e "GRANT ALL  ON *.* TO 'root'@'%.%.%.%' IDENTIFIED BY 'centos.123';" 
	node1 # mysql -e "CREATE DATABASE NODE1"
	node2 # mysql -e "CREATE DATABASE NODE2"
	node3 # mysql -e "CREATE DATABASE NODE3"

        啟用一臺測試機進行測試

test3.png

    node1	# systemctl stop corosync.service pacemaker.service 當node1的服務停止時

test2.png

node2   # systemctl stop corosync.service pacemaker.service 當node2的的服務停止時

test1.png

原創文章,作者:renjin,如若轉載,請注明出處:http://www.www58058.com/68313

(0)
renjinrenjin
上一篇 2014-06-09
下一篇 2014-08-25

相關推薦

  • vim小結

    1. 簡介 Vim(Vi[Improved])編輯器是功能強大的跨平臺文本文件編輯工具,繼承自Unix系統的Vi編輯器,支持Linux/Mac OS X/Windows系統,利用它可以建立、修改文本文件。進入Vim編輯程序,可以在終端輸入下面的命令: $vim [filename] 其中filename是要編輯器的文件的路徑名。如果文件不存在,它將…

    Linux干貨 2016-08-12
  • HAProxy基于KeepAlived實現Web高可用及動靜分離

    前言 軟件負載均衡一般通過兩種方式來實現:基于操作系統的軟負載實現和基于第三方應用的軟負載實現。LVS是基于Linux操作系統實現的一種軟負載,而HAProxy則是基于第三方應用實現的軟負載。HAProxy相比LVS的使用要簡單很多,但跟LVS一樣,HAProxy自己并不能實現高可用,一旦HAProxy節點故障,將會影響整個站點。本文帶來的是HAProxy基…

    Linux干貨 2015-06-25
  • Keepalive+Nginx高可用配置(主從)

    Keepalived高可用集群 一、Keepalived介紹 Keepalived軟件主要通過VRRP協議實現高可用功能的。VRRP是Virtual Router Redundancy Protocol(虛擬路由器冗余協議)的縮寫,VRRP出現的目的就是為了解決靜態路由單點故障問題,它能夠保證當個別節點宕機時,整個網絡可以不間斷地運行。keepalived除…

    Linux干貨 2016-12-30
  • Linux風水學

    Linux風水學童 有的沒的說一說 說一個,到一個。想起哪個說哪個,說起哪個都不錯。 對于接觸過一點點Linux的風水學童的我來說,還在苦背天地玄黃,宇宙洪荒。雖然不懂是干什么的,但是心里總有個聲音告訴我,這些鬼畫符肯定有用??傆幸惶煳夷艹蔀橐粋€合格的Linux風水師,去某個員外家里施展堪輿之術被奉為上賓。 Linux流派大概   相對于目前的流派…

    2017-07-18
  • 關于生命中的根

    關于生命中的根    擦干心中的血和淚痕    留住我們的根 關于生命中的根 鴻蒙初辟,萬物生于根 尋根之旅 根就是根 我即為根 路在何方 鴻蒙初辟,萬物生于根    自linux老祖Torvalds創根之始至今,根一直為linux之本,而FHS(Filesystem Hierarchy Stand…

    Linux干貨 2016-10-27
  • 程序包管理:rpm和yum

    rpm命令                              軟件包管理 程序包管理 一、概述 (一)API:Application Program Interface  應用編程接口 ABI…

    Linux干貨 2016-08-21
欧美性久久久久