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

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 运维知识 > linux >内容正文

linux

利用 Chef 在 Red Hat Enterprise Linux 上自动化部署 Mariadb Galera Cluster

發布時間:2025/3/21 linux 43 豆豆
生活随笔 收集整理的這篇文章主要介紹了 利用 Chef 在 Red Hat Enterprise Linux 上自动化部署 Mariadb Galera Cluster 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

簡介

Chef

Chef提供了一套自動化安裝和配置軟件的工具。它允許開發者以模塊化的方式(cookbook)來定義軟件的安裝和配置流程(recipe),以及流程中的可定制參數(attribute)。當需要在特定的環境中創建軟件服務時,用戶指定模塊名稱以及相應的參數值,Chef會負責在目標環境中執行預定義的安裝和配置流程。使用 Chef 需要安裝 Chef Server 以及 Chef Development Kit(ChefDK)。Chef Server 負責保存開發者提供的軟件安裝和配置流程定義,并在目標機器上執行。ChefDK 則是開發者用來定義軟件安裝和配置流程的工具。

Mariadb Galera Cluster

Mariadb Galera Cluster 是 Mariadb 提供的一種同步多主節點的集群模式。這種模式與傳統的 Maraidb Replication 功能的區別主要在于:

  • Galera Cluster 中的所有節點都在提供數據庫服務。而 Replication 模式下只有一個主節點在提供數據庫服務,其余的 Slave節點雖然與主節點進行數據同步,但在其成為主節點之前并不提供數據庫服務。

  • Galera Cluster 下的數據庫操作都是同步的,也就是當一個事務結束時,所有節點上都已經包含了這一事務所做的修改。換言之,在任何一個時刻,集群中每個節點上的數據都是同步的。而在傳統的Replication 模式下,主從節點的數據同步是獨立于修改數據的事務,同步通常存在一定的時間延遲。

部署準備

準備工作主要包括:

  • 準備至少三臺機器并安裝 RHEL(Red Hat Enterprise Linux)操作系統。這里的機器可以是物理機也可以是虛擬機。本文所使用的 RHEL 版本為 7.0,若使用 6.x 及以下版本,所使用的命令會略有不同。可以到Redhat 官網下載安裝介質。

  • 下載 Mariadb Galera Cluster 的安裝介質。推薦使用 Mariadb10.1 以上的版本,因為從這一版本開始,Galera Cluster 已經被包含在 Mariadb Server ? ? ? ? ? ? ? ? ? ? ? ? 的安裝介質中,而在以前的版本中則是作為獨立的安裝包下載的。可以從Mariadb 官網下載。

  • 在一臺機器上安裝 Chef Server 以及 ChefDK,建議使用 Chef Server 12.6 和 ChefDK 0.14 及以上版本,安裝介質可以從Chef 官網下載。

  • 在 Chef Server 所在的機器上配置 yum 源以及 HTTP Server。這主要是針對在無法訪問 Internet 的環境下,能利用自己設立的 yum 源方便的安裝軟件。HTTP Server 可以使用 RHEL 自帶的 pache HTTP ?Server,或其他同類軟件。

自動安裝流程

本文所描述的自動安裝流程的目標是在至少兩臺機器上安裝 Mariadb Galera Cluster,主要包含如下幾個步驟:

  • 添加 Chef Server 上提供的 yum 源并安裝 Mariadb。

  • 開啟 Cluster 節點之間的互相通信,主要是在操作系統上配置域名解析以及開放相應的防火墻端口。

  • 開啟 Galera Cluster。

  • 修改操作系統上的 Mariadb 服務啟動方式。注意雖然 Galera Cluster 里所有節點都可以同時提供數據庫服務,但依照它們被加入 Cluster 的時間順序,第一個節點的啟動方式和其余節點有所不同。

  • 詳細實現

    首先創建一個名為 mariadb-galera-cluster 的 cookbook 和名為 test.json 的 environment 文件,如清單 1 所示。創建 cookbook 會在當前目錄下生成一個同名的目錄,后續定義的大部分文件都放在這個目錄下。environment 文件將包含所有針對當前環境的參數值,例如當前環境下節點的 IP 地址和域名。創建完成后的目錄結構如清單 2 所示。

    清單 1. ? ? ? ? ? ? ? ? 創建 cookbook 和 environment

    knife cookbook create mariadb-galera-clustercat environments/test.json <<EOF{??"name": "test",??"description": "",??"cookbook_versions": {??},??"json_class": "Chef::Environment",??"chef_type": "environment",??"default_attributes": {??},??"override_attributes": {??}}EOF


    清單 2. 目錄結構


    ..environments/????test.jsoncookbooks/????mariadb-galera-cluster/????????recipes/????????????default.rb????????templates/????????????default/????????attributes/????????????default.rb


    安裝 Mariadb

    利用在 Chef Server 機器上配置的 yum 源來安裝 Mariadb,需要在目標機器的/etc/yum.repos.d ? 目錄下加入相應的配置文件。將該配置文件的內容預先定義在 mariadb-galera-cluster/templates/default/chef_server.repo.erb 中,如清單 2 所示。同時,在 mariadb-galera-cluster/recipes/default.rb 中定義這一部分的安裝流程,如清單 3 所示。配置好 yum 源后,即可通過 yum 命令安裝預先下載好的 Mariadb 安裝介質。

    安裝完成后,可以執行一些基本的數據庫初始化任務,例如設置 root 用戶的密碼和權限,這些任務可以定義在一個 sql文件中。另外也可以通過編輯/etc/my.cnf 對 Mariadb 進行一些基本的配置。全部完成后重啟 Mariadb 的服務。

    清單 3. templates/default/chef_server.repo.erb,定義 yum 配置

    [chef_server_repo]name=chef_server_repobaseurl=http://chefserver:80/yum_repoenabled=1gpgcheck=0sslverify=0


    清單 4. recipes/default.rb,安裝 Mariadb

    template "/etc/yum.repos.d" do????????source "chef_server.repo.erb"????????owner 'root'????????mode 0755????????action :createend...execute "Install Mariadb" do????????command "yum clean metadata && yum -y install mariadb-server"end...bash "Config database settings..." do????????cwd "#{CWD}"????????user "root"????????group "root"????????code <<-EOF???????printf "\n[mysqld]\nlower_case_table_names=1" >> /etc/my.cnf????????systemctl enable mariadb.service????????systemctl start mariadb.service????????mysql < init.sql????????systemctl restart mariadb.service????????EOFend


    開啟 Cluster 節點的相互通信

    要使得 Mariadb Galera Cluster 的節點能夠進行數據同步,各節點之間必須能夠互相通信。這需要各節點能夠解析彼此的域名并能訪問相應的網絡端口。因為 cluster 中節點的域名和 IP地址是因具體環境而異的,因此將這些信息定義在 environment 文件里。

    清單 5. environments/test.json,定義 cluster 成員

    {??"name": "test",??"description": "",??"cookbook_versions": {????},??"json_class": "Chef::Environment",??"chef_type": "environment",??"default_attributes": {????"mariadb-galera-cluster": {????????"cluster": {????????????????"members": {????????????????????????"nodeA": "10.0.0.11",????????????????????????"nodeB": "10.0.0.12"????????????????},????????????????"master": "nodeA"????????}}}

    清單 6. recipes/default.rb,域名解析和開啟端口

    node['mariadbp4']['cluster']['members'].each_pair do |name, ip|????????bash "Resolve #{name} to #{ip}." do????????????????user "root"????????????????group "root"????????????????code <<-EOF????????????????name=#{name}????????????????echo "#{ip} ${name%%.*} $name" >> /etc/hosts????????????????EOF????????????????not_if "[ #{name} == `hostname -s` ]"????????endendbash "Open ports on OS firewall"????user "root"????group "root"????code <<-EOF????firewall-cmd --zone=public --add-service=mariadb --permanent????firewall-cmd --zone=public --add-port=3306/tcp --permanent????firewall-cmd --zone=public --add-port=4567/tcp --permanent????firewall-cmd --zone=public --add-port=4568/tcp --permanent????firewall-cmd --zone=public --add-port=4444/tcp --permanent????firewall-cmd --zone=public --add-port=4567/udp --permanent????firewall-cmd --reload?????EOFend

    配置 Mariadb Galera Cluster

    在 Mariadb 中開啟 Galera Cluster 需要修改相應的配置文件,通常是/etc/my.cnf.d/server.cnf。這里將所需配置預先定義為template,然后用它覆蓋原來的配置文件,如清單 7、清單 8 所示。

    清單7. templates/default/server.cnf.erb,Mariadb 配置文件

    [galera]wsrep_on=ONwsrep_provider=/usr/lib64/galera/libgalera_smm.sowsrep_cluster_address=gcomm://<%= @node.mariadbp4.cluster.members.keys.join(',') %>binlog_format=rowdefault_storage_engine=InnoDBinnodb_autoinc_lock_mode=2bind-address=0.0.0.0

    清單 8. recipes/default.rb,修改 Mariadb 配置文件

    template "/etc/my.cnf.d/server.cnf" do????????source "server.cnf.erb"????????owner "root"????????mode 0644????????action :create????????not_if "grep '^wsrep_on=ON' /etc/my.cnf.d/server.cnf"end

    修改操作系統服務

    在 RHEL7 的中,操作系統服務是通過 systemd 來管理的,因為 Mariadb Galera Cluster 需要修改啟動 Mariadb時的參數,因此需要對 systemd 啟動 Mariadb 時所使用的命令進行修改。因為 Mariadb Galera Cluster對第一個啟動的節點(又稱為 master 節點)需要采用特定的啟動命令,因此這里準備兩份 systemd 的配置文件,如清單 9、清單 10所示。在 recipe 中,首先判斷當前節點是否 master 節點,然后用相應的配置文件作為當前節點的 systemd 的 Mariadb服務啟動配置文件。最后重啟 Mariadb 服務。

    清單 9. templates/default/systemd.master.conf.erb,master節點的配置文件

    [Service]ExecStart=ExecStart=/usr/sbin/mysqld --wsrep-new-cluster

    清單 10. templates/default/systemd.master.conf.erb,slave 點的配置文件

    [Service]ExecStart=ExecStart=/usr/sbin/mysqld --wsrep_cluster_address=gcomm://<%= node.mariadbp4.cluster.master =%>

    清單 11. recipes/default.rb,修改 systemd 配置文件

    master=node['mariadbp4']['cluster']['master']bash "Add cluster conf for mariadb service in systemd and restart service..." do????????cwd "/etc/systemd/system"????????user "root"????????code <<-EOF????????if [ ! -d "$service_name.d" ]; then????????????????mkdir "mariadb.service.d"????????fi????????if [ `hostname -s` == #{master} ]; then????????????????mv /tmp/master.conf mariadb.service.d/cluster.conf????????else????????????????mv /tmp/slave.conf mariadb.service.d/cluster.conf????????fi????????systemctl daemon-reload????????systemctl restart $service_name????????EOF????????not_if "[[ -f mysql.service.d/cluster.conf || -f mariadb.service.d/cluster.conf ]]"end

    安裝

    首先將上面所定義部署流程上傳到 Chef Server,包括 cookbook 和 environment。然后告訴 Chef Server 在目標機器上執行相應的部署流程,如清單 12 所示。這里 10.0.0.11 和 10.0.0.12 為組成 Cluster 的兩臺機器的 IP,注意執行命令時請確保當前目錄為 mariadb-galera-cluster 的上級目錄,

    清單 12. 安裝 Mariadb Galera Cluster 所需命令

    knife cookbook upload -a -o .knife environment from file environments/test.jsonknife bootstrap 10.0.0.11 -x root -P password -r "recipe[mariadb-galera-cluster]" -E testknife bootstrap 10.0.0.12 -x root -P password -r "recipe[mariadb-galera-cluster]" -E test

    驗證

    要驗證 Mariadb Galera Cluster 的運行狀況,可以通過執行如清單 13 所示的命令來實現。如果一切正常,可以看到如圖 1 所示的結果。

    清單 13. 查看 Mariadb Galera Cluster 的運行情況

    mysql --user=root --password=xxxshow status like 'wsrep_%'

    圖1. Mariadb Galera Cluster 的運行狀態

    小結

    在企業級的應用中,數據庫的高可用性是不可或缺的,而 Mariadb Galera Cluster 作為 Mariadb 自帶的 Cluster 功能,從功能上可以滿足用戶的這一要求。而本文所描述的自動化部署步驟,可以快速的幫助用戶在多個節點上部署 Mariadb Galera Cluster,極大的節省了創建 Mariadb Galera Cluster 所需的時間。


    轉載于:https://blog.51cto.com/xiaojielinux/1874048

    總結

    以上是生活随笔為你收集整理的利用 Chef 在 Red Hat Enterprise Linux 上自动化部署 Mariadb Galera Cluster的全部內容,希望文章能夠幫你解決所遇到的問題。

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