实战mariadb-galera集群架构
day6
復習昨天的內容:
數據庫代理--數據庫中間件
| 功能: | 負載均衡LB:將客戶端請求以相對均衡的方式分發給后端的服務器; 讀寫分離:能夠區分讀和寫,將相應的操作分漢給對應的服務; 分庫分表分片:提高讀性能,讓后端服務器緩沖不同的數據; sql路由并發查詢:將一條?復雜的sql語句分成多條?sql語句,分發給后端對應的服務器。 |
| 軟件: | mysql-proxy和atlas:mysql官方的,使用的公司有魔獸世界 mycat:在阿里馬馬cobar上的二次開發,是一個神話 |
?
數據庫高可用――HA
1、什么是高可用?
表示法:百分比、9規則
例如:0.99999%代表一年中只能有5分鐘的宕機時間(365天*24*60*0.00001=5.256分)
宕機造成的損失和降低宕機時間所花費的成本的衡量
一般能做到兩個9(3天)、3個9(8h)、4個9(52.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-server、mariadb-cluster-server |
| 2 | node26 | 192.168.10.26 | mariadb-server、mariadb-cluster-server |
| 3 | node27 | 192.168.10.27 | mariadb-server、mariadb-cluster-server |
| 4 | node11 | 192.168.10.11 | atlas或mysql-proxy、MyCat等dbproxy代理軟件 |
?
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、在每臺主機上停止運行mysqld或mariadb服務。并設置服務為開機不啟動。
2、在每臺主機上安裝galera軟件,并啟動mysql服務(此處是galera的服務)。
3、在每臺主機上創建用于galera同步數據的用戶賬號,停止mysql服務(此處是galera的服務)。
4、設置每臺galera主機的配置文件/etc/my.cnf.d/server.cnf,保證設置正確。
5、初始化啟動第1臺galera主機的集群環境:
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????添加如下內容
192.168.10.25? ??? node25
192.168.10.26???? node26
192.168.10.27???? node27
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-libs或mysql-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-server:yum? remove? ?mysql-server?? mysql?? mysql-libs?? mysql-compact | |
?
12、初始安裝配置
安裝MariaDB和galera軟件
| 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 |
| 說明:系統提供了mysql和mariadb兩個服務腳本,可用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
?
查galera的API動態鏈接庫文件路徑:
? 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的格式也有三種:STATEMENT、ROW、MIXED 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.26(node26)的配置文件。
?
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狀態文件中的0為1,service?? mysql??restart重啟服務。啟動正常。登錄并查看wsrep狀態。
第2步:修改galera成員主機中的/var/lib/mysql/grastate.dat狀態文件中的0為1,service?? mysql??restart重啟服務。啟動正常。登錄并查看wsrep狀態。
?
21、模擬故障實驗
1、??安裝了3個節點
2、??關閉第一個節點后重啟服務,需要修改配置文件
3、??關閉第3個節點,去查看錯誤日志文件,在集群中創建庫,重啟服務,看是否能夠同步到數據。
?
22、mysql-proxy數據庫代理前端(中間件)
可用軟件:atlas、mysql-proxy、MyCat等
本例軟件: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目錄下放的都是可執行文件
“encrypt”是用來生成MySQL密碼加密的,在配置的時候會用到
“mysql-proxy”是MySQL自己的讀寫分離代理
“mysql-proxyd”是360弄出來的,后面有個“d”,服務的啟動、重啟、停止。都是用他來執行的
?
conf目錄下放的是配置文件
“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,如需轉載請自行聯系原作者
總結
以上是生活随笔為你收集整理的实战mariadb-galera集群架构的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 定义/赋值数组、 expect预期交互
- 下一篇: LAMP源码编译安装配置+wordpre