OpenStack核心组件-keystone
1. Keystone介绍
keystone是OpenStack的组件之一,用于为OpenStack家族中的其它组件成员提供统一的认证服务,包括身份验证、令牌的发放和校验、服务列表、用户权限的定义等等。云环境中所有的服务之间的授权和认证都需要经过 keystone. 因此 keystone 是云平台中第一个即需要安装的服务。
作为 OpenStack 的基础支持服务,Keystone 做下面这几件事情:
管理用户及其权限
维护 OpenStack Services 的 Endpoint(服务端点)
Authentication(认证)和 Authorization(鉴权)
例如:
学习 Keystone,得理解下面这些概念:
keystone的相关概念可以以一个城市的酒店服务来举例说明:
酒店就类似于project项目,酒店提供住宿的服务service,user相当于客人,endpoint相当于客人住酒店时的询问的酒店的地址,role为角色,如客人定了个豪华套房,name他就是贵宾,定了标间,他就是普通客人,credentials相当于入住酒店时提供的身份证,酒店前台利用身份证获取身份信息并提供房间,这个过程相当于authentication,办理入住后拿到的房卡相当于token,利用token就可以刷开房间门进行住宿这项service。
1> User
User 指代任何使用 OpenStack 的实体,可以是真正的用户,其他系统或者服务。
当 User 请求访问 OpenStack 时,Keystone 会对其进行验证。Horizon 在 Identity->Users 管理 User
admin:openstack平台的超级管理员,负责openstack服务的管理和访问权限
demo: 常规(非管理)任务应该使用无特权的项目和用户,所有要创建 demo 项目和 demo 用户
除了 admin 和 demo,OpenStack 也为 nova、cinder、glance、neutron 服务创建了相应的 User。 admin 也可以管理这些 User。
2> credentials
Credentials 是 User 用来证明自己身份的信息,可以是:
用户名/密码
Token
API Key
其他高级方式
3> Authentication
Authentication 是 Keystone 验证 User 身份的过程。User 访问 OpenStack 时向 Keystone 提交用户名和密码形式的 Credentials,Keystone 验证通过后会给 User 签发一个 Token 作为后续访问的 Credential。
4> Token
Token 是由数字和字母组成的字符串,User 成功 Authentication 后 Keystone 生成 Token 并分配给 User。
Token 用做访问 Service 的 Credential
Service 会通过 Keystone 验证 Token 的有效性
Token 的有效期默认是 24 小时
5> oject
Project 用于将 OpenStack 的资源(计算、存储和网络)进行分组和隔离。
根据 OpenStack 服务的对象不同,Project 可以是一个客户(公有云,也叫租户)、部门或者项目组(私有云)。
这里请注意:
资源的所有权是属于 Project 的,而不是 User。
在 OpenStack 的界面和文档中,Tenant / Project / Account 这几个术语是通用的,但长期看会倾向使用 Project
每个 User(包括 admin)必须挂在 Project 里才能访问该 Project 的资源。 一个User可以属于多个 Project。
admin 相当于 root 用户,具有最高权限
Horizon 在 Identity->Projects 中管理 Project
通过 Manage Members 将 User 添加到 Project
6> service
OpenStack 的 Service 包括 Compute (Nova)、Block Storage (Cinder)、Object Storage (Swift)、Image Service (Glance) 、Networking Service (Neutron) 等。每个 Service 都会提供若干个 Endpoint,User 通过 Endpoint 访问资源和执行操作。
7> Endpoint
Endpoint 是一个网络上可访问的地址,通常是一个 URL。Service 通过 Endpoint 暴露自己的 API。 Keystone 负责管理和维护每个 Service 的 Endpoint。
可以使用下面的命令来查看 Endpoint。
source devstack/openrc admin admin
openstack catalog list
8> Role
安全包含两部分:Authentication(认证)和 Authorization(鉴权)
Authentication 解决的是“你是谁?”的问题
Authorization 解决的是“你能干什么?”的问题
Keystone 借助 Role 实现 Authorization:
- Keystone定义Role
- 可以为 User 分配一个或多个 Role,Horizon 的菜单为:Identity->Project->ManageMembers
- Service 决定每个 Role 能做什么事情 Service 通过各自的 policy.json 文件对 Role 进行访问控制。 下面是 Nova 服务 /etc/nova/policy.json 中的示例:
上面配置的含义是:对于 create、attach_network 和 attach_volume 操作,任何Role的 User 都可以执行; 但只有 admin 这个 Role 的 User 才能执行 forced_host 操作。
2. OpenStack 默认配置只区分 admin 和非 admin Role。 如果需要对特定的 Role 进行授权,可以修改 policy.json。
Openstack对User的验证除了身份验证,还需要鉴别 User 对某个Service是否有访问权限。Policy用来定义什么角色对应什么权限。对Keystone来说,Policy其实是一个JSON文件,默认是 /etc/keystone/policy.json 。通过Policy,Keystone实现了对User的权限管理。
3. openstack系统基本角色有两个:
一个是管理员admin
一个是租户_member_
2. Keystone基本架构
•Token: 用来生成和管理token
•Catalog:用来存储和管理service/endpoint
•Identity:用来管理tenant/user/role和验证
•Policy:用来管理访问权限
3. 通过例子认识Keystone
可以通过“查询可用 image”这个实际操作让大家对这些概念建立更加感性的认识。User admin 要查看 Project 中的 image
第 1 步 登录
当点击
时,OpenStack 内部发生了哪些事情?请看下面
Token 中包含了 User 的 Role 信息
第 2 步 显示操作界面
请注意,顶部显示 admin 可访问的 Project 为 “admin” 和 “demo”。 其实在此之前发生了一些事情:
同时,admin 可以访问 Intance, Volume, Image 等服务
这是因为 admin 已经从 Keystone 拿到了各 Service 的 Endpoints
第 3 步 显示 image 列表
点击 “Images”,会显示 image 列表
背后发生了这些事:
首先 admin 将请求发送到 Glance 的 Endpoint
Glance 向 Keystone 询问 admin 身份是否有效
接下来 Glance 会查看 /etc/glance/policy.json 判断 admin 是否有查看 image 的权限
权限判定通过,Glance 将 image 列表发给 admin。
Troubleshoot
OpenStack 排查问题的方法主要是通过日志。每个 Service 都有自己的日志文件。
Keystone 主要有两个日志: keystone.log 和 keystone_access.log,保存在 /var/log/apache2/ 目录里。devstack 的 screen 窗口已经帮我们打开了这两个日志。 可以直接查看:
如果需要得到最详细的日志信息,可以在 /etc/keystone/keystone.conf 中打开 debug 选项。
在非 devstack 安装中,日志可能在 /var/log/keystone/ 目录里。
4. 部署keystone
4.1 部署共享服务
可以通过访问OpenStack的官网:https://docs.openstack.org/stein/ ,中文版的操作手册版本只有M版本,因此用英文版来操作选择ocata版本来进行部署。
进入ocata版本后下拉选择installation Guides,进入后选择centos环境进行操作。
进入操作手册后可以选择在线看,也可以选择下载PDF看。
选择在线观看,进入操作手册界面。
但由于官网下载速度较慢,此处实验使用内网从已下载的网页资源进行部署,部署内容与官网操作一致。在终端192.168.16.66上部署,部署是要善用虚拟机快照。
1> 对OpenStack所用到的四台终端均进行域名解析。
[root@ajy6 ~]# vim /etc/hosts
127.0.0.1 localhost localhost.localdomain localhost4 localhost4.localdomain4
:: localhost localhost.localdomain localhost6 localhost6.localdomain6
192.168.16.65 ajy5
192.168.16.66 ajy6
192.168.16.68 ajy8
192.168.16.69 ajy9
2> 选择Environment,在生产环境中NTP服务是一定要部署的,但在实验环境中为了节省时间,直接进行OpenStack package 部署。部署过程按照官网步提供的骤进行即可。
3> 根据官网提示,先进行centos环境里OpenStack源的配置。
也可以直接使用内网已经准备好的源。
[root@ajy6 ~]# cd /etc/yum.repos.d/
[root@ajy6 yum.repos.d]# ls
Centos7-Base-yunwei.repo rdo-release-yunwei.repo epel-yunwei.repo
4> 安装OpenStack client的安装包
安装之前确保防火墙和selinux是关闭的。
yum install python-openstackclient
5> 安装OpenStack selinux的扩展包。
[root@ajy6 ~]# yum install openstack-selinux -y
6> 部署数据库
1) 安装
[root@ajy6 ~]# yum install openstack-selinux -y
2) 编辑数据库配置文件
[root@ajy6 ~]# cd /etc/my.cnf.d/
[root@ajy6 my.cnf.d]# ls
auth_gssapi.cnf enable_encryption.preset mysql-clients.cnf
client.cnf mariadb-server.cnf tokudb.cnf
默认数据库配置文件为mariadb-server.cnf,此处不使用默认的配置文件,新建一个openstack.cnf的配置文件,使用官方模板
[root@ajy6 my.cnf.d]# vim openstack.cnf
[mysqld]
bind-address = 192.168.16.66 #监听地址改为本地主机地址
default-storage-engine = innodb #默认引擎
innodb_file_per_table = on #过滤规则
max_connections = #最大连接数
collation-server = utf8_general_ci #字符集
character-set-server = utf8
3) 启动数据库,并开机自启
[root@ajy6 my.cnf.d]# systemctl start mariadb.service
[root@ajy6 my.cnf.d]# systemctl enable mariadb.service
Created symlink from /etc/systemd/system/multi-user.target.wants/mariadb.service to /usr/lib/systemd/system/mariadb.service.
4) 数据库初始化
[root@ajy6 my.cnf.d]# mysql_secure_installation
.........
[root@ajy6 my.cnf.d]# mysql -uroot -p123
Welcome to the MariaDB monitor. Commands end with ; or \g.
Your MariaDB connection id is
Server version: 10.1.-MariaDB MariaDB Server
Copyright (c) , , Oracle, MariaDB Corporation Ab and others.
Type 'help;' or '\h' for help. Type '\c' to clear the current input statement.
MariaDB [(none)]> show databases;
+--------------------+
| Database |
+--------------------+
| information_schema |
| mysql |
| performance_schema |
+--------------------+
rows in set (0.00 sec)
7> 部署消息队列
1) 安装RabbitMQ
[root@ajy6 my.cnf.d]# yum install rabbitmq-server
2) 启动消息队列服务并开机自启
[root@ajy6 ~]# systemctl start rabbitmq-servre.service
Failed to start rabbitmq-servre.service: Unit not found. #重启失败,删除多于的缓存文件再启动
[root@ajy6 ~]# cd /var/lib/rabbitmq/
[root@ajy6 rabbitmq]# ls
erl_crash.dump mnesia
[root@ajy6 rabbitmq]# rm -rf *
[root@ajy6 ~]# systemctl start rabbitmq-server.service
[root@ajy6 ~]# systemctl enable rabbitmq-server.service
Created symlink from /etc/systemd/system/multi-user.target.wants/rabbitmq-server.service to /usr/lib/systemd/system/rabbitmq-server.service.
3) 添加用户OpenStack,并给予权限
[root@ajy6 ~]# rabbitmqctl add_user openstack
Creating user "openstack" ...
[root@ajy6 ~]# rabbitmqctl set_permissions openstack ".*" ".*" ".*"
Setting permissions for user "openstack" in vhost "/" ...
8> 部署Memcache
1) 下载安装
[root@ajy6 ~]# yum install memcached python-memcached -y
2) 编辑mamcache配置文件
[root@ajy6 ~]# vim /etc/sysconfig/memcached
PORT=""
USER="memcached"
MAXCONN=""
CACHESIZE=""
OPTIONS="-l 127.0.0.1,::1,ajy6" #添加主机名或主机ip均可
3) 启动Memcache服务
[root@ajy6 ~]# systemctl start memcached.service
[root@ajy6 ~]# systemctl enable memcached.service
Created symlink from /etc/systemd/system/multi-user.target.wants/memcached.service to /usr/lib/systemd/system/memcached.service.
4.2 部署身份认证服务
1> 登录数据库,创建keystone数据库
[root@ajy6 ~]# mysql -uroot -p123
MariaDB [(none)]> create database keystone;
Query OK, row affected (0.00 sec)
MariaDB [(none)]> show databases;
+--------------------+
| Database |
+--------------------+
| information_schema |
| keystone |
| mysql |
| performance_schema |
+--------------------+
2> 给keystone数据库赋权
MariaDB [(none)]> GRANT ALL PRIVILEGES ON keystone.* TO 'keystone'@'localhost' \ #本地登录
-> IDENTIFIED BY 'KEYSTONE_DBPASS';
MariaDB [(none)]> GRANT ALL PRIVILEGES ON keystone.* TO 'keystone'@'%' \ #第三方登录
-> IDENTIFIED BY 'KEYSTONE_DBPASS';
MariaDB [(none)]> exit
Bye
3> 安装keystone服务
[root@ajy6 ~]# yum install openstack-keystone httpd mod_wsgi -y
keystone没有自己单独的服务,只是一个人软件包,keystone通过加载mod_wsgi模块调用http来对外服务。
4> 修改keystone的配置文件
[root@ajy6 ~]# cd /etc/keystone/
[root@ajy6 keystone]# ls
default_catalog.templates logging.conf
keystone.conf policy.json
keystone-paste.ini sso_callback_template.html # 删除keyston.conf所有文件按照官方文档重新配置,所以配置之前先备份。
[root@ajy6 keystone]# cp keystone.conf keystone.conf.bak
[root@ajy6 keystone]# vim keystone.conf #编辑配置端,大部分默认段是空的,只修改两处:主机和令牌提供者的插件
[DEFAULT] [assignment] [auth] [cache] [catalog] [cors] [cors.subdomain] [credential] [database]
connection = mysql+pymysql://keystone:KEYSTONE_DBPASS@ajy6/keystone #已做过域名解析可以写主机名,也可以写主机ip
[domain_config] [endpoint_filter] [endpoint_policy] [eventlet_server] [federation] [fernet_tokens] [healthcheck] [identity] [identity_mapping] [kvs] [ldap] [matchmaker_redis] [memcache] [oauth1] [oslo_messaging_amqp] [oslo_messaging_kafka] [oslo_messaging_notifications] [oslo_messaging_rabbit] [oslo_messaging_zmq] [oslo_middleware] [oslo_policy] [paste_deploy] [policy] [profiler] [resource] [revoke] [role] [saml] [security_compliance] [shadow_users] [signing] [token] #令牌由插件fernet提供 provider = fernet [tokenless_auth] [trust]
5> 同步数据库
[root@ajy6 ~]# su -s /bin/sh -c "keystone-manage db_sync" keystone
同步数据库后查看导入到数据库的表,有表存在则同步成功。
[root@ajy6 ~]# mysql -uroot -p123
MariaDB [(none)]> use keystone
MariaDB [keystone]> show tables;
+------------------------+
| Tables_in_keystone |
+------------------------+
| access_token |
| assignment |
| config_register |
| consumer |
| credential |
| endpoint |
| endpoint_group |
| federated_user |
| federation_protocol |
| group |
| id_mapping |
| identity_provider |
| idp_remote_ids |
| implied_role |
| local_user |
| mapping |
| migrate_version |
| nonlocal_user |
| password |
| policy |
| policy_association |
| project |
| project_endpoint |
| project_endpoint_group |
| region |
| request_token |
| revocation_event |
| role |
| sensitive_config |
| service |
| service_provider |
| token |
| trust |
| trust_role |
| user |
| user_group_membership |
| user_option |
| whitelisted_config |
+------------------------+
rows in set (0.00 sec)
MariaDB [keystone]> exit
Bye
6> 用fernet设置token
[root@ajy6 ~]# keystone-manage fernet_setup --keystone-user keystone --keystone-group keystone
[root@ajy6 ~]# keystone-manage credential_setup --keystone-user keystone --keystone-group keystone
7> 设置keystone服务端点并设置admin用户密码
[root@ajy6 ~]# keystone-manage bootstrap --bootstrap-password admin \ #用户密码为admin
> --bootstrap-admin-url http://ajy6:35357/v3/ \ #管理网,端口为35357
> --bootstrap-internal-url http://ajy6:5000/v3/ \ #内网,端口为5000
> --bootstrap-public-url http://ajy6:5000/v3/ \ #公共网,端口为5000
> --bootstrap-region-id RegionOne #工作域
8> 配置http服务,加入主机名
[root@ajy6 ~]# vim /etc/httpd/conf/httpd.conf
#ServerName www.example.com:
ServerName ajy6
9> 创建插件wsgi调用http的链接
[root@ajy6 ~]# ln -s /usr/share/keystone/wsgi-keystone.conf /etc/httpd/conf.d/
[root@ajy6 ~]# cd /etc/httpd/conf.d/
[root@ajy6 conf.d]# ll
lrwxrwxrwx root root Jun : wsgi-keystone.conf -> /usr/share/keystone/wsgi-keystone.conf
10> 启动httpd服务,则将keystone服务启动
[root@ajy6 ~]# systemctl start httpd
[root@ajy6 ~]# systemctl enable httpd
Created symlink from /etc/systemd/system/multi-user.target.wants/httpd.service to /usr/lib/systemd/system/httpd.service.
11> 配置admin用户的环境变量。
在命令行要控制OpenStack环境必须进行登录,因此需要在命令将OpenStack admin身份信息设置为环境变量,宣告admin身份信息。
环境变量保存在/root/openrc下面,文件名openrc自定义。
[root@ajy6 ~]# pwd
/root
[root@ajy6 ~]# vim openrc
export OS_USERNAME=admin #用户
export OS_PASSWORD=admin #密码
export OS_PROJECT_NAME=admin #项目
export OS_USER_DOMAIN_NAME=Default
export OS_PROJECT_DOMAIN_NAME=Default
export OS_AUTH_URL=http://ajy6:35357/v3 #主机
export OS_IDENTITY_API_VERSION=
执行文件脚本,宣告环境变量
[root@ajy6 ~]# sh openrc
#或者用命令source
[root@ajy6 ~]# source openrc
宣告完成后就相当于在图形界面使用账户密码登录OpenStack,因此可以使用openstack 命令了。
#查看OpenStack里面的用户
[root@ajy6 ~]# openstack user list
+----------------------------------+-------+
| ID | Name |
+----------------------------------+-------+
| 4a3f3226d6a74669a23da16b623c386c | admin |
+----------------------------------+-------+
4.3 创建一个domain
1> 创建一个服务项目
[root@ajy6 ~]# openstack project create --domain default \
> --description "Service Project" service #创建一个service项目,默认在domain域
+-------------+----------------------------------+
| Field | Value |
+-------------+----------------------------------+
| description | Service Project |
| domain_id | default |
| enabled | True |
| id | 6338a2d46b78461fb172e3f5a4774482 |
| is_domain | False |
| name | service |
| parent_id | default |
查看项目列表
[root@ajy6 ~]# openstack project list
+----------------------------------+---------+
| ID | Name |
+----------------------------------+---------+
| 6338a2d46b78461fb172e3f5a4774482 | service |
| 9856add5c8ad499b8b7e07b2d8cf0c0d | admin |
+----------------------------------+---------+
2> 创建demo项目
[root@ajy6 ~]# openstack project create --domain default \
> --description "Demo Project" demo
+-------------+----------------------------------+
| Field | Value |
+-------------+----------------------------------+
| description | Demo Project |
| domain_id | default |
| enabled | True |
| id | a617fd3550a74b039ceec50afec1e370 |
| is_domain | False |
| name | demo |
| parent_id | default |
+-------------+----------------------------------+
[root@ajy6 ~]# openstack project list
+----------------------------------+---------+
| ID | Name |
+----------------------------------+---------+
| 6338a2d46b78461fb172e3f5a4774482 | service |
| 9856add5c8ad499b8b7e07b2d8cf0c0d | admin |
| a617fd3550a74b039ceec50afec1e370 | demo |
+----------------------------------+---------+
3> 创建demo用户
[root@ajy6 ~]# openstack user create --domain default \
> --password-prompt demo
User Password: #为方便记忆,用户和密码均为demo
Repeat User Password:
+---------------------+----------------------------------+
| Field | Value |
+---------------------+----------------------------------+
| domain_id | default |
| enabled | True |
| id | fca9c0d1f4fb4524a25ee8562794f6c0 |
| name | demo |
| options | {} |
| password_expires_at | None |
+---------------------+----------------------------------+
[root@ajy6 ~]# openstack user list
+----------------------------------+-------+
| ID | Name |
+----------------------------------+-------+
| 4a3f3226d6a74669a23da16b623c386c | admin |
| fca9c0d1f4fb4524a25ee8562794f6c0 | demo |
+----------------------------------+-------+ #删除用户用命令 user delete
[root@ajy6 ~]# openstack user delete demo
[root@ajy6 ~]# openstack user list
+----------------------------------+-------+
| ID | Name |
+----------------------------------+-------+
| 4a3f3226d6a74669a23da16b623c386c | admin |
+----------------------------------+-------+ #重新创建用户demo,直接在添加的时候写入密码
[root@ajy6 ~]# openstack user create --domain default --password=demo demo
+---------------------+----------------------------------+
| Field | Value |
+---------------------+----------------------------------+
| domain_id | default |
| enabled | True |
| id | a5b7806347f04a839e5f87098c45e8b1 |
| name | demo |
| options | {} |
| password_expires_at | None |
+---------------------+----------------------------------+
4> 创建角色user
[root@ajy6 ~]# openstack role list
+----------------------------------+----------+
| ID | Name |
+----------------------------------+----------+
| 6a7c42942f1a4a3881c1b89f0052de38 | admin |
| 9fe2ff9ee4384b1894a90878d3e92bab | _member_ |
+----------------------------------+----------+
[root@ajy6 ~]# openstack role create user
+-----------+----------------------------------+
| Field | Value |
+-----------+----------------------------------+
| domain_id | None |
| id | 58e8774b5b01404bbbc1feec776abcfe |
| name | user |
+-----------+----------------------------------+
[root@ajy6 ~]# openstack role list
+----------------------------------+----------+
| ID | Name |
+----------------------------------+----------+
| 58e8774b5b01404bbbc1feec776abcfe | user |
| 6a7c42942f1a4a3881c1b89f0052de38 | admin |
| 9fe2ff9ee4384b1894a90878d3e92bab | _member_ |
+----------------------------------+----------+
5> 将角色user添加到demo项目的demo用户
[root@ajy6 ~]# openstack role add --project demo --user demo user
OpenStack核心组件-keystone的更多相关文章
- openstack核心组件——keystone身份认证服务(5)
云计算openstack核心组件——keystone身份认证服务(5) 部署公共环境 ntp openstack mariadb-server rabbitmq-server memcache 1.w ...
- openstack核心组件--keystone(1)
一.keystone介绍 keystone 是OpenStack的组件之一,用于为OpenStack家族中的其它组件成员提供统一的认证服务,包括身份验证.令牌的发放和校验.服务列表.用户权限的定义等等 ...
- 云计算openstack核心组件——keystone身份认证服务
一.Keystone介绍: keystone 是OpenStack的组件之一,用于为OpenStack家族中的其它组件成员提供统一的认证服务,包括身份验证.令牌的发放和校验.服务列表.用户 ...
- openstack核心组件——keystone身份认证部署服务(5)
node1主机执行 1.mysql -u root -p 2.create database keystone; 创建数据库 MariaDB [(none)]> show databases; ...
- 云计算openstack核心组件——keystone身份认证服务(5)
一.Keystone介绍: keystone 是OpenStack的组件之一,用于为OpenStack家族中的其它组件成员提供统一的认证服务,包括身份验证.令牌的发放和校验.服务列表.用户 ...
- 云计算OpenStack核心组件---keystone身份认证服务(5)
一.Keystone介绍: keystone 是OpenStack的组件之一,用于为OpenStack家族中的其它组件成员提供统一的认证服务,包括身份验证.令牌的发放和校验.服务列表.用户权限的定义等 ...
- OpenStack总体架构概览&OpenStack核心组件介绍
下面个是51CTO上一位朋友发布的O版OpenStack核心组件说明,总结的非常到位,所以我就不再造轮子了.~,~ https://down.51cto.com/data/2448945 私有云 公有 ...
- openstack核心组件——glance— 镜像服务(6)
云计算openstack核心组件——glance— 镜像服务(6) 一.glance介绍: Glance是Openstack项目中负责镜像管理的模块,其功能包括虚拟机镜像 ...
- openstack核心组件——neutron网络服务 抓取ip(9)
云计算openstack核心组件——neutron网络服务(9) 一.虚拟机获取 ip: 用 namspace 隔离 DHCP 服务 Neutron 通过 dnsmasq 提供 DHCP 服务 ...
随机推荐
- jvm 性能调优工具之 jmap 命令详解
jmap名称:Java Memory Map(内存映射) 官方文档:https://docs.oracle.com/javase/1.5.0/docs/tooldocs/share/jmap.html ...
- .net桌面程序或者控制台程序使用NLog时的注意事项
Nuget添加NLog 添加nlog.config文件,并选择属性->始终复制 不选择始终复制,编译后nlog.config是没有的. 具体使用: private static readonly ...
- 超详尽-QThread的正确使用姿势-以及信号槽的跨线程使用
贴上两篇博文 一.http://www.cnblogs.com/findumars/p/5031239.html 循序渐进介绍了,怎样正确的让槽函数工作在子线程中. 同时介绍了信号槽的绑定与线程的关系 ...
- JS系列:数据类型详细讲解
ctrl+B加粗 ### 数据类型: - 1.number数字类型 NaN:not a number 不是一个数 ,但他是数字类型 isNaN:检测当前值是否不是有效数字,返回true代表不是有效数字 ...
- centos7查看防火墙状态、关闭防火墙
查看防火墙状态: firewall-cmd --state 关闭防火墙: systemctl stop firewalld.service 禁止firewall开机启动: systemctl disa ...
- Vue(九)使用Ant Design入门——环境搭建
安装 npm install ant-design-vue --save 然后在main.js里面引入 import ant from 'ant-design-vue' import 'ant-des ...
- windows SDK中的wininet写http客户端
BOOL InternetSetOption( _In_ HINTERNET hInternet, _In_ DWORD dwOption, _In_ LPVOID lpBuffer, _In_ ...
- Golang修改json文件的两种方法
第三方包 go get -u github.com/tidwall/sjson bytes, _ := ioutil.ReadFile(jsonFile) value1, _ := sjson.Set ...
- 挂载一个NFS共享
在 system2 上挂载一个来自 system1.group8.example.com 的NFS共享,并符合下列要求: 1./public 挂载在下面的目录上 /mnt/nfsmount 2./pr ...
- springcolud 的学习(四)服务治理. Eureka
什么是服务治理在传统rpc远程调用中,服务与服务依赖关系,管理比较复杂,所以需要使用服务治理,管理服务与服务之间依赖关系,可以实现服务调用.负载均衡.容错等,实现服务发现与注册.服务注册与发现 在服务 ...