本篇內容主要講解“CentOS 6.5上安裝-Cluster 7.3.4的過(guò)程”,感興趣的朋友不妨來(lái)看看。本文介紹的方法操作簡(jiǎn)單快捷,實(shí)用性強。下面就讓小編來(lái)帶大家學(xué)習“CentOS 6.5上安裝MySQL-Cluster 7.3.4的過(guò)程”吧!
環(huán)境說(shuō)明:CentOS6.5 + MySQL-Cluster 7.3.4(最新GA版本),規劃2臺機器,一臺做控制+服務(wù)器+數據節點(diǎn)服務(wù)器, 另一臺做負載均衡服務(wù)器+數據節點(diǎn)服務(wù)器;
一、下載,這里為了方便安裝過(guò)程,這里直接使用了RPM包來(lái)安裝,避開(kāi)了編譯安裝的痛苦:
首先先到www.msyql.com下載如下的RPM安裝包 (http://dev.mysql.com/downloads/cluster/),記得選擇RedHat Enterprise Linux/Oracle Linux下面的 MySQL-Cluster-gpl-7.3.4-1.el6.x86_64.rpm-bundle.tar 這個(gè)安裝包,避免一個(gè)接一個(gè)下載的痛苦;
二、環(huán)境清理以及安裝:
1. mysql舊版本清除:
首先使用如下命令來(lái)清理之前操作系統自帶的mysql安裝:yum -y remove mysql
然后使用如下命令:
rpm -qa | grep mysql*
對于找到的2個(gè)剩余mysql包,請按照如下的命令格式予以刪除:
rpm -e --nodeps mysql-libs-5.1.71-1.el6.x86_64
2. mysql cluster版本安裝準備:將MySQL-Cluster-gpl-7.3.4-1.el6.x86_64.rpm-bundle.tar放到某個(gè)目錄下(譬如/package) 下面,并且執行如下命令解壓:
tar -xvf MySQL-Cluster-gpl-7.3.4-1.el6.x86_64.rpm-bundle.tar
得到如下文件清單:
MySQL-Cluster-client-gpl-7.3.4-1.el6.x86_64.rpm
MySQL-Cluster-devel-gpl-7.3.4-1.el6.x86_64.rpm
MySQL-Cluster-embedded-gpl-7.3.4-1.el6.x86_64.rpm
MySQL-Cluster-server-gpl-7.3.4-1.el6.x86_64.rpm
MySQL-Cluster-shared-compat-gpl-7.3.4-1.el6.x86_64.rpm
MySQL-Cluster-shared-gpl-7.3.4-1.el6.x86_64.rpm
MySQL-Cluster-test-gpl-7.3.4-1.el6.x86_64.rpm
3. mysql cluster版本安裝:
創(chuàng )建文件夾(分如下3個(gè)類(lèi)來(lái)創(chuàng )建對應的文件夾)
存儲節點(diǎn):mkdir /var/lib/mysql/data
管理節點(diǎn):mkdir /var/lib/mysql-cluster SQL節點(diǎn):可不用 文件夾授權
進(jìn)程DIR: mkdir /var/run/mysqld
使用如下的命令來(lái)變更權限保證可寫(xiě)入:
chmod -R 1777 /var/lib/mysql
chmod -R 1777 /var/run/mysqld
chmod -R 1777 /var/lib/mysql-cluster
rpm -ivh MySQL-Cluster-server-gpl-7.3.4-1.el6.x86_64.rpm
rpm -ivh MySQL-Cluster-client-gpl-7.3.4-1.el6.x86_64.rpm
特別注意,當安裝完畢server gpl包后,將出現如下提示信息,提醒我們整個(gè)cluster安裝后的初次超級賬戶(hù)密碼存在/root/.mysql_secret這個(gè)文件當中。
------------------------------------------------------------------------------------------------------
A RANDOM PASSWORD HAS BEEN SET FOR THE MySQL root USER !
You will find that password in '/root/.mysql_secret'.
You must change that password on your first connect,
no other statement but 'SET PASSWORD' will be accepted.
See the manual for the semantics of the 'password expired' flag.
Also, the account for the anonymous user has been removed.
In addition, you can run:
/usr/bin/mysql_secure_installation
which will also give you the option of removing the test database.
This is strongly recommended for production servers.
-----------------------------------------------------------
4. 配置文件撰寫(xiě)與調整:
cd /var/lib/mysql-cluster
vim config.ini
-----------------------------------------------------------------------------------------------------
[computer]
Id=mgr-server-01
HostName=10.10.0.1
[mgm default]
datadir=/var/lib/mysql-cluster
[mgm]
HostName=10.10.0.1
NodeId=60
ExecuteOnComputer=mgr-server-01
PortNumber=1186
ArbitrationRank=2
[ndbd default]
NoOfReplicas=2
DataMemory=8G
IndexMemory=2G
[ndbd]
HostName=10.10.0.1
DataDir=/var/lib/mysql
NodeId=1
[ndbd]
HostName=10.10.0.2
DataDir=/var/lib/mysql
NodeId=2
[mysqld]
HostName=10.10.0.1
NodeId=81
[mysqld]
HostName=10.10.0.2
NodeId=82
-----------------------------------------------------------------------------------------------------
5. 配置Mysql文件:
vim /etc/my.cnf
[client]
socket=/var/lib/mysql/mysql.sock
[mysqld]
max_connections=100
datadir=/var/lib/mysql
socket=/var/lib/mysql/mysql.sock
ndbcluster
ndb-connectstring=10.10.0.1
[mysqld_safe]
log-error=/var/log/mysqld.log
pid-file=/var/run/mysqld/mysqld.pid
[mysql_cluster]
ndb-connectstring=10.10.0.1
-----------------------------------------------------------------------------------------------------
三、SQL Cluster初次啟動(dòng)命令以及用戶(hù)密碼更改調整:(請嚴格按照次序啟動(dòng))
執行初次啟動(dòng)前請先確認 將兩臺機器的防火墻關(guān)閉(service iptables stop 或者 設定 防火墻端口可通,兩個(gè)端口即通訊端口1186、數據端口3306 )
初次啟動(dòng)mgt console命令:ndb_mgmd -f /var/lib/mysql-cluster/config.ini
啟動(dòng)均衡節點(diǎn)命令: ndbd --initial
啟動(dòng)數據節點(diǎn)命令:mysqld_safe --defaults-file=/etc/my.cnf --explicit_defaults_for_timestamp &
注意在啟動(dòng)過(guò)程中需要監測整個(gè)控制臺輸出,發(fā)現有錯誤信息需要及時(shí)解決,根據錯誤日志內容來(lái)解決。
------------------------------------------------------------------------------------------------------
如果一起正常,使用如下命令將Management console開(kāi)啟: ndb_mgm
輸入: show
ndb_mgm> show
Cluster Configuration
-----------------------------------------------------------------------------------------------------
[ndbd(NDB)] 2 node(s)
id=1 @10.x.0.1 (mysql-5.6.15 ndb-7.3.4, Nodegroup: 0, *)
id=2 @10.x.0.2 (mysql-5.6.15 ndb-7.3.4, Nodegroup: 0)
[ndb_mgmd(MGM)] 1 node(s)
id=60 @10.x.0.1 (mysql-5.6.15 ndb-7.3.4)
[mysqld(API)] 2 node(s)
id=81 @10.x.0.1 (mysql-5.6.15 ndb-7.3.4)
id=82 @10.x.0.2 (mysql-5.6.15 ndb-7.3.4)
-----------------------------------------------------------------------------------------------------
修正密碼:
當mysqld 啟動(dòng)完畢正常后(可以使用pgrep mysqld來(lái)獲取進(jìn)程ID),我們可以使用如下命令修改:
mysql -u root -p;
隨機密碼(具體請參見(jiàn)/root/.mysql_secret文件獲取),進(jìn)入后使用如下指令修改密碼:
SET PASSWORD = PASSWORD('新密碼');
幾臺裝有SQL數據節點(diǎn)的服務(wù)器皆需要執行一遍上述命令;
------------------------------------------------------------------------------------------------------
四、Cluster效果測試:
使用mysql -u root -p 密碼;
輸入對應的密碼后登陸到系統,按照如下命令開(kāi)始新建database;
create database clustertest;
use clustertest;
CREATE TABLE testtable(Count INT) ENGINE=NDBCLUSTER;
特別注意,只有使用了NDBCluster引擎的表才會(huì )執行同步操作,因此特別需要在上述表加入這個(gè)后綴;
五、關(guān)閉Cluster:(需要嚴格按照次序執行)
關(guān)閉數據節點(diǎn):mysqld stop (SQL節點(diǎn)可以用mysqladmin shutdown或別的方式關(guān)閉。)
在管理節點(diǎn)上執行:shell> ndb_mgm -e shutdown
將安全的關(guān)閉管理節點(diǎn)和數據節點(diǎn)。
關(guān)閉后使用如下的進(jìn)程檢測命令查看一下是否退出來(lái)了:
pgrep mysqld
ps aux | grep nbdb
如果沒(méi)有,找到對應的pid進(jìn)行kill 操作即可。
六、再次啟動(dòng)Cluster方案:
啟動(dòng)整個(gè)cluster的次序:
ndb_mgmd -f /var/lib/mysql-cluster/config.ini
ndbd
mysqld_safe --defaults-file=/etc/my.cnf --explicit_defaults_for_timestamp &
-----------------------------------------------------------------------------------------------------
雜記:
防火墻策略調整: iptables -A INPUT -s 192.168.100.0/24 -i eth3 -p tcp -m tcp -j ACCEPT
修改密碼方法一:
mysqladmin -u root password root (更改密碼) (沒(méi)有新密碼前執行)
mysqladmin -u root -p 'xxxxxx' password 'NewPassword'; (安裝完畢后啟動(dòng)mysqld執行)
修改密碼方法二:
UPDATE mysql.user SET Password=PASSWORD('Password01!') WHERE User='root';
FLUSH PRIVILEGES;
修改密碼方法三:
讓mysql以不帶安全控制的方式啟動(dòng):
mysqld_safe --user=mysql --skip-grant-tables --skip-networking;
然后再用前面2種方法修改密碼;
注:下文涉及到配置的,如無(wú)特別說(shuō)明,主備機則一致!
一、環(huán)境介紹
1、這是我CentOS的版本,CentOS7.1,主備都為該版本
[root@localhost ~]# cat /etc/RedHat-release
CentOS Linux release 7.1.1503 (Core)
[root@localhost ~]# cat /proc/version
Linux version 3.10.0-229.el7.x86_64 (builder@kbuilder.dev.centos.org) (gcc version 4.8.2 20140120 (Red Hat 4.8.2-16) (GCC) ) #1 SMP Fri Mar 6 11:36:42 UTC 2015
2、修改主機名并修改host
[root@localhost ~]# hostnamectl set-hostname node-01
[root@localhost ~]# vi /etc/hosts
127.0.0.1node-01在127后面添加node-01
二、拓撲圖的規劃:
A)
|------------IP地址-----------------|----------|------軟件----------|----------|-狀態(tài)--|
|172.21.4.51(VIP:172.21.4.44 )|----------|keepalived+nginx|----------|Master |
|172.21.4.52(VIP:172.21.4.44 )|----------|keepalived+nginx|----------|Backup|
|---------172.21.4.91-------------|----------|------IIS------------|----------|-Web1-|
|---------172.21.4.91-------------|----------|------IIS------------|----------|-Web2-|
B)
Internet--
|
=============
| ISP Router|
=============
| |
| |---- Web1 (172.21.4.91)
|-HA-|eth0--> 172.21.4.51 |
| \ /
| \ /
| ===VIP(172.21.4.44)===
| / \
| / \
|-HA-|eth0--> 172.21.4.52 |
|---- Web2 (172.21.4.92)
|
注:在網(wǎng)關(guān)上已針對VIP(172.21.4.44)作了80端口映射。
此架構需考慮的問(wèn)題:
1、Master運行,則Master占有vip且Nginx能夠正常服務(wù);
2、Master掛了,則Backup搶占vip且Nginx能夠正常服務(wù);
3、任何一臺前端nginx服務(wù)掛了,則vip資源轉移到另一臺服務(wù)器上,并發(fā)送提醒郵件;
4、nginx需要檢測后端服務(wù)器的健康狀態(tài)(由于應用是掛在默認網(wǎng)站下的虛擬目錄,且無(wú)法更改,必須能夠對虛擬目錄進(jìn)行健康檢查)
5、由于應用需要Session保持,但由于沒(méi)有做Session共享,實(shí)際服務(wù)器角色轉換時(shí),應用會(huì )受到一定的影響。
三、安裝前的準備工作
CentOS7環(huán)境下,默認是使用FireWallD服務(wù),即使你修改了iptables,重啟又被初始化了,需要再
次手動(dòng)systemctl restart
iptables.service才能使設置的iptables生效,由于FireWallD暫時(shí)還沒(méi)有熟悉使用方法且不知道他比iptables到底有
哪些優(yōu)勢,保險起見(jiàn),還是換回原先的iptables
1、關(guān)閉firewall:
[root@node-01 ~]# systemctl stop firewalld.service
#停止firewall
[root@node-01 ~]# systemctl disable firewalld.service 或 systemctl mask firewalld.service
#禁止firewall開(kāi)機啟動(dòng)
2、安裝iptables防火墻
[root@node-01 ~]# yum install iptables-services -y
[root@node-01 ~]# systemctl enable iptables
3、在進(jìn)行Keepalived和nginx配置前,務(wù)必將集群內的幾臺主機的通訊相互完全放行(并開(kāi)放80的Web訪(fǎng)問(wèn)規則),否則很有可能出現腦裂或其他問(wèn)題,可直接在配置文件內加入以下語(yǔ)句;
[root@node-01 ~]# vi /etc/sysconfig/iptables
-A INPUT -p tcp -m state --state NEW -m tcp --dport 80 -j ACCEPT
-A INPUT -s 172.21.4.51 -j ACCEPT
-A INPUT -s 172.21.4.52 -j ACCEPT
-A INPUT -s 172.21.4.91 -j ACCEPT
-A INPUT -s 172.21.4.92 -j ACCEPT
[root@node-01 ~]# systemctl restart iptables.service
四、Keepalived與Nginx的安裝
1、安裝ipvsadm
[root@node-01 ~]# yum install ipvsadm
[root@node-01 ~]# ipvsadm -v
ipvsadm v1.27 2008/5/15 (compiled with popt and IPVS v1.2.1)
ipvs(IP Virtual Server)是整個(gè)負載均衡的基礎,如果沒(méi)有這個(gè)基礎,故障隔離與失敗切換就毫無(wú)意義了。ipvs 具體實(shí)現是由 ipvsadm 這個(gè)程序來(lái)完成的。CentOS7.1默認自帶安裝了。
2、安裝keepalived(其實(shí)7.1自帶了)
[root@node-01 ~]# yum install keepalived
[root@node-01 ~]# keepalived -v
Keepalived v1.2.13 (03/06,2015)
3、安裝當前最新穩定版1.8.0
注1:一開(kāi)始是用yum安裝的nginx,結果發(fā)現后端服務(wù)器Down機或狀態(tài)不正常時(shí),nginx也照常轉發(fā)請求,后面yum erase nginx后,進(jìn)行了手動(dòng)安裝。因為需要額外添加 nginx_upstream_check_module模塊。
注2:安裝過(guò)程會(huì )提示類(lèi)型這樣的錯誤 ./configure: error: the HTTP rewrite module requires the PCRE library.
所以先安裝相應的支持庫來(lái)解決。pcre,正則表達式匹配支持;zlib,用于壓縮等等。
[root@node-01 ~]# yum -y install gcc-c++ pcre-devel zlib-devel
1) 為nginx建立一個(gè)www組,并建立一個(gè)不登錄的賬戶(hù)nginx,放入www用戶(hù)組
[root@node-01 ~]# groupadd -f www
[root@node-01 ~]# useradd -d /var/cache/nginx -s /sbin/nologin -g www nginx
2) 建立目錄用于存放nginx日志文件,并賦權限
[root@node-01 ~]# mkdir /var/log/nginx
[root@node-01 ~]# mkdir /usr/local/nginx
[root@node-01 ~]# chown -R nginx.www /var/log/nginx
[root@node-01 ~]# chown -R nginx.www /usr/local/nginx
3) 分別下載nginx、額外模板及安裝
[root@node-01 ~]# mkdir /nginx
[root@node-01 ~]# cd /nginx
[root@node-01 nginx]# wget http://nginx.org/download/nginx-1.8.0.tar.gz
[root@node-01 nginx]# wget https://github.com/yaoweibin/nginx_upstream_check_module/archive/master.zip
[root@node-01 nginx]# tar -xvf nginx-1.8.0.tar.gz
[root@node-01 nginx]# unzip master.zip
#在當前目錄下解壓出nginx_upstream_check_module-master這個(gè)目錄
[root@node-01 nginx]# cd nginx-1.8.0/
[root@node-01 nginx-1.8.0]# patch -p1 < /nginx/nginx_upstream_check_module-master/check_1.7.5+.patch
#由于安裝版1.8.0穩定版,所以選check_1.7.5+.patch這個(gè)補丁包,其他版本相應選擇即可
#如果提示bash: patch: 未找到命令...應該安裝一下patch命令包yum -y install patch
[root@node-01 nginx-1.8.0]# ./configure --prefix=/usr/local/nginx
--user=nginx --group=www --pid-path=/run/nginx.pid
--error-log-path=/var/log/nginx/error.log
--http-log-path=/var/log/nginx/access.log
--add-module=/nginx/nginx_upstream_check_module-master
[root@node-01 nginx-1.8.0]# make && make install
便于以后的操作,進(jìn)行以下設置并制作自啟動(dòng)文件:
[root@node-01 ~]# ln -s /usr/local/nginx/sbin/nginx /usr/sbin/nginx
[root@node-01 ~]# vi /usr/lib/systemd/system/nginx.service
#加下以下內容:
#---------Begin------------------------------------
[Unit]
Description=nginx - high performance web server
Documentation=http://nginx.org/en/docs/
After=network.target remote-fs.target nss-lookup.target
[Service]
Type=forking
PIDFile=/run/nginx.pid
ExecStartPre=/usr/sbin/nginx -t -c /usr/local/nginx/conf/nginx.conf
ExecStart=/usr/sbin/nginx -c /usr/local/nginx/conf/nginx.conf
ExecReload=/bin/kill -s HUP $MAINPID
ExecStop=/bin/kill -s QUIT $MAINPID
PrivateTmp=true
[Install]
WantedBy=multi-user.target
#---------end--------------------------------------
[root@node-01 /]# systemctl enable nginx.service
系統啟動(dòng)時(shí)讓nginx.service自啟動(dòng)。
4) keepalived和Nginx最好也設置開(kāi)機啟動(dòng)
[root@node-01 ~]# systemctl enable keepalived
[root@node-01 ~]# systemctl enable nginx
五、Keepalived配置
在配置keepalived之前,先關(guān)閉selinux
A、vi /etc/selinux/config
B、設置 SELINUX=disabled 保存
C、執行 setenforce 0
如果只想臨時(shí)關(guān)閉,直接輸入:setenforce 0
[root@node-01 ~]# vi /etc/keepalived/keepalived.conf
#############keepalived配置#############################################################
! Configuration File for keepalived
global_defs {
}
vrrp_script chk_nginx {
#必須放在track代碼的上方,否則無(wú)效,測試了幾次是這個(gè)情況
script "killall -0 nginx"
#用shell命令檢查nginx服務(wù)是否存在
interval 1
#時(shí)間間隔為1秒檢測一次
weight -15
#當nginx的進(jìn)程不存在了,就把當前的權重-15
}
vrrp_instance VI_1 {
state MASTER
#主LVS是MASTER,從主機時(shí)此項要改為BACKUP,要大寫(xiě)
interface enp4s0
#LVS監控的網(wǎng)絡(luò )接口
virtual_router_id 51
#同一實(shí)例下virtual_router_id必須相同,MASTRE/BACKUP 設置值要一樣
priority 100
#定義優(yōu)先級,數字越大,優(yōu)先級越高,把此份Conf拷貝到另一臺機器上時(shí),設置的priority值要比MASTRE權重值低
advert_int 1
#MASTER與BACKUP負載均衡器之間同步檢查的時(shí)間間隔,單位是秒
authentication {
auth_type PASS
auth_pass 376879148
#驗證類(lèi)型和密碼,有PASS和AH兩種,一般用PASS,據說(shuō)AH有問(wèn)題,認證密碼主備服務(wù)器之間一定要一致,否則出錯
}
virtual_ipaddress {
172.21.4.44
#設置虛擬IP,可以有多個(gè)地址,每個(gè)地址占一行,不需掩碼。注意:這個(gè) ip 必須與我們在 lvs 客戶(hù)端設定的vip相一致
}
track_script {
chk_nginx
#引用上面的vrrp_script定義的腳本名稱(chēng)
}
notify_master "/etc/keepalived/changemail.py master"
notify_backup "/etc/keepalived/changemail.py backup"
notify_fault "/etc/keepalived/changemail.py fault"
#指定當切換到主、備及故障狀態(tài)時(shí),執行的腳本
}
###################################################################################
六、HA狀態(tài)切換時(shí)的郵件提醒
[root@node-02 ~]# python -V
Python 2.7.5
[root@node-01 ~]# vi /etc/keepalived/changemail.py
########################changemail.py利用Python2.7程序發(fā)郵件###########################
#!/usr/bin/python
# -*- coding: UTF-8 -*-
import smtplib
import socket
import time
from email.MIMEText import MIMEText
from email.Utils import formatdate
from email.Header import Header
import sys
#發(fā)送郵件的相關(guān)信息,根據實(shí)際情況填寫(xiě)
smtpHost = 'smtp.exmail.qq.com'
smtpPort = '25'
sslPort = '465'
fromMail = 'youki@appi.com'
toMail = 'youki@appi.com'
username = 'youki@appi.com'
password = 'xxxxxxx'
#解決中文問(wèn)題
reload(sys)
sys.setdefaultencoding('utf8')
#郵件標題和內容
subject = socket.gethostname() + " HA status has changed"
body = (time.strftime("%Y-%m-%d %H:%M:%S")) + " vrrp transition, " + socket.gethostname() + " changed to be " + sys.argv[1]
#初始化郵件
encoding = 'utf-8'
mail = MIMEText(body.encode(encoding),'plain',encoding)
mail['Subject'] = Header(subject,encoding)
mail['From'] = fromMail
mail['To'] = toMail
mail['Date'] = formatdate()
try:
#連接smtp服務(wù)器,明文/SSL/TLS三種方式,根據你使用的SMTP支持情況選擇一種
#普通方式,通信過(guò)程不加密
#smtp = smtplib.SMTP(smtpHost,smtpPort)
#smtp.ehlo()
#smtp.login(username,password)
#tls加密方式,通信過(guò)程加密,郵件數據安全,使用正常的smtp端口
#smtp = smtplib.SMTP(smtpHost,smtpPort)
#smtp.ehlo()
#smtp.starttls()
#smtp.ehlo()
#smtp.login(username,password)
#純粹的ssl加密方式,通信過(guò)程加密,郵件數據安全
smtp = smtplib.SMTP_SSL(smtpHost,sslPort)
smtp.ehlo()
smtp.login(username,password)
#發(fā)送郵件
smtp.sendmail(fromMail,toMail,mail.as_string())
smtp.close()
print 'OK'
except Exception:
print 'Error: unable to send email'
[root@node-01 ~]#
#######################################################################################
1、上面的腳本制作完成后,記得賦權,否則無(wú)法執行。
[root@node-01 ~]# chmod +x /etc/keepalived/changemail.py
[root@node-01 ~]#scp /etc/keepalived/keepalived.conf 172.21.4.52:/etc/keepalived
把主機上的配置文件copy到Backup服務(wù)器上,現在在兩臺主機上可以利用 ip addr show命令來(lái)查看VIP的獲取情況
2、keeplived日志位置指定:
在主從keeplived節點(diǎn)上編譯/etc/sysconfig/keepalived文件
[root@node-01 ~]# vi /etc/sysconfig/keepalived
將最后一行KEEPALIVED_OPTIONS="-D" 修改為:KEEPALIVED_OPTIONS="-D -d -S 0"
3、修改主從節點(diǎn)日志配置文件/etc/rsyslog.conf
[root@node-01 ~]# vi /etc/rsyslog.conf
加入如下配置:
#keepalived -S 0
local0.*/var/log/keepalived.log
4、重啟日志服務(wù)
[root@node-01 ~]# systemctl restart rsyslog.service
5、檢查/var/log/keepalived.log文件是否存在
注意事項:
1、輸出的日志信息: /var/log/messages ,更具體的日志信息輸出需要在啟動(dòng)keepalived時(shí)加 -d 參數。
2、在都為MASTER且priority一樣的情況下,后啟的節點(diǎn)(service vrrp start)會(huì )取代正在運行的節點(diǎn)變成主用的。
3、一臺為MASTER且priority較高的情況下,不受次節點(diǎn)down/up影響,并且其本身再從down變?yōu)閡p時(shí),會(huì )搶奪控制權。
4、在都為MASTER且priority一樣的情況下,正在運行的主節點(diǎn)down(斷網(wǎng)),次節點(diǎn)會(huì )自動(dòng)接管,主節點(diǎn)再起來(lái)時(shí)不會(huì )去搶奪控制權。
#keepalived會(huì )定時(shí)執行腳本并對腳本執行的結果進(jìn)行分析,動(dòng)態(tài)調整vrrp_instance的優(yōu)先級。
#如果腳本執行結果為0,并且weight配置的值大于0,則優(yōu)先級相應的增加
#如果腳本執行結果非0,并且weight配置的值小于0,則優(yōu)先級相應的減少
#其他情況,維持原本配置的優(yōu)先級,即配置文件中priority對應的值。
#這里需要注意的是:
#1) 優(yōu)先級“不會(huì )”不斷的提高或者降低,當track的對象恢復時(shí),又是一致的
#2) 可以編寫(xiě)多個(gè)檢測腳本并為每個(gè)檢測腳本設置不同的weight
#3) 不管提高優(yōu)先級還是降低優(yōu)先級,最終優(yōu)先級的范圍是在[1,254],不會(huì )出現優(yōu)先級小于等于0或者優(yōu)先級大于等于255的情況
#這樣可以做到利用腳本檢測業(yè)務(wù)進(jìn)程的狀態(tài),并動(dòng)態(tài)調整優(yōu)先級從而實(shí)現主備切換。
七、nginx配置
[root@node-01 nginx]# vi /usr/local/nginx/conf/nginx.conf
#############nginx配置#############################################################
user nginx www;
worker_processes 2;
#nginx進(jìn)程數,建議設置為等于CPU總核心數
#worker_cpu_affinity 00000001 00000010 00000100 00001000 00010000 00100000 01000000 10000000;
#為每個(gè)進(jìn)程分配cpu,將N個(gè)進(jìn)程分配到N個(gè)cpu,可以寫(xiě)多個(gè)或者將一個(gè)進(jìn)程分配到多個(gè)cpu
error_log /var/log/nginx/error.log crit;
#pid /run/nginx.pid;
events {
use epoll;
#epoll是多路復用IO(I/O Multiplexing)中的一種方式,但是僅用于linux2.6以上內核,可以 能
worker_connections 102400;
#最大連接數量,根據硬件調整,理論上每臺nginx服務(wù)器的最大連接數為worker_processes*s
}
http {
include /usr/local/nginx/conf/mime.types;
default_type application/octet-stream;
log_format main '$remote_addr - $remote_user [$time_local] "$request" '
'$status $body_bytes_sent "$http_referer" '
'"$http_user_agent" "$http_x_forwarded_for"';
access_log /var/log/nginx/access.log main;
sendfile on;
#tcp_nopush on;
server_tokens off;
#nginx隱藏版本號
keepalive_timeout 65;
proxy_intercept_errors on;
#表示使nginx阻止HTTP應答代碼為400或者更高的應答
gzip on;
#該指令用于開(kāi)啟或關(guān)閉gzip模塊(on/off)
gzip_min_length 1k;
#設置允許壓縮的頁(yè)面最小字節數,頁(yè)面字節數從header頭得content-length中進(jìn)行獲取。默認值是0,不管頁(yè)面多大都壓縮。建議設置成大于1k的字節數,小于1k可能會(huì )越壓越大。
gzip_buffers 4 8k;
#設置系統獲取幾個(gè)單位的緩存用于存儲gzip的壓縮結果數據流。4 8k代表以8k為單位,安裝原始數據大小以16k為單位的4倍申請內存。
gzip_http_version 1.1;
#識別http的協(xié)議版本(1.0/1.1)
gzip_comp_level 3;
#gzip壓縮比,1壓縮比最小處理速度最快,9壓縮比最大但處理速度最慢(傳輸快但比較消耗cpu)
gzip_types text/plain text/css application/json
application/javascript application/x-javascript text/javascript text/xml
application/xml application/xml+rss;
#匹配mime類(lèi)型進(jìn)行壓縮,無(wú)論是否指定,”text/html”類(lèi)型總是會(huì )被壓縮的,經(jīng)實(shí)測對本網(wǎng)站的圖片壓縮后,積極反而增大,所以取消圖片類(lèi)的壓縮。
gzip_vary on;
#和http頭有關(guān)系,加個(gè)vary頭,給代理服務(wù)器用的,有的瀏覽器支持壓縮,有的不支持,所以避免浪費不支持的也壓縮,所以根據客戶(hù)端的HTTP頭來(lái)判斷,是否需要壓縮
upstream MyApp{
ip_hash;
#1.輪詢(xún)(默認):每個(gè)請求按時(shí)間順序逐一分配到不同的后端服務(wù)器,如果后端 除
#2.weight:指定輪詢(xún)幾率,weight和訪(fǎng)問(wèn)比率成正比,用于后端服務(wù)器性能不 況
#3.ip_hash:每個(gè)請求按訪(fǎng)問(wèn)ip的hash結果分配,這樣每個(gè)訪(fǎng)客固定訪(fǎng)問(wèn)一個(gè)后題
#4.fair(第三方):按后端服務(wù)器的響應時(shí)間來(lái)分配請求,響應時(shí)間短的優(yōu)先分配
server 172.21.4.91:80 max_fails=2 fail_timeout=10s;
server 172.21.4.92:80 max_fails=2 fail_timeout=10s;
#max_fails默認為1,fail_timeout默認為10秒,默認情況下后端服務(wù)器在10秒內出錯1次認為服務(wù)器異常將停止轉發(fā)
check interval=3000 rise=2 fall=2 timeout=1000 type=http;
#對條目中的所有節點(diǎn),每3秒檢測1次,請求2次正常則標記該機狀態(tài)為UP
check_http_send "GET /appicrm HTTP/1.0\r\n\r\n";
#檢測網(wǎng)址子目錄,在這里為http://mail.appi.cn/appicrm
}
server
{
listen 80;
server_name mail.appi.cn;
charset utf-8;
location ~ .*\.(ico|gif|jpg|jpeg|png|bmp|swf|js|css|htm|html)$
{
access_log image.log;
expires 14d;
root /usr/local/nginx/proxy_cache;
proxy_store on;
proxy_temp_path /usr/local/nginx/proxy_cache_image;
if ( !-e $request_filename)
#文件和目錄不存在的時(shí)候重定向
{proxy_pass http://MyApp;}
#rewrite ^(.*) http://www.test.com/test/$domain/ break;
}
#last:重新將rewrite后的地址在server標簽中執行
#break:將rewrite后的地址在當前l(fā)ocation標簽中執行
location / {
rewrite ^/(.*)$ /appicrm/$1 last;
}
location ~* ^/appicrm/.*$ {
proxy_set_header Host $host;
proxy_set_header REMOTE-HOST $remote_addr;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_pass http://MyApp;
client_max_body_size 10m;
client_body_buffer_size 128k;
proxy_connect_timeout 90;
proxy_send_timeout 90;
proxy_read_timeout 90;
proxy_buffer_size 4k;
proxy_buffers 4 32k;
proxy_busy_buffers_size 64k;
proxy_temp_file_write_size 64k;
}
location /webstatus {
check_status;
access_log off;
error_log off;
auth_basic "Restricted";
auth_basic_user_file /usr/local/nginx/conf/htpasswd/test;
#allow IP;
#deny all;
}
error_page 500 502 503 504 /50x.html;
location = /50x.html {
root html;
}
}
}
[root@localhost ~]#
###################################################################################
有幾個(gè)需要注意的問(wèn)題:
1、如下提示的Pid錯誤
7月 15 18:11:24 localhost.localdomain systemd[1]: Failed to read PID from file /var/run/nginx.pid: Invalid argument
解
決:注釋掉/usr/lib/systemd/system/nginx.service文件內的指定PID路徑那一行,后面find nginx
的PID實(shí)際存的位置后再修改回正常的,或干脆注釋掉,因為我的修改了后面又出錯了。nginx安裝的時(shí)候指定的位置居然不正確,不知道為何!網(wǎng)上有很多
解決方法包括國外網(wǎng)站都說(shuō)要安裝各種支持文件,經(jīng)測試都是錯誤答案。
2、Webstatus這個(gè)狀態(tài)查詢(xún)頁(yè)面,你肯定不希望所有人都能訪(fǎng)問(wèn),所以需要加密
[root@node-01 ~] mkdir /usr/local/nginx/conf/htpasswd/
[root@node-01 ~] htpasswd -c /usr/local/nginx/conf/htpasswd/test Youki
New password:
Re-type new password:
Adding password for user auth_user
[root@node-01 ~] vi /usr/local/nginx/conf/nginx.conf
auth_basic "Restricted";
auth_basic_user_file /usr/local/nginx/conf/htpasswd/test;
將以上兩句加入/webstatus節
免責聲明:本站發(fā)布的內容(圖片、視頻和文字)以原創(chuàng )、來(lái)自本網(wǎng)站內容采集于網(wǎng)絡(luò )互聯(lián)網(wǎng)轉載等其它媒體和分享為主,內容觀(guān)點(diǎn)不代表本網(wǎng)站立場(chǎng),如侵犯了原作者的版權,請告知一經(jīng)查實(shí),將立刻刪除涉嫌侵權內容,聯(lián)系我們QQ:712375056,同時(shí)歡迎投稿傳遞力量。
Copyright ? 2009-2022 56dr.com. All Rights Reserved. 特網(wǎng)科技 特網(wǎng)云 版權所有 特網(wǎng)科技 粵ICP備16109289號
域名注冊服務(wù)機構:阿里云計算有限公司(萬(wàn)網(wǎng)) 域名服務(wù)機構:煙臺帝思普網(wǎng)絡(luò )科技有限公司(DNSPod) CDN服務(wù):阿里云計算有限公司 百度云 中國互聯(lián)網(wǎng)舉報中心 增值電信業(yè)務(wù)經(jīng)營(yíng)許可證B2
建議您使用Chrome、Firefox、Edge、IE10及以上版本和360等主流瀏覽器瀏覽本網(wǎng)站