龚哥哥 - 山里男儿 爱生活、做自己!
CentOS搭建FTP服务器
发表于 2016-9-16 | 浏览(6138) | 服务器

1、查看是否已经安装vsftpd

rpm -qa | grep vsftpd

2、安装vsftpd

yum -y install vsftpd

2.1、将vsftpd加入开机启动

chkconfig vsftpd on

3、vsftpd配置  vim /etc/vsftpd/vsftpd.conf

# 设定不允许匿名访问
anonymous_enable=NO

# 设定本地用户可以访问。注:如使用虚拟宿主用户,在该项目设定为NO的情况下所有虚拟用户将无法访问
local_enable=YES

# 使用户不能离开主目录
chroot_list_enable=YES
ascii_upload_enable=YES

# 设定支持ASCII模式的上传和下载功能
ascii_download_enable=YES

# 启用“倾听”指令时,vsftpd在独立模式和运行,监听IPv4的套接字。这个指令不能一起使用, listen_ipv6指令
listen=YES

# PAM认证文件名。PAM将根据/etc/pam.d/vsftpd进行认证以下这些是关于vsftpd虚拟用户支持的重要配置项,默认vsftpd.conf中不包含这些设定项目,需要自己手动添加
pam_service_name=vsftpd

# 设定启用虚拟用户功能
guest_enable=YES

# 指定虚拟用户的宿主用户,CentOS中已经有内置的ftp用户了
guest_username=ftp

# 设定虚拟用户个人vsftp的CentOS FTP服务文件存放路径。存放虚拟用户个性的CentOS FTP服务文件(配置文件名=虚拟用户名进行认证
user_config_dir=/etc/vsftpd/vuser_conf
chroot_list_file=/etc/vsftpd/vuser_passwd.txt

# 授权用户权限(新版本需要设置此参数)
#allow_writeable_chroot=YES

# 开启PASV模式
pasv_enable=YES
pasv_min_port=40000
pasv_max_port=40080
pasv_promiscuous=YES

# 阻止特定的本地用户登录ftp
userlist_enable=YES
userlist_deny=YES
userlist_file=/etc/vsftpd/user_list

4、创建用户和密码文本  vim /etc/vsftpd/vuser_passwd.txt,注意奇行是用户名,偶行是密码

devil
123456

4.1、生成虚拟用户认证的db文件

db_load -T -t hash -f /etc/vsftpd/vuser_passwd.txt /etc/vsftpd/vuser_passwd.db

4.2、安装Berkeley DB工具,很多人找不到db_load的问题就是没有安装这个包(已安装则跳过)

yum install db4 db4-utils

5、编辑认证文件  vim /etc/pam.d/vsftpd,全部注释掉原来语句,再增加以下两句

auth       required     pam_userdb.so db=/etc/vsftpd/vuser_passwd
account    required     pam_userdb.so db=/etc/vsftpd/vuser_passwd

6、创建虚拟用户配置文件目录

mkdir /etc/vsftpd/vuser_conf

6.1、创建虚拟用户配置文件  vim /etc/vsftpd/vuser_conf/devil

local_root=/data/ftp/devil #虚拟用户根目录,根据实际情况修改
write_enable=YES
anon_umask=022 #掩码
anon_world_readable_only=NO
anon_upload_enable=YES
anon_mkdir_write_enable=YES
anon_other_write_enable=YES

7、设置Selinux(如果你的selinux是开启的话)

setsebool -P ftp_home_dir=1   #设置ftp可以使用home目录
sersebool -P allow_ftpd_full_access=1   #设置ftp用户可以有所有权限

8、设置FTP根目录权限

mkdir -p /data/ftp/devil
chmod 755 /data/ftp
chmod -R 777 /data/ftp/devil

9、配置防火墙  vim /etc/sysconfig/iptables

-A INPUT -m state --state NEW -m tcp -p tcp --dport 21 -j ACCEPT
-A INPUT -m state --state NEW -m tcp -p tcp --dport 22 -j ACCEPT
-A INPUT -p tcp --dport 40000:40080 -j ACCEPT

10、查看selinux安全模式(如果显示 Enforcing ,则需要改成 Disabled 模式)

getenforce

10.1、selinux模式为Disabled则跳过,vim /etc/selinux/config

SELINUX=disabled
默认是enforcing  把他修改为 disabled

11、启动vsftpd服务

service vsftpd start

12、重启防火墙(如果防火墙不想配置,则关闭防火墙即可,线上建议开启防火墙)

service iptables restart

13、测试 在客户端使用

ip 当前服务器的ip(ifconfig查看当前ip)
用户 devli
密码 123456

阅读全文

Keepalived+Haproxy搭建高可用负载均衡
发表于 2016-8-27 | 浏览(9176) | 服务器

Keepalived

简单的是一个路由的软件用C写的这个项目的主要目标是提供简单而强大的设施的负载均衡和高可用性对Linux系统和基于Linux的基础设施。负载均衡架构依赖于众所周知的和广泛使用的Linux虚拟服务器(IPVS)内核模块提供第四层负载均衡。简单的实现了一套检测动态自适应维护和管理服务器根据其健康loadbalanced池。另一方面,高可用性的实现VRRP协议.VRRP路由器故障转移的一个基本的砖。此外,简单的实现了一套钩VRRP有限状态机提供低空和高速协议的相互作用。简单的框架可以单独或一起提供弹性基础设施。

Haproxy

HAProxy提供高可用性、负载均衡以及基于TCP和HTTP应用的代理,支持虚拟主机,它是免费、快速并且可靠的一种解决方案。HAProxy特别适用于那些负载特大的web站点,这些站点通常又需要会话保持或七层处理。HAProxy运行在当前的硬件上,完全可以支持数以万计的并发连接。并且它的运行模式使得它可以很简单安全的整合进您当前的架构中, 同时可以保护你的web服务器不被暴露到网络上。

架构图


1、环境

CentOS 6.5
keepalived 1.2.23
haproxy 1.5.4

2、准备4台服务器

VIP         192.168.0.200
Master      192.168.0.110
Backup      192.168.0.111
Server1     192.168.0.120
Server2     192.168.0.121

3、安装gcc编译器,openssl,wget,如果已经安装则跳过

yum -y install openssl-devel ncurses-devel gcc gcc-c++ make rpm-build wget

4、创建软件存放目录

mkdir /soft

5、安装keepalived

cd /soft
wget http://www.keepalived.org/software/keepalived-1.2.23.tar.gz
tar -zxvf keepalived-1.2.23.tar.gz
cd keepalived-1.2.23
./configure --prefix=/usr/local/keepalived
make
make install

6、将keepalived做成启动脚务

cp /usr/local/keepalived/etc/rc.d/init.d/keepalived /etc/init.d/
cp /usr/local/keepalived/sbin/keepalived /usr/sbin/
cp /usr/local/keepalived/etc/sysconfig/keepalived /etc/sysconfig/
mkdir /etc/keepalived
cp /usr/local/keepalived/etc/keepalived/keepalived.conf /etc/keepalived/
chmod +x /etc/init.d/keepalived

7、配置文件修改  vim /etc/keepalived/keepalived.conf

7.1、MASTER 配置信息

global_defs {
    notification_email
    {
        fuxiang.gong@qq.com
    }
    notification_email_from 17091959688@163.com
    smtp_server smtp.163.com
    stmp_connect_timeout 30
    router_id lnmp_node1
}

# 检测haproxy脚本
vrrp_script chk_haproxy {
        script "/etc/keepalived/check_haproxy.sh"
        interval 2
        weight 2
}

# 服务
vrrp_instance VIP_1 {
    state MASTER    #设置为主服务器
    interface eth0  #监测网络接口
    virtual_router_id 51  #主、备必须一样
    priority 100   #主机级别,值越大优先级越高
    advert_int 1   #VRRP Multicast广播周期秒数

    authentication {
        auth_type PASS  #VRRP认证方式,主备必须一致
        auth_pass 1111  #密码
    }
    track_script {
        chk_haproxy  # 执行监控的服务
    }
    virtual_ipaddress {
        192.168.0.200  #漂移IP地址
    }
}

7.2、BACKUP 配置信息

global_defs { 
    notification_email
    {
        fuxiang.gong@qq.com
    }
    notification_email_from 17091959688@163.com
    smtp_server smtp.163.com
    stmp_connect_timeout 30
    router_id lnmp_node2
}

# 检测haproxy脚本
vrrp_script chk_haproxy {
        script "/etc/keepalived/check_haproxy.sh"
        interval 2
        weight 2
}

# 服务
vrrp_instance VIP_1 {
    state BACKUP    #设置为备用服务器
    interface eth0  #监测网络接口
    virtual_router_id 51  #主、备必须一样
    priority 90   #主、备机取不同的优先级,主机值较大,备份机值较小,值越大优先级越高 
    advert_int 1   #VRRP Multicast广播周期秒数
    authentication {
        auth_type PASS  #VRRP认证方式,主备必须一致
        auth_pass 1111  #密码
    }
    track_script {
        chk_haproxy  # 执行监控的服务
    }
    virtual_ipaddress {
        192.168.0.200  #漂移IP地址
    }
}

7.3、添加Haproxy检测脚本 vim  /etc/keepalived/check_haproxy.sh 添加以下内容

#!/bin/bash
if [ $(ps -C haproxy --no-header | wc -l) -eq 0 ]; then
    /etc/init.d/haproxy start
fi
sleep 2
if [ $(ps -C haproxy --no-header | wc -l) -eq 0 ]; then
    /etc/init.d/keepalived stop
fi

7.4、给check_haproxy.sh脚本赋值运行权限(MASTER和BACKUP一致)

chmod +x /etc/keepalived/check_haproxy.sh

7.5、允许两台服务器vrrp包通过防火墙,如果关闭防火墙则跳过(两台服务器上都配置)

MASTER
  vim /etc/sysconfig/iptables
  -A INPUT -i eth0 -p vrrp -s 192.168.0.111 -j ACCEPT

BACKUP
  vim /etc/sysconfig/iptables
  -A INPUT -i eth0 -p vrrp -s 192.168.0.110 -j ACCEPT

重启防火墙
service iptables restart

8、启动keepalived服务

service keepalived start

8.1、查看服务器多了一个虚拟IP,keepalived配置成功

MASTER  ip a

1: lo: <LOOPBACK,UP,LOWER_UP> mtu 16436 qdisc noqueue state UNKNOWN 
    link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00
    inet 127.0.0.1/8 scope host lo
    inet6 ::1/128 scope host 
       valid_lft forever preferred_lft forever
2: eth0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast state UP qlen 1000
    link/ether 00:0c:29:d9:a8:bd brd ff:ff:ff:ff:ff:ff
    inet 192.168.0.110/24 brd 192.168.0.255 scope global eth0
    inet 192.168.0.200/32 scope global eth0
    inet6 fe80::20c:29ff:fed9:a8bd/64 scope link 
       valid_lft forever preferred_lft forever

BACKUP  ip a

1: lo: <LOOPBACK,UP,LOWER_UP> mtu 16436 qdisc noqueue state UNKNOWN 
    link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00
    inet 127.0.0.1/8 scope host lo
    inet6 ::1/128 scope host 
       valid_lft forever preferred_lft forever
2: eth0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast state UP qlen 1000
    link/ether 00:0c:29:d9:8f:72 brd ff:ff:ff:ff:ff:ff
    inet 192.168.0.109/24 brd 192.168.0.255 scope global eth0
    inet6 fe80::20c:29ff:fed9:8f72/64 scope link 
       valid_lft forever preferred_lft forever

8.2、查看Keepalived日志

tail -f /var/log/messages


9、yum方式安装haproxy

yum install -y haproxy

9.2、查看haproxy版本信息

rpm -qi haproxy 或 haproxy -version

Name        : haproxy                      Relocations: (not relocatable)
Version     : 1.5.4                             Vendor: CentOS
Release     : 3.el6                         Build Date: 2016年05月11日 星期三 03时17分37秒
Install Date: 2016年08月24日 星期三 05时34分08秒      Build Host: worker1.bsys.centos.org
Group       : System Environment/Daemons    Source RPM: haproxy-1.5.4-3.el6.src.rpm
Size        : 2552550                          License: GPLv2+
Signature   : RSA/SHA1, 2016年05月12日 星期四 18时49分33秒, Key ID 0946fca2c105b9de
Packager    : CentOS BuildSystem <http://bugs.centos.org>
URL         : http://www.haproxy.org/
Summary     : HAProxy is a TCP/HTTP reverse proxy for high availability environments
Description :
HAProxy is a TCP/HTTP reverse proxy which is particularly suited for high
availability environments. Indeed, it can:
 - route HTTP requests depending on statically assigned cookies
 - spread load among several servers while assuring server persistence
   through the use of HTTP cookies
 - switch to backup servers in the event a main one fails
 - accept connections to special ports dedicated to service monitoring
 - stop accepting connections without breaking existing ones
 - add, modify, and delete HTTP headers in both directions
 - block requests matching particular patterns
 - persists clients to the correct application server depending on
   application cookies
 - report detailed status as HTML pages to authenticated users from a URI
   intercepted from the application

9.2、查看haproxy位置

rpm -ql haproxy

10、添加独立日志  vim /etc/rsyslog.conf 在底部添加以下配置信息

# haproxy
# Provides UDP syslog reception
$ModLoad imudp
$UDPServerRun 514  # 启动udp,启动端口后将作为服务器工作    
# # Provides TCP syslog reception
$ModLoad imtcp
$InputTCPServerRun 514  # 启动tcp监听端口    
local2.* /var/log/haproxy.log

10.1、重启日志服务

service rsyslog restart

10.2、vim haproxy.cfg 在global端中需要添加此行

log 127.0.0.1 local2

11、配置防火墙,允许80,1080端口访问,添加以下两行(测试可以直接关闭防火墙)

-A INPUT -m state --state NEW -m tcp -p tcp --dport 80 -j ACCEPT
-A INPUT -m state --state NEW -m tcp -p tcp --dport 1080 -j ACCEPT

11.1、重启防火墙

service iptables restart

15、编辑配置文件  vim /etc/haproxy/haproxy.cfg

15.1、一个最简单的http服务的配置

global
log 127.0.0.1 local2  # 定义日志
chroot /var/lib/haproxy
pidfile /var/run/haproxy.pid
maxconn 4000
user haproxy
group haproxy
daemon
stats socket /var/lib/haproxy/stats
defaults
mode http
log global
option httplog
option dontlognull
option http-server-close
option forwardfor except 127.0.0.0/8
option redispatch
retries 3
timeout http-request 10s
timeout queue 1m
timeout connect 10s
timeout client 1m
timeout server 1m
timeout http-keep-alive 10s
timeout check 10s
maxconn 3000

frontend webser #webser为名称
option forwardfor
bind *:80
default_backend webserver
backend webserver
balance roundrobin #使拥roundrobin 算法
server app1 192.168.1.120:80 check
server app2 192.168.1.121:80 check

15.2、haproxy统计页面的输出机制

frontend webser
log 127.0.0.1 local2
option forwardfor
bind *:80
default_backend webserver
backend webserver
cookie node insert nocache
balance roundrobin
server app1 192.168.0.120:80 check cookie node1 intval 2 rise 1 fall 2
server app2 192.168.0.121:80 check cookie node2 intval 2 rise 1 fall 2
listen statistics
bind *:8009 # 自定义监听端口
stats enable # 启用基于程序编译时默认设置的统计报告
stats auth admin:admin # 统计页面用户名和密码设置
stats uri /admin?stats # 自定义统计页面的URL,默认为/haproxy?stats
stats hide-version # 隐藏统计页面上HAProxy的版本信息
stats refresh 30s # 统计页面自动刷新时间
stats admin if TRUE #如果认证通过就做管理功能,可以管理后端的服务器
stats realm Hapadmin # 统计页面密码框上提示文本,默认为Haproxy\ Statistics

15.3、静态与动态请求分离

# web服务
frontend webservs

# 绑定80端口,域名不限
bind *:80

# 定义静态规则
acl url_static path_beg -i /static /images /javascript /stylesheets
acl url_static path_end -i .jpg .gif .png .css .js .html
acl host_static hdr_beg(host) -i img. imgs. video. videos. ftp. image. download.

# 定义动态规则
acl url_php path_end -i .php

# 后端请求归纳
use_backend static if url_static or host_static
use_backend dynamic if url_php

# 默认动态组
default_backend dynamic

# 静态请求处理
backend static
# 分配算法(轮流分配)
balance roundrobin
# 实际处理请求的服务器列表
server node1 192.168.0.120:80 check maxconn 3000

# 动态请求处理
backend dynamic
# 分配算法(轮流分配)
balance roundrobin
# 实际处理请求的服务器列表
server node1 192.168.0.121:80 check maxconn 3000
server node2 192.168.0.122:80 check maxconn 3000

15.4、http完整配置负载均衡

#---------------------------------------------------------------------
# Global settings
#---------------------------------------------------------------------
global
# to have these messages end up in /var/log/haproxy.log you will
# need to:
#
# 1) configure syslog to accept network log events. This is done
# by adding the '-r' option to the SYSLOGD_OPTIONS in
# /etc/sysconfig/syslog
#
# 2) configure local2 events to go to the /var/log/haproxy.log
# file. A line like the following can be added to
# /etc/sysconfig/syslog
#
# local2.* /var/log/haproxy.log
#
log 127.0.0.1 local2
chroot /var/lib/haproxy
pidfile /var/run/haproxy.pid
maxconn 4000
user haproxy
group haproxy
daemon
defaults
mode http
log global
option httplog
option dontlognull
option http-server-close
option forwardfor except 127.0.0.0/8
option redispatch
retries 3
timeout http-request 10s
timeout queue 1m
timeout connect 10s
timeout client 1m
timeout server 1m
timeout http-keep-alive 10s
timeout check 10s
maxconn 30000
listen stats
mode http
bind 0.0.0.0:1080
stats enable
stats hide-version
stats uri /haproxyadmin?stats
stats realm Haproxy\ Statistics
stats auth admin:admin
stats admin if TRUE
frontend http-in
bind *:80
mode http
log global
option httpclose
option logasap #不等待响应结束就记录日志,表示提前记录日志,一般日志会记录响应时长,此不记录响应时长
option dontlognull #不记录空信息
capture request header Host len 20 #记录请求首部的前20个字符
capture request header Referer len 60 #referer跳转引用,就是上一级
default_backend servers

frontend healthcheck
bind :1099 #定义外部检测机制
mode http
option httpclose
option forwardfor
default_backend servers
backend servers
balance roundrobin
server websrv1 192.168.0.120:80 check maxconn 2000
server websrv2 192.168.0.121:80 check maxconn 2000

15.5、MySQL完整配置负载均衡

#---------------------------------------------------------------------
# Global settings
#---------------------------------------------------------------------
global
# to have these messages end up in /var/log/haproxy.log you will
# need to:
#
# 1) configure syslog to accept network log events. This is done
# by adding the '-r' option to the SYSLOGD_OPTIONS in
# /etc/sysconfig/syslog
#
# 2) configure local2 events to go to the /var/log/haproxy.log
# file. A line like the following can be added to
# /etc/sysconfig/syslog
#
# local2.* /var/log/haproxy.log
#
log 127.0.0.1 local2
chroot /var/lib/haproxy
pidfile /var/run/haproxy.pid
maxconn 4000
user haproxy
group haproxy
daemon
defaults
mode tcp
log global
option httplog
option dontlognull
retries 3
timeout http-request 10s
timeout queue 1m
timeout connect 10s
timeout client 1m
timeout server 1m
timeout http-keep-alive 10s
timeout check 10s
maxconn 600
listen stats
mode http
bind 0.0.0.0:1080
stats enable
stats hide-version
stats uri /haproxyadmin?stats
stats realm Haproxy\ Statistics
stats auth admin:admin
stats admin if TRUE
frontend mysql
bind *:3306
mode tcp
log global
default_backend mysqlservers
backend mysqlservers
balance leastconn
server dbsrv1 192.168.1.120:3306 check port 3306 intval 2 rise 1 fall 2 maxconn 300
server dbsrv2 192.168.1.121:3306 check port 3306 intval 2 rise 1 fall 2 maxconn 300

16、启动haproxy服务

service haproxy start

17、查看统计页面

http://192.168.0.200:1080/haproxyadmin?stats
用户名和密码 admin

18、查看Haproxy日志

tail -f /var/log/haproxy.log

19、Haproxy配置信息 MASTR 与 BACKUP配置完全相同

20、访问服务器VIP地址会自动分配到不同服务器进行处理

http://192.168.0.200

1、关闭MASTER服务,BACKUP会自动升级为MASTER接替服务。启动MASTER的Keepalived服务,会自动切回原来的MASTER服务器。
2、关闭Haproxy服务,脚本会尝试启动Haproxy服务,如果启动失败则关闭Keepalived服务,让备用服务器接替。

到这里一个完整的web负载均衡服务器就配置完成了,Haproxy主要做服务分配,Keepalived做双机热备,Keepalived还可以配置成双主热备。在keepalived中检测Haproxy是否可用,不可用是否关闭Keepalived服务器,具体可以根据自己业务做处理。

阅读全文

CentOS yum remove卸载软件出错
发表于 2016-8-26 | 浏览(6547) | 服务器

卸载过程中的错误

error: %preun(XXX-1.5.4-3.el6.x86_64) scriptlet failed, exit status 1
Error in PREUN scriptlet in rpm package XXX要卸载的包名

解决方案

yum --setopt=tsflags=noscripts remove XXX要卸载的包名

查看软件包

rpm -ql XXX包名

阅读全文

CentOS使用Keepalived搭建双机热备
发表于 2016-8-23 | 浏览(7256) | 服务器

1、环境

CentOS6.5
keepalived-1.2.23

2、准备两台服务器和一个VIP IP

Master      192.168.0.109
Backup      192.168.0.110
VIP         192.168.0.200

3、安装gcc编译器,openssl,wget,如果已经安装则跳过

yum -y install openssl-devel ncurses-devel gcc gcc-c++ make rpm-build wget

4、目录创建

mkdir /data/soft
mkdir /data/nginx
mkdir /data/www

6、安装keepalived

cd /data/soft
wget http://www.keepalived.org/software/keepalived-1.2.23.tar.gz
tar -zxvf keepalived-1.2.23.tar.gz
cd keepalived-1.2.23
./configure --prefix=/usr/local/keepalived
make
make install

7、将keepalived做成启动脚务

cp /usr/local/keepalived/etc/rc.d/init.d/keepalived /etc/init.d/
cp /usr/local/keepalived/sbin/keepalived /usr/sbin/
cp /usr/local/keepalived/etc/sysconfig/keepalived /etc/sysconfig/
mkdir /etc/keepalived
cp /usr/local/keepalived/etc/keepalived/keepalived.conf /etc/keepalived/
chmod +x /etc/init.d/keepalived

8.1、MASTER配置文件,位置 /etc/keepalived/keepalived.conf

global_defs {
    notification_email
    {
        fuxiang.gong@qq.com
    }
    notification_email_from 17091959688@163.com
    smtp_server smtp.163.com
    stmp_connect_timeout 30
    router_id lnmp_node1
}

# 服务
vrrp_instance LNMP {
    state MASTER    #设置为主服务器
    interface eth0  #监测网络接口
    virtual_router_id 51  #主、备必须一样
    priority 100   #主机级别,值越大优先级越高
    advert_int 1   #VRRP Multicast广播周期秒数

    authentication {
        auth_type PASS  #VRRP认证方式,主备必须一致
        auth_pass 1111  #密码
    }
    virtual_ipaddress {
        192.168.0.200  #VRRP HA虚拟地址
    }
}

8.2、BACKUP配置文件

global_defs { 
    notification_email
    {
        fuxiang.gong@qq.com
    }
    notification_email_from 17091959688@163.com
    smtp_server smtp.163.com
    stmp_connect_timeout 30
    router_id lnmp_node2
}

# 服务
vrrp_instance LNMP {
    state BACKUP    #设置为备用服务器
    interface eth0  #监测网络接口
    virtual_router_id 51  #主、备必须一样
    priority 90   #主、备机取不同的优先级,主机值较大,备份机值较小,值越大优先级越高 
    advert_int 1   #VRRP Multicast广播周期秒数
    authentication {
        auth_type PASS  #VRRP认证方式,主备必须一致
        auth_pass 1111  #密码
    }
    virtual_ipaddress {
        192.168.0.200  #VRRP HA虚拟地址
    }
}

8.3、允许两台服务器vrrp包通过防火墙,如果关闭防火墙则跳过(两台服务器上都配置)

MASTER
  vim /etc/sysconfig/iptables
  -A INPUT -i eth0 -p vrrp -s 192.168.0.111 -j ACCEPT

BACKUP
  vim /etc/sysconfig/iptables
  -A INPUT -i eth0 -p vrrp -s 192.168.0.110 -j ACCEPT

重启防火墙
service iptables restart

9、keepalived操作,这里做启动操作

service keepalived start      启动
service keepalived stop       停止
service keepalived restart    重启

10、查看已经成功添加虚拟网卡

主服务器  ip a

1: lo: <LOOPBACK,UP,LOWER_UP> mtu 16436 qdisc noqueue state UNKNOWN 
    link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00
    inet 127.0.0.1/8 scope host lo
    inet6 ::1/128 scope host 
       valid_lft forever preferred_lft forever
2: eth0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast state UP qlen 1000
    link/ether 00:0c:29:d9:a8:bd brd ff:ff:ff:ff:ff:ff
    inet 192.168.0.109/24 brd 192.168.0.255 scope global eth0
    inet 192.168.0.200/32 scope global eth0
    inet6 fe80::20c:29ff:fed9:a8bd/64 scope link 
       valid_lft forever preferred_lft forever

BACKUP服务器  ip a

1: lo: <LOOPBACK,UP,LOWER_UP> mtu 16436 qdisc noqueue state UNKNOWN 
    link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00
    inet 127.0.0.1/8 scope host lo
    inet6 ::1/128 scope host 
       valid_lft forever preferred_lft forever
2: eth0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast state UP qlen 1000
    link/ether 00:0c:29:d9:8f:72 brd ff:ff:ff:ff:ff:ff
    inet 192.168.0.110/24 brd 192.168.0.255 scope global eth0
    inet6 fe80::20c:29ff:fed9:8f72/64 scope link 
       valid_lft forever preferred_lft forever

11、安装nginx,详细步骤查看博客中其它nginx安装方法文章

12、把nginx访问指向 /data/www目录,在 /data/www 目录中创建index.html内容分别写 MASTER, BACKUP(通过浏览器访问 192.168.0.200 ),默认MASTER,如果关闭MASTER keepalived服务,BACKUP服务器将自动升级为MASTER提供服务。开启MASTER keepalived服务,自动切换MASTER服务器来服务,BACKUP降级为备用服务。

13、查看日志

tail -f /var/log/messages

阅读全文

VMware完整克隆虚拟机后连不上网络
发表于 2016-8-19 | 浏览(7486) | 服务器

完整克隆之后却不能连接到虚拟机了,产生这个问题的原因是克隆之后,新的克隆副本的网卡信息被修改了,所以需要手动设置下。原先使用的eth0网卡已经被使用了所以不能使用。

1、修改 70-persistent-net.rules 文件(删除旧网卡信息,使用新网卡信息)

vi /etc/udev/rules.d/70-persistent-net.rules

上面就是克隆后的文件信息,如果不是克隆的,红色部分没有。因为克隆了,所以就多出来红色部分的了。因为使用的还是旧网卡信息,所以导致了xshell连接不上。这里我们删除黄色框中东西,并将红色最后的eth1改成eth0。同时记住 ATTR{address}的值。

1.jpg

2、修改 ifcfg-eth0文件(将原来的旧网卡的HWADDR改成新网卡的HWADDR)

vi /etc/sysconfig/network-scripts/ifcfg-eth0

HWADDR的值就是上图中ATTR{addres}的值,然后设置一下想要的IP。reboot重启后就可以使用xshell连接了,注释黄色一行,红色一行为新添加。

2.jpg

3、重启服务器即可

init 6

阅读全文

CentOS下PHP7安装mysql扩展
发表于 2016-7-12 | 浏览(9889) | 服务器

从PHP7开始mysql扩展正式移除,如果系统db需要mysql方式操作数据库,我们可以手动安装(建议使用PDO操作数据库)

1、下载mysql扩展包

git clone https://github.com/php/pecl-database-mysql     mysql   --recursive
cd mysql
phpize
./configure --with-php-config=/usr/local/php/bin/php-config
make
make install

2、vim /etc/php.ini 添加扩展包

extension=mysql.so

保存后重启php-fpm服务

php -m 查看就有了

阅读全文

Nginx支持htpasswd 访问需要用户和密码认证
发表于 2016-5-26 | 浏览(5700) | 服务器

准备、创建脚本目录

/data/server/nginx/conf/htpasswd

一、创建文件 htpasswd.sh  内容如下

#!/bin/bash

PATH=/bin:/sbin:/usr/bin:/usr/sbin:/usr/local/bin:/usr/local/sbin:~/bin
export PATH

echo "========================================"
echo "# A tool like htpasswd for Nginx       #"
echo "#--------------------------------------#"
echo "# Author:Devil http://gongfuxiang.com  #"
echo "========================================"

# file path
dir=$(pwd);
user="user.conf";
userfile="${dir}/${user}"

#set username
    username=""
    read -p "Please input username:" username
    if [ "$username" = "" ]; then
            echo "Error:username can't be NULL!"
            exit 1
    fi
    echo "==========================="
    echo "username was: $username"
    echo "==========================="

#set password
    unpassword=""
    read -p "Please input the Password:" unpassword
    if [ "$unpassword" = "" ]; then
            echo "Error:Password can't be NULL!"
            exit 1
    fi
    echo "==========================="
    echo "Password was: $unpassword"
    echo "==========================="
    password=$(perl -e 'print crypt($ARGV[0], "pwdsalt")' $unpassword)

# create file
if [ ! -f ${userfile} ]; then
  touch ${userfile} 

  echo "Create Auth file......"
fi

# delete original user
for file in $userfile;
do         
    sed -i "/^$MON[\t ]*$username/d" $file  
done

# add user
echo $username:$password >> $userfile
if [ $? == 0 ]; then
    echo $username:$password;
    echo "user add success, Auth file  path:${userfile}."
else
        echo "error"
        exit 1
fi

二、修改虚拟机配置文件 server 中添加以下配置信息

auth_basic "Authorized users only";
auth_basic_user_file /data/server/nginx/conf/htpasswd/user.conf;

三、添加授权用户(根据提示输入用户名和密码)

sh htpasswd.sh

阅读全文

Shell脚本发布系统
发表于 2015-12-18 | 浏览(6322) | 服务器
#!/bin/sh

# desc      项目上线脚本
# time      2015-12-18
# author    Devil
# version   2.0

echo "---------- 准备中... ----------"
user=`whoami`
date=$(date +%Y%m%d%H%M%S)
time=$(date +%Y-%m-%d" "%H:%M:%S)
name="fangao"
tar_name="${date}_${name}.tar.gz"
test_dir="test/test_app"
bak_dir="bak"
bak_log_dir="bak_log/"$(date +%Y/%m)
date_name=$(date +%d)".txt"
time_start=$(date +%s)

# 日志写入方法
function LogInsert()
{
    echo "user:${user}, date:${time}, msg:${1}, code:${2}" >> "${bak_log_dir}/${date_name}"
    if [ $2 == "success" ]
    then
        echo -e "\e[1;32m ${1} \e[0m"
    else
        echo -e "\e[1;31m ${1} \e[0m"
        exit
    fi
}

# 恢复脚本是否正在运行
is_restore=$(ps -ef | grep "restore" | grep -v grep | wc -l)
if [ $is_restore != 0 ]
then
        LogInsert "恢复脚本正在运行,请先停止再上线项目" "error"
fi

# 当前脚本是否在运行多个
is_online=$(ps -ef | grep "online" | grep -v grep | wc -l)
if [ $is_online -gt 2 ]
then
        LogInsert "当前脚本正在多处运行,请确认一人操作" "error"
fi

# 备份路径不存在则创建
if [ ! -x "$bak_dir" ]
then
    mkdir -p $bak_dir
fi

# 日志目录不存在则创建
if [ ! -x "$bak_log_dir" ]
then
    mkdir -p $bak_log_dir
fi

# 需要上线的目录不存在则退出
if [ ! -x "$test_dir" ]
then
    LogInsert "$test_dir 目录不存在" "error"
fi

echo "---------- 准备结束 ----------"

echo -e
echo "---------- 确定需要上线么?确定:Y  取消:N ----------"
read start_state
if [[ $start_state != "Y" ]]
then
    LogInsert "你取消了操作" "error"
fi

echo -e
echo "---------- 开始压缩,请稍候... ----------"
tar -cf $tar_name --exclude=img --exclude=audio --exclude=tpl_c --exclude=db_log $name
if [ $? == 0 ]
then
    LogInsert "压缩成功" "success"
    echo "压缩包文件名 ${tar_name}" >> "${bak_log_dir}/${date_name}"
else
    LogInsert "压缩失败" "error"
fi
echo "---------- 压缩结束 ----------"

echo  -e
echo "---------- 开始移动压缩包,请稍候... ----------"
mv $tar_name $bak_dir
if [ $? == 0 ]
then
    LogInsert "压缩包移动成功" "success"
else
    LogInsert "压缩包移动失败" "error"
fi
echo "---------- 压缩包移动结束 ----------"

echo  -e
echo "---------- 开始更新项目代码,请稍候... ----------"
cd $test_dir
git checkout master
git pull origin master
if [ $? == 0 ]
then
    echo -e "\e[1;32m git更新master成功 \e[0m"
else
    echo -e "\e[1;31m git更新失败 \e[0m"
    exit
fi
echo "---------- 项目代码更新结束 ----------"

echo -e
echo "---------- 确定迁移项目么?确定:Y  取消:N ----------"
read success
if [[ $success != "Y" ]]
then
        echo -e "\e[1;31m 你终止了迁移操作 \e[0m"
    exit
fi
echo "---------- 开始迁移项目,请稍候... ----------"
cp -r `ls | grep -v config | xargs` ../../$name
cp_state=$?
cd ../../
if [ $cp_state == 0 ]
then
    time_total=$[$(date +%s)-$time_start]
    LogInsert "项目迁移成功 [耗时:${time_total}秒]" "success"
else
    LogInsert "项目迁移失败" "error"
fi
echo "---------- 项目迁移结束 ----------"
echo -e
echo -e "\e[1;36m config目录下的所有文件都未迁移,如有文件需要迁移,请手动操作 \e[0m"
echo -e

阅读全文

Linux常用命令
发表于 2015-12-14 | 浏览(5997) | 服务器
exit  或  按Ctrl+D组合键   退出管理。
shutdown now   系统关机。
init 0  关机
init 3  切换到黑屏命令模式
init 5  切换到图形模式
init 6  重启
clear   清屏
su    管理员与普通用户切换,操作:su 会员名称
ifconfig              查看本机ip
setup      ip dns 修改
whereis 命令名称    查看在那个目录位置

cd     进入目录命令。 操作:cd /***/***
cd ..  返回上一个目录,表示父目录。
ls     查看当前所在目录下的文件与目录。 操作:ls
ls -a    查看当前目录下所有文件包含隐藏文件。
ls *.txt  意思是只查看当前txt的文件类型。
ls ?.txt  意思是只显示一个名称的文件
pwd    查看当前所在目录。 操作:pwd
ls -al /home  操作加命令的方式

tail   查看文件内容

cp     复制文件命令。 进入文件所在目录后操作或者直接在根目录这样操作:cp /文件操作:cp /路径/路径/文件名称 / 路径/路径名称 /需要存放的目录/目录。  空格然后一点就是复制到当前目录。如:cp /a/b/c/88.txt .

fdisk /dev/sdb  m  n  p  1  +200M 按n开始安装第二个磁盘。
fdisk -l  查看磁盘分区
mkfs -t ext3     磁盘格式化。操作:mkfs -t ext3 /dev/磁盘名称
mount    磁盘挂载, 操作:mount /dev/磁盘名称 /mnt/需要挂载的文件名
umount   磁盘挂载卸载,操作:umount /dev/磁盘名称
开机自动挂载 vim /etc/fstab
/dev/vdb1 /dbdata ext3 defaults 0 0

touch      创建空文件。 操作:touch 文件名称
mkdir      创建目录。 操作:mkdir 目录名称。
mkdir -p   直接创建多个目录 如:mkdir -p /a/aa/aaa/aaaa

rmdir    删除目录。 操作:rmdir 目录名称
rm -fr  直接强制删除 不会提示 可以直接删除多层目录
rm -f   删除文件命令。 操作:rm -f /文件名称
mv      移动文件,文件或目录更名。操作:mv t.txt tt.txt
vim 文件名.txt   编辑器,或者打开文件编辑

先按esc键再输入命令
:w        保存
:q        退出
:q!       放弃修改退出
:wq       保存+退出
shutdown-r now     重启
shutdown -r+15     15分钟后关机
reboot       挂起
man ls       获得帮助,获得帮助手册。帮助手册返回按 q
history      命令操作记录
history -c   清空操作的所有命令记录。

lynx localhost         测试  返回按Q
service httpd start    服务器启动
service httpd restart  服务器重启

service vsftpd start     FTP开启。
service vsftpd restart   FTP重启
service network restart   重启网卡。

anonymous       查看FTP
service smb start  测试服务器
service mysqld start   开启myspl 数据库
myspl -u root -p      登录数据库
cd /var/www/html      进入PHP
vim index.php         打开文件添加内容

tab键    自动补齐
反斜杠“\”强制换行
快捷键:ctrl+u   清空
快捷键:ctrl+l   清屏
快捷键:ctrl+k   清空至尾行
快捷键:ctrl+c   奇效本次命令编辑
ls > **.txt      重定向输出
wc < /etc/passwd 重定向输入
less    查看文件内容,操作:less 文件名称

useradd -d 创建FTP用户直接给目录登录权限
操作:useradd -d 目录名 会员名
useradd    创建用户,用户都在在home目录下。
passwd    设置用户密码。操作:passwd 用户名 回车后还要按两次密码。
userdel -r   删除会员及所有数据表

setup     图形查看

:set nu     显示文本行数
:set nonu   去掉文本行数
groupadd   创建用户组
gpasswd    往用户组里面添加一个用户操作:gpasswd -a 会员名 用户名名。

tar -czvf t.tar文件或目录名 -C /       解压缩
tar -xzvf t.tar -C /需要存放的目录     解压
unzip 压缩包名称  zip格式解压

chmod   设置文件或目录权限,操作:chmod 777 文件或目录名称。

/etc/resolv.conf
/etc/sysconfig/network
/etc/sysconfig/network-scripts/ifcfg-eth0   网关IP配置文件
/etc/sysconfig/network    网卡配置文件
/etc/resolv.conf       DNS配置文件 ip 配置
ggVG   d   清空vim 文件里面的所有内容  恢复 按 u

cat /dev/null > log.txt      清空文件里面的所有内容

grep -rn "hello" ./     在当前目录下(包括子目录)查找所有文件包含hello的文件
find / -name hello.txt  查看文件
find / -name hello -type d   查看目录所在位置
netstat -tnlp  查看正在运行的服务

硬盘管理
fdisk -l  查看还未挂载的硬盘
monut 需要挂载的硬盘 指定挂载的目录名称
如: mount test data
umount 需要被卸载硬盘目录名称
如: umount test

进程查看
 netstat -ntlp | grep 80     //查看指定进程
killall nginx    //杀死进程

vim内容替换
:s/hello/newhello/g
:%s/hello/newhello/g

在指定目录下所有文件中的内容替换
sed -i "s/content/newcontent/g" `grep content -rl /dir/path`
原始字符串 content
新的字符串 newcontent
替换的路径 /dir/path

查看进程
    所有进程:ps -ef
    指定nginx进程:ps -ef | grep nginx

杀死进程
    kill 进程号(如:kill 8899)

查看负载(进程,内存,硬盘,CPU信息,运行时间)
    top

查看占用CPU最高的5个进程
ps -aux | sort -k3nr | head `5`

查看前10个占用内存最高的程序
ps aux | sort -k4,4nr | head -n 10

查看网路请求
netstat -n | awk '/^tcp/ {++S[$NF]} END {for(a in S) print a, S[a]}'

正常数据传输状态-并发
    netstat -nat|grep ESTABLISHED|wc -l
    6945

无连接是活动的或正在进行
    netstat -nat|grep CLOSED|wc -l
    0

服务器在等待进入呼叫
    netstat -nat|grep LISTEN|wc -l
    9

一个连接请求已经到达,等待确认
    netstat -nat|grep SYN_RECV|wc -l
    236

应用已经开始,打开一个连接
    netstat -nat|grep SYN_SENT|wc -l
    56

应用说它已经完成
    netstat -nat|grep FIN_WAIT1|wc -l
    1400

另一边已同意释放
    netstat -nat|grep FIN_WAIT2|wc -l
    422

等待所有分组死掉
    netstat -nat|grep ITMED_WAIT|wc -l
    0

两边同时尝试关闭
    netstat -nat|grep CLOSING|wc -l
    64

另一边已初始化一个释放,处理完毕,等待超时结束的请求数
    netstat -nat|grep TIME_WAIT|wc -l
    56090

等待所有分组死掉
    netstat -nat|grep LAST_ACK|wc -l
    3627

阅读全文

CentOS设置自动连接网络
发表于 2015-8-31 | 浏览(7417) | 服务器

vi /etc/sysconfig/network-scripts/目录下 ifcfg-eth0文件

ONBOOT=                    yes         //自动连接网络
DEVICE=                 eth0        //由eth0来启动
BOOTPROTO=              dhcp        //获取IP的方式是自动获取,static是固定IP,none是手动
TYPE=                   Ethernet    //网络类型

重启网络

service network restart

阅读全文

TOP