mariadb集群與nginx負載均衡配置--centos7版本

来源:https://www.cnblogs.com/tanglixin/archive/2018/03/09/8533251.html
-Advertisement-
Play Games

這裡配置得是單nginx主機。。先準備4台主機,三台mariadb集群,一臺nginx。 mariadb集群配置 環境信息 MariaDB Server:MariaDB-10.2.10 CentOS:CentOS Linux release7.2.1511 (Core) MariaDB Galera ...


這裡配置得是單nginx主機。。先準備4台主機,三台mariadb集群,一臺nginx。

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

mariadb集群配置

環境信息

MariaDB Server:MariaDB-10.2.10

CentOS:CentOS Linux release7.2.1511 (Core)

MariaDB Galera Cluster 三個集群節點主機名和IP地址信息:
192.168.1.51 db1
192.168.1.52 db2
192.168.1.53 db3

 

 

環境準備,最小化安裝CentOS7.2後,安裝net-tools-2.0-0.17.20131004git.el7.x86_64.rpm和lrzsz-0.12.20-36.el7.x86_64.rpm,方便遠程管理和傳輸文件。

1. 編輯配置hosts文件
# vi /etc/hosts
127.0.0.1 localhost.localdomain localhost
192.168.1.51 db1
192.168.1.52 db2
192.168.1.53 db3


2. # vi /etc/security/limits.conf
* soft nofile 65536
* hard nofile 65536


3. # vi /etc/sysctl.conf
fs.file-max=655350
net.ipv4.ip_local_port_range = 1025 65000
net.ipv4.tcp_tw_recycle = 1


最後執行:
# sysctl -p

4. 關閉SELINUX和防火牆
# vi /etc/selinux/config
SELINUX=disabled

# systemctl stop firewalld.service
# systemctl disable firewalld.service
# setenforce 0

部署MariaDB

從MariaDB 10.1版本開始,Galera Cluster就已經包含在MariaDB包裡面了,不需要單獨部署MariaDB-Galera-server 和galera 包。
-----------------------------------------------------------------------
galera-25.3.20-1.rhel7.el7.centos.x86_64.rpm MariaDB-10.2.10-centos7-x86_64-compat.rpm
MariaDB-10.2.10-centos7-x86_64-client.rpm MariaDB-10.2.10-centos7-x86_64-server.rpm
MariaDB-10.2.10-centos7-x86_64-common.rpm

準備好這五個包
--------------------------------------------------------------
步驟一:配置Yum源(192.168.1.51,192.168.1.52,192.168.1.53)
# touch /etc/yum.repos.d/MariaDB-IDC.repo
添加如下內容:
[mariadb]
name = MariaDB
baseurl =http://yum.mariadb.org/10.1/centos7-amd64
gpgkey=https://yum.mariadb.org/RPM-GPG-KEY-MariaDB
gpgcheck=1


上面的yum源可能太慢,可以考慮使用如下地址:
[mariadb]
name = MariaDB
baseurl=https://mirrors.tuna.tsinghua.edu.cn/mariadb/mariadb-10.2.10/yum/centos/7.2/x86_64
gpgcheck=0
--------------------------------------------------------------------------------
也可以用本地源
-----------------------------------------
步驟二:安裝MariaDB(192.168.1.51,192.168.1.52,192.168.1.53)
# yum install MariaDB-server -y


如果無法訪問外網,或者外網太慢,可以考慮單獨部署一個本地的Yum源用來安裝依賴包,MariaDB的包下載後直接yum安裝,這裡演示使用YUM和本地文件相結合的方式部署MariaDB Galera Cluster。

# mount /dev/cdrom /media

# cat /etc/yum.repos.d/local.repo
[local]
name=local
baseurl=file:///media
gpgcheck=0
enabled=1

# ls
galera-25.3.20-1.rhel7.el7.centos.x86_64.rpm MariaDB-10.2.10-centos7-x86_64-compat.rpm
MariaDB-10.2.10-centos7-x86_64-client.rpm MariaDB-10.2.10-centos7-x86_64-server.rpm
MariaDB-10.2.10-centos7-x86_64-common.rpm

# yum install MariaDB-10.2.10-centos7-x86_64-* galera-25.3.20-1.rhel7.el7.centos.x86_64.rpm

配置 MariaDB Galera Cluster

下麵我們開始配置MariaDB Galera Cluster,分別修改MariaDB Galera集群的每個節點上的/etc/my.cnf.d/server.cnf文件,具體每個節點的內容如下:
1. 192.168.1.51節點的/etc/my.cnf.d/server.cnf文件內容:

[root@db1 ~]# cat /etc/my.cnf.d/server.cnf | grep -v "#" | grep -v "^$"
[server]
[mysqld]
server_id=151
datadir=/opt/galera
user=mysql
skip-external-locking
skip-name-resolve
character-set-server=utf8

[galera]
wsrep_causal_reads=ON #節點應用完事務才返回查詢請求
wsrep_provider_options="gcache.size=4G"#同步複製緩衝池
wsrep_certify_nonPK=ON #為沒有顯式申明主鍵的表生成一個用於certificationtest的主鍵,預設為ON
#log-bin=/opt/galera/mysql-bin #如果不接從庫,註釋掉
#log_slave_updates=1 #如果不接從庫,註釋掉
query_cache_size=0 #關閉查詢緩存
wsrep_on=ON #開啟全同步複製模式
wsrep_provider=/usr/lib64/galera/libgalera_smm.so#galera library
wsrep_cluster_name=MariaDB-Galera-Cluster
wsrep_cluster_address="gcomm://192.168.1.51,192.168.1.52,192.168.1.53" #galera cluster URL
wsrep_node_name=db1
wsrep_node_address=192.168.1.51
binlog_format=row
default_storage_engine=InnoDB
innodb_autoinc_lock_mode=2 #主鍵自增模式修改為交叉模式
wsrep_slave_threads=8 #開啟並行複製線程,根據CPU核數設置
innodb_flush_log_at_trx_commit=0 #事務提交每隔1秒刷盤
innodb_buffer_pool_size=2G
wsrep_sst_method=rsync
[embedded]
[mariadb]
[mariadb-10.1]


2. 192.168.1.52節點的/etc/my.cnf.d/server.cnf文件內容(每個接點除了server_id、wsrep_node_name和wsrep_node_address不同外,其它都相同,可以複製後修改這三處):

[root@db2 ~]# cat /etc/my.cnf.d/server.cnf | grep -v "#" | grep -v "^$"
[server]
[mysqld]
server_id=152
datadir=/opt/galera
user=mysql
skip-external-locking
skip-name-resolve
character-set-server=utf8

[galera]
wsrep_causal_reads=ON
wsrep_provider_options="gcache.size=4G"
wsrep_certify_nonPK=ON
query_cache_size=0
wsrep_on=ON
wsrep_provider=/usr/lib64/galera/libgalera_smm.so
wsrep_cluster_name=MariaDB-Galera-Cluster
wsrep_cluster_address="gcomm://192.168.1.51,192.168.1.52,192.168.1.53"
wsrep_node_name=db2
wsrep_node_address=192.168.1.52
binlog_format=row
default_storage_engine=InnoDB
innodb_autoinc_lock_mode=2
wsrep_slave_threads=8
innodb_flush_log_at_trx_commit=0
innodb_buffer_pool_size=2G
wsrep_sst_method=rsync
[embedded]
[mariadb]
[mariadb-10.1]


3. 192.168.1.53節點的/etc/my.cnf.d/server.cnf文件內容:
[root@db3 yum.repos.d]# cat /etc/my.cnf.d/server.cnf | grep -v "#" | grep -v "^$"
[server]
[mysqld]
server_id=152
datadir=/opt/galera
user=mysql
skip-external-locking
skip-name-resolve
character-set-server=utf8

[galera]
wsrep_causal_reads=ON
wsrep_provider_options="gcache.size=4G"
wsrep_certify_nonPK=ON
query_cache_size=0
wsrep_on=ON
wsrep_provider=/usr/lib64/galera/libgalera_smm.so
wsrep_cluster_name=MariaDB-Galera-Cluster
wsrep_cluster_address="gcomm://192.168.1.51,192.168.1.52,192.168.1.53"
wsrep_node_name=db3
wsrep_node_address=192.168.1.53
binlog_format=row
default_storage_engine=InnoDB
innodb_autoinc_lock_mode=2
wsrep_slave_threads=8
innodb_flush_log_at_trx_commit=0
innodb_buffer_pool_size=2G
wsrep_sst_method=rsync
[embedded]
[mariadb]
[mariadb-10.1]


MariaDB一個節點初始化安裝(僅192.168.1.51,其它節點不需要!):
# mysql_install_db --defaults-file=/etc/my.cnf.d/server.cnf --user=mysql


在192.168.1.51節點上通過bootstrap啟動(第一次啟動一定要使用--wsrep-new-cluster,再次啟動就不需要,其它節點也不需要!!)

# mysqld_safe --defaults-file=/etc/my.cnf.d/server.cnf --user=mysql --wsrep-new-cluster &

 

在192.168.1.51節點上設置root密碼以及安全設置(其它節點不需要)

# /usr/bin/mysql_secure_installation

# mysql_secure_installation
在配置過程中可以設置root的密碼,請牢記,以後要用到。


在192.168.1.52,192.168.1.53節點啟動MariaDB,註意:如果前面配置文件中指定的/opt/galera目錄不存在的話,需要手工創建並指定許可權和所有者:
# mkdir /opt/galera
# chown mysql:root /opt/galera
# chmod 700 /opt/galera
然後啟動資料庫。
# mysqld_safe --defaults-file=/etc/my.cnf.d/server.cnf --user=mysql &

驗證操作
登錄三個節點查看

192.168.1.51節點:
[root@db1 ~]# mysql -uroot –pxxxxxx
MariaDB [(none)]> SHOW STATUS LIKE 'wsrep_cluster_size';
+--------------------+-------+
| Variable_name | Value |
+--------------------+-------+
| wsrep_cluster_size | 3 |
+--------------------+-------+
1 row in set (0.00 sec)

MariaDB [(none)]> show global status like 'ws%';
+------------------------------+-------------------------------------------------------------+
| Variable_name | Value |
+------------------------------+-------------------------------------------------------------+

| wsrep_cluster_conf_id | 3 |
| wsrep_cluster_size | 3 |
| wsrep_cluster_state_uuid |3108c722-ff29-11e6-a31f-bb500598d033 |
| wsrep_cluster_status | Primary |

| wsrep_flow_control_sent | 0 |
| wsrep_gcomm_uuid |3107a278-ff29-11e6-96d3-374133af7e21 |
| wsrep_incoming_addresses | 192.168.1.52:3306,192.168.1.53:3306,192.168.1.51:3306|

| wsrep_provider_version | 25.3.19(r3667) |
| wsrep_ready | ON |

| wsrep_thread_count | 9 |
+------------------------------+-------------------------------------------------------------+
58 rows in set (0.00 sec)


註釋:

wsrep_cluster_status為Primary,表示節點為主節點,正常讀寫。

wsrep_ready為ON,表示集群正常運行。

wsrep_cluster_size為3,表示集群有三個節點。


創建資料庫測試

192.168.1.51節點:
[root@db1 my.cnf.d]# mysql -uroot –pxxxxxx
MariaDB [(none)]> create database test_db;
Query OK, 1 row affected (0.01 sec)

 

 

 

192.168.1.52節點查看:
[root@db2 my.cnf.d]# mysql -uroot -pxxxxxx
MariaDB [(none)]> show databases;
+--------------------+
| Database |
+--------------------+
| information_schema |
| mysql |
| performance_schema |
| test_db |
+--------------------+

 

 

 

192.168.1.53節點查看:
[root@db3 my.cnf.d]# mysql -uroot -pxxxxxx
MariaDB [(none)]> show databases;
+--------------------+
| Database |
+--------------------+
| information_schema |
| mysql |
| performance_schema |
| test_db |
+--------------------+
4 rows in set (0.00 sec)

 

驗證InnoDB存儲的表
[root@db1 my.cnf.d]# mysql -uroot –pxxxxxx
MariaDB [test_db]> create table stuinfo(id int,name text) ENGINE InnoDB;
Query OK, 0 rows affected (0.04 sec)

MariaDB [test_db]> insert into stuinfo values(1,'hive');
Query OK, 1 row affected (0.00 sec)

MariaDB [test_db]> insert into stuinfo values(2,'hbase');
Query OK, 1 row affected (0.00 sec)

MariaDB [test_db]>

 

 

其他節點查看:

 

[root@db2 my.cnf.d]# mysql -uroot -pxxxxxx
MariaDB [(none)]> use test_db;
Reading table information for completion oftable and column names
You can turn off this feature to get aquicker startup with -A

Database changed
MariaDB [test_db]> select * from stuinfo;
+------+-------+
| id | name |
+------+-------+
| 1 | hive |
| 2 | hbase |
+------+-------+
2 rows in set (0.00 sec)

[root@db3 my.cnf.d]# mysql -uroot –pxxxxxx
MariaDB [(none)]> use test_db;
Reading table information for completion of table and column names
You can turn off this feature to get a quicker startup with -A

Database changed
MariaDB [test_db]> select * from stuinfo;
+------+-------+
| id | name |
+------+-------+
| 1 | hive |
| 2 | hbase |
+------+-------+
2 rows in set (0.00 sec)

 

 

模擬節點故障

將192.168.1.51資料庫停止掉:
[root@db1 system]# mysqladmin -uroot -p "shutdown"


然後在其他節點192.168.1.52執行:
MariaDB [test_db]> show global status like 'wsrep%';
+------------------------------+-----------------------------------------------+
| Variable_name | Value |
+------------------------------+-----------------------------------------------+

| wsrep_flow_control_sent | 0 |
| wsrep_gcomm_uuid | 0ce8537e-ff2a-11e6-b037-8a383b6a8db5 |
| wsrep_incoming_addresses | 192.168.1.52:3306,192.168.1.53:3306 |
| wsrep_last_committed | 10 |

| wsrep_replicated_bytes | 0 |
| wsrep_thread_count | 9 |
+------------------------------+-----------------------------------------------+

 

此時集群為自動將192.168.1.51故障節點剔除掉,並且正常提供服務。

 

最後我們恢復失敗的節點:
[root@db1 system]# mysqld_safe --defaults-file=/etc/my.cnf.d/server.cnf --user=mysql &

 


再次查看集群環境:

MariaDB [test_db]> SHOW STATUS LIKE 'wsrep_cluster_size';
+--------------------+-------+
| Variable_name | Value |
+--------------------+-------+
| wsrep_cluster_size | 3 |
+--------------------+-------+
1 row in set (0.00 sec

至此集群配置完成。

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

先配置好基礎的lamp環境。

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

最簡單化配置lamp環境


yum install -y httpd*

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


yum install -y php*


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

yum install -y mariadb*


---------------------------------------------
初始化資料庫

mysql_secure_installation

配置密碼


--------------------------------------
systemctl restart httpd
systemctl restart mariadb
-----------------------------------------
查看php是否安裝正確
vi /var/www/html/index.php
<?php
phpinfo();
?>

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

接下來就是nginx的配置了

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

先下載好nginx包

先安裝編譯器。依賴
yum install gcc gcc-c++ zlib-devel pcre-devel openssl-devel openssl-libs openssl -y

---------------------------------------------
./configure --prefix=/usr/local/nginx
編譯到指定目錄下

make
編譯

make install

安裝

----------------------------
完成後接下來配置環境變數以後就不用使用絕對路徑來操作Nginx了:

vi /etc/profile.d/http.sh
export PATH=/usr/local/nginx/sbin:$PATH

------------------------
source !$
生效

啟動Nginx
nginx

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

在瀏覽器上輸入ip\\\\\\\\\\\\\\\\\\\\\\註意不要和http衝突埠


出現
”Welcome to nginx!”

安裝成功

 

在去改配置文件

upstream app1 {
ip_hash;
server 192.168.1.51:80;
server 192.168.1.52:80;
server 192.168.1.53:80;
}
server {
listen 80;
server_name localhost;

#charset koi8-r;

#access_log logs/host.access.log main;

location / {
proxy_set_header X-Forwarded-For $remote_addr;
proxy_pass http://app1;
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
}

#error_page 404 /404.html;

# redirect server error pages to the static page /50x.html
#
error_page 500 502 503 504 /50x.html;
location = /50x.html {
root html;
}
---------------------------------------------------------
nginx -s reload
重啟
輸入ip能訪問其餘主機的主頁就算成功了。


您的分享是我們最大的動力!

-Advertisement-
Play Games
更多相關文章
  • macOS延續自BSD Unix, Linux則是從內核開始重新編寫但延續Unix使用方式的Unix。所以mac還有linux程式員,一般都算是 nix程式員,儘管其中還有不少的區別。 Windows從版本10開始做出的最大改變,可能就是內置的linux子系統,原本的安裝方式很簡單,網上很多介紹,一 ...
  • 雖然是mac老司機,但每次裝機總會碰到一些小問題需要臨時上網搜索一下解決方案,所以留下些文字備忘一下: 1. 研發用的新機最好選擇語言用英文版,中文版通常的使用沒問題,但很多的地方的翻譯都不准確,而且有一些測試不充分的BUG。比如我曾經碰到過配置IP地址,多個IP地址之間應當是用英文分號分割,結果也 ...
  • 事實上,FHS針對目錄樹架構僅定義出三層目錄下應該放置哪些數據,分別是下麵三個目錄: 一、/(根目錄):與開機系統有關 根目錄(/)所在分區應該越小越好,且應用程式所安裝的軟體最好不要與根目錄放在同一分區內,保持根目錄越小越好。這樣不但性能好,根目錄所在文件系統也較不容易發生問題 在Linux系統上 ...
  • yum命令是在Fedora和RedHat以及SUSE中基於rpm的軟體包管理器,它可以使系統管理人員交互和自動化地更細與管理RPM軟體包,能夠從指定的伺服器自動下載RPM包並且安裝,可以自動處理依賴性關係,並且一次安裝所有依賴的軟體包,無須繁瑣地一次次下載、安裝。 yum提供了查找、安裝、刪除某一個 ...
  • ls -l和ls -al的區別:第一個不會顯示隱藏文件,第二個會顯示隱藏文件(以點(.)開頭的文件) 一、許可權對文件(r、w、x主要針對文件的內容而言)的重要性 r:可讀取文件內容 w:可以編輯、新增、修改該文件的內容(但不含刪除文件) x:該文件具有可以被系統執行的許可權 二、許可權對目錄的重要性 r ...
  • 今天簡單的敲幾個命令 1.網路介面參數 -- ifconfig 這個命令可以設置網卡介面ip地址,子網掩碼等、 ifconfig xx(網卡名) down 關閉網卡介面 ifconfig xx(網卡名) up 開啟網卡介面 2.查看主機參數 -- hostnamectl 顯示或設置主機名稱 host ...
  • iSCSI 是一種 SAN的設備而 SAN的設備主要是提供 Server 存儲體的空間.相較於傳統的 SAN 是以光纖為傳輸媒體而 iSCSI(Internet SCSI)他是 IP-based 的數據存儲的設備.使得他能更容易應用在企業中. 1.一般的網卡就能當作 iSCSI Target 但是缺 ...
  • // 設置為受保護的操作系統文件,並隱藏attrib d:\n.txt +s +h // 取消設置為受保護的操作系統文件,並取消隱藏attrib d:\n.txt -s -h ...
一周排行
    -Advertisement-
    Play Games
  • 示例項目結構 在 Visual Studio 中創建一個 WinForms 應用程式後,項目結構如下所示: MyWinFormsApp/ │ ├───Properties/ │ └───Settings.settings │ ├───bin/ │ ├───Debug/ │ └───Release/ ...
  • [STAThread] 特性用於需要與 COM 組件交互的應用程式,尤其是依賴單線程模型(如 Windows Forms 應用程式)的組件。在 STA 模式下,線程擁有自己的消息迴圈,這對於處理用戶界面和某些 COM 組件是必要的。 [STAThread] static void Main(stri ...
  • 在WinForm中使用全局異常捕獲處理 在WinForm應用程式中,全局異常捕獲是確保程式穩定性的關鍵。通過在Program類的Main方法中設置全局異常處理,可以有效地捕獲並處理未預見的異常,從而避免程式崩潰。 註冊全局異常事件 [STAThread] static void Main() { / ...
  • 前言 給大家推薦一款開源的 Winform 控制項庫,可以幫助我們開發更加美觀、漂亮的 WinForm 界面。 項目介紹 SunnyUI.NET 是一個基於 .NET Framework 4.0+、.NET 6、.NET 7 和 .NET 8 的 WinForm 開源控制項庫,同時也提供了工具類庫、擴展 ...
  • 說明 該文章是屬於OverallAuth2.0系列文章,每周更新一篇該系列文章(從0到1完成系統開發)。 該系統文章,我會儘量說的非常詳細,做到不管新手、老手都能看懂。 說明:OverallAuth2.0 是一個簡單、易懂、功能強大的許可權+可視化流程管理系統。 有興趣的朋友,請關註我吧(*^▽^*) ...
  • 一、下載安裝 1.下載git 必須先下載並安裝git,再TortoiseGit下載安裝 git安裝參考教程:https://blog.csdn.net/mukes/article/details/115693833 2.TortoiseGit下載與安裝 TortoiseGit,Git客戶端,32/6 ...
  • 前言 在項目開發過程中,理解數據結構和演算法如同掌握蓋房子的秘訣。演算法不僅能幫助我們編寫高效、優質的代碼,還能解決項目中遇到的各種難題。 給大家推薦一個支持C#的開源免費、新手友好的數據結構與演算法入門教程:Hello演算法。 項目介紹 《Hello Algo》是一本開源免費、新手友好的數據結構與演算法入門 ...
  • 1.生成單個Proto.bat內容 @rem Copyright 2016, Google Inc. @rem All rights reserved. @rem @rem Redistribution and use in source and binary forms, with or with ...
  • 一:背景 1. 講故事 前段時間有位朋友找到我,說他的窗體程式在客戶這邊出現了卡死,讓我幫忙看下怎麼回事?dump也生成了,既然有dump了那就上 windbg 分析吧。 二:WinDbg 分析 1. 為什麼會卡死 窗體程式的卡死,入口門檻很低,後續往下分析就不一定了,不管怎麼說先用 !clrsta ...
  • 前言 人工智慧時代,人臉識別技術已成為安全驗證、身份識別和用戶交互的關鍵工具。 給大家推薦一款.NET 開源提供了強大的人臉識別 API,工具不僅易於集成,還具備高效處理能力。 本文將介紹一款如何利用這些API,為我們的項目添加智能識別的亮點。 項目介紹 GitHub 上擁有 1.2k 星標的 C# ...