BlueXIII's Blog

热爱技术,持续学习

0%

防火墙配置

1
2
3
4
firewall-cmd --direct --permanent --add-rule ipv4 filter INPUT 0 --in-interface ens33 --destination 224.0.0.18 --protocol vrrp -j ACCEPT
firewall-cmd --zone=public --add-port=8080/tcp --permanent
firewall-cmd --zone=public --add-port=18010/tcp --permanent
firewall-cmd --reload

1
2
systemctl disable firewalld 
systemctl stop firewalld

关闭selinux

1
2
3
4
vi /etc/sysconfig/selinux
SELINUX=disabled
setenforce 0
getenforce

启动测试WEB服务

1
yum install nc

vi index.html

1
2
3
4
5
6
7
8
9
10
<!doctype html>
<html>
<head>
<meta charset="utf-8">
<title>Test Page</title>
</head>
<body>
<h1>It Works!</h1>
</body>
</html>
1
while true;do { printf '%b\r\n' 'HTTP/1.1 200 OK' '%b\r\n';cat index.html; }|nc -l 8080;done

安装haproxy

1
yum install -y haproxy

配置haproxy

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
vi /etc/haproxy/haproxy.cfg 

global
user haproxy
group haproxy
daemon
maxconn 4096
defaults
mode tcp
balance roundrobin #leastconn
timeout client 30000ms
timeout server 30000ms
timeout connect 3000ms
retries 3
frontend fr_server1
bind 0.0.0.0:18010
default_backend bk_server1
backend bk_server1
server srv1 10.211.55.11:8080
server srv2 10.211.55.12:8080
listen stats
mode http
bind *:9090
stats enable
stats refresh 3s
stats uri /
stats auth admin:123456
stats admin if TRUE

启动haproxy

1
2
systemctl enable haproxy
systemctl start haproxy

安装keepalived

1
yum install keepalived ipset-libs libnl3-devel psmisc

配置keepalived

vi /etc/keepalived/keepalived.conf

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
vrrp_script chk_proc {
script "killall -0 haproxy" # check the haproxy process
interval 2 # every 2 seconds
weight 2 # add 2 points if OK
}

vrrp_instance VI_1 {
interface eth0 # interface to monitor
state MASTER # MASTER on haproxy1, BACKUP on haproxy2
virtual_router_id 51
priority 101 # 101 on haproxy1, 100 on haproxy2
virtual_ipaddress {
10.211.55.100/24 # virtual ip address
}
track_script {
chk_proc
}
}

启动keepalived

1
2
systemctl enable keepalived
systemctl start keepalived

查看日志

1
tail -f /var/log/messages

参考文档

全局配置

1
2
3
4
5
vi /etc/systemd/system.conf 

DefaultLimitCORE=infinity
DefaultLimitNOFILE=10000
DefaultLimitNPROC=10000

注意system.conf修改后需要重启系统才会生效。

服务方式

需要修改systemd服务配置

以httpd.service为例:

1
2
3
4
5
6
7
8
9
10
11
cd /etc/systemd/system
mkdir httpd.service.d

vi limits.conf
[Service]
LimitNOFILE=20000

cat /etc/systemd/system/httpd.service.d/limits.conf

systemctl stop httpd
systemctl start httpd

注意,重启服务时要先stop再start,不要restart

手工启动进程方式

可以在启动脚本之前加入ulimit命令手工指定
以netcat为例:

1
2
3
4
vi start.sh

ulimit -n 20000
while true;do { printf '%b\r\n' 'HTTP/1.1 200 OK' '%b\r\n';cat index.html; }|nc -l 8080;done

验证

1
cat /proc/进程号/limits

insert备份

1
mysqldump -uroot -p vibeauth > vibeauth.sql

insert恢复

1
mysql -uroot -p test < vibeauth.sql

txt备份

1
mysqldump -uroot -p -T. vibeauth --fields-enclosed-by=\" --fields-terminated-by=,

txt恢复

1
2
mysql -uroot -p test < app_info.sql
mysqlimport --user=root --password test --fields-enclosed-by=\" --fields-terminated-by=, ~/Downloads/app_info.txt

mysqldump常用参数

1
2
3
4
--lock-tables
--lock-all-tables
--no-data
--no-create-info

myisam物理备份

1
mysqlhotcopy

innodb物理备份

使用ibbackup收费工具

官网

https://docs.minio.io/

macOS brew安装

1
2
brew install minio/stable/minio
brew install minio/stable/mc

macOS下brew services环境变量配置

vi /usr/local/opt/minio/homebrew.mxcl.minio.plist
新增

1
2
3
4
5
6
<dict>
<key>MINIO_ACCESS_KEY</key>
<string>admin</string>
<key>MINIO_SECRET_KEY</key>
<string>yourpass</string>
</dict>

mc客户端操作

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
ls       列出文件和文件夹。
mb 创建一个存储桶或一个文件夹。
cat 显示文件和对象内容。
pipe 将一个STDIN重定向到一个对象或者文件或者STDOUT。
share 生成用于共享的URL。
cp 拷贝文件和对象。
mirror 给存储桶和文件夹做镜像。
find 基于参数查找文件。
diff 对两个文件夹或者存储桶比较差异。
rm 删除文件和对象。
events 管理对象通知。
watch 监听文件和对象的事件。
policy 管理访问策略。
session 为cp命令管理保存的会话。
config 管理mc配置文件。
update 检查软件更新。
version 输出版本信息。

CentOS安装

1
2
3
4
5
cd /usr/local/bin
wget https://dl.minio.io/server/minio/release/linux-amd64/minio
wget https://dl.minio.io/client/mc/release/linux-amd64/mc
chmod +x minio
chmod +x mc

运行服务端

1
2
3
minio server /data

minio server --config-dir=/usr/local/etc/minio --address=:9000 //data

mc客户端配置

1
2
3
4
5
6
mc config host add myminio http://10.37.129.11:9000 6FN56FQD3BBYYFHRV8CV 99HwhtPhIpVph+eyNh5ouRcorCBAvGUiVM3LXtuq

mc mb myminio/testbucket # 创建桶
mc cp io.out myminio/testbucket # 拷贝测试文件
mc ls myminio/testbucket # 列出目录
mc policy public myminio/testbucket # 设置公开权限

纠编码方式运行

1
minio server /data1 /data2 /data3 /data4

分布式运行

分布式Minio单租户存在最少4个盘最多16个盘的限制(受限于纠删码)

1
2
3
4
export MINIO_ACCESS_KEY=admin
export MINIO_SECRET_KEY=yourpass
minio server http://10.37.129.11/export1 http://10.37.129.11/export2 \
http://10.37.129.12/export1 http://10.37.129.12/export2

cpu属性值说明

1
2
3
4
5
6
7
%user:CPU处在用户模式下的时间百分比。
%nice:CPU处在带NICE值的用户模式下的时间百分比。
%system:CPU处在系统模式下的时间百分比。
%iowait:CPU等待输入输出完成时间的百分比。
%steal:管理程序维护另一个虚拟处理器时,虚拟CPU的无意识等待时间百分比。
%idle:CPU空闲时间百分比。
注:如果%iowait的值过高,表示硬盘存在I/O瓶颈,%idle值高,表示CPU较空闲,如果%idle值高但系统响应慢时,有可能是CPU等待分配内存,此时应加大内存容量。%idle值如果持续低于10,那么系统的CPU处理能力相对较低,表明系统中最需要解决的资源是CPU。

disk属性值说明

1
2
3
4
5
6
7
8
9
10
11
12
13
rrqm/s: 每秒进行 merge 的读操作数目。即 rmerge/s
wrqm/s: 每秒进行 merge 的写操作数目。即 wmerge/s
r/s: 每秒完成的读 I/O 设备次数。即 rio/s
w/s: 每秒完成的写 I/O 设备次数。即 wio/s
rsec/s: 每秒读扇区数。即 rsect/s
wsec/s: 每秒写扇区数。即 wsect/s
rkB/s: 每秒读K字节数。是 rsect/s 的一半,因为每扇区大小为512字节。
wkB/s: 每秒写K字节数。是 wsect/s 的一半。
avgrq-sz: 平均每次设备I/O操作的数据大小 (扇区)。
avgqu-sz: 平均I/O队列长度。
await: 平均每次设备I/O操作的等待时间 (毫秒)。
svctm: 平均每次设备I/O操作的服务时间 (毫秒)。
%util: 一秒中有百分之多少的时间用于 I/O 操作,即被io消耗的cpu百分比

查看TPS和吞吐量

1
iostat -d -k 1 1

查看设备使用率(%util)和响应时间(await)

1
iostat -d -x -k 1 1

参考文档

官网下载

http://jmeter.apache.org/download_jmeter.cgi

配置修改

  1. 停止防火墙
    服务器部署时,可临时停止防火墙

    1
    systemctl stop firewalld.service 
  2. 编辑bin/jmeter,新增HEAP参数
    如压测文件较大,例如报文中包含BASE64图片或视频,则需调大HEAP参数
    vi jmeter

    1
    HEAP="-Xms4096m -Xmx4096m"

    单机测试

    图形模式仅用来配置.jmx文件,正式压测时需要在服务器中使用命令行方式启动

    1
    ../bin/jmeter.sh -n -t test.jmx -l result.jtl

    分布式测试

    开启X11

    Master需要和Slave在同一网段下,如果条件受限,则需要将Master部署在服务器中,并开启X11转发

  3. 安装依赖

    1
    yum install -y xorg-x11-server-Xorg xorg-x11-xauth xorg-x11-apps
  4. sshd_config

    1
    grep -i X11Forwarding /etc/ssh/sshd_config

    保证值为YES

  5. SSH登录并测试

    1
    2
    ssh -Y user@host  # -Y参数开启信任的X11转发
    xclock #测试X11转发是否成功
  6. 解决英文X11方块字乱码

    1
    yum -y install fontforge

    Master修改

  7. vi jmeter.properties

    1
    remote_hosts=172.20.100.127:1099,172.20.100.128:1099,172.20.100.129:1099,172.20.100.130:1099,172.20.100.131:1099
  8. 启动GUI

    1
    ./jmeter.sh

    Slave修改

  9. 修改bin/jmeter.properties
    vi jmeter.properties

    1
    2
    server_port=1099
    server.rmi.ssl.disable=true   
  10. 启动bin/jmeter-server

    1
    2
    export RMI_HOST_DEF=-Djava.rmi.server.hostname=172.20.100.130 #本机IP
    ./jmeter-server

    参考文档

官网及下载

http://nmon.sourceforge.net/pmwiki.php

简易启动参数

1
./nmon  -f -t -r test -s 10 -c 30

-f :按标准格式输出文件名称:_YYYYMMDD_HHMM.nmon
-t 输出最耗资源的进程
-s :每隔n秒抽样一次
-c :取出多少个抽样数量

参数详细说明

https://www.ibm.com/support/knowledgecenter/zh/ssw_aix_72/com.ibm.aix.cmds4/nmon.htm

GUI模式说明

1
2
3
4
5
6
7
8
9
10
11
12
q : 停止并退出 Nmon
h : 查看帮助
c : 查看 CPU 统计数据
m : 查看内存统计数据
d : 查看硬盘统计数据
k : 查看内核统计数据
n : 查看网络统计数据
N : 查看 NFS 统计数据
j : 查看文件系统统计数据
t : 查看高耗进程
V : 查看虚拟内存统计数据
v : 详细模式

nmon analyser

开启Profiling

1
2
3
4
5
6
7
show variables like '%profiling%';
set profiling=1;
执行SQL
set profiling=0;

show profiles;
show profile cpu,block io for query 2;

执行计划

1
2
3
4
5
6
7
explain 
select a.id,b.real_name from order_info a
left join person_info b on b.id=a.person_info_id

explain
select a.id,b.id from auth_info a
left join order_info b on b.id=a.order_id

查表锁

1
2
3
show status like 'table%';
Table_locks_immediate 产生表级锁定的次数
Table_locks_waited 表级锁定争用发生的等待次数

查行锁

1
2
3
4
5
6
7
8
show status like 'innodb_row_lock%';
Innodb_row_lock_current_waits 正在等待锁定的数量
Innodb_row_lock_time 锁定总时长
Innodb_row_lock_time_avg 平均等待时间
Innodb_row_lock_time_max 最长等待时间
Innodb_row_lock_waits 总共等待次数

show innodb status;

QueryCache

1
2
show variables like '%query_cache%';
show status like 'Qcache%';

网络链接

1
2
3
4
5
6
7
8
9
10
11
12
13
show variables like '%open_files_limit%';
show variables like '%max_connections%';
set GLOBAL max_connections=500;

show variables like '%thread_cache_size%';
set GLOBAL thread_cache_size=50;


show status like 'connections';
show status like '%thread%';
show processlist;
mysqladmin -uroot -p processlist
mysqladmin -uroot -p status

my.cnf顺序

  • /etc/my.cnf
  • /etc/mysql/my.cnf
  • /usr/local/mysql/etc/my.cnf
  • ~/.my.cnf

参考文档

参考文档

https://myanbin.github.io/post/openldap-in-centos-7.html

安装openldap

1
2
3
4
5
yum install -y openldap-servers openldap-clients
cp /usr/share/openldap-servers/DB_CONFIG.example /var/lib/ldap/DB_CONFIG
chown ldap. /var/lib/ldap/DB_CONFIG
systemctl enable slapd
systemctl start slapd

生成密码

1
2
3
4
5
6
7
8
9
slappasswd

vim chrootpw.ldif
dn: olcDatabase={0}config,cn=config
changetype: modify
add: olcRootPW
olcRootPW: {SSHA}KS/bFZ8KTmO56khHjJvM97l7zivH1MwG

ldapadd -Y EXTERNAL -H ldapi:/// -f chrootpw.ldif

导入基本的Schema

1
2
3
ldapadd -Y EXTERNAL -H ldapi:/// -f /etc/openldap/schema/cosine.ldif
ldapadd -Y EXTERNAL -H ldapi:/// -f /etc/openldap/schema/nis.ldif
ldapadd -Y EXTERNAL -H ldapi:/// -f /etc/openldap/schema/inetorgperson.ldif

配置LDAP顶级域

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
vim chdomain.ldif
dn: olcDatabase={1}monitor,cn=config
changetype: modify
replace: olcAccess
olcAccess: {0}to * by dn.base="gidNumber=0+uidNumber=0,cn=peercred,cn=external,cn=auth"
read by dn.base="cn=Manager,dc=yourcompany,dc=cn" read by * none

dn: olcDatabase={2}hdb,cn=config
changetype: modify
replace: olcSuffix
olcSuffix: dc=yourcompany,dc=cn

dn: olcDatabase={2}hdb,cn=config
changetype: modify
replace: olcRootDN
olcRootDN: cn=Manager,dc=yourcompany,dc=cn

dn: olcDatabase={2}hdb,cn=config
changetype: modify
add: olcRootPW
olcRootPW: {SSHA}EMaQFVOLPja2sx4F4VWW4ANE27PwDlPD

dn: olcDatabase={2}hdb,cn=config
changetype: modify
add: olcAccess
olcAccess: {0}to attrs=userPassword,shadowLastChange by
dn="cn=Manager,dc=yourcompany,dc=cn" write by anonymous auth by self write by * none
olcAccess: {1}to dn.base="" by * read
olcAccess: {2}to * by dn="cn=Manager,dc=yourcompany,dc=cn" write by * read



ldapmodify -Y EXTERNAL -H ldapi:/// -f chdomain.ldif

创建组织与角色

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
vim basedomain.ldif
dn: dc=yourcompany,dc=cn
objectClass: top
objectClass: dcObject
objectclass: organization
o: yourcompany Group
dc: yourcompany

dn: cn=Manager,dc=yourcompany,dc=cn
objectClass: organizationalRole
cn: Manager

dn: ou=People,dc=yourcompany,dc=cn
objectClass: organizationalUnit
ou: People

dn: ou=Group,dc=yourcompany,dc=cn
objectClass: organizationalUnit
ou: Group



ldapadd -x -D cn=Manager,dc=yourcompany,dc=cn -W -f basedomain.ldif

安装phpLDAPadmin

1
2
yum -y install epel-release
yum --enablerepo=epel -y install phpldapadmin
1
2
vim /etc/phpldapadmin/config.php
$servers->setValue('login','attr','dn');
1
2
vim /etc/httpd/conf.d/phpldapadmin.conf
Allow All

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
#!/bin/sh

### BEGIN INIT INFO
# Provides: redsocks
# Required-Start: $network
# Required-Stop: $network
# Default-Start: 2 3 4 5
# Default-Stop: 0 1 6
# Short-Description: Start redsocks daemon.
### END INIT INFO

SERVICE_NAME=redsocks
SERVICE_PATH=/usr/local/bin/redsocks
SERVICE_PARAM="-c /etc/redsocks.conf"
SERVICE_HOME=/home/pi
SERVICE_USER=pi
SERVICE_PID_FILE=/var/run/${SERVICE_NAME}.pid

start() {
start-stop-daemon --start \
--chdir "${SERVICE_HOME}" \
--chuid "${SERVICE_USER}" \
--user "${SERVICE_USER}" \
-b -m -p "${SERVICE_PID_FILE}" \
--exec ${SERVICE_PATH} -- ${SERVICE_PARAM}
}

stop() {
start-stop-daemon --stop \
--chdir "${SERVICE_HOME}" \
--chuid "${SERVICE_USER}" \
--user "${SERVICE_USER}" \
-p "${SERVICE_PID_FILE}"
}

case "$1" in
start)
start
;;
stop)
stop
;;
restart)
stop
start
;;
status)
# code to check status of app comes here
# example: status program_name
;;
*)
echo "Usage: $0 {start|stop|status|restart}"
esac

exit 0