Cloudstack 安装记录
一.条件要求
1.硬件支持虚拟化,并在BIOS中开启(Inter-VT设为 Enable).
2.Centos 6.5 x86_64
3.环境中的每台主机均为静态IP地址。
4.cloudstack安装版本为4.4.1
二.本文章的硬件资源以及基本参数配置如下
1.服务器配置:12T硬盘、96G内存、e52620v2、4块网卡,共6台机器。
2.此环境中4台kvm计算节点+主存储(Gluster),1台管理节点+Mysql,一台NFS辅存储。
3.首先主机名以及对应的ip详情
- kvm200 br0:192.168.30.200 br1:10.10.0.200 br2:10.11.0.200 br3:10.12.0.200
- kvm201 br0:192.168.30.201 br1:10.10.0.201 br2:10.11.0.201 br3:10.12.0.201
- kvm202 br0:192.168.30.202 br1:10.10.0.202 br2:10.11.0.202 br3:10.12.0.202
- manage br0:192.168.30.203 br1:10.10.0.203 br2:10.11.0.203 br3:10.12.0.203
- kvm204 br0:192.168.30.204 br1:10.10.0.204 br2:10.11.0.204 br3:10.12.0.204
- nfs205 br0:192.168.30.205 br1:10.10.0.205 br2:10.11.0.205 br3:10.12.0.205
4.进行下一步之前,每台主机需要 yum upgrade !!!
三.主机名、网络配置、SELinux
1.主机名:需要修改三处位置,分别是/etc/sysconfig/network、/etc/hosts、/etc/idmapd.conf
[root@kvm200 ~]# vi /etc/sysconfig/network NETWORKING=yes
HOSTNAME=kvm200.test.com
[root@kvm200 ~]# vi /etc/hosts 127.0.0.1 localhost localhost.localdomain localhost4 localhost4.localdomain4
:: localhost localhost.localdomain localhost6 localhost6.localdomain6
10.10.0.200 kvm200.test.com
[root@kvm200 ~]# vi /etc/idmapd.conf [General]
#Verbosity =
# The following should be set to the local NFSv4 domain name
# The default is the host's DNS domain name.
Domain = test.com
[root@kvm200 ~]# hostname kvm200.test.com
kvm200.test.com
[root@kvm200 ~]# hostname --fqdn
kvm200.test.com
如果--fqdn能得到完整域名,即表示主机配置成功。
2.网卡桥接:进入 /etc/sysconfig/network-scripts 目录中,先依次复制 系统网卡为对应的cloudbr0、1、2、3,如下
[root@kvm200 network-scripts]# cp ifcfg-eth0 ifcfg-cloudbr0
[root@kvm200 network-scripts]# cp ifcfg-eth1 ifcfg-cloudbr1
[root@kvm200 network-scripts]# cp ifcfg-eth2 ifcfg-cloudbr2
[root@kvm200 network-scripts]# cp ifcfg-eth3 ifcfg-cloudbr3
先修改ifcfg-eth*,
[root@kvm200 network-scripts]# vi ifcfg-eth0
DEVICE="eth0"
BOOTPROTO="static"
ONBOOT="yes"
TYPE="Ethernet"
BRIDGE="cloudbr0" [root@kvm200 network-scripts]# vi ifcfg-eth1
DEVICE="eth1"
BOOTPROTO="static"
ONBOOT="yes"
TYPE="Ethernet"
BRIDGE="cloudbr1" [root@kvm200 network-scripts]# vi ifcfg-eth2
DEVICE="eth2"
BOOTPROTO="static"
ONBOOT="yes"
TYPE="Ethernet"
BRIDGE="cloudbr2" [root@kvm200 network-scripts]# vi ifcfg-eth3
DEVICE="eth3"
BOOTPROTO="static"
ONBOOT="yes"
TYPE="Ethernet"
BRIDGE="cloudbr3"
再修改对应的桥接网卡ifcfg-cloudbr*
[root@kvm200 network-scripts]# vi ifcfg-cloudbr0
DEVICE="cloudbr0"
BOOTPROTO="static"
ONBOOT="yes"
TYPE="Bridge"
IPADDR=192.168.30.200
NETMASK=255.255.255.0
GATEWAY=192.168.30.1
DNS1=114.114.114.114
DNS2=8.8.8.8 [root@kvm200 network-scripts]# vi ifcfg-cloudbr1
DEVICE=cloudbr1
TYPE=Bridge
ONBOOT=yes
BOOTPROTO=static
IPADDR=10.10.0.200
NETMASK=255.255.0.0 [root@kvm200 network-scripts]# vi ifcfg-cloudbr2
DEVICE=cloudbr2
TYPE=Bridge
ONBOOT=yes
BOOTPROTO=static
IPADDR=10.11.0.200
NETMASK=255.255.0.0 [root@kvm200 network-scripts]# vi ifcfg-cloudbr3
DEVICE=cloudbr3
TYPE=Bridge
ONBOOT=yes
BOOTPROTO=static
IPADDR=10.12.0.200
NETMASK=255.255.0.0
3.关闭SELinux
[root@kvm200 network-scripts]# vi /etc/sysconfig/selinux
# This file controls the state of SELinux on the system.
# SELINUX= can take one of these three values:
# enforcing - SELinux security policy is enforced.
# permissive - SELinux prints warnings instead of enforcing.
# disabled - SELinux is fully disabled.
SELINUX=disabled #将此处设置为permissive或者disable都是可以的。
# SELINUXTYPE= type of policy in use. Possible values are:
# targeted - Only targeted network daemons are protected.
# strict - Full SELinux protection.
SELINUXTYPE=targeted
[root@kvm200 network-scripts]# setenforce 0 #立即生效
其余5台同样道理,按照主机对应详情配置主机名、桥接网卡
记得重启网卡哟,另外想要主机名立即生效的话,可以Ctrl + D 注销即可。
四.NTP服务器
如果你的server可以连网,并且可以同步时间,这个步骤可以忽略。如果是本地的环境,那则需要有一台NTP服务器,用来同步主机间的时间。
此处将kvm200设置为NTP服务器
[root@kvm200 network-scripts]# vi /etc/ntp.conf
# Permit all access over the loopback interface. This could
# be tightened as well, but to do so would effect some of
# the administrative functions.
restrict 127.0.0.1
restrict - :: restrict 0.0.0.0 mask 0.0.0.0 nomodify notrap noquery
restrict 192.168.166.0 mask 255.255.255.0 nomodify # Hosts on local network are less restricted.
#restrict 192.168.1.0 mask 255.255.255.0 nomodify notrap # Use public servers from the pool.ntp.org project.
# Please consider joining the pool (http://www.pool.ntp.org/join.html).
server .centos.pool.ntp.org iburst
server .centos.pool.ntp.org iburst
server .centos.pool.ntp.org iburst
server .centos.pool.ntp.org iburst server 210.72.145.44 prefer
server 127.127.1.0
fudge 127.127.1.0 stratum 8 #图中红色部分的字体是新添加的。保存后重启ntp服务
[root@kvm200 ~]# service ntpd restart
Shutting down ntpd: [ OK ]
Starting ntpd: [ OK ]
其余5台机器全为客户端,以kvm201为例。修改配置文件并手动同步:
[root@kvm201 ~]# vi /etc/ntp.conf
......
# Use public servers from the pool.ntp.org project.
# Please consider joining the pool (http://www.pool.ntp.org/join.html).
#server .centos.pool.ntp.org iburst
#server .centos.pool.ntp.org iburst
#server .centos.pool.ntp.org iburst
#server .centos.pool.ntp.org iburst
192.168.30.200 iburst #此处为ntp服务器的IP地址,要求能通信。如果不能通信则是服务器的iptables问题,后续我们将开放iptables端口。
[root@kvm201 ~]# service ntpd restart
Shutting down ntpd: [ OK ]
Starting ntpd: [ OK ]
[root@kvm201 ~]# ntpdate -u 192.168.30.200 #手动同步时间,或者等待系统自动同步也可,但等待时间可能较长,同步机制可谷歌NTP服务器介绍
NTP服务器搭建完成后。基本的环境配置已经完成。下面就是存储服务器的安装了(存储分为主存储和辅存储,在此主存储我们用Gluster群集、辅存储用NFS)
五.IPtables防火墙设置以及修改挂载文件和创建挂载文件夹
1.修改每台防火墙设置为
[root@kvm200 ~]# iptables -I INPUT -s 10.10.0.0/ -j ACCEPT
[root@kvm200 ~]# iptables -I INPUT -s 10.11.0.0/ -j ACCEPT
[root@kvm200 ~]# iptables -I INPUT -s 10.12.0.0/ -j ACCEPT
[root@kvm200 ~]# iptables -I INPUT -s 192.168.30.0/ -j ACCEPT
[root@kvm200 ~]# service iptables save
[root@kvm200 ~]# service iptables restart
2.修改挂载文件:/etc/fstab 在此文件中最后添加两行(此处建设时已规划好,在后续就使用此文件夹来挂载存储系统)
[root@kvm200 ~]# vi /etc/fstab
10.12.0.204:/secondary /icq1 nfs defaults
10.12.0.200:/Mian /primary glusterfs defaults,_netdev
3.在每台机器上都创建相同的文件夹(供挂载使用,icq1是辅存储挂载目录、primary是gluster的挂载目录,如第2步所示)
[root@kvm200 ~]# mkdir /icq1 /primary
六.存储服务器
1.主存储
- 搭建Gluster服务器之前,我们先配置Gluster源,之后去下载安装包。
[root@kvm200 ~]# cd /etc/yum.repos.d/
[root@kvm200 yum.repos.d]# wget http://download.gluster.org/pub/gluster/glusterfs/3.7/LATEST/EPEL.repo/glusterfs-epel.repo
[root@kvm200 yum.repos.d]# cd ~
[root@kvm200 ~]# wget http://download.fedora.redhat.com/pub/epel/6/x86_64/epel-release-6-5.noarch.rpm
[root@kvm200 ~]# rpm -ivh epel-release-latest-.noarch.rpm
[root@kvm200 ~]# yum -y install glusterfs-server安装完成之后,下面安装其它4台客户端:(注意:其它三台也需要先安装下面的才可以继续进行去。主要安装:glusterfs glusterfs-server glusterfs-fuse三个软件包)
[root@kvm201 ~]# cd /etc/yum.repos.d/ [root@kvm201 yum.repos.d]# wget -P http://download.gluster.org/pub/gluster/glusterfs/3.7/LATEST/EPEL.repo/glusterfs-epel.repo [root@kvm201 yum.repos.d]# cd ~ [root@kvm201 ~]# wget ftp://ftp.muug.mb.ca/mirror/centos/6.7/extras/x86_64/Packages/epel-release-6-8.noarch.rpm [root@kvm201 ~]# rpm -ivh epel-release--.noarch.rpm [root@kvm201 ~]# yum install glusterfs glusterfs-fuse glusterfs-server
上面的步骤做完后,我们回到kvm200机器上,将它们(200、201、202、203)加入gluster节点,并创建存储卷:
[root@kvm200 ~]# gluster peer probe 10.12.0.201
[root@kvm200 ~]# gluster peer probe 10.12.0.202
[root@kvm200 ~]# gluster peer probe 10.12.0.203
[root@kvm200 ~]# gluster peer probe 10.12.0.204
[root@kvm200 ~]# gluster volume create Mian stripe 10.12.0.200:/storage 10.12.0.201:/storage 10.12.0.202:/storage 10.12.0.203:/storage force
[root@kvm200 ~]# gluster volume start Mian(如果加节点时报错,可能跟防火墙有关,请检查各个主机的防火墙设置。)
查看状态:[root@kvm200 ~]# gluster volume status
Status of volume: Mian
Gluster process TCP Port RDMA Port Online Pid
------------------------------------------------------------------------------
Brick 10.12.0.200:/storage Y
Brick 10.12.0.201:/storage Y
Brick 10.12.0.202:/storage Y
Brick 10.12.0.203:/storage Y Task Status of Volume Mian
------------------------------------------------------------------------------
There are no active volume tasks [root@kvm200 ~]# gluster peer status
Number of Peers: 4 Hostname: 10.12.0.204
Uuid: --46d5-a0b3-8f06766c58b4
State: Peer in Cluster (Connected) Hostname: 10.12.0.202
Uuid: de10fd85-7b85-4f28-970b-339977a0bcf6
State: Peer in Cluster (Connected) Hostname: 10.12.0.201
Uuid: 0cd18fe2-62dd-457a--a7c2c1c5c4b2
State: Peer in Cluster (Connected) Hostname: 10.12.0.203
Uuid: d160b7c3-89de--b04d-bb18712d75c5
State: Peer in Cluster (Connected)
2.辅存储(NFS)
辅存储安装在kvm204上面,进入到204的系统内:(安装nfs,创建secondary共享目录,并修改NFS配置文件)
[root@kvm204 ~]# yum install nfs-utils
[root@kvm204 ~]# mkdir /secondary
[root@kvm204 ~]# vi /etc/exports
/secondary *(rw,async,no_root_squash,no_subtree_check) [root@kvm204 ~]# vi /etc/sysconfig/nfs
LOCKD_TCPPORT=
LOCKD_UDPPORT=
MOUNTD_PORT=
RQUOTAD_PORT=
STATD_PORT=
STATD_OUTGOING_PORT=
重启服务:
[root@kvm204 ~]# service rpcbind restart
Stopping rpcbind: [ OK ]
Starting rpcbind: [ OK ] [root@kvm204 ~]# service nfs restart
Shutting down NFS daemon: [ OK ]
Shutting down NFS mountd: [ OK ]
Shutting down NFS quotas: [ OK ]
Shutting down RPC idmapd: [ OK ]
Starting NFS services: [ OK ]
Starting NFS quotas: [ OK ]
Starting NFS mountd: [ OK ]
Starting NFS daemon: [ OK ]
Starting RPC idmapd: [ OK ]
3.客户端挂载文件系统
以上步骤如果没有出错的话,现在就是客户端挂载了,挂载完成之后我们就可以进行最重要的一步,既安装cloudstack。以下挂载命令需在每台机器上执行:
[root@kvm200 ~]# mount -a
[root@kvm200 ~]# mount
/dev/mapper/vg1-lv1_root on / type ext4 (rw)
proc on /proc type proc (rw)
sysfs on /sys type sysfs (rw)
devpts on /dev/pts type devpts (rw,gid=,mode=)
tmpfs on /dev/shm type tmpfs (rw)
/dev/sda1 on /boot type ext4 (rw)
none on /proc/sys/fs/binfmt_misc type binfmt_misc (rw)
sunrpc on /var/lib/nfs/rpc_pipefs type rpc_pipefs (rw)
10.12.0.200:/Mian on /primary type fuse.glusterfs (rw,default_permissions,allow_other,max_read=)
10.12.0.204:/secondary on /icq1 type nfs (rw,vers=,addr=10.12.0.204,clientaddr=10.12.0.200)
nfsd on /proc/fs/nfsd type nfsd (rw)
七.安装cloudstack
1.进入到192.168.30.203上面。安装cloudstack-management + mysql
- 先安装mysql
[root@management ~]# yum -y install mysql-server
修改mysql配置文件(红色部分为添加的配置文件)
[root@management ~]# vi /etc/my.cnf
[mysqld]
datadir=/var/lib/mysql
socket=/var/lib/mysql/mysql.sock
user=mysql
# Disabling symbolic-links is recommended to prevent assorted security risks
symbolic-links= innodb_rollback_on_timeout=1
innodb_lock_wait_timeout=600
max_connections=350
log-bin=mysql-bin
binlog-format = 'ROW'
修改完成后,重启mysql
[root@management ~]# service mysqld restart
Stopping mysqld: [ OK ]
Starting mysqld: [ OK ]
- 接着安装management
首先,本环境下载的全是rpm包(在root目录下),为了统一固定版本。所以后续操作都是本地安装,除了少量的依赖包会从网络上下载,如果你去下载cloudstack-repo源,放在/etc/yum.repos.d/文件夹下,也可以安装特定的版本。
[root@management ~]# yum localinstall cloudstack-cli-4.4.-NONOSS_3.el6.x86_64.rpm cloudstack-management-4.4.-NONOSS_3.el6.x86_64.rpm cloudstack-awsapi-4.4.-NONOSS_3.el6.x86_64.rpm cloudstack-common-4.4.-NONOSS_3.el6.x86_64.rpm cloudstack-usage-4.4.-NONOSS_3.el6.x86_64.rpm
安装程序执行完成后,需初始化数据库,通过如下命令和选项完成:(此处注意,如果你的mysql有密码,下面命令的最后处需这样写'--deploy-as=root:密码',否则插入数据库会失败。)
[root@management ~]# cloudstack-setup-databases cloud:password@localhost --deploy-as=root
数据库创建后,最后一步是配置管理服务器,执行如下命令:
[root@management ~]# cloudstack-setup-management
- 现在来上传系统虚拟机模板(创建系统VM时必须的,注意:此模板需要和自己的cloudstack版本相对应,不可随意)
以下文字引自官方:
CloudStack通过一系列系统虚拟机提供功能,如访问虚拟机控制台,如提供各类网络服务,以及管理辅助存储的中的各类资源。该步骤会获取系统虚拟机模板,用于云平台引导后系统虚拟机的部署。
然后需要下载系统虚拟机模板,并把这些模板部署于刚才创建的辅助存储中;管理服务器包含一个脚本可以正确的操作这些系统虚拟机模板:[root@management ~]# /usr/share/cloudstack-common/scripts/storage/secondary/cloud-install-sys-tmplt -m /icq1 -f /root/systemvm64template-4.4.--kvm.qcow2.bz2 -h kvm -F
里面有些参数需要说明一下:-m 是挂载的辅存储目录位置,-f 是系统虚拟机模板的路径(此处我已放到root目录下),-h 是表示我们的虚拟化管理类型是kvm,-F 我也不知道这个参数
- 管理节点至此我们安装完毕。下面进行计算节点的安装。
2.安装cloudstack-agent 计算节点
- 先安装1台kvm(192.168.30.200)已经下载好rpm包,直接yum安装
[root@kvm200 ~]# yum localinstall cloudstack-agent-4.4.-NONOSS_3.el6.x86_64.rpm cloudstack-common-4.4.-NONOSS_3.el6.x86_64.rpm -y
- 安装完成,我们进行配置KVM(修改3处:/etc/libvirt/qemu.conf、/etc/libvirt/libvirtd.conf、/etc/libvirt/libvirtd.conf)
为了实现动态迁移,libvirt需要监听使用非加密的TCP连接。还需要关闭libvirts尝试使用组播DNS进行广播。这些都是在 /etc/libvirt/libvirtd.conf文件中进行配置。
16509端口是libvirtd监听端口。[root@kvm200 ~]# vi /etc/libvirt/qemu.conf
vnc_listen="0.0.0.0" [root@kvm200 ~]# vi /etc/libvirt/libvirtd.conf
listen_tls =
listen_tcp =
tcp_port = ""
auth_tcp = "none"
mdns_adv = [root@kvm200 ~]# /etc/sysconfig/libvirtd
LIBVIRTD_ARGS="--listen"题外话:当管理节点添加此主机时,这个tcp_port = "16059"会自动变成16509,还有 LIBVIRTD_ARGS="-1",这些都是cloudstack改变的。无须再手动改它!!
- 上面kvm的参数修改完毕后,我们把libvirtd重启一下
[root@kvm200 ~]# service libvirtd restart
至此,我们的所有在系统内要安装的软件以及修改配置文件工作已经完成,现在就可以登陆cloudstack的web界面进行配置区域、添加主机等操作了。
八.Web界面的操作及安装
1.先登录界面:浏览器访问 http:10.10.0.203:8080/client后,先点击”我已熟悉安装”,别用向导安装,因为我们的区域类型是高级!
2.进去之后,点击全局设置,修改三个参数(secstorage.allowed.internal.sites、management.network.cidr、host),值在下面
sites:10.10.0.0/16
host:10.10.0.203 (这个是管理节点的ip)
cidr:10.10.0.0/16 (这个是管理主机以及存储的网段。)
将上面3个全局参数修改完毕后,需要重启cloudstack-management使修改生效
[root@management ~]# /etc/init.d/cloudstack-management restart
此时重启需要等待一分钟左右,再次访问web站点,进行下一步的操作。
3.配置区域(点击基础架构-->区域‘查看全部'-->添加区域-->高级--Next)
- 名称:Zone1
- 公共DNS1:114.114.114.114
- 内部DNS1: 8.8.8.8
- 虚拟机管理程序:KVM
- NExt
2.配置物理网络
- 管理和公用:cloudbr1
- 来宾:cloudbr2
- 存储:cloudbr3
注意:以上填写的是单独流量的走向。管理和公用共用一个网络br1(10.10.0.0/16),来宾单独一个网络br2(10.11.0.0/16),存储单独一个网络br3(10.12.0.0./16).
3.公共通信
- 网关:10.14.0.1
- 掩码:255.255.0.0
- 起始IP:10.14.0.200
- 截至IP:10.14.200.200
4.提供点
- 名称:P
- 网关:10.10.0.1
- 掩码:255.255.0.0
- 起始IP10.10.0.230
- 截至IP:10.10.200.200
5.来宾通信
- VLAN:2-4
6.存储通信
- 网关:10.12.0.1
- 掩码:255.255.0.0
- 起始IP:10.12.0.230
- 截至IP:10.12.200.200
7.群集
- 群集名称:C
8.主机
- 主机名称:10.10.0.200
- 用户名:root
- 密码:***
9.主存储
- 名称:Pri
- 协议:SharedMountPoint
- 路径:/primary
10.辅存储
- 提供程序:NFS
- 服务器:10.12.0.204
- 路径:/secondary
- Next 启动
11.启动区域
提示:区域已准备就绪,可随时启动;请继续执行下一步骤。点击Launch zone 。至此cloudstack搭建完成。如果出现无法添加主机或者网络或者存储时,请去看日志!请去看日志!请去看日志!
重要的事情说三遍哈。
鉴于官方文档简单明了(坑你没得说)辛苦码字3小时作此文章,可能有遗漏之处,还请提出,如果转载,还请注明源地址!
参考:http://docs.cloudstack.apache.org/projects/cloudstack-installation/en/4.5/choosing_deployment_architecture.html
Cloudstack 安装记录的更多相关文章
- 分布式监控系统Zabbix-3.0.3-完整安装记录(7)-使用percona监控MySQL
前面已经介绍了分布式监控系统Zabbix-3.0.3-完整安装记录(2)-添加mysql监控,但是没有提供可以直接使用的Key,太过简陋,监控效果不佳.要想更加仔细的监控Mysql,业内同学们都会选择 ...
- 关于node.js和npm,cnpm的安装记录以及gulp自动构建工具的使用
关于node.js和npm,cnpm的安装记录以及gulp自动构建工具的使用 工作环境:window下 在一切的最开始,安装node.js (中文站,更新比较慢http://nodejs.cn/) ...
- sourceinsight安装记录
sourceinsight安装记录 此文章为本人使用sourceinsight一个星期之后的相关设置步骤记录和经验记录,以备以后查验,网上的相关资料都也较为完善,但是对于新手还是有一定困难的,所以在这 ...
- openerp安装记录及postgresql数据库问题解决
ubuntu-14.04下openerp安装记录1.安装PostgreSQL 数据库 a.安装 sudo apt-get install postgresql 安装后ubu ...
- Matlab安装记录 - LED Control Activex控件安装
Matlab安装记录-LED Control Activex控件安装 2013-12-01 22:06:36 最近在研究Matlab GUI技术,准备用于制作上位机程序:在Matlab GUI的技术 ...
- Arch Linux 安装记录
Arch Linux 安装记录 基本上参考wiki上的新手指南,使用arch 2014.6.1 iso安装 设置网络 有线网络 Arch Linux 默认开启DHCP. 静态ip 首先关闭DHCP:s ...
- redis5.0.3单实例简单安装记录
redis5.0.3单实例简单安装记录 日常需要测试使用,索性记录下来,免得临时又麻烦的找资料. yum -y install make gcc-c++ cmake bison-devel ncurs ...
- mysql5.7安装记录
mysql安装记录 版本5.7 windows系统 一.缺少my.ini文件 [mysql]# 设置mysql客户端默认字符集default-character-set=utf8 [mysqld]#设 ...
- Liunx/RHEL6.5 Oracle11 安装记录
1.创建用户组 groupadd oinstall #创建用户组oinstall groupadd dba #创建用户组dba useradd -g oinstall -g dba -m oracle ...
随机推荐
- js里获取html真实舞台宽高
var winSize = {width:document.documentElement.clientWidth,height:document.documentElement.clientHeig ...
- quick2.2.6 问题记录
1.luasocket 不能使用方式 用下面地址的文件替换文件重新编译 https://github.com/chukong/quick-cocos2d-x/blob/master/lib/cocos ...
- BZOJ3926 Zjoi2015 诸神眷顾的幻想乡【广义后缀自动机】
Description 幽香是全幻想乡里最受人欢迎的萌妹子,这天,是幽香的2600岁生日,无数幽香的粉丝到了幽香家门前的太阳花田上来为幽香庆祝生日. 粉丝们非常热情,自发组织表演了一系列节目给幽香看. ...
- pat 乙级 1093 字符串A+B (20 分)
给定两个字符串 A 和 B,本题要求你输出 A+B,即两个字符串的并集.要求先输出 A,再输出 B,但重复的字符必须被剔除. 输入格式: 输入在两行中分别给出 A 和 B,均为长度不超过 1的.由可见 ...
- thinkphp5 下 的Nginx 伪静态
server { listen 80; server_name all.bjed.com; root "F:\www\asdata"; location / { index ind ...
- static类和no static类的区别
1.static类,只能有静态成员,不能被实例.静态的东西在内存中只有一份,调用速度会快,但是相对费内存. 2.在另外一个类内部定义的类,此类的实例化不希望依赖外部类的实例化,此时可以定义为静态类(即 ...
- {Reship}{Socket}C#简单应用
This article come frome here ======================================================================= ...
- LG4848 崂山白花蛇草水
题意 神犇 Aleph 在 SDOI Round2 前立了一个 flag:如果进了省队,就现场直播喝崂山白花蛇草水.凭借着神犇 Aleph 的实力,他轻松地进了山东省省队,现在便是他履行诺言的时候了. ...
- Docker阿里云镜像加速器 for CentOS 7
CentOS 7 CentOS使用配置方式略微复杂,需要先将默认的配置文件复制出来 /lib/systemd/system/docker.service -> /etc/systemd/syst ...
- [语法]C语言中二维数组做输入参数
C语言中二维数组做输入参数时, 可以同时指定各维长度, 可以只指定第二维的长度, 不可以只指定第一维的长度, 不可以各维长度都不指定. 一句话总结:要指定至少指定第二维,都不指定是不行的. 具体栗子如 ...