nfs 的基本使用

Linux [[file system]] nfs 的基本使用 nfs 的架构 nfs 可以理解为“网盘”,即本地可以挂载远端的盘,不考虑物理上的io瓶颈,上下行带宽多大则io速度多快。典型的C/S的架构,运行过程中对CPU有依赖。 nfs 安装 # 服务端 sudo apt install nfs-kernel-server # 客户端 sudo apt install nfs-common nfs 使用 简单来说,分三步: 服务端创建文件系统 nfs配置文件中确定文件系统以及访问限制 客户端连接指定的nfs /etc/exports NFS服务端对分享目录的配置文件 /etc/exports.d NFS服务端对分享目录配置文件的扩展目录,值得注意的是:只有扩展名为.exports的文件会被NFS读取并应用,其他文件都会被忽略。 /var/lib/nfs/etab NFS对外分享目录的主配置文件,它是由exportfs命令维护的,其信息与NFS内核中的配置信息保持同步。注:请不要手动编辑该文件。 /var/lib/nfs/rmtab 客户端访问的目录列表,由NFS系统维护,请不要手动编辑。 root@localhost:~# cat /etc/exports # /etc/exports: the access control list for filesystems which may be exported # to NFS clients. See exports(5). # # Example for NFSv2 and NFSv3: # /srv/homes hostname1(rw,sync,no_subtree_check) hostname2(ro,sync,no_subtree_check) # # Example for NFSv4: # /srv/nfs4 gss/krb5i(rw,sync,fsid=0,crossmnt,no_subtree_check) # /srv/nfs4/homes gss/krb5i(rw,sync,no_subtree_check) # /mnt/nfs 192.168.0.0/24(rw,sync,no_subtree_check) $ sudo mount -t nfs host:/$dir $ddir 参考 如何在Ubuntu 18.04上设置NFS挂载 Linux 下的 NFS 系统简介

redhat 系使用 scl 工具临时使用高级开发工具

Linux [[RedHat]] redhat 系使用 scl 工具临时使用高级开发工具 最近在做一次编译任务中,出现了 cc 指令错误,显示未找到 a.c 文件,猜测可能因为 gcc 版本问题。检测到可以在 Ubuntu 18.04 正常编译使用的 gcc 版本是 7.5,而基于 Centos7 的 Aliyun Linux 2.1903 却还是 4.8 版本。先升级 gcc 版本再测试编译问题。 在 redhat 系中升级 gcc 有两种方案,一种是下载源码进行编译,另外一种是借助 scl 工具。前者不推荐,一是因为编译速度慢,二是因为编译可能出现各种问题需要手动处理。后者 SCL 软件集(Software Collections)是为了给 RHEL/CentOS 用户提供一种以方便、安全地安装和使用应用程序和运行时环境的多个(而且可能是更新的)版本的方式,同时避免把系统搞乱。 普通 RHEL/Centos 使用 scl # 安装 scl 源: $ yum install centos-release-SCL scl-utils-build # 查看从 scl 中安装的包的列表: $ scl –list # 列出 scl 源有哪些包可以用: $ yum list all --enablerepo='centos-sclo-rh' # 安装高版本的 gcc、gcc-c++ yum install devtoolset-7-gcc devtoolset-7-gcc-c++ # devtoolset-3: gcc 4.9 # devtoolset-4: gcc 5 # devtoolset-6: gcc 6 # devtoolset-7: gcc 7 # devtoolset-8: gcc 8 # 测试下是否成功 $ scl enable devtoolset-7 'gcc --version' gcc (GCC) 7.3.1 20180303 (Red Hat 7.3.1-5) Copyright (C) 2017 Free Software Foundation, Inc. This is free software; see the source for copying conditions. There is NO warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. Aliyun Linux 2.1903 使用 scl # 先安装scl-utils $ yum install -y scl-utils # 打开YUM仓库支持 $ yum install -y alinux-release-experimentals # 从YUM源安装您需要的软件包,以下示例命令同时安装了SCL插件方式支持的所有开发工具包 $ yum install -y devtoolset-7-gcc devtoolset-7-gdb devtoolset-7-binutils devtoolset-7-make # 运行相关的SCL软件 $ scl enable devtoolset-7 'gcc --version' gcc (GCC) 7.3.1 20180303 (Red Hat 7.3.1-5) Copyright (C) 2017 Free Software Foundation, Inc. This is free software; see the source for copying conditions. There is NO warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. 使用高版本的开发工具 使用绝对路径 添加可执行文件路径到 PATH 环境变量 使用官方推荐的加载命令:scl enable devtoolset-x bash, x为要启用的版本 执行安装软件自带的脚本: source /opt/rh/devtoolset-x/enable,x为要启用的版本 推荐后两种方案。 ...

redis 安装使用

database Redis redis 安装使用 # 安装并编译 wget https://download.redis.io/releases/redis-6.0.9.tar.gz -O /tmp/redis-6.0.9.tar.gz cd /tmp tar xzf redis-6.0.9.tar.gz cd redis-6.0.9 make # 创建环境 BASE_PATH=/opt/redis-single-point mkdir -p $BASE_PATH mkdir -p $BASE_PATH/bin mkdir -p $BASE_PATH/conf mkdir -p $BASE_PATH/data mkdir -p $BASE_PATH/log/ cp /tmp/redis-6.0.9/src/redis-server /tmp/redis-6.0.9/src/redis-cli /tmp/redis-6.0.9/src/redis-benchmark $BASE_PATH/bin # 配置 redis.conf vi $BASE_PATH/conf/redis.conf bind 127.0.0.1 protected-mode no port 4399 tcp-backlog 511 timeout 0 tcp-keepalive 300 daemonize yes supervised no pidfile /var/run/redis_6379.pid loglevel notice logfile "/opt/redis-single-point/log/redis.log" databases 16 always-show-logo yes save 900 1 save 300 10 save 60 10000 stop-writes-on-bgsave-error yes rdbcompression yes rdbchecksum yes dbfilename dump.rdb rdb-del-sync-files no dir /opt/redis-single-point/data/ replica-serve-stale-data yes replica-read-only yes repl-diskless-sync no repl-diskless-sync-delay 5 repl-diskless-load disabled repl-disable-tcp-nodelay no replica-priority 100 acllog-max-len 128 lazyfree-lazy-eviction no lazyfree-lazy-expire no lazyfree-lazy-server-del no replica-lazy-flush no lazyfree-lazy-user-del no oom-score-adj no oom-score-adj-values 0 200 800 appendonly no appendfilename "appendonly.aof" appendfsync everysec no-appendfsync-on-rewrite no auto-aof-rewrite-percentage 100 auto-aof-rewrite-min-size 64mb aof-load-truncated yes aof-use-rdb-preamble yes lua-time-limit 5000 cluster-enabled no cluster-node-timeout 15000 slowlog-log-slower-than 10000 slowlog-max-len 128 latency-monitor-threshold 0 notify-keyspace-events "" hash-max-ziplist-entries 512 hash-max-ziplist-value 64 list-max-ziplist-size -2 list-compress-depth 0 set-max-intset-entries 512 zset-max-ziplist-entries 128 zset-max-ziplist-value 64 hll-sparse-max-bytes 3000 stream-node-max-bytes 4096 stream-node-max-entries 100 activerehashing yes client-output-buffer-limit normal 0 0 0 client-output-buffer-limit replica 256mb 64mb 60 client-output-buffer-limit pubsub 32mb 8mb 60 hz 10 dynamic-hz yes aof-rewrite-incremental-fsync yes rdb-save-incremental-fsync yes jemalloc-bg-thread yes # 配置 redis 服务 vi /lib/systemd/system/redis.service [Unit] Description=redis service port 6379 [Service] User=Development Group=Development Type=forking ExecStart=/opt/redis-single-point/bin/redis-server /opt/lotus/redis-single-point/conf/redis.conf Restart=on-success [Install] WantedBy=multi-user.target # 启动服务并检测 systemctl daemon-reload systemctl start redis ps -ef|grep redis echo 'export PATH=$PATH:/opt/redis-single-point/bin' >> /etc/profile source /etc/profile redis-cli -h 127.0.0.1 -p 6379 redis>

redis 集群搭建

database Redis redis 集群搭建 高可用方案 一般常用的有两种高可用方案: redis 哨兵 redis 集群 在 redis 早期版本中,只能使用哨兵模式,但这种模式下,需要多一个守护对资源进行监控,并且在 master 断掉的时候切换过程比较慢。 在 5.0 之后,一般推荐使用 redis 集群方案实现高可用。 操作环境 使用了三台机器,以三主三从的方案进行部署,在一台机器上部署一主一从,其中 8001 是主节点,8002 是从节点。 redis01: 192.168.0.2 redis02: 192.168.0.3 redis03: 192.168.0.4 虽然这三台机器都是 Ubuntu Server 18.04,但是内核版本都不相同,所以都是单独执行的编译过程。 决定不使用系统空间,而使用 /opt/ 的上 TB 空间。 所有 redis 相关的数据都在 /opt/redis/ 下面: bin/ 二进制程序 conf/ 配置文件 data/ 运行产生文件 log/ 日志文件 redis-6.0.7/ 源代码 部署过程 主要是配置文件的处理: 主节点配置以下参数: daemonize yes port 8001 dir /opt/redis/data/master cluster-enabled yes cluster-config-file /opt/redis/conf/nodes-8001.conf cluster-node-timeout 15000 #bind 127.0.0.1 protected-mode no appendonly yes requirepass abcdefg masterauth abcdefg logfile /opt/redis/log/redis-master-8081.log 从节点配置以下参数: ...

sed 匹配内容的前一行和后一行添加内容

Linux sed 匹配内容的前一行和后一行添加内容 在某行的前一行或后一行添加内容 具休操作如下: # 匹配行前加 sed -i '/allow 361way.com/iallow www.361way.com' the.conf.file # 匹配行前后 sed -i '/allow 361way.com/aallow www.361way.com' the.conf.file 而在书写的时候为便与区分,往往会在i和a前面加一个反加一个反斜扛。代码就变成了: sed -i '/2222222222/a\3333333333' test.txt sed -i '/2222222222/i\3333333333' test.txt a 是 append,行后加;i 是 insert,行前加。 配合find查找的内容处理,如下: find . -name server.xml|xargs sed -i '/directory/i <!--' find . -name server.xml|xargs sed -i '/pattern="%h/a -->' 在某行(指具体行号)前或后加一行内容 sed -i 'N;4addpdf' a.txt sed -i 'N;4ieepdf' a.txt 这里指定的行号是第四行 。 删除指定行的上一行或下一行 # 删除指定文件的上一行 sed -i -e :a -e '$!N;s/.*n(.*directory)/1/;ta' -e 'P;D' server.xml # 删除指定文件的下一行 sed -i '/pattern="%/{n;d}' server.xml 转载说明 sed 匹配内容的前一行和后一行 添加内容

ssh 服务的原理

Linux SSH ssh 服务的原理 读者大可以直接就自己的问题去 Google 解决方案,但是不理解这个过程,那么每次遇到都要去 search,自己只是‘工具人’,遇到了问题也不知道如何是好。这时候需要看下原理,有原理做基础,才能理解做配置的每一步的意义。 两种安全验证 SSH(即 Secure Shell),是一项创建在应用层和传输层基础上的安全协议,为计算机 Shell 提供安全的传输和使用环境。 所以为了安全,SSH 提供了两种级别的安全认证,基于密码的安全认证和基于密钥的安全认证。 基于密码的安全认证 基于密码的安全认证,登录的时候需要提供账号和密码;远程主机将自己的公钥分发给登录客户端,客户端访问主机使用该公钥加密;远程主机使用自己的私钥解密数据。 登录的流程如下: 远程主机收到用户登录请求,将自己的公钥发给用户 用户通过远程主机公钥的指纹确认主机的真实性,然后使用远程主机公钥将登录密码加密后,发送回远程主机 远程主机使用自己的私钥解码登录密码,验证密码正确后,允许用户登录 这种就是最常用的直接登录,需要输入密码,而传入过程中,明文密码会被加密,所以很安全。 基于密钥文件的安全认证 基于密钥的安全认证,客户端将将公钥上传到服务器。登录的时候,客户端向服务器发送登录请求;服务器收到请求后,向用户发送一段随机字符串;用户用自己的私钥加密后,再发送回服务器;服务器使用事先存储的公钥进行解密,如果解密成功,证明用户可信,允许登录。 这种方式,在登录服务器的过程中,不需要上传密码,增加了安全性。 known_hosts 文件 当第一次登陆远程主机时,不管是用密码还是密钥,都会有个提示: $ ssh user@host The authenticity of host 'host (***.***.***.***)' can't be established. RSA key fingerprint is 98:2e:d7:e0:de:9f:ac:67:28:c2:42:2d:37:16:58:4d. Are you sure you want to continue connecting (yes/no)? 这段话提示用户无法确认远程主机的真实性,只知道 RSA 公钥的指纹,询问用户是否继续。 我们使用 ssh-keygen 工具可以生成 SSH 密钥对,其中公钥的长度可以很长,对用户来说不方便直接对比验证,因此对其进行了 MD5 计算,生成了一个128的指纹,这样再进行比较就比较容易了。 那么这里就要求我们事先知道远程主机的公钥指纹,才可以确认主机的真实性。 用户确认主机的真实性,输入 yes 继续连接: Warning: Permanently added 'host,***.***.***.***' (RSA) to the list of known hosts. 然后输入密码: ...

ssh 服务的配置

Linux SSH ssh 服务的配置 有了 ssh 服务的介绍以及原理之后,我们就可以做到 可以用很短的指令就登陆,并且不用输密码,最重要的就是要学会修改 ssh_config 文件。我们先介绍配置文件的一些可配置项,再针对免密登陆做操作。 配置文件 ssh程序可以从以下途径获取配置参数: 命令行选项 用户配置文件 (~/.ssh/config) 系统配置文件 (/etc/ssh/ssh_config) 配置文件可分为多个配置区段,每个配置区段使用 Host 来区分。我们可以在命令行中输入不同的host 来加载不同的配置段。 对每一个配置项来说,首次获取的参数值将被采用,因此通用的设置应该放到文件的后面,特定host相关的配置项应放到文件的前面。 常用配置项 下面介绍一些常用的SSH配置项: Host Host 配置项标识了一个配置区段。 ssh 配置项参数值可以使用通配符:* 代表0~n个非空白字符,? 代表一个非空白字符,! 表示例外通配。 我们可以在系统配置文件中看到一个匹配所有 host 的默认配置区段: $ cat /etc/ssh/ssh_config | grep '^Host' Host * 这里有一些默认配置项,我们可以在用户配置文件中覆盖这些默认配置。 GlobalKnownHostsFile 指定一个或多个全局认证主机缓存文件,用来缓存通过认证的远程主机的密钥,多个文件用空格分隔。默认缓存文件为:/etc/ssh/ssh_known_hosts, /etc/ssh/ssh_known_hosts2. HostName 指定远程主机名,可以直接使用数字IP地址。如果主机名中包含 %h ,则实际使用时会被命令行中的主机名替换。 IdentityFile 指定密钥认证使用的私钥文件路径。默认为 ~/.ssh/id_dsa, ~/.ssh/id_ecdsa, ~/.ssh/id_ed25519 或 ~/.ssh/id_rsa 中的一个。文件名称可以使用以下转义符: '%d' 本地用户目录 '%u' 本地用户名称 '%l' 本地主机名 '%h' 远程主机名 '%r' 远程用户名 可以指定多个密钥文件,在连接的过程中会依次尝试这些密钥文件。 Port 指定远程主机端口号,默认为 22 。 ...

ssh-keygen 基本用法

Linux SSH ssh-keygen 基本用法 ssh 公钥认证是 ssh 认证的方式之一。通过公钥认证可实现 ssh 免密码登陆,git 的 ssh 方式也是通过公钥进行认证的。 在用户目录的 home 目录下,有一个 .ssh 的目录,和当前用户 ssh 配置认证相关的文件,几乎都在这个目录下。 ssh-keygen 可用来生成 ssh 公钥认证所需的公钥和私钥文件。 使用 ssh-keygen 时,请先进入到 ~/.ssh 目录,不存在的话,请先创建。并且保证 ~/.ssh 以及所有父目录的权限不能大于 711。 生成的文件名和文件位置 使用 ssh-kengen 会在 ~/.ssh/ 目录下生成两个文件,不指定文件名和密钥类型的时候,默认生成的两个文件是: id_rsa id_rsa.pub 第一个是私钥文件,第二个是公钥文件。 生成 ssh key 的时候,可以通过 -f 选项指定生成文件的文件名,如下: [huqiu@101 .ssh]$ ssh-keygen -f test -C "test key" ~~文件名 ~~~~ 备注 如果没有指定文件名,会询问你输入文件名: [huqiu@101 .ssh]$ ssh-keygen Generating public/private rsa key pair. Enter file in which to save the key (/home/huqiu/.ssh/id_rsa): /home/huqiu/.ssh/test 你可以输入你想要的文件名,这里我们输入test。 ...

SSHPASS 的使用

Linux SSH SSHPASS 的使用 如果是常规使用 ssh 登陆到服务器上,要么是通过密码,要么是通过配置公密钥的适配来做到免密登陆。现在有个新的场景,你想通过 ssh 登陆到某台节点并执行一条指令,但不想因为这么简单的事而将公钥上传过去,同时也不想通过 expect 或者 EOF 的方式来模拟操作(我们假定在一个脚本中),这时候就需要 sshpass 的帮助了。 sshpass 是一个简单、轻量级的命令行工具,通过它我们能够向命令提示符本身提供密码(非交互式密码验证),它直接使用 TTY 访问,以确保密码是用户键盘输入的。 sshpass 在专门的 tty 中运行 ssh,以误导 ssh 相信它是从用户接收到的密码。 重要:使用 sshpass 是不安全的,但新版本的 sshpass 做得足够好了。 安装 RedHat/CentOS 安装 $ yum install sshpass $ dnf install sshpass [Fedora 22 及以上版本] Debian/Ubuntu 和它的衍生版 $ sudo apt-get install sshpass MacOSX 安装 截止 2019.8.13 日,最新版是 1.06,未来可能更新,下面的指令,Cellar位置可能不确定。 $ brew install https://raw.githubusercontent.com/kadwanev/bigboybrew/master/Library/Formula/sshpass.rb $ cd /usr/local/bin $ ln -s sshpass ../Cellar/sshpass/1.06/bin/sshpass 源码安装 $ wget http://sourceforge.net/projects/sshpass/files/latest/download -O sshpass.tar.gz $ tar -xvf sshpass.tar.gz $ cd sshpass-1.06 $ ./configure $ sudo make install 使用 sshpass 与 ssh 一起使用。先通过 -h 参数看下 sshpass 能做什么。 ...

StorCLI 的使用

Linux [[RAID]] StorCLI 的使用 目前 LSI RAID 卡使用的配置工作主要有:Megaraid Storage Manager(MSM,图形环境)、MegaCLI(字符界面)、StorCLI(字符界面)。其中 StorCLI 整合了 LSI 和原来 3ware 的产品支持,相对 MegaCLI 命令更加简洁,并且兼容 MegaCLI 的命令,估计不久的将来两者会统一。 StorCLI 在命令行的直接输出更直观,适合直接观看,不适合解析,好在有个特性,在结尾加上 J 可以获得 json 格式输出。 安装 登录BROADCOM网站上RAID卡的页面。 在 “DOWNLOADS” 页签中单击 “Management Software and Tools”。 打开管理软件和工具列表。 下载最新版本的 “MegaRAID Storcli” 工具。 解压后得到适用于不同操作系统的工具包。 rpm -ivh StorCLIxxx.rpm 使用 rpm 命令安装完成后,64 位系统命令的绝对路径为:/opt/MegaRAID/storcli/storcli64,32 位系统命令的绝对路径为:/opt/MegaRAID/storcli/storcli。 在测试的机器 xxx.x 上和 xxx.y 上都已经有了该工具,且版本为 Ver 1.23.02 Mar 28, 2017。 测试过程及基础说明 ip raid卡型号 芯片组 StorCLI能否使用 megacli能否使用 xx.xx.xxx.x PERC H730P Adapter SAS 3108 不能 可以 xx.xx.xxx.y AVAGO MR9361-8i UNKNOWN 可以 可以 有上述表格内容,可以看出,StorCLI 虽然是后起之秀,但在某些卡上,megacli 却能够输出结果。(通过对 Dell PowerEdge RAID Controller H730P的查看,简单的猜测 dell 定制的卡,无法被 storcli 管理)。在该文章中提到「Dell的产品 用PERC Cli」。即How to use the PowerEdge RAID Controller (PERC) Command Line Interface (CLI) utility to manage your RAID controller。 ...