溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點(diǎn)擊 登錄注冊 即表示同意《億速云用戶服務(wù)條款》

CentOS 6.5上安裝MySQL-Cluster 7.3.4的過程

發(fā)布時間:2021-09-16 16:14:23 來源:億速云 閱讀:117 作者:chen 欄目:MySQL數(shù)據(jù)庫

本篇內(nèi)容主要講解“CentOS 6.5上安裝MySQL-Cluster 7.3.4的過程”,感興趣的朋友不妨來看看。本文介紹的方法操作簡單快捷,實用性強(qiáng)。下面就讓小編來帶大家學(xué)習(xí)“CentOS 6.5上安裝MySQL-Cluster 7.3.4的過程”吧!

環(huán)境說明:CentOS6.5 + MySQL-Cluster 7.3.4(最新GA版本),規(guī)劃2臺機(jī)器,一臺做控制服務(wù)器+負(fù)載均衡服務(wù)器+數(shù)據(jù)節(jié)點(diǎn)服務(wù)器, 另一臺做負(fù)載均衡服務(wù)器+數(shù)據(jù)節(jié)點(diǎn)服務(wù)器;


一、下載,這里為了方便安裝過程,這里直接使用了RPM包來安裝,避開了編譯安裝的痛苦:
 首先先到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 這個安裝包,避免一個接一個下載的痛苦;

二、環(huán)境清理以及安裝:
1. mysql舊版本清除:
  首先使用如下命令來清理之前操作系統(tǒng)自帶的mysql安裝:yum -y remove mysql
然后使用如下命令:
rpm -qa | grep mysql*
對于找到的2個剩余mysql包,請按照如下的命令格式予以刪除:
rpm -e --nodeps mysql-libs-5.1.71-1.el6.x86_64

2. mysql cluster版本安裝準(zhǔn)備:將MySQL-Cluster-gpl-7.3.4-1.el6.x86_64.rpm-bundle.tar放到某個目錄下(譬如/package) 下面,并且執(zhí)行如下命令解壓:
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個類來創(chuàng)建對應(yīng)的文件夾)
  存儲節(jié)點(diǎn):mkdir /var/lib/mysql/data
    管理節(jié)點(diǎn):mkdir /var/lib/mysql-cluster    SQL節(jié)點(diǎn):可不用  文件夾授權(quán)
  進(jìn)程DIR:    mkdir /var/run/mysqld             
 
  使用如下的命令來變更權(quán)限保證可寫入:
  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
特別注意,當(dāng)安裝完畢server gpl包后,將出現(xiàn)如下提示信息,提醒我們整個cluster安裝后的初次超級賬戶密碼存在/root/.mysql_secret這個文件當(dāng)中。
------------------------------------------------------------------------------------------------------
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. 配置文件撰寫與調(diào)整:
 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初次啟動命令以及用戶密碼更改調(diào)整:(請嚴(yán)格按照次序啟動)
 執(zhí)行初次啟動前請先確認(rèn) 將兩臺機(jī)器的防火墻關(guān)閉(service iptables stop 或者 設(shè)定 防火墻端口可通,兩個端口即通訊端口1186、數(shù)據(jù)端口3306 )
初次啟動mgt console命令:ndb_mgmd -f /var/lib/mysql-cluster/config.ini
啟動均衡節(jié)點(diǎn)命令: ndbd --initial
啟動數(shù)據(jù)節(jié)點(diǎn)命令:mysqld_safe --defaults-file=/etc/my.cnf --explicit_defaults_for_timestamp &
注意在啟動過程中需要監(jiān)測整個控制臺輸出,發(fā)現(xiàn)有錯誤信息需要及時解決,根據(jù)錯誤日志內(nèi)容來解決。
------------------------------------------------------------------------------------------------------
如果一起正常,使用如下命令將Management console開啟:  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)
 -----------------------------------------------------------------------------------------------------
修正密碼:
 當(dāng)mysqld 啟動完畢正常后(可以使用pgrep mysqld來獲取進(jìn)程ID),我們可以使用如下命令修改:
mysql -u root -p;
隨機(jī)密碼(具體請參見/root/.mysql_secret文件獲取),進(jìn)入后使用如下指令修改密碼:
SET PASSWORD = PASSWORD('新密碼');
幾臺裝有SQL數(shù)據(jù)節(jié)點(diǎn)的服務(wù)器皆需要執(zhí)行一遍上述命令;
------------------------------------------------------------------------------------------------------


四、Cluster效果測試:
 使用mysql -u root -p 密碼;
輸入對應(yīng)的密碼后登陸到系統(tǒng),按照如下命令開始新建database;
 create database clustertest;
 use clustertest;
 CREATE TABLE testtable(Count INT) ENGINE=NDBCLUSTER;
特別注意,只有使用了NDBCluster引擎的表才會執(zhí)行同步操作,因此特別需要在上述表加入這個后綴;


五、關(guān)閉Cluster:(需要嚴(yán)格按照次序執(zhí)行)
關(guān)閉數(shù)據(jù)節(jié)點(diǎn):mysqld stop  (SQL節(jié)點(diǎn)可以用mysqladmin shutdown或別的方式關(guān)閉。)
在管理節(jié)點(diǎn)上執(zhí)行:shell> ndb_mgm -e shutdown
將安全的關(guān)閉管理節(jié)點(diǎn)和數(shù)據(jù)節(jié)點(diǎn)。

關(guān)閉后使用如下的進(jìn)程檢測命令查看一下是否退出來了:
pgrep mysqld
ps aux | grep nbdb
如果沒有,找到對應(yīng)的pid進(jìn)行kill 操作即可。

六、再次啟動Cluster方案:
啟動整個cluster的次序:
ndb_mgmd -f /var/lib/mysql-cluster/config.ini
 ndbd
 mysqld_safe --defaults-file=/etc/my.cnf --explicit_defaults_for_timestamp &
 -----------------------------------------------------------------------------------------------------
雜記:
防火墻策略調(diào)整: iptables -A INPUT -s 192.168.100.0/24 -i eth3 -p tcp -m tcp -j ACCEPT
修改密碼方法一:
mysqladmin -u root password root (更改密碼)                    (沒有新密碼前執(zhí)行)
mysqladmin -u root -p 'xxxxxx' password 'NewPassword';  (安裝完畢后啟動mysqld執(zhí)行)

修改密碼方法二:
UPDATE mysql.user SET Password=PASSWORD('Password01!') WHERE User='root';
FLUSH PRIVILEGES;

修改密碼方法三:
讓mysql以不帶安全控制的方式啟動:
mysqld_safe --user=mysql --skip-grant-tables --skip-networking;
然后再用前面2種方法修改密碼;

注:下文涉及到配置的,如無特別說明,主備機(jī)則一致!
一、環(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、修改主機(jī)名并修改host
[root@localhost ~]# hostnamectl set-hostname node-01
[root@localhost ~]# vi /etc/hosts
127.0.0.1node-01在127后面添加node-01

二、拓?fù)鋱D的規(guī)劃:
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端口映射。
此架構(gòu)需考慮的問題:
1、Master運(yùn)行,則Master占有vip且Nginx能夠正常服務(wù);
2、Master掛了,則Backup搶占vip且Nginx能夠正常服務(wù);
3、任何一臺前端nginx服務(wù)掛了,則vip資源轉(zhuǎn)移到另一臺服務(wù)器上,并發(fā)送提醒郵件;
4、nginx需要檢測后端服務(wù)器的健康狀態(tài)(由于應(yīng)用是掛在默認(rèn)網(wǎng)站下的虛擬目錄,且無法更改,必須能夠?qū)μ摂M目錄進(jìn)行健康檢查)
5、由于應(yīng)用需要Session保持,但由于沒有做Session共享,實際服務(wù)器角色轉(zhuǎn)換時,應(yīng)用會受到一定的影響。

三、安裝前的準(zhǔn)備工作
CentOS7環(huán)境下,默認(rèn)是使用FireWallD服務(wù),即使你修改了iptables,重啟又被初始化了,需要再 次手動systemctl restart  iptables.service才能使設(shè)置的iptables生效,由于FireWallD暫時還沒有熟悉使用方法且不知道他比iptables到底有 哪些優(yōu)勢,保險起見,還是換回原先的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開機(jī)啟動

2、安裝iptables防火墻
[root@node-01 ~]# yum install iptables-services -y
[root@node-01 ~]# systemctl enable iptables

3、在進(jìn)行Keepalived和nginx配置前,務(wù)必將集群內(nèi)的幾臺主機(jī)的通訊相互完全放行(并開放80的Web訪問規(guī)則),否則很有可能出現(xiàn)腦裂或其他問題,可直接在配置文件內(nèi)加入以下語句;
[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)是整個負(fù)載均衡的基礎(chǔ),如果沒有這個基礎(chǔ),故障隔離與失敗切換就毫無意義了。ipvs 具體實現(xiàn)是由 ipvsadm 這個程序來完成的。CentOS7.1默認(rèn)自帶安裝了。

2、安裝keepalived(其實7.1自帶了)
[root@node-01 ~]# yum install keepalived
[root@node-01 ~]# keepalived -v
Keepalived v1.2.13 (03/06,2015)

3、安裝當(dāng)前最新穩(wěn)定版1.8.0
注1:一開始是用yum安裝的nginx,結(jié)果發(fā)現(xiàn)后端服務(wù)器Down機(jī)或狀態(tài)不正常時,nginx也照常轉(zhuǎn)發(fā)請求,后面yum erase nginx后,進(jìn)行了手動安裝。因為需要額外添加 nginx_upstream_check_module模塊。
注2:安裝過程會提示類型這樣的錯誤 ./configure: error: the HTTP rewrite module requires the PCRE library.
所以先安裝相應(yīng)的支持庫來解決。pcre,正則表達(dá)式匹配支持;zlib,用于壓縮等等。
[root@node-01 ~]# yum -y install gcc-c++ pcre-devel zlib-devel

1) 為nginx建立一個www組,并建立一個不登錄的賬戶nginx,放入www用戶組
[root@node-01 ~]# groupadd -f www
[root@node-01 ~]# useradd -d /var/cache/nginx -s /sbin/nologin -g www nginx
2) 建立目錄用于存放nginx日志文件,并賦權(quán)限
[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
#在當(dāng)前目錄下解壓出nginx_upstream_check_module-master這個目錄

[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穩(wěn)定版,所以選check_1.7.5+.patch這個補(bǔ)丁包,其他版本相應(yīng)選擇即可
#如果提示bash: patch: 未找到命令...應(yīng)該安裝一下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)行以下設(shè)置并制作自啟動文件:
[root@node-01 ~]# ln -s /usr/local/nginx/sbin/nginx /usr/sbin/nginx
[root@node-01 ~]# vi /usr/lib/systemd/system/nginx.service
#加下以下內(nèi)容:
#---------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
系統(tǒng)啟動時讓nginx.service自啟動。

4) keepalived和Nginx最好也設(shè)置開機(jī)啟動
[root@node-01 ~]# systemctl enable keepalived
[root@node-01 ~]# systemctl enable nginx

五、Keepalived配置
在配置keepalived之前,先關(guān)閉selinux
A、vi /etc/selinux/config
B、設(shè)置 SELINUX=disabled 保存
C、執(zhí)行  setenforce 0
如果只想臨時關(guān)閉,直接輸入:setenforce 0
[root@node-01 ~]# vi /etc/keepalived/keepalived.conf
#############keepalived配置#############################################################

! Configuration File for keepalived

global_defs {
}

vrrp_script chk_nginx {
#必須放在track代碼的上方,否則無效,測試了幾次是這個情況

   script "killall -0 nginx"
   #用shell命令檢查nginx服務(wù)是否存在

   interval 1
   #時間間隔為1秒檢測一次

   weight -15
   #當(dāng)nginx的進(jìn)程不存在了,就把當(dāng)前的權(quán)重-15
}

vrrp_instance VI_1 {
    state MASTER
    #主LVS是MASTER,從主機(jī)時此項要改為BACKUP,要大寫

    interface enp4s0
    #LVS監(jiān)控的網(wǎng)絡(luò)接口

    virtual_router_id 51
    #同一實例下virtual_router_id必須相同,MASTRE/BACKUP 設(shè)置值要一樣

    priority 100
    #定義優(yōu)先級,數(shù)字越大,優(yōu)先級越高,把此份Conf拷貝到另一臺機(jī)器上時,設(shè)置的priority值要比MASTRE權(quán)重值低

    advert_int 1
    #MASTER與BACKUP負(fù)載均衡器之間同步檢查的時間間隔,單位是秒

    authentication {
        auth_type PASS
        auth_pass 376879148
        #驗證類型和密碼,有PASS和AH兩種,一般用PASS,據(jù)說AH有問題,認(rèn)證密碼主備服務(wù)器之間一定要一致,否則出錯
    }

    virtual_ipaddress {
        172.21.4.44
        #設(shè)置虛擬IP,可以有多個地址,每個地址占一行,不需掩碼。注意:這個 ip 必須與我們在 lvs 客戶端設(shè)定的vip相一致
    }

   track_script {
        chk_nginx
        #引用上面的vrrp_script定義的腳本名稱
        }

  notify_master "/etc/keepalived/changemail.py master"
  notify_backup "/etc/keepalived/changemail.py backup"
  notify_fault "/etc/keepalived/changemail.py fault"
  #指定當(dāng)切換到主、備及故障狀態(tài)時,執(zhí)行的腳本
}

###################################################################################

六、HA狀態(tài)切換時的郵件提醒
[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)信息,根據(jù)實際情況填寫 
smtpHost = 'smtp.exmail.qq.com'
smtpPort = '25'
sslPort  = '465'
fromMail = 'youki@appi.com'
toMail   = 'youki@appi.com'
username = 'youki@appi.com'
password = 'xxxxxxx'
#解決中文問題 
reload(sys) 
sys.setdefaultencoding('utf8') 
 
#郵件標(biāo)題和內(nèi)容 
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三種方式,根據(jù)你使用的SMTP支持情況選擇一種 
    #普通方式,通信過程不加密 
    #smtp = smtplib.SMTP(smtpHost,smtpPort)
    #smtp.ehlo() 
    #smtp.login(username,password) 
 
    #tls加密方式,通信過程加密,郵件數(shù)據(jù)安全,使用正常的smtp端口 
    #smtp = smtplib.SMTP(smtpHost,smtpPort) 
    #smtp.ehlo() 
    #smtp.starttls() 
    #smtp.ehlo() 
    #smtp.login(username,password) 
 
    #純粹的ssl加密方式,通信過程加密,郵件數(shù)據(jù)安全 
    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、上面的腳本制作完成后,記得賦權(quán),否則無法執(zhí)行。
[root@node-01 ~]# chmod +x /etc/keepalived/changemail.py

[root@node-01 ~]#scp /etc/keepalived/keepalived.conf 172.21.4.52:/etc/keepalived
把主機(jī)上的配置文件copy到Backup服務(wù)器上,現(xiàn)在在兩臺主機(jī)上可以利用 ip addr show命令來查看VIP的獲取情況

2、keeplived日志位置指定:
在主從keeplived節(jié)點(diǎn)上編譯/etc/sysconfig/keepalived文件

[root@node-01 ~]# vi /etc/sysconfig/keepalived
將最后一行KEEPALIVED_OPTIONS="-D" 修改為:KEEPALIVED_OPTIONS="-D -d -S 0"

3、修改主從節(jié)點(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 ,更具體的日志信息輸出需要在啟動keepalived時加 -d 參數(shù)。
2、在都為MASTER且priority一樣的情況下,后啟的節(jié)點(diǎn)(service vrrp start)會取代正在運(yùn)行的節(jié)點(diǎn)變成主用的。
3、一臺為MASTER且priority較高的情況下,不受次節(jié)點(diǎn)down/up影響,并且其本身再從down變?yōu)閡p時,會搶奪控制權(quán)。
4、在都為MASTER且priority一樣的情況下,正在運(yùn)行的主節(jié)點(diǎn)down(斷網(wǎng)),次節(jié)點(diǎn)會自動接管,主節(jié)點(diǎn)再起來時不會去搶奪控制權(quán)。
#keepalived會定時執(zhí)行腳本并對腳本執(zhí)行的結(jié)果進(jìn)行分析,動態(tài)調(diào)整vrrp_instance的優(yōu)先級。
#如果腳本執(zhí)行結(jié)果為0,并且weight配置的值大于0,則優(yōu)先級相應(yīng)的增加
#如果腳本執(zhí)行結(jié)果非0,并且weight配置的值小于0,則優(yōu)先級相應(yīng)的減少
#其他情況,維持原本配置的優(yōu)先級,即配置文件中priority對應(yīng)的值。
#這里需要注意的是:
#1) 優(yōu)先級“不會”不斷的提高或者降低,當(dāng)track的對象恢復(fù)時,又是一致的
#2) 可以編寫多個檢測腳本并為每個檢測腳本設(shè)置不同的weight
#3) 不管提高優(yōu)先級還是降低優(yōu)先級,最終優(yōu)先級的范圍是在[1,254],不會出現(xiàn)優(yōu)先級小于等于0或者優(yōu)先級大于等于255的情況
#這樣可以做到利用腳本檢測業(yè)務(wù)進(jìn)程的狀態(tài),并動態(tài)調(diào)整優(yōu)先級從而實現(xiàn)主備切換。

七、nginx配置

[root@node-01 nginx]# vi /usr/local/nginx/conf/nginx.conf
#############nginx配置#############################################################

user  nginx www;
worker_processes  2;
#nginx進(jìn)程數(shù),建議設(shè)置為等于CPU總核心數(shù)

#worker_cpu_affinity 00000001 00000010 00000100 00001000 00010000 00100000 01000000 10000000;
#為每個進(jìn)程分配cpu,將N個進(jìn)程分配到N個cpu,可以寫多個或者將一個進(jìn)程分配到多個cpu
error_log  /var/log/nginx/error.log crit;
#pid       /run/nginx.pid;

events {
        use epoll;
        #epoll是多路復(fù)用IO(I/O Multiplexing)中的一種方式,但是僅用于linux2.6以上內(nèi)核,可以 能
        worker_connections 102400;
        #最大連接數(shù)量,根據(jù)硬件調(diào)整,理論上每臺nginx服務(wù)器的最大連接數(shù)為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應(yīng)答代碼為400或者更高的應(yīng)答

    gzip on;
    #該指令用于開啟或關(guān)閉gzip模塊(on/off)

    gzip_min_length 1k;
    #設(shè)置允許壓縮的頁面最小字節(jié)數(shù),頁面字節(jié)數(shù)從header頭得content-length中進(jìn)行獲取。默認(rèn)值是0,不管頁面多大都壓縮。建議設(shè)置成大于1k的字節(jié)數(shù),小于1k可能會越壓越大。

    gzip_buffers 4 8k;
    #設(shè)置系統(tǒng)獲取幾個單位的緩存用于存儲gzip的壓縮結(jié)果數(shù)據(jù)流。4 8k代表以8k為單位,安裝原始數(shù)據(jù)大小以16k為單位的4倍申請內(nèi)存。

    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類型進(jìn)行壓縮,無論是否指定,”text/html”類型總是會被壓縮的,經(jīng)實測對本網(wǎng)站的圖片壓縮后,積極反而增大,所以取消圖片類的壓縮。

gzip_vary on;
    #和http頭有關(guān)系,加個vary頭,給代理服務(wù)器用的,有的瀏覽器支持壓縮,有的不支持,所以避免浪費(fèi)不支持的也壓縮,所以根據(jù)客戶端的HTTP頭來判斷,是否需要壓縮

    upstream MyApp{
              ip_hash;
              #1.輪詢(默認(rèn)):每個請求按時間順序逐一分配到不同的后端服務(wù)器,如果后端 除
              #2.weight:指定輪詢幾率,weight和訪問比率成正比,用于后端服務(wù)器性能不 況
              #3.ip_hash:每個請求按訪問ip的hash結(jié)果分配,這樣每個訪客固定訪問一個后題
              #4.fair(第三方):按后端服務(wù)器的響應(yīng)時間來分配請求,響應(yīng)時間短的優(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默認(rèn)為1,fail_timeout默認(rèn)為10秒,默認(rèn)情況下后端服務(wù)器在10秒內(nèi)出錯1次認(rèn)為服務(wù)器異常將停止轉(zhuǎn)發(fā)
              check interval=3000 rise=2 fall=2 timeout=1000 type=http;
              #對條目中的所有節(jié)點(diǎn),每3秒檢測1次,請求2次正常則標(biāo)記該機(jī)狀態(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)
                    #文件和目錄不存在的時候重定向
                       {proxy_pass http://MyApp;}
                       #rewrite ^(.*) http://www.test.com/test/$domain/ break;
                    }
                    #last:重新將rewrite后的地址在server標(biāo)簽中執(zhí)行
                    #break:將rewrite后的地址在當(dāng)前l(fā)ocation標(biāo)簽中執(zhí)行

      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 ~]#
###################################################################################
 
有幾個需要注意的問題:
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文件內(nèi)的指定PID路徑那一行,后面find nginx 的PID實際存的位置后再修改回正常的,或干脆注釋掉,因為我的修改了后面又出錯了。nginx安裝的時候指定的位置居然不正確,不知道為何!網(wǎng)上有很多 解決方法包括國外網(wǎng)站都說要安裝各種支持文件,經(jīng)測試都是錯誤答案。
2、Webstatus這個狀態(tài)查詢頁面,你肯定不希望所有人都能訪問,所以需要加密
[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節(jié)

到此,相信大家對“CentOS 6.5上安裝MySQL-Cluster 7.3.4的過程”有了更深的了解,不妨來實際操作一番吧!這里是億速云網(wǎng)站,更多相關(guān)內(nèi)容可以進(jìn)入相關(guān)頻道進(jìn)行查詢,關(guān)注我們,繼續(xù)學(xué)習(xí)!

向AI問一下細(xì)節(jié)

免責(zé)聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀點(diǎn)不代表本網(wǎng)站立場,如果涉及侵權(quán)請聯(lián)系站長郵箱:is@yisu.com進(jìn)行舉報,并提供相關(guān)證據(jù),一經(jīng)查實,將立刻刪除涉嫌侵權(quán)內(nèi)容。

AI