1. 程式人生 > 其它 >sftp伺服器高可用配置指引

sftp伺服器高可用配置指引

本配置指引,採用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