2. 服務(wù)器規(guī)劃
操作系統(tǒng)版本為:
CentOS Linux release 7
軟件配置:
服務(wù)器 |
安裝軟件 |
Server1 |
Nginx+keepalived(主) 重定向服務(wù)(redirect) |
Server2 |
Postgresql(主) redis(從) 重定向服務(wù)(redirect) |
Server3 |
Postgresql(從) redis(主) Nginx+keepalived(備) |
Server4 |
Postgresql(日志) redis(從) 重定向服務(wù) |
3. 安裝包目錄
4. 安裝前準(zhǔn)備
將所需要的安裝軟件分別上傳到對(duì)應(yīng)的服務(wù)器上(如無(wú)特殊要求最好安裝到/opt目錄, 關(guān)閉防火墻, 上傳yum安裝包。
4.1Centos7 關(guān)閉防火墻(重要)
systemctl stop firewalld.service
systemctl disable firewalld.service
查看防火墻狀態(tài):
firewall-cmd –state
結(jié)果如上圖所示,則代表已經(jīng)關(guān)閉
4.2上傳” rpm-packages”到/opt目錄
4.3安裝rpm packages
cd /opt/rpm-packages
rpm -Uvh –force–nodeps *.rpm
5. 安裝JDK(建議所有服務(wù)器都安裝)
5.1上傳 ”軟件-jdk”里面的文件到/opt
5.2查看現(xiàn)有jdk
rpm -qa|grep java
若結(jié)果如上則跳過(guò)5.3
5.3刪除現(xiàn)有jdk
rpm -e –nodeps
5.4安裝jdk1.7
rpm -ivh/opt/jdk-7u80-linux-x64.rpm
5.5驗(yàn)證JDK是否正確安裝
java -version
如果結(jié)果如上,則代表安裝正確
6. Nginx 安裝(server1, server3)
6.1上傳 ”軟件-nginx” 里面的文件到/opt
6.2安裝
cd /opt
tar -zxvfopenresty-1.11.2.5.tar.gz
cdopenresty-1.11.2.5
./configure
gmake
gmake install
6.3創(chuàng)建軟鏈
ln -s/usr/local/openresty/nginx/sbin/nginx /usr/bin/nginx
6.4修改配置文件
vim /usr/local/openresty/nginx/conf/nginx.conf
增加upstream(如果有多個(gè)重定向服務(wù)器,需要配置多個(gè)server, 例子是2個(gè), 位置與server平級(jí),可以參考配置樣例):
upstream myserver{
server 10.33.26.125:8080; # (重定向服務(wù)器IP+端口)
server 10.33.26.126:8080; # (重定向服務(wù)器IP+端口)
}
替換原來(lái)的location /
location / {
set $urlParams '';
rewrite_by_lua_filelua/get_args.lua;
proxy_passhttp://myserver$urlParams;
}
配置樣例:
6.5上傳get_args.lua
cd /usr/local/openresty/nginx
mkdir lua
cd lua
cp /opt/get_args.lua ./
6.6啟動(dòng)openResty
nginx -c /usr/local/openresty/nginx/conf/nginx.conf
6.7查看nginx是否安裝成功
ps -ef|grep nginx
若結(jié)果如上圖,則代表安裝成功,如果失敗,可以用以下腳本查看詳情:
tail -f/usr/local/openresty/nginx/logs/error.log
7. Keepalived安裝(server1,server3)
7.1解壓安裝
cd /opt
tar -zxvf keepalived-1.3.4.tar.gz
cd keepalived-1.3.4
./configure –prefix=/usr/local/keepalived–sysconf=/etc
make
make install
7.2建立軟鏈
ln-s /usr/local/keepalived/sbin/keepalived /usr/sbin/keepalived
7.3修改配置文件()
注意:先清空原有文件內(nèi)容,然后按主從添加對(duì)應(yīng)的內(nèi)容
Vim清空文件命令:dG
vim /etc/keepalived/keepalived.conf
=============主節(jié)點(diǎn)配置=================
global_defs {
router_id LVS_DEVEL_1
}
vrrp_scriptchk_nginx {
script"/etc/keepalived/nginx_check.sh"
interval 2
weight -20
}
vrrp_instance VI_1{
state MASTER
interface ens33 #網(wǎng)卡名稱 可用ip addr查看
virtual_router_id 51
priority 100
advert_int 1
authentication {
auth_type PASS
auth_pass 1111
}
track_script {
chk_nginx
}
virtual_ipaddress {
10.33.26.120 #虛擬IP(VIP)
}
}
=============從節(jié)點(diǎn)配置=======================
global_defs {
router_id LVS_DEVEL_2
}
vrrp_scriptchk_nginx {
script"/etc/keepalived/nginx_check.sh"
interval 2
weight -20
}
vrrp_instance VI_1{
state backup
interface ens33 #網(wǎng)卡名稱 可用ip addr查看
virtual_router_id 51
priority 98
advert_int 1
authentication {
auth_type PASS
auth_pass 1111
}
track_script {
chk_nginx
}
virtual_ipaddress {
10.33.26.120 #虛擬IP(VIP)
}
}
主配置截圖如下:
從配置截圖如下:
7.4上傳nginx_check.sh
cd /etc/keepalived
cp /opt/nginx_check.sh ./
chmod +x nginx_check.sh
7.5啟動(dòng)keepalived
keepalived-f /etc/keepalived/keepalived.conf
7.6查看keepalived是否安裝成功
ps-ef|grep keepalived
若結(jié)果如上圖,則代表安裝成功,如果失敗,可以用以下腳本查看詳情:
tail -f/var/log/messages
8. Postgresql安裝(server2-主,server3-從)
8.1上傳 “軟件-postgresql”里面的文件到/opt
8.2解壓安裝
cd /opt
rpm -ivhpostgresql-9.6.6-1-x64-bigsql.rpm
8.3配置主從復(fù)制
8.3.1主機(jī)配置
8.3.1.1初始化postgres
/opt/postgresql/pgc start pg96
按要求輸入密碼(eg:postgres)
8.3.1.2初始化數(shù)據(jù)庫(kù)(linux和windows二選一,建議用linux)
8.3.1.3Linux操作
上傳 “數(shù)據(jù)庫(kù)初始化腳本-linux” 到/opt
vim /opt/init_db.sh
修改/opt/init_db.sh中的PG_HOST為主機(jī)IP,PGPASSWORD為8.2輸入的postgres帳戶密碼
chmod +x/opt/init_db.sh
sh/opt/init_db.sh
8.3.1.4Windows操作
確保Windows環(huán)境下有pg數(shù)據(jù)庫(kù)的環(huán)境
修改setup.bat中的localhost為主機(jī)IP, PGPASSWORD為8.2輸入的postgres帳戶密碼, 執(zhí)行行以下腳本:
setup.bat
備注: 1_create_db.sql中的數(shù)據(jù)庫(kù)名稱:image_text,如果需要自定義修改,請(qǐng)修改成你們需要的名字,其他不要改動(dòng).
8.3.1.5修改pg_hba.conf
vim /opt/postgresql/data/pg96/pg_hba.conf
增加 replica 用戶(10.33.26.125為從機(jī)IP),配置如下:
host replication replica<從機(jī)IP>/32md5
配置截圖如下:
8.3.1.6重啟
/opt/postgresql/pgcrestart pg96
8.3.2從機(jī)配置
8.3.2.1創(chuàng)建用戶和組
groupadd postgres
useradd postgres-g postgres
8.3.2.2將/opt/postgresql目錄授權(quán)給postgres
chown -R postgres:postgres/opt/postgresql
8.3.2.3切換到postgres用戶
su postgres
8.3.2.4從主節(jié)點(diǎn)拷貝數(shù)據(jù)到從節(jié)點(diǎn)
/opt/postgresql/pg96/bin/pg_basebackup-h <主機(jī)IP> -U replica -D /opt/postgresql/data/pg96 -X stream
8.3.2.5配置recovery.conf
cp/opt/postgresql/pg96/share/postgresql/recovery.conf.sample /opt/postgresql/data/pg96/recovery.conf
vim/opt/postgresql/data/pg96/recovery.conf
修改如下配置:
standby_mode = on # 說(shuō)明該節(jié)點(diǎn)是從服務(wù)器
primary_conninfo = 'host=<主機(jī)IP> port=5432 user=replica password=replica' # 主服務(wù)器的信息以及連接的用戶
recovery_target_timeline ='latest'
配置截圖如下:
8.3.2.6配置postgresql.conf
vim/opt/postgresql/data/pg96/postgresql.conf
修改配置如下:
hot_standby= on
8.3.2.7創(chuàng)建logs目錄
mkdir/opt/postgresql/data/logs
8.3.2.8啟動(dòng)
/opt/postgresql/pg96/bin/pg_ctlstart -D /opt/postgresql/data/pg96/ &
8.3.3驗(yàn)證主從復(fù)制
登陸主機(jī),查詢:
select client_addr,sync_state frompg_stat_replication;
如果有記錄,則代表配置成功
9. Redis安裝
9.1說(shuō)明
server2-從, server3-從, server4-主,建議3臺(tái)或以上,高可用至少要保持2個(gè)sentinel節(jié)點(diǎn)存活
9.2上傳“軟件-redis- redis-4.0.6.tar.gz”到/opt
9.3解壓安裝
cd /opt
tar xzfredis-4.0.6.tar.gz
cd redis-4.0.6
make
make install
9.4修改配置文件
Redis.conf
從機(jī)將標(biāo)紅的IP地址 改成 主機(jī)IP地址后上傳至/opt/redis-4.0.6
主機(jī)直接注掉281行上傳至上傳至/opt/redis-4.0.6
Sentinel.conf
將標(biāo)紅的IP地址 改成 主機(jī)IP地址后上傳至/opt/redis-4.0.6
notify_mymaster.sh
修改后上傳至/opt/redis-4.0.6
9.5啟動(dòng)redis
/opt/redis-4.0.6/src/redis-server /opt/redis-4.0.6/redis.conf
9.6驗(yàn)證主從配置
/opt/redis-4.0.6/src/redis-cli -h <主機(jī)IP> -p 6379 info replication
如果出現(xiàn)以上類似截圖, 則代表配置成功
9.7高可用(HA )
9.7.1準(zhǔn)備
創(chuàng)建sentinel目錄:
mkdir/opt/redis-4.0.6/sentinel-dir
授執(zhí)行權(quán)限
chmod +x /opt/redis-4.0.6/notify_mymaster.sh
9.7.2啟動(dòng)sentinel, 啟用自動(dòng)切換
/opt/redis-4.0.6/src/redis-sentinel/opt/redis-4.0.6/sentinel.conf
9.7.3驗(yàn)證sentinel是否搭建成功
/opt/redis-4.0.6/src/redis-cli-h <主機(jī)IP> -p 26379 info sentinel
若結(jié)果如截圖所示, 則代表成功。
9.7.4在主機(jī)上增加虛擬IP
/sbin/ip addr add <虛擬IP>/24 dev <網(wǎng)卡名稱>
虛擬IP和網(wǎng)卡名稱需要和9.4中配置的notify_mymaster中的配置保持一致
10.Zookeeper安裝
10.1上傳“軟件-zookeeper”里面的文件到/opt
10.2解壓
cd /opt
tar -zxvf zookeeper-3.4.6.tar.gz
cd zookeeper-3.4.6/conf
cp zoo_sample.cfg zoo.cfg
sh/opt/zookeeper-3.4.6/bin/zkServer.sh start
10.3驗(yàn)證zookeeper是否安裝成功
ps -ef|grepQuorumPeerMain
若上現(xiàn)上述截圖, 則代表配置成功
tomcat移除項(xiàng)目名
cd /opt/tomcat-transform/conf/Catalina/localhost
vim ROOT.xml
增加如下配置
13. 啟動(dòng)腳本匯總
13.1 Nginx
殺死:nginx -s stop
啟動(dòng):nginx
13.2 Keepalived
殺死: pkill keepalived
啟動(dòng): keepalived -f /etc/keepalived/keepalived.conf
13.3 Postgresql
重啟:/opt/postgresql/pgc restart pg96
13.4 Redis
殺死: pkill redis
啟動(dòng):
/opt/redis-4.0.6/src/redis-server/opt/redis-4.0.6/redis.conf
/opt/redis-4.0.6/src/redis-sentinel/opt/redis-4.0.6/sentinel.conf
get_args.lua:
local cjson = require "cjson"
local request_method = ngx.var.request_method
local args = ""
local request_uri = ngx.var.request_uri
if "POST" == request_method then
ngx.req.read_body()
local args = ngx.req.get_post_args()
local param = ""
for key, val in pairs(args) do
param = key
end
param = cjson.decode(param)
ngx.var.urlParams = request_uri.."username="..tostring(param.username).."&sign="..tostring(param.sign).."×tamp="..tostring(param.timestamp)
else
ngx.var.urlParams = request_uri
end
nginx_check.sh
#!/bin/bash
if [ "$(ps -ef | grep "nginx: master process"| grep -v grep )" == "" ]
then
nginx || killall keepalived
else
echo "nginx is running"
fi
notify_master.sh
#!/bin/bash
MASTER_IP=$6
LOCAL_IP='10.33.26.125' # 本機(jī)IP
VIP='10.33.26.127' #虛擬IP, 不能與keepalived中的虛擬IP一致
NETMASK='24'
INTERFACE='eno16777736' #網(wǎng)卡名稱
if [ ${MASTER_IP} = ${LOCAL_IP} ]; then
/sbin/ip addr add ${VIP}/${NETMASK} dev ${INTERFACE}
/sbin/arping -q -c 3 -A ${VIP} -I ${INTERFACE}
exit 0
else
/sbin/ip addr del ${VIP}/${NETMASK} dev ${INTERFACE}
exit 0
fi
exit 1
sentinel.conf
daemonize yes
port 26379
protected-mode no
dir "/opt/redis-4.0.6/sentinel-dir"
logfile "/opt/redis-4.0.6/sentinel-dir/sentinel26379.log"
sentinel monitor mymaster 10.33.26.125 6379 2
sentinel down-after-milliseconds mymaster 3000
sentinel failover-timeout mymaster 10000
sentinel parallel-syncs mymaster 1
sentinel client-reconfig-script mymaster /opt/redis-4.0.6/notify_mymaster.sh