xml地图|网站地图|网站标签 [设为首页] [加入收藏]
Redis安装配备
分类:操作系统

一、Redis安装

澳门新葡亰手机版,本文介绍使用 OpenVPNCentOSUbuntu 上搭建基本的VPN服务的方法.

  Linux系统出现了性能问题,一般我们可以通过top、iostat、free、vmstat等命令来查看初步定位问题。其中iostat可以给我们提供丰富的IO状态数据。

下载

wget http://download.redis.io/releases/redis-3.2.12.tar.gz

生成所需密钥和证书

OpenVPN 使用 Easy-RSA 来管理PKI所需要的密钥和证书. Easy-RSA 现在有2和3两个主要版本, 使用方式略有不同. 下面分别介绍用法. 可以根据自己使用的版本选择一种来操作.

一、查询命令基本使用

解压

上传至 /usr/local
tar xzf redis-3.2.12.tar.gz
mv redis-3.2.12 redis

Easy-RSA 2

1、命令介绍

$iostat -d -k 1 10

  -d 表示,显示设备(磁盘)使用状态;

  -k某些使用block为单位的列强制使用Kilobytes为单位;

  1 10表示,数据显示每隔1秒刷新一次,共显示10次。

 

安装

cd redis
make

安装

在Ubuntu 16.04上使用 apt 安装的是Easy-RSA 2:

# apt-get install -y easy-rsa

安装完成后, 可以在 /usr/share/easy-rsa/ 目录下找到生成密钥对和证书的脚本. 这些脚本会将生成的密钥和证书放在当前目录, 为了安全, 我们将这些脚本复制到 /root 目录下:

# cp -r /usr/share/easy-rsa /root

2、用法展示

# iostat -x 1 10
Linux 2.6.18-92.el5xen    02/03/2009
avg-cpu:  %user   %nice %system %iowait  %steal   %idle
           1.10    0.00    4.82   39.54    0.07   54.46
Device:         rrqm/s   wrqm/s   r/s   w/s   rsec/s   wsec/s avgrq-sz avgqu-sz   await  svctm  %util
sda               0.00     3.50  0.40  2.50     5.60    48.00    18.48     0.00    0.97   0.97   0.28
sdb               0.00     0.00  0.00  0.00     0.00     0.00     0.00     0.00    0.00   0.00   0.00
sdc               0.00     0.00  0.00  0.00     0.00     0.00     0.00     0.00    0.00   0.00   0.00
sdd               0.00     0.00  0.00  0.00     0.00     0.00     0.00     0.00    0.00   0.00   0.00
sde               0.00     0.10  0.30  0.20     2.40     2.40     9.60     0.00    1.60   1.60   0.08
sdf              17.40     0.50 102.00  0.20 12095.20    5.60   118.40     0.70    6.81   2.09  21.36
sdg             232.40     1.90 379.70  0.50 76451.20    19.20   201.13    4.94   13.78   2.45  93.16

 

启动服务

src/redis-server &

生成CA密钥和证书

接下来的操作都是在 /root/easy-rsa 目录下进行的.

首先, 我们需要生成CA根密钥和证书, 用来给VPN Server和Client的证书进行签名.

  1. 修改 vars 文件
    vars 文件里定义了后续生成密钥和证书所需要的环境变量. 在文件里找到定义 KEY_COUNTRY, KEY_PROVINCE, KEY_CITY, KEY_ORG, 和 KEY_EMAIL 变量的部分, 根据自己的实际情况修改为需要的值. 这几个值都不能留空. 如下

     export KEY_COUNTRY="CN"
     export KEY_PROVINCE="ZJ"
     export KEY_CITY="HZ"
     export KEY_ORG=" MyCompany"
     export KEY_EMAIL="support@mycompany.com"
    

    其它变量的意义可以参考文件中的注释, 一般不需要修改.
    修改保存后, 执行以下命令来使这些变量生效供后续操作使用:

     # source ./vars
    
  2. 生成密钥和证书
    接下来执行以下脚本来生成CA的密钥和证书

     # ./build-ca
    

    脚本会提示确认证书和密钥所需的字段, 默认值是在 vars 文件里指定的. 脚本执行完后, 会在 keys 目录下生成CA的密钥 ca.key 和证书 ca.crt .

3、参数讲解

(1)参数如下:

rrqm/s:    每秒进行 merge 的读操作数目。即 delta(rmerge)/s

wrqm/s:     每秒进行 merge 的写操作数目。即 delta(wmerge)/s

r/s:     每秒完成的读 I/O 设备次数。即 delta(rio)/s

w/s:      每秒完成的写 I/O 设备次数。即 delta(wio)/s

rsec/s:  每秒读扇区数。即 delta(rsect)/s

wsec/s:      每秒写扇区数。即 delta(wsect)/s

rkB/s:         每秒读K字节数。是 rsect/s 的一半,因为每扇区大小为512字节。(需要计算)

wkB/s:        每秒写K字节数。是 wsect/s 的一半。(需要计算)

avgrq-sz:   平均每次设备I/O操作的数据大小 (扇区)。delta(rsect+wsect)/delta(rio+wio)

avgqu-sz:  平均I/O队列长度。即 delta(aveq)/s/1000 (因为aveq的单位为毫秒)。

await:        平均每次设备I/O操作的等待时间 (毫秒)。即 delta(ruse+wuse)/delta(rio+wio)

svctm:       平均每次设备I/O操作的服务时间 (毫秒)。即 delta(use)/delta(rio+wio)

%util:         一秒中有百分之多少的时间用于 I/O 操作,或者说一秒中有多少时间 I/O 队列是非空的。即 delta(use)/s/1000 (因为use的单位为毫秒)

 

(2)参数分析:

如果 %util 接近 100%,说明产生的I/O请求太多,I/O系统已经满负荷,该磁盘可能存在瓶颈。

await小于70% IO压力就较大了,一般读取速度有较多的wait.

同时可以结合vmstat 查看查看bi参数(等待资源的进程数)和wa参数(IO等待所占用的CPU时间的百分比,高过30%时IO压力高)

 

(3)另外还可以参考,一般情况:

① svctm < await (因为同时等待的请求的等待时间被重复计算了),

② svctm的大小一般和磁盘性能有关:CPU/内存的负荷也会对其有影响,请求过多也会间接导致 svctm的增加。

③ await: await的大小一般取决于服务时间(svctm) 以及 I/O 队列的长度和 I/O 请求的发出模式。

④ 如果 svctm 比较接近 await,说明I/O 几乎没有等待时间;

⑤ 如果 await 远大于 svctm,说明 I/O队列太长,应用得到的响应时间变慢,

⑥ 如果响应时间超过了用户可以容许的范围,这时可以考虑更换更快的磁盘,调整内核 elevator算法,优化应用,或者升级 CPU。

⑦ 队列长度(avgqu-sz)也可作为衡量系统 I/O 负荷的指标,但由于 avgqu-sz 是按照单位时间的平均值,所以不能反映瞬间的 I/O 洪水。

 

客户端连接测试

src/redis-cli
redis> set foo bar
redis> get foo

生成VPN Server密钥和证书

有了CA密钥和证书, 就可以生成VPN Server所需要的密钥和证书了. 执行以下脚本:

# ./build-key-server myvpn

脚本需要一个参数来指定证书和密钥的CN, 这里就是 myvpn , 根据自己的需要来指定对应的值. 脚本在执行时, 同样会提示需要确认和输入的字段值. 脚本执行完成后, 同样会在 keys 目录下生成VPN Server的密钥和证书. 密钥和证书的文件名前缀都是指定的CN, 后缀分别是 crtkey . 在这里就是 myvpn.crtmyvpn.key .

二、I/O理解与实例分析

配置sys-v

cp redis /etc/init.d/
chmod +x /etc/init.d/redis
service redis status

生成Client密钥和证书

Client端同样需要CA签名过的密钥和证书来. 执行以下脚本:

# ./build-key hongling

类似于VPN Server的密钥证书生成脚本, 这个脚本参数同样是Client的CN. 根据提示确认和输入必要参数后, Client所需的密钥 hongling.key 和证书 hongling.crt 也会保存在 keys 目录下.

对于每个Client, 都需要生成一套密钥和证书.

1、一个不错的例子,瞬间理解I/O (I/O 系统 vs. 超市排队)

(1)超市例子:

  举一个例子,我们在超市排队 checkout 时,怎么决定该去哪个交款台呢? 首当是看排的队人数,5个人总比20人要快吧?除了数人头,我们也常常看看前面人购买的东西多少,如果前面有个采购了一星期食品的大妈,那么可以考虑换个队排了。还有就是收银员的速度了,如果碰上了连钱都点不清楚的新手,那就有的等了。另外,时机也很重要,可能 5分钟前还人满为患的收款台,现在已是人去楼空,这时候交款可是很爽啊,当然,前提是那过去的 5 分钟里所做的事情比排队要有意义(不过我还没发现什么事情比排队还无聊的)。

(2)I/O 系统也和超市排队有很多类似之处

① r/s+w/s 类似于交款人的总数

② 平均队列长度(avgqu-sz)类似于单位时间里平均排队人的个数

③ 平均服务时间(svctm)类似于收银员的收款速度

④ 平均等待时间(await)类似于平均每人的等待时间

⑤ 平均I/O数据(avgrq-sz)类似于平均每人所买的东西多少

⑥ I/O 操作率 (%util)类似于收款台前有人排队的时间比例。

我们可以根据这些数据分析出 I/O 请求的模式,以及 I/O 的速度和响应时间。

 

二、Redis基本管理操作

生成Diffie Hellman参数

Diffie Hellman参数用于VPN Server和Client之间进行公钥交换. 执行以下脚本:

# ./build-dh

这个脚本执行完成以后, 可以在 keys 目录下找到生成的文件 dh2048.pem . 文件名中的2048是密钥长度, 可以在 vars 文件中设置, 默认为2048.

2、参数的实例分析

(1)实例

# iostat -x 1
avg-cpu:  %user   %nice    %sys   %idle
16.24    0.00    4.31   79.44
Device:     rrqm/s wrqm/s  r/s    w/s   rsec/s  wsec/s   rkB/s    wkB/s avgrq-sz avgqu-sz  await  svctm  %util
/dev/vda    00.00  44.90  1.02    27.55  8.16   579.59   4.08     289.80   20.57 22.35     78.21  5.00  14.29
/dev/vdb    00.00  44.90  1.02    27.55  8.16   579.59   4.08     289.80   20.57 22.35     78.21  5.00  14.29
/dev/vbc    00.00  0.00   0.00    0.00   0.00    0.00    0.00     0.00     0.00  0.00      0.00   0.00   0.00

 

(2)分析

① 上面的 iostat 输出表明秒有 28.57 次设备 I/O 操作: 总IO(io)/s = r/s(读) +w/s(写) = 1.02+27.55 = 28.57 (次/秒) 其中写操作占了主体 (w:r = 27:1)。

② 平均每次设备 I/O 操作只需要 5ms 就可以完成,但每个 I/O 请求却需要等上 78ms,为什么? 因为发出的 I/O 请求太多 (每秒钟约 29 个),假设这些请求是同时发出的,那么平均等待时间可以这样计算:

平均等待时间 = 单个 I/O 服务时间 * ( 1 + 2 + ... + 请求总数-1) / 请求总数

③ 应用到上面的例子: 平均等待时间 = 5ms * (1+2+...+28)/29 = 70ms,和 iostat 给出的78ms 的平均等待时间很接近。这反过来表明 I/O 是同时发起的。

④ 每秒发出的 I/O 请求很多 (约 29 个),平均队列却不长 (只有 2 个 左右),这表明这 29 个请求的到来并不均匀,大部分时间 I/O 是空闲的。

⑤ 一秒中有 14.29% 的时间 I/O 队列中是有请求的,也就是说,85.71% 的时间里 I/O 系统无事可做,所有 29 个 I/O 请求都在142毫秒之内处理掉了。

⑥ delta(ruse+wuse)/delta(io) = await = 78.21 => delta(ruse+wuse)/s=78.21 * delta(io)/s = 78.21*28.57 =2232.8,表明每秒内的I/O请求总共需要等待2232.8ms。所以平均队列长度应为 2232.8ms/1000ms = 2.23,而iostat 给出的平均队列长度 (avgqu-sz) 却为 22.35,为什么?! 因为 iostat 中有 bug,avgqu-sz值应为 2.23,而不是 22.35。

 

基础配置文件介绍

mkdir /nosql/6379

vim /nosql/6379/redis.conf

daemonize yes
port 6379
logfile /nosql/6379/redis.log
dir /nosql/6379
dbfilename dump.rdb


127.0.0.1:6379> shutdown 
not connected> exit


[root@db01 6379]# redis-server /nosql/6379/redis.conf 
[root@db01 6379]# netstat -lnp|grep 6379

+++++++++++配置文件说明++++++++++++++
redis.conf
是否后台运行:
daemonize yes
默认端口:
port 6379
日志文件位置
logfile /var/log/redis.log
持久化文件存储位置
dir /nosql/6379
RDB持久化数据文件:
dbfilename dump.rdb
+++++++++++++++++++++++++

redis-cli
127.0.0.1:6379> set name zhangsan 
OK
127.0.0.1:6379> get name
"zhangsan"

Easy-RSA 3

三、iostat用法升级

redis安全配置

安装

在Centos 7.5上, 首先要确认是否安装了 epel 源:

# yum repolist

如果源列表中没有 epel 源, 需要安装:

# yum install -y epel-release

然后就可以安装 easy-RSA 了:

# yum install -y easy-rsa
# yum list installed easy-rsa

可以看到这里安装的是 Easy-RSA 3 . 安装目录在 /usr/share/easy-rsa . 对于不同的具体版本, 这个目录下的内容可能会有不同:

# ls -l /usr/share/easy-rsa/
总用量 4
lrwxrwxrwx 1 root root    5 7月  16 18:21 3 -> 3.0.3
lrwxrwxrwx 1 root root    5 7月  16 18:21 3.0 -> 3.0.3
drwxr-xr-x 4 root root 4096 7月  16 19:41 3.0.3

如以上情况中, 实际的安装目录在 3.0.3 子目录下. 为了安全, 将安装目录复制到 /root 目录下:

# cp -r /usr/share/easy-rsa/3.0.3 /root/easyrsa

后续密钥和证书操作都在 /root/easyrsa 目录下进行.

1、Input Output statistics (  iostat )

  iostat反映了终端、磁盘I/O情况和CPU活动。输出结果的第一行是从系统启动到现在为止的这段时间的结果,接下去的每一行是interval时间段内的结果。Kernel里有一组计数器用来跟踪这些值。

  iostat的默认参数是tdc(terminal,  disk, and CPU)。如果任何其他的选项被指定,这个默认参数将被完全替代,例如,iostat -d将只反映磁盘的统计结果。

 

禁止protected-mode

protected-mode yes/no (保护模式,是否只允许本地访问)
----------------------
DENIED Redis is running in protected mode because protected mode is enabled, 
no bind address was specified, no authentication password is requested to clients. 
In this mode connections are only accepted from the loopback interface. 
If you want to connect from external computers to Redis you may adopt one of the following solutions: 
1)Just disable protected mode sending the command 'CONFIG SET protected-mode no' 
 from the loopback interface by connecting to Redis from the same host the server is running, 
 however MAKE SURE Redis is not publicly accessible from internet if you do so.
 Use CONFIG REWRITE to make this change permanent. 
2) Alternatively you can just disable the protected mode by editing the Redis configuration file, 
 and setting the protected mode option to 'no', and then restarting the server.
3) If you started the server manually just for testing, restart it with the '--protected-mode no' option. 
4) Setup a bind address or an authentication password. 
 NOTE: You only need to do one of the above things in order for the server to start accepting connections from the outside.

生成CA密钥和证书

在生成密钥和证书前, 需要进行初始化:

# ./easyrsa init-pki

这个操作会在当前目录下创建 pki 子目录, 接下来的操作生成的文件都会保存在这个子目录里. 如果这个 pki 子目录已经存在, 这个操作会将子目录下所有的文件清空. 所以, 如果希望重新生成所有的密钥和证书资源, 也可以使用这个命令.

接下来就可以生成CA的密钥和证书了:

# ./easyrsa build-ca

这个命令会要求输入密钥的密码和证书的CN. 这个密钥在后续给VPN Server和Client的证书签名里, 会用到. 命令完成后, 会在 pki 目录下生成密钥文件 ca.key 和证书文件 ca.crt . 有了CA的密钥和证书, 就可以生成VPN Server和Client的密钥和证书了.

2、语法介绍

基本语法: iostat  <options>;   interval  count

  option - 让你指定所需信息的设备,像磁盘、cpu或者终端(-d , -c , -t  or -tdc ) 。x 选项给出了完整的统计结果(gives the extended statistic)。

  interval -  在两个samples之间的时间(秒)。

  count  - 就是需要统计几次

 

本文由澳门新葡亰手机版发布于操作系统,转载请注明出处:Redis安装配备

上一篇:服务管理,linux总结及常用命令澳门新葡亰手机版 下一篇:Redis多API开发实践,Linux常用软件启动
猜你喜欢
热门排行
精彩图文