Mac下常用插件
1 | 1、vscode-icons:根据文件不同类型,显示不同图标 |
Mac下常用插件
1 | 1、vscode-icons:根据文件不同类型,显示不同图标 |
对于redis的用处不必多说,互联网上有很多资料。文章只做为笔记使用,记录redis操作与学习过程。
安装redis很简单,https://redis.io/download
官方文档有教程。
1 | [root@centos ~]# wget http://download.redis.io/releases/redis-5.0.3.tar.gz && tar xzf redis-5.0.3.tar.gz && cd redis-5.0.3 && make && make install |
非守护进程启动方式
1 | [root@centos ~]# redis-server |
守护进程启动方式
1 | 配置文件中开启daemonize yes |
1 | daemonize 是否是守护进程(no|yes) |
从默认配置文件中导出常用的配置项
1 | 去掉"#",去掉空格 |
通过redis-cli
命令进入客户端,测试API
keys [pattern](一般不在生产环境使用,O(n),redis单线程会阻塞其他命令)
1 | 127.0.0.1:6379> set hello world |
dbsize
1 | 127.0.0.1:6379> set hello world |
exists key
1 |
del key [key …]
1 |
expire key seconds
1 |
type key
1 |
字符串类型
1 |
哈希类型
1 |
列表类型
1 |
集合类型
1 |
有序集合类型
1 |
NFS(Network File System)是Linux系统之间(类Unix系统之间)使用最为广泛的文件共享协议,不同于ftp或http,需要将文件下载后使用,NFS方式的共享是可以直接使用而不需要下载的。
参考Wiki
只在SUN公司内部用作实验目的
其主要目的是解决NFSv2进行同步写操作的性能问题。
协议的实现/开发工作不再是由SUN公司主导开发,而是改为由互联网工程任务组(IETF)开发。
NFSv4.2 当前正在开发中
假设一个Unix风格的场景,其中一台计算机(客户端)需要访问存储在其他机器上的数据(NFS 服务器):
1、服务端实现 NFS 守护进程,默认运行 nfsd,用来使得数据可以被客户端访问。
2、服务端系统管理员可以决定哪些资源可以被访问,导出目录的名字和参数,通常使用 /etc/exports 配置文件 和 exportfs 命令。
3、服务端安全-管理员保证它可以组织和认证合法的客户端。
4、服务端网络配置保证可以跟客户端透过防火墙进行协商。
5、客户端请求导出的数据,通常调用一个 mount 命令。
6、如果一切顺利,客户端的用户就可以通过已经挂载的文件系统查看和访问服务端的文件了。
提醒:NFS自动挂载可以通过—可能是 /etc/fstab 或者自动安装管理进程。
NFS服务端IP地址为:192.168.56.101
NFS客户端IP地址为:192.168.56.240
1、在Centos7上安装软件包
1 | [root@centos ~]# yum install -y nfs-utils rpcbind |
2、创建共享目录并更改权限
1 | [root@centos ~]# mkdir /var/nfsshare && chmod -R 755 /var/nfsshare |
3、启动服务并设置开机自启
1 | [root@centos ~]# systemctl enable rpcbind && systemctl enable nfs-server && systemctl enable nfs-lock && systemctl enable nfs-idmap && systemctl start rpcbind && systemctl start nfs-server && systemctl start nfs-lock && systemctl start nfs-idmap |
4、编辑/etc/exports文件,通过网络共享NFS目录
1 | 注意:192.168.56.240是NFS客户端IP |
1 | [root@centos ~]# vi /etc/exports |
1 | 选项含义: |
5、重启服务
1 | [root@centos ~]# systemctl restart nfs-server |
6、修改防火墙
1 | [root@centos ~]# firewall-cmd --permanent --zone=public --add-service=nfs |
1 | 挂载选项: |
1、在Centos7上安装软件包
1 | [root@docker ~]# yum install -y nfs-utils |
2、创建NFS挂载点
1 | [root@docker ~]# mkdir -p /mnt/nfs/home |
3、挂载服务端的NFS共享目录到客户端
1 | [root@docker ~]# mount -t nfs 192.168.56.101:/home /mnt/nfs/home/ |
4、检查
1 | [root@docker ~]# df -Tkh |
5、读写文件
在客户端向挂载点写入文件
1 | [root@docker ~]# touch /mnt/nfs/var/nfsshare/test_nfs |
在服务端检查写入的文件
1 | [root@centos ~]# ll /var/nfsshare/ |
1 | 【1】https://www.linuxidc.com/Linux/2013-10/91137.htm |
Ceph中的单元测试使用的是Google Test,嵌入到Ceph源码中。Google Test的使用这里有一篇入门文章,大体思路讲的很清晰。我们主要重心是如何在Ceph源码中添加单元测试。
在添加之前我们先读一下已经存在的单元测试,在代码中不同的单元测试实现方式不同,可能按照以下Demo无法完全复制,但是慢慢看代码总会理解的。我们挑一个最简单的,不讲解详细测试内容(因为涉及知识较多,目前我还无法完全理解)。
下面我们以ceph_test_filejournal
为例,它存在于ceph-test*.rpm包中,在打社区版Ceph rpm包时(根据ceph.spec)会生成出来《ceph build rpm》,在我们的被测Ceph节点上安装该rpm,会在/usr/bin/
目录中找到ceph_test_filejournal
(其实会有很多类似ceph_test_
的二进制文件,这些都是Ceph的单元测试)。
单元测试总CMakeLists文件位置在src/test/CMakeLists.txt
,如果想自己编写测试代码添加到测试集中,需要修改这个CMakeLists。在社区Ceph我们编译出来可执行测试二进制ceph_test_*
,都是在这里通过CMakeLists add_executable
定义的。
1 | add_executable(ceph_test_filejournal |
在add_executable
中同时定义了测试代码源文件test_filejournal.cc
。
1 | ::testing::InitGoogleTest(&argc, argv); |
【1】http://www.yeolar.com/note/2014/12/21/gtest/#id15
【2】https://www.ibm.com/developerworks/cn/aix/library/au-googletestingframework.html
使用yum安装指定版本的ansible
1 | [root@cephJ ~]# yum -h | grep show |
准备四台机器
1 | ansible节点 |
配置ansible
1 | ansible节点执行 |
Ceph的对象存储服务中有网站托管服务,需要结合DNS来做配合。所以想借此机会了解一下DNS服务,DNS开源软件中最有名的当属BIND。那么如果搭建该服务?如何与Ceph的对象存储服务radosgateway对接?这两个课题是需要来实验的。这篇文章不包括DNS理论,因为在网络上有很多,可以自己google一下。本篇文章主要是:如果搭建BIND服务,以实践为主,我在网络上找到一篇英文文章,是关于BIND在centos7上搭建的,如果英文可以请看原文。
下面我们就来验证一下BIND的搭建:
通过设置适当的域名系统(DNS, Domain Name System),可以按名称查找network interfaces和IP地址,这使得管理server configuration和infrastructure变得更容易。在本教程中,我们将使用CentOS 7上的BIND name servers软件(BIND9)来讨论如何设置内部DNS服务器,Virtual Private Servers (VPS) 可以使用它来解析private host names和private IP地址。这是管理内部多主机hostnames和私有IP地址时必不可少的。
可以在此处找到本教程的Ubuntu版本。
要完成本教程,您需要以下内容:
如果您不熟悉DNS概念,建议您阅读Introduction to Managing DNS。
出于示例目的,我们将假设以下内容:
有了这些假设,我们使用”nyc3.example.com”来参考我们的private subnet或zone的命名方案。因此,host1的private Fully-Qualified Domain Name (FQDN) 将为”host1.nyc3.example.com”。
请参阅下表中的相关详细信息:
Host | Role | Private FQDN | Private IP Address |
---|---|---|---|
host1 | Generic Host 1 | host1.nyc3.example.com | 10.128.100.101 |
host2 | Generic Host 2 | host2.nyc3.example.com | 10.128.200.102 |
注意:自己的实验环境将有所不同,示例中的名称和IP地址只是用于演示如何配置DNS server以提供内部DNS服务。您应该设置适合自己环境的host names和private IP addresses。没有必要在命名方案中使用datacenter的region名称,但我们在此处使用它来表示这些主机属于特定datacenter的private network。如果您使用多个datacenters,则可以在每个相应的datacenter内设置内部DNS。
在本教程结束时,我们将有一个primary DNS server(ns1),以及可选的secondary DNS server(ns2,它将用作备份)。
这是一个包含示例名称和IP地址的表:
Host | Role | Private FQDN | Private IP Address |
---|---|---|---|
ns1 | Primary DNS Server | ns1.nyc3.example.com | 10.128.10.11 |
ns2 | Secondary DNS Server | ns2.nyc3.example.com | 10.128.20.12 |
让我们开始安装我们的Primary DNS server,ns1。
注意:以红色突出显示的文本很重要! 它通常用于表示需要用您自己的设置替换的内容,或者应该修改或添加到配置文件中的内容。(红色字体我会标注red,全文搜索red就可以)例如,如果您看到类似host1.nyc3.example.com(red)的内容,请将其替换为您自己服务器的FQDN。同样,如果您看到host1_private_IP(red),请将其替换为您自己服务器的private IP地址。
在两个DNS服务器ns1和ns2上,使用yum安装BIND:
1 | sudo yum install -y bind bind-utils |
现在已经安装了BIND,让我们配置primary DNS server。
BIND的配置由多个文件组成,这些文件包含在主配置文件named. conf中。 这些文件名以“named”开头,因为这是BIND运行时进程的名称。 我们将从配置options文件开始。
BIND的进程名为named,因此,许多文件以”named”命名,而不是”BIND”。
在ns1上,打开named.conf文件进行编辑:
1 | sudo vi /etc/named.conf |
在现有options block上方,创建一个名为”trusted”的新ACL block。在这里我们将定义允许递归查询DNS的客户端列表(即与ns1位于同一datacenter的服务器)。使用我们的示例private IP地址,我们将ns1,ns2,host1和host2的IP添加到可信客户端列表中:
1 | /etc/named.conf — 1 of 4 |
我们有了可信DNS客户端列表,我们将要编辑options block。将ns1的private IP添加到listen-on port 53
指令中,并注释掉listen-on-v6
行:
1 | /etc/named.conf — 2 of 4 |
在这些条目下面,将allow-transfer指令从”none”更改为ns2的private IP地址。另外,将allow-query指令从”localhost”更改为”trusted”:
1 | /etc/named.conf — 3 of 4 |
在文件末尾,添加以下行:
1 | /etc/named.conf — 4 of 4 |
现在保存并退出named.conf。上述配置指定只有您自己的服务器(”trusted”服务器)才能查询DNS服务器。
接下来,我们将配置local文件,以指定我们的DNS zones。
在ns1上,打开named.conf.local文件以进行编辑:
1 | sudo vi /etc/named/named.conf.local |
该文件应为空。 在这里,我们将指定forward和reverse zones。
使用以下行添加forward zone(替换您自己的zone名称):
1 | /etc/named/named.conf.local — 1 of 2 |
假设我们的private subnet是10.128.0.0/16,请使用以下行添加reverse zone(请注意,我们的reverse zone名称以”128.10”开头,这是”10.128”的八位字节反转,octet reversal of “10.128”)
1 | /etc/named/named.conf.local — 2 of 2 |
如果您的服务器跨多个private subnets但位于同一datacenter,请确保为每个不同的subnet指定一个额外的zone和zone文件。添加完所有所需zone后,保存并退出named.conf.local文件。
既然我们的zone是在BIND中指定的,我们需要创建相应的forward和reverse zone文件。
forward zone文件中,我们为正向DNS查找定义了DNS records(记录)。也就是说,当DNS收到名称查询(例如”host1.nyc3.example.com”)时,它将查找forward zone文件以解析host1的相应private IP地址。
创建我们的zone文件。根据我们的named.conf.local配置,该位置应为/etc/named/zones:
1 | sudo chmod 755 /etc/named |
现在让我们编辑我们的forward zone文件:
1 | sudo vi /etc/named/zones/db.nyc3.example.com |
首先,您需要添加SOA record(记录)。将突出显示的ns1 FQDN替换为您自己的FQDN,然后将第二个”nyc3.example.com”替换为您自己的domain。 每次编辑zone文件时,都应该在重新启动named进程之前增加serial值 —— 我们将它增加到”3”。它应该看起来像这样:
1 | /etc/named/zones/db.nyc3.example.com — 1 of 3 |
之后,使用以下行添加您的nameserver records(替换自己的名称nyc3.example.com.
)。请注意,第二列指定这些是”NS” records(记录):
1 | /etc/named/zones/db.nyc3.example.com — 2 of 3 |
然后为属于此zone的主机添加A记录。 这包括我们希望以”.nyc3.example.com” 结尾的名称的任何服务器(替换名称和private IP地址)。使用我们的示例名称和private IP地址,我们将为ns1,ns2,host1和host2添加A记录,如下所示:
1 | /etc/named/zones/db.nyc3.example.com — 3 of 3 |
保存并退出db.nyc3.example.com文件。
我们的最终示例forward zone文件如下所示:
1 | /etc/named/zones/db.nyc3.example.com — complete |
现在让我们转到reverse zone文件。
Reverse zone文件是我们为反向DNS查找定义DNS PTR记录的地方。也就是说,当DNS通过IP地址(例如”10.128.100.101”)接收查询时,它将查看reverse zone文件以解析相应的FQDN,在这种情况下查询结果为”host1.nyc3.example.com”。
在ns1上,对于named.conf.local文件中指定的每个reverse zone,都创建一个reverse zone文件。
编辑与named.conf.local中定义的reverse zone对应的reverse zone文件:
1 | sudo vi /etc/named/zones/db.10.128 |
与forward zone文件相同的方式,将突出显示的ns1 FQDN替换为您自己的FQDN,然后将第二个”nyc3.example.com”替换为您自己的domain。每次编辑zone文件时,都应该在重新启动named进程之前递增serial值 —— 我们将其增加到”3”。 它应该看起来像这样:
1 | /etc/named/zones/db.10.128 — 1 of 3 |
之后,使用以下行添加您的nameserver records(用您自己的名称替换)。 请注意,第二列指定这些是”NS”记录:
1 | /etc/named/zones/db.10.128 — 2 of 3 |
然后为所有服务器添加PTR记录,这些服务器的IP地址位于您正在编辑的zone文件的subnet上。在我们的示例中,这包括我们所有的主机,因为它们都在10.128.0.0/16 subnet上。请注意,第一列包含服务器private IP地址的最后两个八位字节,顺序相反。请务必替换名称和private IP地址以匹配您的服务器:
1 | /etc/named/zones/db.10.128 — 3 of 3 |
保存并退出reverse zone文件(如果需要添加更多reverse zone文件,请重复此部分)。
我们的最终示例反向区域文件如下所示:
1 | /etc/named/zones/db.10.128 — complete |
运行以下命令以检查named.conf *文件的语法:
1 | sudo named-checkconf |
如果您的named配置文件没有语法错误,您将返回shell提示符并且看不到任何错误消息。 如果配置文件有问题,请检查error message和Configure Primary DNS Server section,然后再次尝试named-checkconf。
named-checkzone命令可用于检查zone文件的正确性。 其第一个参数指定zone名称,第二个参数指定相应的zone文件,这两个文件都在named.conf.local中定义。
例如,要检查”nyc3.example.com”的forward zone配置,请运行以下命令(更改名称以匹配你自己的forward zone和文件):
1 | sudo named-checkzone nyc3.example.com /etc/named/zones/db.nyc3.example.com |
要检查”128.10.in-addr.arpa”的reverse zone配置,请运行以下命令(更改数字以匹配你自己的reverse zone和文件):
1 | sudo named-checkzone 128.10.in-addr.arpa /etc/named/zones/db.10.128 |
当所有配置和zone文件都没有错误时,您应该重新启动BIND服务。
启动BIND:
1 | sudo systemctl start named |
如果你想在OS启动时自动启动BIND服务,请执行:
1 | sudo systemctl enable named |
您的primary DNS服务器现已设置好并可以响应DNS查询了。 让我们继续创建secondary DNS服务器。
在大多数环境中,最好设置secondary DNS服务器,以便在primary服务器不可用时响应请求。幸运的是,secondary DNS服务器更容易配置。
在ns2上,编辑named.conf文件:
1 | sudo vi /etc/named.conf |
1 | 注意:如果您希望跳过这些说明,可以复制ns1的named.conf文件并对其进行修改以侦听ns2的private IP地址,and not allow transfers。 |
在现有options block上方,创建一个名为”trusted”的新ACL block。在这里我们将定义允许递归DNS查询的客户端列表(即与ns1位于同一datacenter的服务器)。使用我们的示例private IP地址,我们将ns1,ns2,host1和host2添加到trusted(可信)客户端列表中:
1 | /etc/named.conf — 1 of 4 |
现在我们有了trusted(可信)DNS客户端列表,我们将要编辑options block。将ns1的private IP地址添加到listen-on port 53指令,并注释掉listen-on-v6行:
1 | /etc/named.conf — 2 of 4 |
将allow-query指令从”localhost”更改为”trusted”:
1 | /etc/named.conf — 3 of 4 |
在文件末尾,添加以下行:
1 | /etc/named.conf — 4 of 4 |
现在保存并退出named.conf。 上述配置指定只有您自己的服务器(”trusted”服务器)才能查询您的DNS服务。
接下来,我们将配置local文件,以指定我们的DNS zones。
保存并退出named.conf。
现在编辑named.conf.local文件:
1 | sudo chmod 755 /etc/named |
定义与primary DNS服务器上的master zones对应的slave zones。请注意,类型是”slave”,文件不包含路径,并且有一个masters指令应该设置为primary DNS服务器的private IP。如果您在primary DNS服务器中定义了多个reverse zones,请确保在此处全部添加它们:
1 | /etc/named/named.conf.local |
现在保存并退出named.conf.local。
运行以下命令以检查配置文件的有效性:
1 | sudo named-checkconf |
检查后,启动BIND:
1 | sudo systemctl start named |
如果你想在OS启动时自动启动BIND服务,请执行:
1 | sudo systemctl enable named |
现在,您拥有用于private network名称和IP地址解析的primary DNS服务器和secondary DNS服务器。 现在,您必须配置客户端服务器以使用您的private DNS服务器。
在”trusted” ACL中的所有服务器都可以查询DNS服务器之前,必须将客户端服务器配置为使用ns1和ns2作为nameservers。 此过程因操作系统而异,但对于大多数Linux发行版,它涉及将name servers添加到/etc/resolv.conf文件中。
在CentOS,RedHat和Fedora Linux VPS上,只需编辑resolv.conf文件:
1 | sudo vi /etc/resolv.conf |
然后将以下行添加到文件的顶部(替换您的private domain,以及ns1和ns2 private IP地址):
1 | /etc/resolv.conf |
现在保存并退出。 客户端现在已经配置为使用您自己的DNS服务器。
在Ubuntu和Debian Linux VPS上,您可以编辑head文件,该文件在启动时附加到resolv.conf:
1 | sudo vi /etc/resolvconf/resolv.conf.d/head |
将以下行添加到文件中(替换您的private domain,以及ns1和ns2 private IP地址):
1 | /etc/resolvconf/resolv.conf.d/head |
现在运行resolvconf以生成新的resolv.conf文件:
1 | sudo resolvconf -u |
客户端现在已经配置为使用您自己的DNS服务器。
使用nslookup —— 包含在”bind-utils”包中 —— 测试您的客户端是否可以查询您的name servers。您应该能够在已配置在”trusted” ACL中的所有客户端上执行此操作。
例如,我们可以通过运行以下命令来执行forward(正向)查找以检索host1.nyc3.example.com的IP地址:
1 | nslookup host1 |
查询”host1”会扩展为”host1.nyc3.example.com”,因为搜索选项设置为您的private subdomain,在查找其他DNS server之前,DNS查询将尝试查看该subdomain。上面命令的输出如下所示:
1 | Output: |
要测试reverse(反向)查找,请使用host1的private IP地址查询DNS服务器:
1 | nslookup 10.128.100.101 |
您应该看到如下所示的输出:
1 | Output: |
如果所有名称和IP地址都解析为正确的值,则表示您的zone文件已正确配置。如果收到异常值,请务必查看primary DNS服务器上的zone文件(例如db.nyc3.example.com和db.10.128)。
恭喜! 您的内部DNS服务器现已正确设置! 现在我们将介绍如何维护您的zone records。
现在您有了一个正常工作的内部DNS,您需要维护DNS records,以便它们准确地响应您的server environment。
每当您向environment添加主机(在同一datacenter中)时,都需要将其添加到DNS中。以下是您需要执行的步骤:
Primary Nameserver(主Nameserver)
然后重新加载BIND:
1 | sudo systemctl reload named |
Secondary Nameserver(辅助Nameserver)
然后重新加载BIND:
1 | sudo systemctl reload named |
配置新主机以使用您自己的DNS
如果您从environment中删除主机或想要将其从DNS中删除,只需删除将服务器添加到DNS时添加的所有内容(即上述步骤的相反步骤)。
现在,您可以按名称而不是IP地址来访问服务器的private network interfaces。这使得服务和应用程序的配置更加容易,因为您不再需要记住private IP地址,并且文件将更易于阅读和理解。此外,现在您可以更改配置,以便在单个位置指向新服务器,即primary DNS服务器,而不必编辑各种分布式配置文件,从而简化了维护。
设置内部DNS并且配置文件使用private FQDN指定网络连接后,维护DNS服务器至关重要。如果它们都不可用,那么依赖它们的服务和应用程序将无法正常运行。这就是为什么建议使用至少一个secondary服务器设置DNS,并维护所有这些服务器的工作备份原因。
Host | Role | Private FQDN | Private IP Address |
---|---|---|---|
ns1 | Primary DNS Server | ns1.nyc3.example.com | 192.168.0.22 |
ns2 | Secondary DNS Server | ns2.nyc3.example.com | 192.168.0.23 |
dns-client | DNS client | 192.168.0.24 |
1、安装BIND在Primary DNS Server
1 | sudo yum install -y bind bind-utils |
2、修改/etc/named.conf
1 | sudo vi /etc/named.conf |
1 |
|
【图片预留】
首先安装bind rpm
1 | [root@centos ~]# yum install -y bind bind-chroot bind-utils |
【图片预留】
拷贝配置文件模板
1 | [root@centos ~]# cp -rv /usr/share/doc/bind-9.9.4/sample/etc/* /var/named/chroot/etc/ |
修改配置文件
1 | [root@centos ~]# vim /var/named/chroot/etc/named.conf |
1 | [root@centos ~]# cp -rv /var/named/chroot/var/named/named.localhost /var/named/chroot/var/named/linuxcast.net.zone |
启动bind服务
1 | [root@centos ~]# systemctl start named.service |
1 | [vagrant@docker-node1 ~]$ docker run -d --name mysql -v mysql-data:/var/lib/mysql -e MYSQL_ROOT_PASSWORD=root -e MYSQL_DATABASE=workpress mysql:5.7.24 |
如果搭建的APP有多个Container组成,部署APP的时候会非常繁琐。
1、要从Dockerfile build image或者Dockerhub拉取image
2、要创建多个Container
3、要管理这些Container(启动停止删除)
Docker Compose是一个工具
这个工具可以通过一个yml文件定义多容器的docker应用
通过一条命令就可以根据yml文件的定义去创建或者管理这多个容器
1 | 三大概念:services、networks、volumes |
demo
1 | 一个service代表一个Container,这个Container可以从dockerhub的image来创建,或者自己build出来的images来创建 |
Linux
1 | sudo curl -L "https://github.com/docker/compose/releases/download/1.23.1/docker-compose-$(uname -s)-$(uname -m)" -o /usr/local/bin/docker-compose |
基于本地文件系统的volume。可以在执行docker create或docker run时,通过-v参数将主机的目录作为容器的数据卷。这部分功能便是基于本地文件系统的volume管理。
基于plugin的volume,支持第三方的存储方案,比如NAS,aws。
受管理的data volume,由docker后台自动创建。
绑定挂载的volume,具体挂载位置可以由用户指定。
启动mysql Container,会在宿主机/var/lib/docker/volumes/目录创建持久化目录。在mysql的Dockerfile中有VOLUME /var/lib/mysql
,对应的是Container里面的路径。
1 | [vagrant@docker-node1 ~]$ sudo docker run -d --name mysql1 -e MYSQL_ALLOW_EMPTY_PASSWORD=true mysql |
data volume方式需要在Dockerfile中定义VOLUME,bind mouting方式则不需要。在docker run时,指定宿主机目录与Container内目录的对应关系即可(docker run -v /home/aaa:/root/aaa
)。