日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

实战mariadb-galera集群架构

發布時間:2025/5/22 编程问答 16 豆豆
生活随笔 收集整理的這篇文章主要介紹了 实战mariadb-galera集群架构 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

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-server、mariadb-cluster-server

2

node26

192.168.10.26

mariadb-servermariadb-cluster-server

3

node27

192.168.10.27

mariadb-server、mariadb-cluster-server

4

node11

192.168.10.11

atlasmysql-proxy、MyCatdbproxy代理軟件

?

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????添加如下內容

  • 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-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的格式也有三種: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.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-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集群架构的全部內容,希望文章能夠幫你解決所遇到的問題。

    如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。