實戰mariadb-galera叢集架構

weixin_33763244發表於2017-11-09

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   admin@'%'    identified  by  'admin'   with    grant   option;

grant  all  on  *.* to  myroot@'%'  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:3306@1,192.168.100.27:3306@2

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

 

未完,待續.....

 

 

 

 

      本文轉自rshare 51CTO部落格,原文連結:http://blog.51cto.com/1364952/1955624,如需轉載請自行聯絡原作者


相關文章