sftp伺服器高可用配置指引
阿新 • • 發佈:2021-06-30
本配置指引,採用3節點,用到的軟體有:glusterfs、nginx、keepalived 。
拓撲圖如下:
【1】計算機節點命名
gsftp-01-t 10.10.16.171 gsftp-02-t 10.10.16.172 gsftp-03-t 10.10.16.173 keepalived vip: 10.10.16.170
【2】安裝與配置glusterfs複製卷
2.1 新增glusterfs yum源
#cat glusterfs.repo [glusterfs] name=glusterfs baseurl = https://mirrors.tuna.tsinghua.edu.cn/centos/7/storage/x86_64/gluster-6/ enabled=1 gpgcheck=0
2.2 配置hosts解析
#cat /etc/hosts 10.10.16.171 gsftp-01-t 10.10.16.172 gsftp-02-t 10.10.16.173 gsftp-03-t
2.3 配置免密登陸
# ssh-keygen -t rsa #一直3次回車就可以了 # ssh-copy-id root@gsftp-01-t # ssh-copy-id root@gsftp-02-t # ssh-copy-id root@gsftp-03-t
2個節點都要執行一下以上命令,再用ssh gsftp-01-t 和 ssh gsftp-02-t、ssh gsftp-03-t登陸測試,確保不要彈出密碼就可以登陸。
2.4 安裝glusterfs服務
# yum install glusterfs-server glusterfs-fuse
啟動glusterd服務
# systemctl start glusterd # systemctl enable glusterd # systemctl status glusterd
2.5配置glusterfs複製卷
#mkdir /data/brick/rep_vol -p #建立複製卷目錄,3個節點都要執行
建立glusterfs群集
# gluster peer probe gsftp-02-t peer probe: success. # gluster peer status #檢視群集狀態 Number of Peers: 1 Hostname: gsftp-02-t Uuid: a4c6c741-950b-4408-8666-2ce6c4d3e820 State: Peer in Cluster (Connected) # gluster volume help #檢視幫助 # gluster volume create rep_vol replica 3 transport tcp \ > gsftp-01-t:/data/brick/rep_vol \ > gsftp-02-t:/data/brick/rep_vol \ > gsftp-03-t:/data/brick/rep_vol \ > force volume create: rep_vol: success: please start the volume to access data
預設情況下,需要3個條帶,防止腦裂,測試環境,可以用到 2個條帶,但後面要跟force引數;
#gluster volume set rep_vol network.ping-timeout 10 #預設是42秒,當某個節點出故障了,為了加快客戶端切換到備用節點
#gluster volume start rep_vol #啟動複製卷
#gluster volume info #檢視卷的資訊
Volume Name: rep_vol
Type: Replicate
Volume ID: 4872157a-cccf-47cc-b4db-dd8271851402
Status: Started
Snapshot Count: 0
Number of Bricks: 1 x 3 = 3
Transport-type: tcp
Bricks:
Brick1: gsftp-01-t:/data/brick/rep_vol
Brick2: gsftp-02-t:/data/brick/rep_vol
Brick3: gsftp-03-t:/data/brick/rep_vol
Options Reconfigured:
transport.address-family: inet
nfs.disable: on
performance.client-io-threads: off
#gluster volume status #檢視卷的狀態
Status of volume: rep_vol
Gluster process TCP Port RDMA Port Online Pid
------------------------------------------------------------------------------
Brick gsftp-01-t:/data/brick/rep_vol 49152 0 Y 10594
Brick gsftp-02-t:/data/brick/rep_vol 49152 0 Y 10548
Brick gsftp-03-t:/data/brick/rep_vol 49152 0 Y 10537
Self-heal Daemon on localhost N/A N/A Y 10615
Self-heal Daemon on gsftp-02-t N/A N/A Y 10569
Self-heal Daemon on gsftp-03-t N/A N/A Y 10541
Task Status of Volume rep_vol
------------------------------------------------------------------------------
There are no active volume tasks
配置完了後,因為是3節點,每個節點自己掛載自己.
#mkdir /data/sftp #mount -t glusterfs gsftp-01-t,gsftp-02-t,gsftp-03-t:rep_vol /data/sftp #df -h gsftp-01-t:rep_vol 200G 2.1G 198G 2% /data/sftp
節點1上的掛載配置,節點2就是:
#mount -t glusterfs gsftp-02-t,gsftp-03-t,gsftp-01-t:rep_vol /data/sftp
節點3就是:
#mount -t glusterfs gsftp-03-t,gsftp-02-t,gsftp-01-t:rep_vol /data/sftp
並把掛載配置寫入:/etc/rc.local 檔案開機自啟動中。
#vim /etc/rc.local /usr/bin/mount -t glusterfs gsftp-01-t,gsftp-02-t,gsftp-03-t:rep_vol /data/sftp #chmod +x /etc/rc.local
以上glusterfs複製卷配置與掛載完畢!
【3】配置keepalived + nginx 高可用和負載均衡
首先需要配置CentOS 映象源和epel源;
#yum install nginx nginx-mod-stream #yum install keepalived
nginx 配置檔案:
#cat nginx.conf #3個節點的配置都一樣 user nginx; worker_processes auto; error_log /var/log/nginx/error.log; pid /run/nginx.pid; include /usr/share/nginx/modules/*.conf; events { worker_connections 1024; } stream { upstream sftpService { hash $remote_addr consistent; server gsftp-01-t:22 max_fails=3 fail_timeout=5; server gsftp-02-t:22 max_fails=3 fail_timeout=5; server gsftp-03-t:22 max_fails=3 fail_timeout=5; } server { listen 2211; proxy_pass sftpService; } }
keepalived的配置檔案(3個節點內容不一致):
#cat keepalived.conf global_defs { router_id 10.10.16.171 #標識id,通常為 hostname,或者當前部署機器的IP,根據機器實際配置 } vrrp_script chk_nginx { script "/etc/keepalived/nginx_check.sh" interval 3 #(檢測指令碼執行的間隔/秒) weight 20 #執行sh後,修改當前伺服器權重 } vrrp_instance VI_1 { state MASTER #設定為主伺服器,備用伺服器應設定為BACKUP interface ens192 #定義虛擬ip繫結介面 ifconfig命令查詢 virtual_router_id 51 #VRRP組名,兩個節點必須一樣,指明各個節點屬於同一VRRP組 priority 100 #優先順序,主節點必須高於從節點,從節點可以配置為 90 advert_int 1 #組播資訊傳送間隔,檢測nginx狀態,兩個節點設定必須一樣 authentication { #認證,預設即可。主從需一致。 auth_type PASS auth_pass 1111 } track_script { chk_nginx } virtual_ipaddress { 10.10.16.170 #繫結的虛擬ip,可以繫結多個,換行填寫 } }
keepalived nginx_check.sh 檔案(3個節點內容一致):
#cat nginx_check.sh #!/bin/bash res=`ps -C nginx --no-header |wc -l` if [ $res -eq 0 -o $res -eq 1 ];then systemctl start nginx.service sleep 5 res=`ps -C nginx --no-header |wc -l` if [ $res -eq 0 -o $res -eq 1 ];then systemctl stop keepalived.service fi fi
【4】sftp服務與多使用者配置
sshd_config檔案配置:
#cat /etc/ssh/sshd_config #Subsystem sftp /usr/libexec/openssh/sftp-server #註釋掉這一行,增加以下6行至行尾,2個節點都要配置 Subsystem sftp internal-sftp Match Group sftpgroup ChrootDirectory /data/sftp/%u ForceCommand internal-sftp AllowTcpForwarding no X11Forwarding no
以上sshd_config檔案傳給其它2個節點,並重啟sshd服務:
#systemctl restart sshd
建立目錄並授權:
#chown -R root:root /data/sftp #用於儲存sftp登陸使用者的檔案,保證/data 和 /data/sftp的屬主和屬組都是root #groupadd sftpgroup #建立sftpgroup組
以下是建立sftp普通使用者:
#useradd -g sftpgroup -d /data/sftp/momo -s /sbin/nologin momo #echo '123456'|passwd --stdin momo #chown root:sftpgroup /data/sftp/momo #chmod 755 /data/sftp/momo #mkdir /data/sftp/momo/upload #chown momo /data/sftp/momo/upload #chmod 7777 /data/sftp/momo/home
如果需要一個管理員賬戶,用於檢視所有sftp使用者的上傳的資料,可以把管理員使用者的家目錄設定為:
#useradd -g sftpgroup -G root -s /sbin/nologin admin #usermod -d /data/sftp/ admin #echo '123456' |passwd --stdin admin
以後建立sftp普通使用者就可以用bash指令碼實現:
#cat sftpuseradd.sh #!/bin/bash if [ -z "$2" ];then pwd="test$890" else pwd=$2 fi useradd -g sftpgroup -d /data/sftp/$1 -s /sbin/nologin $1 echo $pwd | passwd --stdin $1 chown root:sftpgroup /data/sftp/$1 chmod 755 /data/sftp/$1 mkdir /data/sftp/$1/upload chown $1 /data/sftp/$1/upload chmod 777 /data/sftp/$1/upload scp /etc/passwd /etc/group /etc/shadow gsftp-02-t:/etc scp /etc/passwd /etc/group /etc/shadow gsftp-03-t:/etc