1. 程式人生 > >實戰mariadb-galera集群架構

實戰mariadb-galera集群架構

galera mariadb mysql atlas集群

day6

復習昨天的內容:

數據庫代理--數據庫中間件

功能:

負載均衡LB:將客戶端請求以相對均衡的方式分發給後端的服務器;

讀寫分離:能夠區分讀和寫,將相應的操作分漢給對應的服務;

分庫分表分片:提高讀性能,讓後端服務器緩沖不同的數據;

sql路由並發查詢:將一條 復雜的sql語句分成多條 sql語句,分發給後端對應的服務器。

軟件:

mysql-proxyatlasmysql官方的,使用的公司有魔獸世界

mycat:在阿裏馬馬cobar上的二次開發,是一個神話

數據庫高可用――HA

1、什麽是高可用?

表示法:百分比、9規則

例如:0.99999%代表一年中只能有5分鐘的宕機時間(365*24*60*0.000015.256分)

宕機造成的損失和降低宕機時間所花費的成本的衡量

一般能做到兩個93天)、398h)、4952.56分)

2、宕機的原因歸納

硬件上最普遍的問題是磁盤空間耗盡;

性能上最普遍的問題是糟糕的sql語句;

復制問題通常是主備數據不一致導致的;

人為誤操作

3、如何實現高可用

降低故障率

優化架構

4、數據庫高可用軟件

mariadb galera cluster

mysql NDB cluster

5、mariadb galera cluster

功能

同步復制

新節點加入自動同步數據

失效節點自動清除

優勢

沒有延遲

拓展能力強

適用架構



6、網絡拓撲

序號

主機名

IP地址

必備軟件(本例用mariadb-10.0.3)

1

node25

192.168.10.25

mariadb-servermariadb-cluster-server

2

node26

192.168.10.26

mariadb-servermariadb-cluster-server

3

node27

192.168.10.27

mariadb-servermariadb-cluster-server

4

node11

192.168.10.11

atlasmysql-proxyMyCatdbproxy代理軟件

7、軟件和版本:

下載安裝

###galera-10.0.31官方rpm包下載(以下實驗首選)

centos6版的galera-10.0.31軟件(首選)http://yum.mariadb.org/10.0.31/centos6-amd64/rpms/

centos7版的galera-10.0.31軟件(首選)http://yum.mariadb.org/10.0.31/centos7-amd64/rpms/

###galera-10.3官方rpm包下載(已測試OK)

centos6版的galera-10.3軟件:http://yum.mariadb.org/10.3/centos6-amd64/rpms/

centos7版的galera-10.3軟件: http://yum.mariadb.org/10.3/centos7-amd64/rpms/

專家建議:直接在官網下載整個rpms目錄中的rpm軟件包。然後在本地搭建galera安裝包yum源,進行安裝。

galera-10.0.31版的安裝(本例已測OK)

yum search galera

yum install -y MariaDB-Galera-server MariaDB-client galera rsync mlocate createrepo

rpm -q MariaDB-Galera-server MariaDB-client galera

ls /etc/my.cnf.d/

galera-10.3版安裝(測試OK)

yum search galera

yum install MariaDB-server MariaDB-client galera rsync mlocate createrepo -y (配置方法同下)

rpm -q MariaDB-server MariaDB-client galera

ls /etc/my.cnf.d/

galera集群配置思路:

1、在每臺主機上停止運行mysqldmariadb服務。並設置服務為開機不啟動。

2、在每臺主機上安裝galera軟件,並啟動mysql服務(此處是galera的服務)

3、在每臺主機上創建用於galera同步數據的用戶賬號,停止mysql服務(此處是galera的服務)

4、設置每臺galera主機的配置文件/etc/my.cnf.d/server.cnf,保證設置正確。

5、初始化啟動第1galera主機的集群環境:

service mysql stop

servicemysql start --wsrep-new-cluster

mysql-uroot -p -e "show status like‘wsrep_%‘;"

6、啟動其他galera主機,驗證集群狀態:mysql -uroot -p -e "show status like ‘wsrep_%‘;"

8、修改hosts文件,實現本地主機名解析

修改系每臺galera主機的hosts文件,實現本地域名解析(選做,不做也不影響)

高效率技巧:在一臺主機上創建好,用scp遠程推送復制到其他主機。

vi /etc/hosts 添加如下內容

  1. 192.168.10.25 node25

  2. 192.168.10.26 node26

  3. 192.168.10.27 node27

  4. 192.168.10.11 node11

9、關閉安全功能

配置防火墻規則,參考官方的說明,我這裏偷懶就直接關閉了防火墻。

service iptables stop

chkconfig iptables off

setenforce 0

getenforce

sed -i ‘/^SELINUX=/s/enforcing/permissive/‘ /etc/selinux/config

10、vsftpd在物理機共享galera軟件包(192.168.10.1)。

1步:安裝並共享galera軟件包。

yum install -y vsftpd ftp lftp

service vsftpd restart

chkconfig vsftpd on

cp -rv galera /var/ftp/

firefox ftp://127.0.0.1

2步:創建galera.repo網絡yum源,並測試。

vi /etc/yum.repos.d/galera.repo

[7galera]

name=galera

baseurl=ftp://192.168.10.1/galera

enabled=1

gpgcheck=0

3步:測試yum源和倉庫

yum clean all

yum repolist

yum search galera

11、需要先卸載mariadb-libsmysql-libs

說明:不卸載會導致沖突,服務無法正常運行。

centos7

centos6.5

rpm -e mariadb-libs --nodeps

rpm -e mariadb-common --nodeps

rpm -e mysql-libs --nodeps

rpm -e mysql-common --nodeps

徹底卸載mysql-serveryum remove mysql-server mysql mysql-libs mysql-compact

12、初始安裝配置

安裝MariaDBgalera軟件

yum search galera

yum install -y MariaDB-Galera-server MariaDB-client galera rsync mlocate createrepo

rpm -q MariaDB-Galera-server MariaDB-client galera

ls /etc/my.cnf.d/

安裝和初始化MariaDB數據庫並啟動MariaDB服務,並作安全加固

centos7

centos6.5

systemctl restart mysql

mysql_secure_installation

systemctl stop mysql

service mysql restart

mysql_secure_installation

service mysql stop

說明:系統提供了mysqlmariadb兩個服務腳本,可用service mariadb restart來重啟。

附加需求:在每臺主機啟動mysql服務後,用grant創建兩個Mysql賬號,一個管理員賬號admin,密碼也用admin,再創建一個普通賬號。

mysql -uroot

grant all on *.* to [email protected]%‘ identified by ‘admin‘ with grant option;

grant all on *.* to [email protected]%‘ identified by ‘reppass‘;

FLUSH PRIVILEGES;

select user,host,password from mysql.user;

exit

13、配置文件講解

主配置文件:/etc/my.cnf

附加功能配置文件:/etc/my.cnf.d/*.cnf

galeraAPI動態鏈接庫文件路徑:

updatedb

locate libgalera_smm.so

vi /etc/my.cnf.d/galera.cnf 參考代碼如下

[galera]

#Mandatory settings

#啟用wsrep API接口

wsrep_on=ON

wsrep_provider=/usr/lib64/galera/libgalera_smm.so

#啟動節點時需要指定galera cluster的地址,作為cluster中第一個啟動的節點wsrep_cluster_address="gcomm://",對於後續啟動的節點用wsrep_cluster_address="gcomm://ip1,ip2,ip3 "

wsrep_cluster_address="gcomm://"

##wsrep_cluster_address="gcomm://192.168.100.70,192.168.10.71,192.168.10.72"

#集群名稱(群名),所有node必須一樣

wsrep_cluster_name="galera"

#本節點的地址

wsrep_node_address=192.168.100.70

#本節點名稱

wsrep_node_name=node70

#Snapshot Stat Transfer快照狀態轉移方法:mysqldump/rsync,默認mysqldump

wsrep_sst_method=rsync

#mysqldump同步賬號和密碼(grant授權的賬號和密碼)

wsrep_sst_auth="myroot:reppass"

#binlog的格式也有三種:STATEMENTROWMIXED

binlog_format=ROW

#默認存儲引擎

default_storage_engine=innodb

#調整鎖策略

innodb_autoinc_lock_mode=2

#本機的監聽地址

bind-address=0.0.0.0

#每隔0秒同步刷新數據

innodb_flush_log_at_trx_commit=0

#設置utf8為默認字符集

#character_set_server=utf8

#指定binlog日誌文件

log-bin=mysql-bin

14、galera集群配置文件

node25主機的配置文件(192.168.10.25

vim /etc/my.cnf.d/galera.cnf

[galera]

#Mandatory settings

wsrep_on=ON

wsrep_provider=/usr/lib64/galera/libgalera_smm.so

wsrep_cluster_address="gcomm://"

##wsrep_cluster_address="gcomm://192.168.10.25,192.168.10.26,192.168.10.27"

wsrep_cluster_name="galera"

wsrep_node_address=192.168.10.25

wsrep_node_name=node25

wsrep_sst_method=rsync

wsrep_sst_auth="myroot:reppass"

binlog_format=ROW

default_storage_engine=innodb

innodb_autoinc_lock_mode=2

bind-address=0.0.0.0

innodb_flush_log_at_trx_commit=0

#character_set_server=utf8

log-bin=mysql-bin


15、重啟服務。

service mysql restart

#查看本機mysql服務端口

netstat -ntpl | grep sql

tcp 0 0 0.0.0.0:3306 0.0.0.0:* LISTEN 15065/mysqld

tcp 0 0 0.0.0.0:4567 0.0.0.0:* LISTEN 15065/mysqld

16、其他galera節點上面做相同的配置

需求:依次啟動其他galera節點,其他節點會根據配置自動加入到集群中並同步數據,一定要關閉防火墻和SELinux安全功能。

service iptables stop ; chkconfig iptables stop

setenforce 0 ; getenforce

service firewalld stop ; chkconfig firewalld off

node26主機的配置文件(192.168.10.26

vim /etc/my.cnf.d/galera.cnf

[galera]

#Mandatory settings

wsrep_on=ON

wsrep_provider=/usr/lib64/galera/libgalera_smm.so

##wsrep_cluster_address="gcomm://"

wsrep_cluster_address="gcomm://192.168.10.25,192.168.10.26,192.168.10.27"

wsrep_cluster_name="galera"

wsrep_node_address=192.168.10.26

wsrep_node_name=node26

wsrep_sst_method=rsync

wsrep_sst_auth="myroot:reppass"

binlog_format=ROW

default_storage_engine=innodb

innodb_autoinc_lock_mode=2

bind-address=0.0.0.0

innodb_flush_log_at_trx_commit=0

#character_set_server=utf8

log-bin=mysql-bin

說明:galer集群中的其他主機的galera.cnf配置文件請參考集群成員主機192.168.10.26node26)的配置文件。

17、觀察日誌

cat /var/lib/mysql/node1.example.com.err

cat /var/lib/mysql/grastate.dat

18、galera主機上查看集群狀態

mysql -uroot -p

show global status like ‘wsrep%‘;

登錄

查看集群wsrep接口狀態

19、galera集群關機問題

1步:逐一關閉galera成員主機。

2步:最後關閉galera集群的群主主機。

異常處理:當機房突然停電,所有galera主機都非正常關機,來電後開機,會導致galera集群服務無法正常啟動。如何處理?

20、galera集群開機問題。

1步:開啟galera集群的群主主機的mysql服務。

2步:開啟galera集群的成員主機的mysql服務。

異常處理:galera集群的群主主機和成員主機的mysql服務無法啟動,,如何處理?

解決方法一:第1步、刪除garlera群主主機的/var/lib/mysql/grastate.dat狀態文件,service mysql restart重啟服務。啟動正常。登錄並查看wsrep狀態。

2步:刪除galera成員主機中的/var/lib/mysql/grastate.dat狀態文件,service mysql restart重啟服務。啟動正常。登錄並查看wsrep狀態。

解決方法二:第1步、修改garlera群主主機的/var/lib/mysql/grastate.dat狀態文件中的01service mysql restart重啟服務。啟動正常。登錄並查看wsrep狀態。

2步:修改galera成員主機中的/var/lib/mysql/grastate.dat狀態文件中的01service mysql restart重啟服務。啟動正常。登錄並查看wsrep狀態。

21、模擬故障實驗

1、 安裝了3個節點

2、 關閉第一個節點後重啟服務,需要修改配置文件

3、 關閉第3個節點,去查看錯誤日誌文件,在集群中創建庫,重啟服務,看是否能夠同步到數據。

22、mysql-proxy數據庫代理前端(中間件)

可用軟件:atlasmysql-proxyMyCat

本例軟件:Atlas代理

##安裝配置atlas讀寫分離(192.168.10.11)

service iptables stop

chkconfig iptables off

setenforce 0

getenforce

sed -i ‘s/^SELINUX=enforcing/SELINUX=permissive/‘ /etc/selinux/config

grep ‘^SELINUX=‘ /etc/selinux/config

安裝和配置atlas軟件

rpm -ivh Atlas-2.2.1.el6.x86_64.rpm

echo"PATH=$PATH:/usr/local/mysql-proxy/bin/" > /etc/profile.d/mysql-proxy.sh

source /etc/profile.d/mysql-proxy.sh

ll /usr/local/mysql-proxy/

##mysql-proxy文件功能說明:

bin目錄下放的都是可執行文件

  1. encrypt”是用來生成MySQL密碼加密的,在配置的時候會用到

  2. mysql-proxy”是MySQL自己的讀寫分離代理

  3. mysql-proxyd”是360弄出來的,後面有個“d”,服務的啟動、重啟、停止。都是用他來執行的

conf目錄下放的是配置文件

  1. test.cnf”只有一個文件,用來配置代理的,可以使用vim來編輯

lib目錄下放的是一些包,以及Atlas的依賴

log目錄下放的是日誌,如報錯等錯誤信息的記錄

進入bin目錄,使用encrypt來對數據庫的密碼進行加密,我的MySQL數據的用戶名是admin,密碼是admin,我需要對密碼進行加密

cd /usr/local/mysql-proxy/bin/

./encrypt admin 生成加密密碼,並復制此密碼la1Ux+Bu4zo=

cd /usr/local/mysql-proxy/conf/

cp -v test.cnf test.cnf.bak //備份test.cnf配置文件

vi test.conf 修改後的讀寫分享的完整配置文件內容

[mysql-proxy]

admin-username = user

admin-password = pwd

proxy-backend-addresses =192.168.100.25:3306

proxy-read-only-backend-addresses =192.168.100.26:[email protected],192.168.100.27:[email protected]

pwds = admin:la1Ux+Bu4zo=, myroot:esSF+VYp1RM=

daemon = true

keepalive = true

event-threads = 8

log-level = message

log-path = /usr/local/mysql-proxy/log

proxy-address = 0.0.0.0:3306

admin-address = 0.0.0.0:2345

設置mysql-proxyd開機啟動:

echo "/usr/local/mysql-proxy/bin/mysql-proxyd test start" >> /etc/rc.local

/usr/local/mysql-proxy/bin/mysql-proxyd test stop

source /etc/rc.local

lsof -i:3306 查端口

netstat -atunlp |grep sql mysql網絡進程

tcpdump抓包: tcpdump -i eth0 port 3306

說明:抓取經過192.168.10.11代理主機的eth0網卡的3306端口的數據包,驗證讀寫分離效果。

登錄測試:mysql -uadmin -padmin -h 192.168.10.11 -P3306

登錄到atlas管理端:mysql -uuser -ppwd -h 192.168.10.11 -P2345

-------------------------------------------------

啟動atlas服務:/usr/local/mysql-proxy/bin/mysql-proxyd test start

重啟atlas服務:/usr/local/mysql-proxy/bin/mysql-proxyd test restart

查狀態:/usr/local/mysql-proxy/bin/mysql-proxy test status

23、phpadmin部署(centos7系統)

1步:安裝軟件。

yum install -y httpd php php-mysql

yum install -y php-mbstring-5.4.16-36.el7_1.x86_64.rpm (要先下載此包)

wget phpMyAdmin-4.4.15-all-languages.tar.bz2

未完,待續.....


本文出自 “網絡技術天地” 博客,請務必保留此出處http://1364952.blog.51cto.com/1354952/1955624

實戰mariadb-galera集群架構