首页 文章 精选 留言 我的

精选列表

搜索[部署],共10000篇文章
优秀的个人博客,低调大师

App-V 轻量级架构(Streaming Server)新部署测试方法

实验中采用的是App-V 轻量级架构,此轻量级基础架构由Microsoft System Center Application Virtualization Streaming Server 组成,通常单独此架构没有安装App-V management server,所以对于软件分发,根据微软的资料,有三种模式SFTMIME命令,用SCCM 或者直接制作成msi 文件进行分发,这些微软在官网TechNet库利有所介绍,这里介绍另外的第四种方法,经过实验证明了可行性,假如哪里说得不对,请多多指正,谢谢! 实验环境: 纯工作组环境,工作组为A App-V Client:Windows XP2,计算机名stc App-V Streaming Server: Windows Server 2003 R2,计算机名str App-V Sequencer:Windows XP2 共享文件夹路径:App-V Streaming Server上的C:\content,访问路径为\\str\content 序列化软件:FileZilla 实验准备: 我们用Sequencer做出了一个序列化软件FileZilla,以下演示最后一步,我们点击保存,假如采用App-V独立模式,我们可以将输出选项的“生成Microsoft Windows Installer (MSI)包”打勾。因为实验中采用的是App-V 轻量级模式,所以这里可以不勾选该项 假如前一步勾选了,这里将有一个叫file的msi文件生成,通过各种方式的推送传送到客户端安装,这就是App-V独立模式。实验中采用的是App-V 轻量级模式,所以我们关注的是其他的文件,这次实验我们关注的是XML文件 以下分享第四种方法,用好XML清单文件。假如你已经装了App-V management server ,那还是建议你用Management console将application导入等常规方法,但是假如你没有安装只安装了Streaming Server ,只测试一下是否程序可以运行,或者你不需要进行个性化的修改,那么用这第四种方法不失为一种方法。我们打开如上图所示的XML文件,这个XML清单文件是一个在App-V 4.5中的新文件,当你在Sequencer中保存文件时,这个XML就会随之生成,并且命名与SPRJ, SFT文件名类似,只是多了_MANIFEST在后面。这个XML文件包含了做序列化的软件的创建桌面图标,快速启动栏,开始菜单快捷方式,文件类型关联等所有信息 实验步骤: 1. 我们将C :\content 的share permission设置为everyone为read权限,并且在security中也增加everyone, 开放默认权限 2. 我们使用命令SFTMIME.EXE ,输入命令 add package: 包名称/manifest XML路径/overrideurl sft路径 package名称可以用任意唯一的名字,当然最好与虚拟化软件时候的名称相同了,这里因为是实验,用123这个包名也无妨 这段语句这里告诉Client端程序包的具体位置,如XML清单文件描述。使用这个语句,无需打开Application Virtualization Client做任何操作,例如导入应用程序和设置文件关联,因为这些信息已经在XML清单文件中包含了,而且Application Virtualization Client无法自动识别发布服务器,手动添加会报错,但这不影响最后的结果,因为这个实验不需要在Application Virtualization Client中做任何操作 以下是参数解释: 参数 描述 /MANIFEST <清单路径> 清单文件的路径或 URL,该文件中列有程序包中包括的应用程序及其所有发布信息。 /OVERRIDEURL <URL> 程序包的 SFT 文件的位置。 我们输入完命令后,按回车看看效果,图标已经出来了 4. 我们可以看到桌面有图标,开始菜单栏也有了快捷方式 5. 我们点一下图标,发现无法进入,其实我们差最后一步, 离成功很近了 6. 这一步是关键,打开注册表,HKLM\Software\Microsoft\SoftGrid\4.5\Client\Configuration\AllowIndependentFileStreaming, 把0 改为1 7. 我们看看最后的效果 后语: 这是一种快捷的发布方式,一条命令即可推送而不需要额外的配置,但因为App-V streaming server这种轻量级架构不具备图形化的控制界面,假如你需要更多的个性化设置,可以使用SFTMIME命令,这里提供微软TechNet知识库连接以作参考 本文转自 VirtualTom 51CTO博客,原文链接:http://blog.51cto.com/virtualtom/272238,如需转载请自行联系原作者

优秀的个人博客,低调大师

用tarball实现liferay自动安装部署5-shell 脚本概述

做了前面所有步骤的概述,现在就开始讲解tarball中最核心,也是最重要的部分了--shell script,否则怎么能成为tarball呢。 从总体上,基于公司的需求,我们将脚本分化在5个子脚本中,以下是这些脚本的介绍,我直接从架构文档上复制过来了: Script Name Description configure-helper.sh This script is used for setting the constants,variables and do fundamental calculation or string parsing. configure.sh It will read the constants,variables defined in configure-helper.sh and actually do the fresh install work on a new machine. start.sh It will read configure-helper.sh and start the liferay server. stop.sh It will read configure-helper.sh and stop the liferay server. unconfigure.sh Environment cleanup (Now we haven’t defined the responsibility clearly ,so we leave it blank) 本文转自 charles_wang888 51CTO博客,原文链接:http://blog.51cto.com/supercharles888/979803,如需转载请自行联系原作者

优秀的个人博客,低调大师

Openstack 安装部署指南翻译系列 之 启动一个实例

本节创建必要的虚拟网络以支持启动实例。网络选项1包括一个提供者provider(external)网络,一个实例使用它。网络选项2包括一个提供商provider网络,一个实例使用它,一个自助服务(private)网络与一个使用它的实例。本节中的说明使用控制器节点上的命令行界面(CLI)工具。但是,可以按照安装工具的任何主机上的说明进行操作。有关CLI工具的更多信息,请参阅Pike的OpenStackClient文档。要使用仪表板(dashboard),请参阅仪表板(dashboard)用户文档。 1.1.1.1.创建虚拟网络 为配置Neutron时选择的网络选项创建虚拟网络。如果选择选项1,只创建提供商网络。如果选择选项2,需创建提供商和自助服务网络。 1.1.1.1.1.提供商网络 在启动实例之前,必须创建必要的虚拟网络基础架构。对于网络选项1,实例使用通过第2层(桥接/切换)连接到物理网络基础设施的提供商(外部)网络。该网络包括为实例提供IP地址的DHCP服务器。 该admin或其他特权用户必须创建此网络,因为它直接连接到物理网络基础架构。 注意:以下说明和图表使用示例IP地址范围。必须根据特定环境进行调整。 网络选项1:提供商网络 - 概述 网络选项1:提供商网络 - 连接 1.1.1.1.1.1.创建提供商网络 1、在控制器节点上,输入admin凭据以访问仅管理CLI命令: $ . admin-openrc 2、创建网络: $ openstack network create --share --external \ --provider-physical-network provider \ --provider-network-type flat provider 该--share选项允许所有项目使用虚拟网络。 该--external选项将虚拟网络定义为外部网络。如果您想创建一个内部网络,可以改用--internal。默认值为internal。 --provider-physical-network provider 和 --provider-network-type flat使用以下文件中的信息将平面虚拟网络连接到主机接口上的平面(native/untagged)物理网络: ml2_conf.ini: [ml2_type_flat] flat_networks = provider linuxbridge_agent.ini: [linux_bridge] physical_interface_mappings = provider:eth1 3、在网络上创建一个子网: $ openstack subnet create --network provider \ --allocation-pool start=START_IP_ADDRESS,end=END_IP_ADDRESS \ --dns-nameserver DNS_RESOLVER --gateway PROVIDER_NETWORK_GATEWAY \ --subnet-range PROVIDER_NETWORK_CIDR provider 用PROVIDER_NETWORK_CIDRCIDR表示法替代提供商物理网络上的子网。 替换START_IP_ADDRESS及END_IP_ADDRESS使用要为实例分配的子网内范围的第一个和最后一个IP地址。此范围不得包含任何现有的活动IP地址。 替换DNS_RESOLVER为DNS解析器的IP地址。在大多数情况下,可以使用/etc/resolv.conf主机上的文件中的一个。 替换PROVIDER_NETWORK_GATEWAY为提供商网络上的网关IP地址,通常为“.1”IP地址。 例如:提供商网络在203.0.113.1上使用203.0.113.0/24网关。DHCP服务器将每个实例的IP地址从203.0.113.101分配到203.0.113.250。所有实例使用8.8.4.4作为DNS解析器,运行下面的命令: $ openstack subnet create --network provider \ --allocation-pool start=203.0.113.101,end=203.0.113.250 \ --dns-nameserver 8.8.4.4 --gateway 203.0.113.1 \ --subnet-range 203.0.113.0/24 provider 1.1.1.1.1.自服务(self-service)网络 如果选择网络选项2,还可以创建通过NAT连接到物理网络基础架构的自服务(self-service)(私有)网络。该网络包括为实例提供IP地址的DHCP服务器。该网络上的一个实例可以自动访问Internet等外部网络。但是,从互联网这样的外部网络访问该网络上的实例需要一个浮动IP地址。 demo或其他非特权用户可以创建此网络,它仅提供与demo项目中的实例的连接。 警告:必须在自服务网络之前创建提供商(provider)网络。 注意:以下说明和图表使用示例IP地址范围。必须根据您的特定环境进行调整。 网络选项2:自助服务网络 - 概述 网络选项2:自服务网络 - 连接图 1.1.1.1.1.1.创建自助网络 1、在控制器节点上,输入demo凭据以访问仅限用户的CLI命令: $ . demo-openrc 2、创建网络: $ openstack network create selfservice 非特权用户通常不能为此命令提供其他参数。该服务使用以下文件中的信息自动选择参数: ml2_conf.ini: [ml2] tenant_network_types = vxlan [ml2_type_vxlan] vni_ranges = 1:1000 3、在网络上创建一个子网: $ openstack subnet create --network selfservice \ --dns-nameserver DNS_RESOLVER --gateway SELFSERVICE_NETWORK_GATEWAY \ --subnet-range SELFSERVICE_NETWORK_CIDR selfservice 替换DNS_RESOLVER为DNS解析器的IP地址。在大多数情况下,可以使用/etc/resolv.conf主机上的文件中的一个。 替换SELFSERVICE_NETWORK_GATEWAY为要在自助服务网络上使用的网关,通常为“.1”IP地址。 替换SELFSERVICE_NETWORK_CIDR为要在自助服务网络上使用的子网。尽管我们建议使用RFC 1918的网络,您可以使用任意值。 例如:自助网络在172.16.1.1上使用172.16.1.0/24网关。DHCP服务器为每个实例分配一个从172.16.1.2到172.16.1.254的IP地址。所有实例使用8.8.4.4作为DNS解析器。 $ openstack subnet create --network selfservice \ --dns-nameserver 8.8.4.4 --gateway 172.16.1.1 \ --subnet-range 172.16.1.0/24 selfservice 1.1.1.1.1.2.创建路由器 自助网络使用通常执行双向NAT的虚拟路由器连接到提供商网络。每个路由器包含至少一个自助服务网络和提供商网络上的网关的接口。 提供商网络必须包括router:external使自助路由器能够使用它来连接外部网络(如Internet)的选项。本admin或其他特权用户必须包括网络创建过程中,此选项或以后添加。在这种情况下,router:external通过--external在创建provider网络时使用参数来设置该选项。 1、在控制器节点上,输入demo凭据以访问仅限用户的CLI命令: $ . demo-openrc 2、创建路由器: $ openstack router create router 3、在路由器上添加自助网络子网作为接口: $ neutron router-interface-add router selfservice 4、在路由器上的提供商网络上设置网关: $ neutron router-gateway-set router provider 1.1.1.1.1.3.验证操作 在继续操作之前验证操作并修复任何问题。以下步骤使用网络和子网创建示例中的IP地址范围。 1、在控制器节点上,输入admin凭据以访问仅管理CLI命令: $ . admin-openrc 2、列出网络命名空间。你应该看到一个qrouter命名空间和两个 qdhcp命名空间。 $ ip netns 3、列出路由器上的端口以确定提供商网络上的网关IP地址: $ neutron router-port-list router 4、从控制器节点或物理提供商网络上的任何主机Ping此IP地址: $ ping -c 4 203.0.113.102 1.1.1.1.创建m1.nano规格 最小默认规格每个实例消耗512 MB内存。对于包含小于4 GB内存的计算节点的环境,建议创建m1.nano每个实例只需要64 MB 的规格。只有使用这种规格与CirrOS图像进行测试。 $ openstack flavor create --id 0 --vcpus 1 --ram 64 --disk 1 m1.nano 1.1.1.2.生成一个密钥对 大多数云镜像支持公钥认证,而不是传统的密码认证。在启动实例之前,必须向Compute服务添加公钥。 1、生效demo项目凭证: $ . demo-openrc 2、生成一个密钥对并添加公钥: $ ssh-keygen -q -N "" $ openstack keypair create --public-key ~/.ssh/id_rsa.pub mykey 注意:或者,您可以跳过该ssh-keygen命令并使用现有的公钥。 3、验证加密密钥对: $ openstack keypair list 1.1.1.3.添加安全组规则 默认情况下,default安全组应用于所有实例,并包括拒绝远程访问实例的防火墙规则。对于像CirrOS这样的Linux映像,建议至少允许ICMP(ping)和安全shell(SSH)。 向default安全组添加规则: 允许ICMP(ping): $ openstack security group rule create --proto icmp default 允许安全shell(SSH)访问: $ openstack security group rule create --proto tcp --dst-port 22 default 1.1.1.4.启动一个实例 如果选择了网络选项1,则只能在提供商网络上启动实例。如果选择了网络选项2,则可以在提供商网络和自助服务网络上启动一个实例。 1.1.1.4.1.在提供商网络上启动一个实例 1.1.1.4.1.1.确定实例选项 要启动实例,必须至少指定flavor(规格),镜像名称,网络,安全组,密钥和实例名称。 1、在控制器节点上,输入demo凭据以访问仅限用户的CLI命令: $ . demo-openrc 2、一个flavor指定一个包含处理器,内存和存储的虚拟资源分配配置文件。列出可用的规格: $ openstack flavor list 注意:还可以通过ID引用规格。 3、列出可用镜像: $ openstack image list 此实例使用cirros镜像。 4、列出可用网络: $ openstack network list 此实例使用provider提供商网络。但是,必须使用ID而不是名称来引用此网络。 注意:如果选择选项2,则输出也应包含 selfservice自助服务网络。 5、列出可用的安全组: $ openstack security group list 此实例使用default安全组。 1.1.1.4.1.2.启动实例 1、启动实例: 替换PROVIDER_NET_ID为provider提供商网络的ID 。 注意:如果选择了选项1,并且您的环境仅包含一个网络,则可以省略该--nic选项,因为OpenStack会自动选择唯一可用的网络。 $ openstack server create --flavor m1.nano --image cirros \ --nic net-id=PROVIDER_NET_ID --security-group default \ --key-name mykey provider-instance 2、检查您的实例的状态: $ openstack server list 状态从改变BUILD到ACTIVE时构建过程成功完成。 1.1.1.4.1.3.使用虚拟控制台访问实例 1、获取实例的虚拟网络计算(VNC)会话URL,并从Web浏览器访问它: $ openstack console url show provider-instance 注意:如果您的Web浏览器在无法解析controller主机名,则可以controller使用控制器节点上IP地址。 CirrOS映像包括传统的用户名/密码认证,并在登录提示符下提供这些凭据。登录CirrOS后,建议您使用以下网络连接进行验证ping。 2、验证对提供商物理网关的访问权限: $ ping -c 4 203.0.113.1 3、验证访问互联网: $ ping -c 4 openstack.org 1.1.1.4.1.4.远程访问该实例 1、验证从控制器节点或提供商物理网络上的任何主机到实例的连接: $ ping -c 4 203.0.113.103 2、使用SSH从控制器节点或提供商物理网络上的任何主机访问您的实例: $ ssh cirros@203.0.113.103 1.1.1.4.2.在自助服务网络上启动一个实例 1.1.1.4.2.1.确定实例选项 要启动实例,必须至少指定flavor,镜像名称,网络,安全组,密钥和实例名称。 1、在控制器节点上,输入demo凭据以访问仅限用户的CLI命令: $ . demo-openrc 2、一个flavor指定一个包含处理器,内存和存储的虚拟资源分配配置文件。列出可用的flavor: $ openstack flavor list 3、列出可用镜像: $ openstack image list 此实例使用cirros镜像。 4、列出可用网络: $ openstack network list 此实例使用selfservice自助服务网络。但是,您必须使用ID而不是名称来引用此网络。 5、列出可用的安全组: $ openstack安全组列表 $ openstack security group list 此实例使用default安全组。 6、启动实例: 替换SELFSERVICE_NET_ID为selfservice网络的ID 。 $ openstack server create --flavor m1.nano --image cirros \ --nic net-id=SELFSERVICE_NET_ID --security-group default \ --key-name mykey selfservice-instance 7、检查实例的状态: $ openstack server list 状态从改变BUILD到ACTIVE时构建过程成功完成。 1.1.1.4.2.2.使用虚拟控制台访问实例 1、获取 您的实例的虚拟网络计算(VNC)会话URL,并从Web浏览器访问它: $ openstack console url show selfservice-instance 注意:如果您的Web浏览器在无法解析controller主机名,则可以使用控制器节点IP地址替换。 CirrOS映像包括传统的用户名/密码认证,并在登录提示符下提供这些凭据。登录CirrOS后,建议您使用以下网络连接进行验证ping。 2、验证对自助网关的访问权限: $ ping -c 4 172.16.1.1 3、验证访问互联网: $ ping -c 4 openstack.org 1.1.1.4.2.3.远程访问该实例 1、在提供商虚拟网络上创建一个浮动IP地址: $ openstack floating ip create provider 2、将浮动IP地址与实例相关联: $ openstack server add floating ip selfservice-instance 203.0.113.104 3、检查您的浮动IP地址的状态: $ openstack server list 4、通过控制器节点或提供商物理网络上的任何主机通过浮动IP地址验证与实例的连接: $ ping -c 4 203.0.113.104 5、使用SSH从控制器节点或提供商物理网络上的任何主机访问您的实例: $ ssh cirros@203.0.113.104 本文转自yuweibing51CTO博客,原文链接:http://blog.51cto.com/yuweibing/1981188 ,如需转载请自行联系原作者

优秀的个人博客,低调大师

Openstack 安装部署指南翻译系列 之 Cinder服务安装(Block Storage)

1.1.1.1.Cinder服务安装(Block Storage) 块存储服务(cinder)为访客实例提供块存储设备。存储设置方法由块存储驱动程序确定,或者在多后端配置的情况下确定驱动程序。有各种可用的驱动程序:NAS / SAN,NFS,iSCSI,Ceph等。 块存储API和调度器服务通常在控制器节点上运行。根据使用的驱动程序,卷服务可以在控制器节点,计算节点或独立存储节点上运行。 本节介绍如何为块存储服务安装和配置存储节点。为了简单起见,此配置引用一个具有空的本地块存储设备的存储节点。说明使用/dev/sdb,但您可以替换特定节点的其他值。 该服务使用LVM驱动程序在此设备上提供逻辑卷,并通过iSCSI传输将其提供给实例。您可以按照这些说明进行细微的修改,以使用附加的存储节点水平扩展环境。 1.1.1.1.1.安装和配置存储节点 1.1.1.1.1.1.先决条件 在存储节点上安装和配置块存储服务之前,必须准备存储设备。 注意:在存储节点上执行这些步骤。 安装支持实用程序包: 安装LVM软件包: # yum install lvm2 启动LVM元数据服务并将其配置为在系统引导时启动: # systemctl enable lvm2-lvmetad.service # systemctl start lvm2-lvmetad.service 注意:一些发行版默认情况下包括LVM。 创建LVM物理卷/dev/sdb: # pvcreate /dev/sdb Physical volume "/dev/sdb" successfully created 创建LVM卷组cinder-volumes: # vgcreate cinder-volumes /dev/sdb Volume group "cinder-volumes" successfully created 块存储服务在此卷组中创建逻辑卷。 只有实例可以访问块存储卷。但是,底层操作系统管理与卷关联的设备。默认情况下,LVM卷扫描工具将扫描/dev包含卷的块存储设备的 目录。如果项目在其卷上使用LVM,则扫描工具会检测这些卷并尝试缓存它们,这可能会导致底层操作系统和项目卷的各种问题。您必须重新配置LVM以仅扫描包含cinder-volumes卷组的设备。编辑/etc/lvm/lvm.conf文件并完成以下操作: 在本devices节中,添加一个接受/dev/sdb设备并拒绝所有其他设备的过滤器: devices { ... filter = [ "a/sdb/", "r/.*/"] 过滤器阵列中的每个项目以a表示accept或r表示reject开头,并包含设备名称的正则表达式。阵列必须结束r/.*/以拒绝任何剩余的设备。您可以使用vgs -vvvv命令来测试过滤器。 警告:如果存储节点在操作系统磁盘上使用LVM,则还必须将关联的设备添加到过滤器。例如,如果/dev/sda设备包含操作系统: filter = [ "a/sda/", "a/sdb/", "r/.*/"] 同样,如果您的计算节点在操作系统磁盘上使用LVM,则还必须修改/etc/lvm/lvm.conf这些节点上的文件中的过滤器, 以仅包括操作系统磁盘。例如,如果/dev/sda设备包含操作系统: filter = [ "a/sda/", "r/.*/"] 1.1.1.1.1.2.安装和配置组件 安装软件包: # yum install openstack-cinder targetcli python-keystone 编辑/etc/cinder/cinder.conf文件并完成以下操作: 在该[database]部分中,配置数据库访问: [database] # ... connection = mysql+pymysql://cinder:CINDER_DBPASS@controller/cinder 替换CINDER_DBPASS为块存储数据库选择的密码。 在本[DEFAULT]节中,配置RabbitMQ消息队列访问: [DEFAULT] # ... transport_url = rabbit://openstack:RABBIT_PASS@controller 替换RABBIT_PASS为您为该openstack帐户选择的密码RabbitMQ。 在[DEFAULT]和[keystone_authtoken]部分中,配置身份服务访问: [DEFAULT] # ... auth_strategy = keystone [keystone_authtoken] # ... auth_uri = http://controller:5000 auth_url = http://controller:35357 memcached_servers = controller:11211 auth_type = password project_domain_name = default user_domain_name = default project_name = service username = cinder password = CINDER_PASS 替换CINDER_PASS为cinder身份服务中为用户选择的密码 。 注意:注释或删除该[keystone_authtoken]部分中的任何其他选项 。 在本[DEFAULT]节中,配置my_ip选项: [DEFAULT] # ... my_ip = MANAGEMENT_INTERFACE_IP_ADDRESS 替换MANAGEMENT_INTERFACE_IP_ADDRESS为存储节点上的管理网络接口的IP地址,通常为示例体系结构中第一个节点的10.0.0.41。 在本[lvm]节中,使用LVM驱动程序,cinder-volumes卷组,iSCSI协议和适当的iSCSI服务配置LVM后端。如果该[lvm]部分不存在,请创建它: [lvm] volume_driver = cinder.volume.drivers.lvm.LVMVolumeDriver volume_group = cinder-volumes iscsi_protocol = iscsi iscsi_helper = lioadm 在本[DEFAULT]节中,启用LVM后端: [DEFAULT] # ... enabled_backends = lvm 注意:后端名称是任意的。作为示例,本指南使用驱动程序的名称作为后端的名称。 在该[DEFAULT]部分中,配置Image Service API的位置: [DEFAULT] # ... glance_api_servers = http://controller:9292 在该[oslo_concurrency]部分中,配置锁定路径: [oslo_concurrency] # ... lock_path = /var/lib/cinder/tmp 1.1.1.1.1.3.完成安装 启动Block Storage卷服务,包括其依赖关系,并将其配置为在系统引导时启动: # systemctl enable openstack-cinder-volume.service target.service # systemctl start openstack-cinder-volume.service target.service 1.1.1.1.2.安装和配置控制器节点 本节介绍如何在控制器节点上安装和配置块存储服务(代号为Cinder)。此服务需要至少一个向实例提供卷的附加存储节点。 1.1.1.1.2.1.先决条件 在安装和配置块存储服务之前,必须创建一个数据库,服务凭证和API端点。 要创建数据库,请完成以下步骤: 使用数据库访问客户端作为root用户连接到数据库服务器: $ mysql -u root -p 创建cinder数据库: MariaDB [(none)]> CREATE DATABASE cinder; 授予对cinder数据库的正确访问权限: MariaDB [(none)]> GRANT ALL PRIVILEGES ON cinder.* TO 'cinder'@'localhost' \ IDENTIFIED BY 'CINDER_DBPASS'; MariaDB [(none)]> GRANT ALL PRIVILEGES ON cinder.* TO 'cinder'@'%' \ IDENTIFIED BY 'CINDER_DBPASS'; 更换CINDER_DBPASS一个合适的密码。 退出数据库访问客户端。 输入admin凭据以访问仅管理CLI命令: $ . admin-openrc 要创建服务凭据,请完成以下步骤: 创建cinder用户: $ openstack user create --domain default --password-prompt cinder User Password: Repeat User Password: 将admin角色添加到cinder用户: $ openstack role add --project service --user cinder admin 创建cinderv2和cinderv3服务实体: $ openstack service create --name cinderv2 \ --description "OpenStack Block Storage" volumev2 $ openstack service create --name cinderv3 \ --description "OpenStack Block Storage" volumev3 注意:块存储服务需要两个服务实体。 创建块存储服务API端点: $ openstack endpoint create --region RegionOne \ volumev2 public http://controller:8776/v2/%\(project_id\)s $ openstack endpoint create --region RegionOne \ volumev2 internal http://controller:8776/v2/%\(project_id\)s $ openstack endpoint create --region RegionOne \ volumev2 admin http://controller:8776/v2/%\(project_id\)s $ openstack endpoint create --region RegionOne \ volumev3 public http://controller:8776/v3/%\(project_id\)s $ openstack endpoint create --region RegionOne \ volumev3 internal http://controller:8776/v3/%\(project_id\)s $ openstack endpoint create --region RegionOne \ volumev3 admin http://controller:8776/v3/%\(project_id\)s 注意:块存储服务需要每个服务实体的端点。 1.1.1.1.2.2.安装和配置组件 安装软件包: # yum install openstack-cinder 编辑/etc/cinder/cinder.conf文件并完成以下操作: 在该[database]部分中,配置数据库访问: [database] # ... connection = mysql+pymysql://cinder:CINDER_DBPASS@controller/cinder 替换CINDER_DBPASS为块存储数据库选择的密码。 在本[DEFAULT]节中,配置RabbitMQ消息队列访问: [DEFAULT] # ... transport_url = rabbit://openstack:RABBIT_PASS@controller 替换RABBIT_PASS为您为该openstack帐户选择的密码RabbitMQ。 在[DEFAULT]和[keystone_authtoken]部分中,配置身份服务访问: [DEFAULT] # ... auth_strategy = keystone [keystone_authtoken] # ... auth_uri = http://controller:5000 auth_url = http://controller:35357 memcached_servers = controller:11211 auth_type = password project_domain_name = default user_domain_name = default project_name = service username = cinder password = CINDER_PASS 替换CINDER_PASS为cinder身份服务中为用户选择的密码。 注意:注释或删除该[keystone_authtoken]部分中的任何其他选项 。 在该[DEFAULT]部分中,配置该my_ip选项以使用控制器节点的管理接口IP地址: [DEFAULT] # ... my_ip = 10.0.0.11 在该[oslo_concurrency]部分中,配置锁定路径: [oslo_concurrency] # ... lock_path = /var/lib/cinder/tmp 填充Block Storage数据库: # su -s /bin/sh -c "cinder-manage db sync" cinder 1.1.1.1.2.3.配置计算以使用块存储 编辑/etc/nova/nova.conf文件并添加以下内容: [cinder] os_region_name = RegionOne 1.1.1.1.2.4.完成安装 重新启动Compute API服务: # systemctl restart openstack-nova-api.service 启动Block Storage服务并将其配置为在系统启动时启动: # systemctl enable openstack-cinder-api.service openstack-cinder-scheduler.service # systemctl start openstack-cinder-api.service openstack-cinder-scheduler.service 本文转自yuweibing51CTO博客,原文链接:http://blog.51cto.com/yuweibing/1981184 ,如需转载请自行联系原作者

优秀的个人博客,低调大师

MCollective架构篇7-多MQ下MCollective高可用部署

零基础学习Puppet自动化配置管理系列文档 存在这样一种场景,当你的puppet基于mcollective环境搭建完成之后,需要考虑MQ的高可用,否则,MQ挂掉之后就不能用mco命令进行推送了哦。 如何做MQ的高可用呢,其实有两种方法: 方法一:两台MQ做集群,通过复制队列信息进行同步,节点访问可通过浮动IP进行。 方法二:两台MQ独立,在MC Server端做failover,通过rabbtimq的plugins参数实现,可设置自动检测,切换时间等等。 一、配置Rabbitmq 安装(略),可参考http://kisspuppet.com/2013/11/10/mcollective-middleware/或http://rsyslog.org/2013/11/10/mcollective-middleware/ 1. 开启插件rabbitmq_stomp [root@linuxmaster1poc~]#rabbitmq-pluginsenablerabbitmq_stomp Thefollowingpluginshavebeenenabled: rabbitmq_stomp Pluginconfigurationhaschanged.RestartRabbitMQforchangestotakeeffect. 2. 添加tcp监听端口和范围 [root@linuxmaster1poc~]#vim/etc/rabbitmq/rabbitmq.config [ {rabbitmq_stomp,[{tcp_listeners,[61613]}]} ]. 备注:可参考http://www.rabbitmq.com/stomp.html 3. 创建账户并设置权限 如果你以前配置过,建议将配置清空 [root@linuxmaster1poc~]#rabbitmqctlstop_app Stoppingnoderabbit@linuxmaster1poc... ...done. [root@linuxmaster1poc~]#rabbitmqctlreset Resettingnoderabbit@linuxmaster1poc... ...done. [root@linuxmaster1poc~]#rabbitmqctlstart_app Startingnoderabbit@linuxmaster1poc... ...done. 删除默认用户guest,添加三个用户(web_admin-http访问用,admin--管理员,mc_rabbitmq--mcollective链接用) [root@linuxmaster1poc~]#rabbitmqctllist_users Listingusers... guest[administrator] ...done. [root@linuxmaster1poc~]#rabbitmqctldelete_userguest Deletinguser"guest"... ...done. [root@linuxmaster1poc~]#rabbitmqctladd_usermc_rabbitmq123.com Creatinguser"mc_rabbitmq"... ...done. [root@linuxmaster1poc~]#rabbitmqctladd_useradminpassword=123.com Creatinguser"admin"... ...done. [root@linuxmaster1poc~]#rabbitmqctladd_userweb_admin123.com Creatinguser"web_admin"... ...done. 设置用户的角色 [root@linuxmaster1poc~]#rabbitmqctlset_user_tagsadminadministrator Settingtagsforuser"admin"to[administrator]... ...done. [root@linuxmaster1poc~]#rabbitmqctlset_user_tagsweb_adminmonitoring Settingtagsforuser"web_admin"to[monitoring]... ...done. 创建虚拟主机组 [root@linuxmaster1poc~]#rabbitmqctladd_vhost/mcollective Creatingvhost"/mcollective"... ...done. 设置用户访问虚拟主机组的权限 [root@linuxmaster1poc~]#rabbitmqctlset_permissions-p"/mcollective"mc_rabbitmq".*"".*"".*" Settingpermissionsforuser"mc_rabbitmq"invhost"/mcollective"... ...done. [root@linuxmaster1poc~]#rabbitmqctlset_permissions-p"/mcollective"admin".*"".*"".*" Settingpermissionsforuser"admin"invhost"/mcollective"... ...done. [root@linuxmaster1poc~]#rabbitmqctlset_permissions-p"/mcollective"web_admin".*"".*"".*" Settingpermissionsforuser"web_admin"invhost"/mcollective"... ...done. 重启rabbitmq-server服务 [root@linuxmaster1poc~]#/etc/init.d/rabbitmq-serverrestart Restartingrabbitmq-server:SUCCESS rabbitmq-server. 查看用户以及角色是否创建成功 [root@linuxmaster1poc~]#rabbitmqctllist_users Listingusers... admin[administrator] mc_rabbitmq[] web_admin[monitoring] ...done. 查看虚拟主机组“/mcollective”中所有用户的权限 [root@linuxmaster1poc~]#rabbitmqctllist_permissions-p"/mcollective" Listingpermissionsinvhost"/mcollective"... admin.*.*.* mc_rabbitmq.*.*.* web_admin.*.*.* ...done. [root@linuxmaster1poc~]# 4、登录http://192.168.100.120:15672/设置虚拟主机“/mcollective”的exchanges 默认配置 [root@linuxmaster1poc~]#rabbitmqctllist_exchanges-p"/mcollective" Listingexchanges... direct amq.directdirect amq.fanoutfanout amq.headersheaders amq.matchheaders amq.rabbitmq.tracetopic amq.topictopic ...done. exchanges设置 设置后更新配置 exchanges设置 [root@linuxmaster1poc~]#rabbitmqctllist_exchanges-p"/mcollective" Listingexchanges... direct amq.directdirect amq.fanoutfanout amq.headersheaders amq.matchheaders amq.rabbitmq.tracetopic amq.topictopic mcollective_broadcasttopic mcollective_directeddirect ...done. 备注:可参考官网设置https://www.rabbitmq.com/man/rabbitmqctl.1.man.html 二、 配置MCollective: 1. 配置mcollective client端 [root@linuxmaster1poctesting]#cat/etc/mcollective/client.cfg topicprefix=/topic/ main_collective=mcollective collectives=mcollective libdir=/usr/libexec/mcollective logger_type=console #loglevel=debug loglevel=warn #Plugins securityprovider=psk plugin.psk=a36cd839414370e10fd281b8a38a4f48 direct_addressing=1 connector=rabbitmq plugin.rabbitmq.vhost=/mcollective#虚拟主机 plugin.rabbitmq.pool.size=2#设置地址池里有两个mq plugin.rabbitmq.initial_reconnect_delay=0.01 plugin.rabbitmq.max_reconnect_delay=30.0#重连时间 plugin.rabbitmq.use_exponential_back_off=true plugin.rabbitmq.back_off_multiplier=2 plugin.rabbitmq.max_reconnect_attempts=0 plugin.rabbitmq.randomize=false plugin.rabbitmq.timeout=-1 plugin.rabbitmq.pool.1.host=192.168.100.120 plugin.rabbitmq.pool.1.port=61613 plugin.rabbitmq.pool.1.user=mc_rabbitmq plugin.rabbitmq.pool.1.password=123.com plugin.rabbitmq.pool.1.ssl=false plugin.rabbitmq.pool.2.host=192.168.100.121 plugin.rabbitmq.pool.2.port=61613 plugin.rabbitmq.pool.2.user=mc_rabbitmq plugin.rabbitmq.pool.2.password=123.com plugin.rabbitmq.pool.2.ssl=false #Facts factsource=yaml plugin.yaml=/etc/mcollective/facts.yaml 2. 配置mcollective server端 [root@linux57poctmp]#cat/etc/mcollective/server.cfg #--Global-- topicprefix=/topic/ main_collective=mcollective collectives=mcollective libdir=/usr/libexec/mcollective logfile=/var/log/puppet/mcollective.log loglevel=info daemonize=1 #--rabbitmqPlugins-- securityprovider=psk plugin.psk=a36cd839414370e10fd281b8a38a4f48 direct_addressing=1 connector=rabbitmq plugin.rabbitmq.vhost=/mcollective plugin.rabbitmq.pool.size=2 plugin.rabbitmq.initial_reconnect_delay=0.01 plugin.rabbitmq.max_reconnect_delay=30.0 plugin.rabbitmq.use_exponential_back_off=true plugin.rabbitmq.back_off_multiplier=2 plugin.rabbitmq.max_reconnect_attempts=0 plugin.rabbitmq.randomize=false plugin.rabbitmq.timeout=-1 plugin.rabbitmq.pool.1.host=192.168.100.120 plugin.rabbitmq.pool.1.port=61613 plugin.rabbitmq.pool.1.user=mc_rabbitmq plugin.rabbitmq.pool.1.password=123.com plugin.rabbitmq.pool.1.ssl=false plugin.rabbitmq.pool.2.host=192.168.100.121 plugin.rabbitmq.pool.2.port=61613 plugin.rabbitmq.pool.2.user=mc_rabbitmq plugin.rabbitmq.pool.2.password=123.com plugin.rabbitmq.pool.2.ssl=false #--Puppetproviderspecificoptions-- plugin.service.provider=puppet plugin.service.puppet.hasstatus=true plugin.service.puppet.hasrestart=true plugin.puppet.command=puppetagent plugin.puppet.splay=true plugin.puppet.splaylimit=30 plugin.puppet.config=/etc/puppet/puppet.conf #--Facts-- factsource=yaml ##factsource=facter plugin.yaml=/etc/mcollective/facts.yaml 三、高可用测试 特别注意:节点mcollective的server.cfg中pool是有优先级的,默认数字小的生效,这点需要注意,也就是说当所有节点都连接在MQ2上的时候,启动MQ1,mco命令是无法使用的,因为它在运行的时候连接的是MQ1,而所有节点都连接在MQ2上。 1. 停止MQ1,查看切换状态 1.1 先看当前的节点连接状态 [root@linuxmaster1poc~]#mcoping#查看连接的节点 linux57poctime=69.46ms linux58poctime=70.05ms linux64poctime=70.59ms ----pingstatistics---- 3repliesmax:70.59min:69.46avg:70.03 [root@linuxmaster1poc~]#mcoshell"lsof-i:61613"#查看所有节点监听的端口情况,可以看到目前都连接在linuxmaster1poc上。 Doyoureallywanttosendthiscommandunfiltered?(y/n):y Discoveringhostsusingthemcmethodfor2second(s)....3 Host:linux64poc Statuscode:0 Output: COMMANDPIDUSERFDTYPEDEVICESIZE/OFFNODENAME ruby36625root6uIPv4277710t0TCPlinux64poc:40493->linuxmaster1poc:61613(ESTABLISHED) Host:linux58poc Statuscode:0 Output: COMMANDPIDUSERFDTYPEDEVICESIZE/OFFNODENAME ruby11060root6uIPv4340460t0TCPlinux58poc:36295->linuxmaster1poc:61613(ESTABLISHED) Host:linux57poc Statuscode:0 Output: COMMANDPIDUSERFDTYPEDEVICESIZENODENAME ruby18076root6uIPv41351365TCPlinux57poc:24698->linuxmaster1poc:61613(ESTABLISHED) [root@linuxmaster1poc~]#/etc/init.d/rabbitmq-serverstop Stoppingrabbitmq-server:rabbitmq-server. 1.2 再次运行mco查看切换状态 [root@linuxmaster1poc~]#mcoping linux58poctime=73.54ms linux64poctime=74.61ms linux57poctime=75.39ms ----pingstatistics---- 3repliesmax:75.39min:73.54avg:74.51 [root@linuxmaster1poc~]#mcoshell"lsof-i:61613" Doyoureallywanttosendthiscommandunfiltered?(y/n):y Discoveringhostsusingthemcmethodfor2second(s)....3 Host:linux58poc Statuscode:0 Output: COMMANDPIDUSERFDTYPEDEVICESIZE/OFFNODENAME ruby11060root6uIPv4340460t0TCPlinux58poc:36295->linuxmaster1poc:61613(CLOSE_WAIT) ruby11060root9uIPv4341370t0TCPlinux58poc:47200->linuxmaster2poc:61613(ESTABLISHED) Host:linux64poc Statuscode:0 Output: COMMANDPIDUSERFDTYPEDEVICESIZE/OFFNODENAME ruby36625root6uIPv4277710t0TCPlinux64poc:40493->linuxmaster1poc:61613(CLOSE_WAIT) ruby36625root8uIPv4278770t0TCPlinux64poc:37472->linuxmaster2poc:61613(ESTABLISHED) Host:linux57poc Statuscode:0 Output: COMMANDPIDUSERFDTYPEDEVICESIZENODENAME ruby18076root9uIPv41351484TCPlinux57poc:9309->linuxmaster2poc:61613(ESTABLISHED) 通过日志查看 [root@linuxmaster1poc~]#mcoshell"lsof-i:61613" Doyoureallywanttosendthiscommandunfiltered?(y/n):y Discoveringhostsusingthemcmethodfor2second(s)....3 Host:linux58poc Statuscode:0 Output: COMMANDPIDUSERFDTYPEDEVICESIZE/OFFNODENAME ruby11428root6uIPv4342830t0TCPlinux58poc:36300->linuxmaster1poc:61613(CLOSE_WAIT) ruby11428root8uIPv4343380t0TCPlinux58poc:47205->linuxmaster2poc:61613(ESTABLISHED) Host:linux57poc Statuscode:0 Output: COMMANDPIDUSERFDTYPEDEVICESIZENODENAME ruby18447root6uIPv41351559TCPlinux57poc:59343->linuxmaster1poc:61613(CLOSE_WAIT) ruby18447root8uIPv41351622TCPlinux57poc:29757->linuxmaster2poc:61613(ESTABLISHED) Host:linux64poc Statuscode:0 Output: COMMANDPIDUSERFDTYPEDEVICESIZE/OFFNODENAME ruby37054root4uIPv4280360t0TCPlinux64poc:37476->linuxmaster2poc:61613(ESTABLISHED) ruby37054root6uIPv4279900t0TCPlinux64poc:40497->linuxmaster1poc:61613(CLOSE_WAIT) 总结:可以看到之前的连接已经变成CLOSE_WAIT,新的连接被建立 2. 停止MQ2,启动MQ1 查看切换状态 [root@linuxmaster2pocrabbitmq]#/etc/init.d/rabbitmq-serverstop Stoppingrabbitmq-server:rabbitmq-server. [root@linux57pocservice]#lsof-i:61613 COMMANDPIDUSERFDTYPEDEVICESIZENODENAME ruby18447root6uIPv41351559TCPlinux57poc:59343->linuxmaster1poc:61613(CLOSE_WAIT) ruby18447root8uIPv41351622TCPlinux57poc:29757->linuxmaster2poc:61613(CLOSE_WAIT) [root@linux58poc~]#lsof-i:61613 COMMANDPIDUSERFDTYPEDEVICESIZE/OFFNODENAME ruby11428root6uIPv4342830t0TCPlinux58poc:36300->linuxmaster1poc:61613(CLOSE_WAIT) ruby11428root8uIPv4343380t0TCPlinux58poc:47205->linuxmaster2poc:61613(CLOSE_WAIT) [root@linux64poc~]#lsof-i:61613 COMMANDPIDUSERFDTYPEDEVICESIZE/OFFNODENAME ruby37054root4uIPv4280360t0TCPlinux64poc:37476->linuxmaster2poc:61613(CLOSE_WAIT) ruby37054root6uIPv4279900t0TCPlinux64poc:40497->linuxmaster1poc:61613(CLOSE_WAIT) [root@linuxmaster1poc~]#/etc/init.d/rabbitmq-serverstart Startingrabbitmq-server:SUCCESS rabbitmq-server. 根据 plugin.rabbitmq.max_reconnect_delay = 30.0,需要过最多30秒,mcollective服务端会重新建立连接请求 [root@linuxmaster1poc~]#tailf/var/log/rabbitmq/rabbit\@linuxmaster1poc.log =INFOREPORT====24-Dec-2013::11:00:45=== acceptingSTOMPconnection<0.332.0>(192.168.100.126:36316->192.168.100.120:61613) =INFOREPORT====24-Dec-2013::11:00:45=== acceptingSTOMPconnection<0.348.0>(192.168.100.125:18945->192.168.100.120:61613) =INFOREPORT====24-Dec-2013::11:00:45=== acceptingSTOMPconnection<0.382.0>(192.168.100.127:40513->192.168.100.120:61613) [root@linuxmaster1poc~]#mcoping linux58poctime=70.60ms linux57poctime=71.32ms linux64poctime=111.56ms ----pingstatistics---- 3repliesmax:111.56min:70.60avg:84.49 [root@linuxmaster1poc~]#mcoshell"lsof-i:61613" Doyoureallywanttosendthiscommandunfiltered?(y/n):y Discoveringhostsusingthemcmethodfor2second(s)....3 Host:linux58poc Statuscode:0 Output: COMMANDPIDUSERFDTYPEDEVICESIZE/OFFNODENAME ruby11428root6uIPv4342830t0TCPlinux58poc:36300->linuxmaster1poc:61613(CLOSE_WAIT) ruby11428root8uIPv4343380t0TCPlinux58poc:47205->linuxmaster2poc:61613(CLOSE_WAIT) ruby11428root10uIPv4344440t0TCPlinux58poc:36316->linuxmaster1poc:61613(ESTABLISHED) Host:linux57poc Statuscode:0 Output: COMMANDPIDUSERFDTYPEDEVICESIZENODENAME ruby18447root10uIPv41351723TCPlinux57poc:18945->linuxmaster1poc:61613(ESTABLISHED) Host:linux64poc Statuscode:0 Output: COMMANDPIDUSERFDTYPEDEVICESIZE/OFFNODENAME ruby37054root4uIPv4280360t0TCPlinux64poc:37476->linuxmaster2poc:61613(CLOSE_WAIT) ruby37054root6uIPv4279900t0TCPlinux64poc:40497->linuxmaster1poc:61613(CLOSE_WAIT) ruby37054root9uIPv4282060t0TCPlinux64poc:40513->linuxmaster1poc:61613(ESTABLISHED) 本文转自凌激冰51CTO博客,原文链接:http://blog.51cto.com/dreamfire/1586729,如需转载请自行联系原作者

优秀的个人博客,低调大师

阿里云服务器CentOS 7.3 64位部署FTP服务

一、安装vsftpd yum -y install vsftpd 二、配置 vsftpd的配置文件在/etc/vsftpd,其中vsftp.conf文件是住配置文件,打开如下: # Example config file /etc/vsftpd/vsftpd.conf # # The default compiled in settings are fairly paranoid. This sample file # loosens things up a bit, to make the ftp daemon more usable. # Please see vsftpd.conf.5 for all compiled in defaults. # # READ THIS: This example file is NOT an exhaustive list of vsftpd options. # Please read the vsftpd.conf.5 manual page to get a full idea of vsftpd's # capabilities. # # Allow anonymous FTP? (Beware - allowed by default if you comment this out). # 匿名访问,NO关闭,默认为YES开启状态 anonymous_enable=NO # # Uncomment this to allow local users to log in. # When SELinux is enforcing check for SE bool ftp_home_dir local_enable=YES # # Uncomment this to enable any form of FTP write command. write_enable=YES # # Default umask for local users is 077. You may wish to change this to 022, # if your users expect that (022 is used by most other ftpd's) local_umask=022 # # Uncomment this to allow the anonymous FTP user to upload files. This only # has an effect if the above global write enable is activated. Also, you will # obviously need to create a directory writable by the FTP user. # When SELinux is enforcing check for SE bool allow_ftpd_anon_write, allow_ftpd_full_access #anon_upload_enable=YES # # Uncomment this if you want the anonymous FTP user to be able to create # new directories. #anon_mkdir_write_enable=YES # # Activate directory messages - messages given to remote users when they # go into a certain directory. dirmessage_enable=YES # # Activate logging of uploads/downloads. xferlog_enable=YES # # Make sure PORT transfer connections originate from port 20 (ftp-data). connect_from_port_20=YES # # If you want, you can arrange for uploaded anonymous files to be owned by # a different user. Note! Using "root" for uploaded files is not # recommended! #chown_uploads=YES #chown_username=whoever # # You may override where the log file goes if you like. The default is shown # below. #xferlog_file=/var/log/xferlog # # If you want, you can have your log file in standard ftpd xferlog format. # Note that the default log file location is /var/log/xferlog in this case. xferlog_std_format=YES # # You may change the default value for timing out an idle session. #idle_session_timeout=600 # # You may change the default value for timing out a data connection. #data_connection_timeout=120 # # It is recommended that you define on your system a unique user which the # ftp server can use as a totally isolated and unprivileged user. #nopriv_user=ftpsecure # # Enable this and the server will recognise asynchronous ABOR requests. Not # recommended for security (the code is non-trivial). Not enabling it, # however, may confuse older FTP clients. #async_abor_enable=YES # # By default the server will pretend to allow ASCII mode but in fact ignore # the request. Turn on the below options to have the server actually do ASCII # mangling on files when in ASCII mode. # Beware that on some FTP servers, ASCII support allows a denial of service # attack (DoS) via the command "SIZE /big/file" in ASCII mode. vsftpd # predicted this attack and has always been safe, reporting the size of the # raw file. # ASCII mangling is a horrible feature of the protocol. #ascii_upload_enable=YES #ascii_download_enable=YES # # You may fully customise the login banner string: #ftpd_banner=Welcome to blah FTP service. # # You may specify a file of disallowed anonymous e-mail addresses. Apparently # useful for combatting certain DoS attacks. #deny_email_enable=YES # (default follows) #banned_email_file=/etc/vsftpd/banned_emails # # You may specify an explicit list of local users to chroot() to their home # directory. If chroot_local_user is YES, then this list becomes a list of # users to NOT chroot(). # (Warning! chroot'ing can be very dangerous. If using chroot, make sure that # the user does not have write access to the top level directory within the # chroot) #chroot_local_user=YES #chroot_list_enable=YES # (default follows) #chroot_list_file=/etc/vsftpd/chroot_list # # You may activate the "-R" option to the builtin ls. This is disabled by # default to avoid remote users being able to cause excessive I/O on large # sites. However, some broken FTP clients such as "ncftp" and "mirror" assume # the presence of the "-R" option, so there is a strong case for enabling it. #ls_recurse_enable=YES # # When "listen" directive is enabled, vsftpd runs in standalone mode and # listens on IPv4 sockets. This directive cannot be used in conjunction # with the listen_ipv6 directive. listen=NO # # This directive enables listening on IPv6 sockets. By default, listening # on the IPv6 "any" address (::) will accept connections from both IPv6 # and IPv4 clients. It is not necessary to listen on *both* IPv4 and IPv6 # sockets. If you want that (perhaps because you want to listen on specific # addresses) then you must run two copies of vsftpd with two configuration # files. # Make sure, that one of the listen options is commented !! listen_ipv6=YES pam_service_name=vsftpd userlist_enable=YES tcp_wrappers=YES # FTP跟路径设置 local_root=/home 理论上什么都不用修改就可以,但是实际上,我们都会把匿名访问给关闭,和设置一个FTP根路径 anonymous_enable=NO YES改为NO 添加local_root=/home 等号后面为想要设置的文件路径 三、添加用户 useradd ftpadmin -s /sbin/nologin // ftpadmin可改为你的FTP账号 passwd ftpadmin // 设置密码,输入两遍,密码不可见 chown -R ftpadmin /var/ftp // 改动用户权限,格式为chown -R 用户名 文件路径 四、开启服务 service vsftpd start 附:这篇就先这样,以后再更新卸载,vsftpd主配置文件修改及介绍,黑白名单,制定用户配置权限等等

资源下载

更多资源
优质分享App

优质分享App

近一个月的开发和优化,本站点的第一个app全新上线。该app采用极致压缩,本体才4.36MB。系统里面做了大量数据访问、缓存优化。方便用户在手机上查看文章。后续会推出HarmonyOS的适配版本。

Mario

Mario

马里奥是站在游戏界顶峰的超人气多面角色。马里奥靠吃蘑菇成长,特征是大鼻子、头戴帽子、身穿背带裤,还留着胡子。与他的双胞胎兄弟路易基一起,长年担任任天堂的招牌角色。

腾讯云软件源

腾讯云软件源

为解决软件依赖安装时官方源访问速度慢的问题,腾讯云为一些软件搭建了缓存服务。您可以通过使用腾讯云软件源站来提升依赖包的安装速度。为了方便用户自由搭建服务架构,目前腾讯云软件源站支持公网访问和内网访问。

Spring

Spring

Spring框架(Spring Framework)是由Rod Johnson于2002年提出的开源Java企业级应用框架,旨在通过使用JavaBean替代传统EJB实现方式降低企业级编程开发的复杂性。该框架基于简单性、可测试性和松耦合性设计理念,提供核心容器、应用上下文、数据访问集成等模块,支持整合Hibernate、Struts等第三方框架,其适用范围不仅限于服务器端开发,绝大多数Java应用均可从中受益。

用户登录
用户注册