在本文中,我们将为您详细介绍CentOS7部署saltstack服务的相关知识,并且为您解答关于centos7搭建ss的疑问,此外,我们还会提供一些关于Saltstack安装(CentOS7.x)、0
在本文中,我们将为您详细介绍CentOS 7 部署saltstack服务的相关知识,并且为您解答关于centos7搭建ss的疑问,此外,我们还会提供一些关于 Saltstack安装 (CentOS7.x)、010-SaltStack及SaltStack Web UI安装部署、
- CentOS 7 部署saltstack服务(centos7搭建ss)
- Saltstack安装 (CentOS7.x)
- 010-SaltStack及SaltStack Web UI安装部署
之(一) 环境部署 - centos 6.3x64 安装saltstack
CentOS 7 部署saltstack服务(centos7搭建ss)
SaltStack 简介
- Salt,,一种全新的基础设施管理方式,部署轻松,在几分钟内可运行起来,扩展性好,很容易管理上万台服务器,速度够快,服务器之间秒级通讯。salt底层采用动态的连接总线,使其可以用于编配,远程执行,配置管理等等.
- SaltStack 官网:https://saltstack.com/
- SaltStack 官方文档:https://docs.saltstack.com/en/latest/
- SaltStack github地址:
SaltStack 安装
- 安装salt-master on Salt Master Host.
# install from EPEL [root@linuxprobe~]# yum --enablerepo=epel -y install salt-master [root@linuxprobe~]# systemctl start salt-master [root@linuxprobe~]# systemctl enable salt-master Created symlink from /etc/systemd/system/multi-user.target.wants/salt-master.service to /usr/lib/systemd/system/salt-master.service.
- On Salt Master Server,If Firewalld is running,allow related ports.
[root@linuxprobe~]# firewall-cmd --add-port={4505/tcp,4506/tcp} --permanent success [root@linuxprobe~]# firewall-cmd --reload success
- 安装 salt-minion on Salt Minion Host.
# install from EPEL [root@vdevops~]# yum --enablerepo=epel -y install salt-minion [root@vdevops~]# sed -i 's/\#master: salt/master: linuxprobe.org/' /etc/salt/minion [root@vdevops~]# systemctl start salt-minion [root@vdevops~]# systemctl enable salt-minion Created symlink from /etc/systemd/system/multi-user.target.wants/salt-minion.service to /usr/lib/systemd/system/salt-minion.service.
Salt Clinet客户端启动之后会发送public-key 到Salt Master获取认证. Salt Master 可以接收client发过来的认证请求。
# show the list of keys [root@linuxprobe master]# salt-key -L Accepted Keys: Denied Keys: Unaccepted Keys: vdevops.org Rejected Keys: # permit all keys with "A" option [root@linuxprobe master]# salt-key -A The following keys are going to be accepted: Unaccepted Keys: vdevops.org Proceed? [n/Y] y #确认 Key for minion vdevops.org accepted. [root@linuxprobe master]# salt-key -L Accepted Keys: vdevops.org Denied Keys: Unaccepted Keys: Rejected Keys: # 测试连接 [root@linuxprobe ~]# salt '*' test.ping vdevops.org: True
saltstack基础使用
Saltstack的基础用法就是从master执行命令同步到客户端
salt [option] [target] [function] [arguments]
参考文档:https://docs.saltstack.com/en/latest/ref/modules/all/index.html
- 查看函数用法
[root@linuxprobe ~]# salt '*' sys.doc | less 'acl.delfacl:' Remove specific FACL from the specified file(s) CLI Examples: salt '*' acl.delfacl user myuser /tmp/house/kitchen salt '*' acl.delfacl default:group mygroup /tmp/house/kitchen salt '*' acl.delfacl d:u myuser /tmp/house/kitchen salt '*' acl.delfacl g myuser /tmp/house/kitchen /tmp/house/livingroom salt '*' acl.delfacl user myuser /tmp/house/kitchen recursive=True 'acl.getfacl:' Return (extremely verbose) map of FACLs on specified file(s) CLI Examples: salt '*' acl.getfacl /tmp/house/kitchen salt '*' acl.getfacl /tmp/house/kitchen /tmp/house/livingroom salt '*' acl.getfacl /tmp/house/kitchen /tmp/house/livingroom recursive=True ...
- It’s possible to specify targets with varIoUs way
# specify all Minions # test.ping means that make sure Minions are acitive [root@linuxprobe ~]# salt '*' test.ping vdevops.org: True linuxprobe.org: True # specify a Minion "vdevops.org" # disk.usage means that make sure current disk usag [root@linuxprobe ~]# salt 'vdevops.org' disk.usage vdevops.org: ---------- /: ---------- 1K-blocks: 18307072 available: 16866300 capacity: 8% filesystem: /dev/mapper/centos-root used: 1440772 # specify some Minions with List(comma separated) # status.loadavg means that make sure load averages [root@linuxprobe ~]# salt -L 'vdevops.org,linuxprobe.org' status.loadavg vdevops.org: ---------- 1-min: 0.0 15-min: 0.05 5-min: 0.01 linuxprobe.org: ---------- 1-min: 0.02 15-min: 0.06 5-min: 0.08 # specify Minions with expression (example means "node00-99.srv.world") # selinux.getenforce means that make sure SELinux operating mode [root@dlp ~]# salt -E 'node[0-9][0-9].srv.world' selinux.getenforce node02.srv.world: Enforcing node01.srv.world: Enforcing # specify Minions which OS is CentOS with Grains Data # grains.item kernelrelease means that make sure Kernel version from grains.item data # Grains is the word used in Salt and which keeps Minions' OS data and others [root@linuxprobe ~]# salt -G 'os:CentOS' grains.item kernelrelease vdevops.org: ---------- kernelrelease: 3.10.0-327.36.2.el7.x86_64 linuxprobe.org: ---------- kernelrelease: 3.10.0-327.el7.x86_64
- 自定义目标组
[root@linuxprobe ~]# vi /etc/salt/master # line 12: uncomment default_include: master.d/*.conf [root@linuxprobe ~]# mkdir /etc/salt/master.d [root@linuxprobe ~]# vi /etc/salt/master.d/nodegroups.conf # create new # group_org : # group_os : specify OS is CentOS nodegroups: group_org: 'L@linuxprobe.org,vdevops.org' group_os: 'G@os:CentOS' [root@linuxprobe ~]# systemctl restart salt-master # run to a target group_os [root@linuxprobe master.d]# salt -N 'group_os' cmd.run 'hostname' vdevops.org: vdevops.org linuxprobe.org: linuxprobe.org
Salt State文件使用
学习如何配置Salt State文件对于学习saltstack和使用salt很重要,state文件采用yaml格式编写
- 首先,定义文件根目录放状态,默认/srv/salt
[root@linuxprobe ~]# vi /etc/salt/master # line 417: uncomment and define root directory file_roots: base: - /srv/salt [root@linuxprobe ~]# mkdir /srv/salt
要将状态文件放在根目录下,可以使用salt命令将配置应用到Minions,下面的示例,将wget包安装到Minions
# (any file name).sls [root@linuxprobe ~]# vi /srv/salt/default.sls # create new install_wget: pkg.installed: - name: wget [root@linuxprobe ~]# salt "vdevops.org" state.sls default vdevops.org: ---------- ID: install_wget Function: pkg.installed Name: wget Result: True Comment: The following packages were installed/updated: wget Started: 18:54:59.514712 Duration: 14193.327 ms Changes: ---------- wget: ---------- new: 1.14-10.el7_0.1 old: Summary ------------ Succeeded: 1 (changed=1) Failed: 0 ------------ Total states run: 1 # 确认 [root@linuxprobe ~]# salt "vdevops.org" cmd.run 'rpm -q wget' vdevops.org: wget-1.14-10.el7_0.1.x86_64
配置状态树的示例
- 将top.sls称为“顶部文件”在您定义的根目录下
root@linuxprobe ~]# vi /srv/salt/top.sls base: # define target Minions '*': # define the name of State file - default # create State file defined in Top File [root@linuxprobe ~]# vi /srv/salt/default.sls # for example,Install and start httpd and MariaDB and also install PHP webserver: pkg.installed: - pkgs: - httpd - PHP - PHP-mbstring - PHP-pear - mariadb-server /var/www/html/index.PHP: file: - managed - source: salt://httpd/index.PHP - require: - pkg: webserver # initial setup script /tmp/setup.sql: file: - managed - source: salt://httpd/setup.sql enable_httpd: service.running: - name: httpd - enable: True - require: - pkg: webserver enable_mariadb: service.running: - name: mariadb - enable: True - require: - pkg: webserver setup_mariadb: cmd.run: - name: '/bin/MysqL -u root < /tmp/setup.sql' - require: - service: enable_mariadb # if Firewalld is running,configure services {% set fw_status = salt['service.status']('firewalld') %} {% if fw_status %} setup_fw: cmd.run: - names: - '/bin/firewall-cmd --add-service={http,https,MysqL}' - '/bin/firewall-cmd --add-service={http,MysqL} --permanent' {% endif %} # create index.PHP template [root@linuxprobe ~]# mkdir /srv/salt/httpd [root@linuxprobe ~]# vi /srv/salt/httpd/index.PHP <?PHP print "Salt State Test Page\n"; ?> # create MariaDB initial setup script [root@linuxprobe ~]# vi /srv/salt/httpd/setup.sql set password for root@localhost=password('password'); set password for root@'127.0.0.1'=password('password'); delete from MysqL.user where user=''; delete from MysqL.user where password=''; drop database test;
- 测试,配置文件是否正确
[root@linuxprobe ~]# salt "*" state.apply test=True vdevops.org: ---------- cmd_|-setup_fw_|-/bin/firewall-cmd --add-service={http,MysqL} --permanent_|-run: ---------- __run_num__: 7 changes: ---------- comment: Command "/bin/firewall-cmd --add-service={http,MysqL} --permanent" would have been executed duration: 0.198 name: /bin/firewall-cmd --add-service={http,MysqL} --permanent result: None start_time: 19:09:39.481991 cmd_|-setup_fw_|-/bin/firewall-cmd --add-service={http,MysqL}_|-run: ---------- __run_num__: 6 changes: ---------- comment: Command "/bin/firewall-cmd --add-service={http,MysqL}" would have been executed duration: 0.328 name: /bin/firewall-cmd --add-service={http,MysqL} result: None start_time: 19:09:39.481608 cmd_|-setup_mariadb_|-/bin/MysqL -u root < /tmp/setup.sql_|-run: ... # 不报错执行 [root@linuxprobe ~]# salt "*" state.apply
- 确认安装的服务是否正常
[root@linuxprobe ~]# salt "vdevops.org" cmd.run 'systemctl status httpd' vdevops.org: * httpd.service - The Apache HTTP Server Loaded: loaded (/usr/lib/systemd/system/httpd.service; enabled; vendor preset: disabled) Active: active (running) since Tue 2016-11-15 19:11:41 CST; 20min ago Docs: man:httpd(8) man:apachectl(8) Main PID: 3261 (httpd) Status: "Total requests: 0; Current requests/sec: 0; Current traffic: 0 B/sec" CGroup: /system.slice/httpd.service |-3261 /usr/sbin/httpd -DFOREGROUND |-3262 /usr/sbin/httpd -DFOREGROUND |-3263 /usr/sbin/httpd -DFOREGROUND |-3264 /usr/sbin/httpd -DFOREGROUND |-3265 /usr/sbin/httpd -DFOREGROUND `-3266 /usr/sbin/httpd -DFOREGROUND Nov 15 19:11:41 vdevops.org systemd[1]: Starting The Apache HTTP Server... Nov 15 19:11:41 vdevops.org httpd[3261]: AH00558: httpd: Could not reliably determine the server's fully qualified domain name,using vdevops.org. Set the 'ServerName' directive globally to suppress this message Nov 15 19:11:41 vdevops.org systemd[1]: Started The Apache HTTP Server. [root@linuxprobe ~]# salt "vdevops.org" cmd.run 'systemctl status mariadb' vdevops.org: * mariadb.service - MariaDB database server Loaded: loaded (/usr/lib/systemd/system/mariadb.service; enabled; vendor preset: disabled) Active: active (running) since Tue 2016-11-15 19:11:45 CST; 21min ago Main PID: 3397 (MysqLd_safe) CGroup: /system.slice/mariadb.service |-3397 /bin/sh /usr/bin/MysqLd_safe --basedir=/usr `-3554 /usr/libexec/MysqLd --basedir=/usr --datadir=/var/lib/MysqL --plugin-dir=/usr/lib64/MysqL/plugin --log-error=/var/log/mariadb/mariadb.log --pid-file=/var/run/mariadb/mariadb.pid --socket=/var/lib/MysqL/MysqL.sock Nov 15 19:11:42 vdevops.org mariadb-prepare-db-dir[3318]: The latest information about MariaDB is available at http://mariadb.org/. Nov 15 19:11:42 vdevops.org mariadb-prepare-db-dir[3318]: You can find additional information about the MysqL part at: Nov 15 19:11:42 vdevops.org mariadb-prepare-db-dir[3318]: http://dev.MysqL.com Nov 15 19:11:42 vdevops.org mariadb-prepare-db-dir[3318]: Support MariaDB development by buying support/new features from MariaDB Nov 15 19:11:42 vdevops.org mariadb-prepare-db-dir[3318]: Corporation Ab. You can contact us about this at sales@mariadb.com. Nov 15 19:11:42 vdevops.org mariadb-prepare-db-dir[3318]: Alternatively consider joining our community based development effort: Nov 15 19:11:42 vdevops.org mariadb-prepare-db-dir[3318]: http://mariadb.com/kb/en/contributing-to-the-mariadb-project/ Nov 15 19:11:42 vdevops.org MysqLd_safe[3397]: 161115 19:11:42 MysqLd_safe Logging to '/var/log/mariadb/mariadb.log'. Nov 15 19:11:42 vdevops.org MysqLd_safe[3397]: 161115 19:11:42 MysqLd_safe Starting MysqLd daemon with databases from /var/lib/MysqL Nov 15 19:11:45 vdevops.org systemd[1]: Started MariaDB database server. # 测试PHP页面 [root@linuxprobe ~]# curl http://vdevops.org/index.PHP Salt State Test Page
Salt : 使用 Salt-cp
[root@linuxprobe ~]# salt-cp '*' anaconda-ks.cfg /tmp/ {'vdevops.org': {'/tmp/anaconda-ks.cfg': True}}
Saltstack安装 (CentOS7.x)
一、安装基础:
1.导入SaltStack仓库key:
wgethttps://repo.saltstack.com/yum/rhel7/SALTSTACK-GPG-KEY.pub rpm--importSALTSTACK-GPG-KEY.pub rm-fSALTSTACK-GPG-KEY.pub
2.创建新的YUM源文件并“/etc/yum.repos.d/saltstack.repo”编辑如下内容
[saltstack-repo] name=SaltStackrepoforRHEL/CentOS7 baseurl=https://repo.saltstack.com/yum/rhel7 enabled=1 gpgcheck=1 gpgkey=https://repo.saltstack.com/yum/rhel7/SALTSTACK-GPG-KEY.pub
3.安装SaltStack软件
yumcleanexpire-cache yumupdate 安装salt-minion,salt-master yuminstallsalt-master yuminstallsalt-minion
4.修改配置文件
minion: vi/etc/salt/minion master:11.1.0.44 cat/etc/salt/minion|grep"^master" master:11.1.0.44 打开该文件,这里有两项是必须配置项。其一、找到如下行 #resolved,thentheminionwillfailtostart. #master:salt 在其下增加master主机的配置 #resolved,thentheminionwillfailtostart. #master:salt master:11.1.0.44 这里直接配置的是IP地址,也可以配置成主机名,如果配置成主机名的话,需要在/etc/hosts文件中master主机对应的IP, 如果使用内部DNS的例外,可以在内部DNS上的统一配置。 其二、找到如下段部分 RejectedKeys:在其下增加一行内容 id:host111 这里是指定当前主机的id号,这在后面master认证和master调用命令执行时显示的名称,可以根据实际识别需要填写。 另外需要注意的是,以上两处配置冒号后面都需要有一个空格,不然会报如下错误: master: vi/etc/salt/master interface:11.1.0.44 cat/etc/salt/master|grep"^interface" interface:11..1.0.44 注意:master和interface前面有两个空格,如果没有启动的时候回出现错误;
5.启动服务:
Master chkconfigsalt-masteron systemctlrestartsalt-master.service Minion chkconfigsalt-minionon systemctlrestartsalt-minion.service
6,测试saltstack
查看minion列表: [root@salt-master~]#salt-key-L AcceptedKeys: DeniedKeys: UnacceptedKeys: host111 RejectedKeys: 接收所有key: salt-key-A 在这个过程中会提示Y确认,确认即可; 显示结果: Keyforminionhost111accepted. [root@salt-master~]#salt-key-L AcceptedKeys: host111 DeniedKeys: UnacceptedKeys: RejectedKeys:
如果对客户端信任,可以让master自动接受请求,在端/etc/salt/master配置
auto_accept:True
注:可以通过以下方法确认具体的版本: [root@salt-master~]#salt'*'test.versions_report host111: SaltVersion: Salt:2016.3.4 DependencyVersions: cffi:notinstalled cherrypy:notinstalled dateutil:notinstalled gitdb:notinstalled gitpython:notinstalled ioflo:notinstalled Jinja2:2.7.2 libgit2:notinstalled libnacl:notinstalled M2Crypto:notinstalled Mako:notinstalled msgpack-pure:notinstalled msgpack-python:0.4.6 MysqL-python:notinstalled pycparser:notinstalled pycrypto:2.6.1 pygit2:notinstalled Python:2.7.5(default,Nov202015,02:00:19) python-gnupg:notinstalled PyYAML:3.11 pyzmq:15.3.0 RAET:notinstalled smmap:notinstalled timelib:notinstalled Tornado:4.2.1 ZMQ:4.1.4 SystemVersions: dist:centos7.2.1511Core machine:x86_64 release:3.10.0-327.el7.x86_64 system:Linux version:CentOSLinux7.2.1511Core
二、命令执行
1、测试和minion之间的通信是否正常
[root@salt-master~]#salt'*'test.ping
host111: True True代表正常,*代表所有主机,也可以选择单台或者按组及正则进行匹配等, 这个可以参看下官方相关文档。其默认执行的正则是shell正则,也可以使用其他正则或组等,如下: salt'shell正则'命令 salt-E'prel正则' salt-N$group命令 salt-L'server_id1,server_id2,server_id3'命令
2、执行命令操作
常用的操作类似如下 salt'*'cmd.run"ab-n10-c2http://www.111cn.net/" salt'*'grains.ls查看grains分类 salt'*'grains.items查看grains所有信息 salt'*'grains.itemosrelease查看grains某个信息 salt'*'cmd.run"/App/Nginx/sbin/Nginx-v"命令执行使用cmd.run参数,由于输出内容较多, 不再一一列出,这里只列出一台查看Nginx版本的: [root@salt-master~]#salt'*'cmd.run'Nginx-v' host111: Nginxversion:Nginx/1.10.2
好了至此我们的saltstack 基本使用方法已经给出,后续会演示更深层次像函数的用法
010-SaltStack及SaltStack Web UI安装部署
master装web界面
- cd /var/www 下载halite
地址https://github.com/saltstack/halite - 生成index.html文件
解压并进入halite目录下 - cd halite/halite
cd halite/halite
./genindex.py -C
- 安装salt-api
yum install salt-api
- 创建用户salt-api的用户(非root)
useradd -M -s /sbin/nologin slsapi
echo ''slsapi'' | passwd slsapi --stdin
- 在master端添加配置文件 ,在/etc/salt/master.d中加入saltweb.conf:
vi /etc/salt/master.d/saltweb.conf
,添加如下内容:
rest_cherrypy:
host: 0.0.0.0 port: 8080 debug: true static: /var/www/halite/halite #修改为自己的存储路径 app: /var/www/halite/halite/index.html external_auth: pam: slsapi: #此处修改为自己的用户 - .* - ''@runner'' - ''@wheel''
然后重启master。systemctl restart salt-master
- 配置salt-api启动项,并启动
设置api开机自启
systemctl enable salt-api.service
修改服务文件vi /usr/lib/systemd/system/salt-api.service
,修改ExecStart项
ExecStart=/usr/bin/python /home/software/halite-master/halite/server_bottle.py -d -C -l debug -s cherrypy (这步骤可省略)
然后启动salt-api
systemctl daemon-reload
systemctl start salt-api
如无效则用下面方法启动
salt web管理平台:Oneops的部署
https://github.com/net592/OneOps
部署环境:centos6.2; django-1.9.5;python-2.7.11
git并没有给出部署文档,所以以下只是自己根据报错尝试部署
1.git克隆源代码
git clone https://github.com/net592/OneOps.git
1
2.安装依赖包
pip install django-crontab
pip install django-celery
pip install kombu
pip install billiard
pip install pytz
之(一) 环境部署
学习Openstack的前两个月,时间都花在环境部署上了,主要是版本的问题,导致了一系列的麻烦. 之前使用devstack已经部署成功了,但是manila不能用,残念,问题主要出在网络上,研究完manila的网络模块之后再回头找原因吧. 不打算继续在环境上花时间了,这里给了一套可以重复的安装部署流程,使用packstack.
1. 安装环境
虚拟机软件: VirtualBox
Centos镜像: CentOS-7-x86_64-DVD-1511(1).iso
网络: 一张NAT网卡 (默认IP: 10.0.2.15)
2. packstack安装过程
2.1 增加对packstack
的解析
安装过程中可能会出现以下错误:
* unable to connect to epmd (port 4369) on packstack
原因是因为配置文件里将该进程放到了packstack
这台主机上. 为了解决这个问题,增加域名解析就行了:
[root@packstack ~]# uname -a [root@packstack ~]# vim /etc/hosts 10.0.2.15 packstack 192.168.9.217 server
其中,server是我自己搭建的Centos7的本地源. 不使用本地源的不用增加这一项.
2.2 修改Centos和epel源
(1) Centos源
[root@packstack ~]# cd /etc/yum.repos.d/ [root@packstack ~]# mkdir bak [root@packstack ~]# mv CentOS-* bak/ [root@packstack ~]# mv local_mitaka.repo /etc/yum.repos.d/
这里我使用了本地源. 没有搭建本地源的朋友直接修改成阿里云开源镜像即可. 方法类似下面的epel源.
(2) epel源
[root@packstack ~]# wget -O /etc/yum.repos.d/epel.repo http://mirrors.aliyun.com/repo/epel-7.repo [root@packstack ~]# yum clean all [root@packstack ~]# yum makecache
2.3 关防火墙和seliunx
[root@packstack ~]# systemctl stop firewalld [root@packstack ~]# systemctl disable firewalld [root@packstack ~]# vim /etc/selinux/config SELINUX=disabled
2.4 安装packstack包
[root@packstack ~]# yum -y install centos-release-openstack-mitaka epel-release [root@packstack ~]# yum -y install openstack-packstack
2.5 准备answer文件
answer文件根据我自己的环境修改过,在下一篇博客中我将给出完整的文件.
[root@packstack ~]# touch packstack-answers-20160915-011640.txt_serverworld第二个版本有manila [root@packstack ~]# vim packstack-answers-20160915-011640.txt_serverworld第二个版本有manila
2.6 开始安装
[root@packstack ~]# packstack --answer-file packstack-answers-20160915-011640.txt_serverworld第二个版本有manila
2.7 切换权限
[root@packstack ~]# source keystonerc_admin [root@packstack ~]# cat keystonerc_admin [root@packstack ~(keystone_admin)]# manila pool-list +------+------+---------+------+ | Name | Host | Backend | Pool | +------+------+---------+------+ +------+------+---------+------+
因为我的重点是研究manila模块,所以安装成功之后第一时间检查了manila模块. 很遗憾,manila模块安装失败. 原因应该是版本的问题,没有时间去具体研究脚本,下面直接给出解决方案. 这一步成功安装,或者不需要manila服务的朋友,可以不用继续向下了.
3. manila服务安装错误排查
3.1 查看日志
[root@packstack ~]# cat /var/log/manila/share.log | grep ERROR 2016-09-16 11:50:08.123 15388 ERROR oslo_service.periodic_task Traceback (most recent call last): 2016-09-16 11:50:08.123 15388 ERROR oslo_service.periodic_task File "/usr/lib/python2.7/site-packages/oslo_service/periodic_task.py",line 220,in run_periodic_tasks 2016-09-16 11:50:08.123 15388 ERROR oslo_service.periodic_task task(self,context) 2016-09-16 11:50:08.123 15388 ERROR oslo_service.periodic_task File "/usr/lib/python2.7/site-packages/manila/utils.py",line 615,in wrapper 2016-09-16 11:50:08.123 15388 ERROR oslo_service.periodic_task raise exception.Drivernotinitialized(driver=driver_name) 2016-09-16 11:50:08.123 15388 ERROR oslo_service.periodic_task Drivernotinitialized: Share driver 'GenericShareDriver' not initialized.
查看了manila几个进程的日志后发现,是manila-share进程出现错误. 其实可以理解,因为manila pool为空,说明share进程没有成功管理后端存储. 更详细的错误信息如下:
2016-09-15 17:44:06.281 2732 ERROR manila.share.manager [req-c7388245-8da4-44d8-b11a-0788defc2fcc - - - - -] Error encountered during initialization of driver 'GenericShareDriver' on 'packstack@generic' host. Class CIFSHelper cannot be found (['Traceback (most recent call last):\n',' File "/usr/lib/python2.7/site-packages/oslo_utils/importutils.py",line 32,in import_class\n return getattr(sys.modules[mod_str],class_str)\n',"AttributeError: 'module' object has no attribute 'CIFSHelper'\n"]) 2016-09-15 17:44:06.281 2732 ERROR manila.share.manager Traceback (most recent call last): 2016-09-15 17:44:06.281 2732 ERROR manila.share.manager File "/usr/lib/python2.7/site-packages/manila/share/manager.py",line 248,in init_host 2016-09-15 17:44:06.281 2732 ERROR manila.share.manager self.driver.do_setup(ctxt) 2016-09-15 17:44:06.281 2732 ERROR manila.share.manager File "/usr/lib/python2.7/site-packages/manila/share/drivers/generic.py",line 177,in do_setup 2016-09-15 17:44:06.281 2732 ERROR manila.share.manager self._setup_helpers() 2016-09-15 17:44:06.281 2732 ERROR manila.share.manager File "/usr/lib/python2.7/site-packages/manila/share/drivers/generic.py",line 208,in _setup_helpers 2016-09-15 17:44:06.281 2732 ERROR manila.share.manager helper = importutils.import_class(import_str) 2016-09-15 17:44:06.281 2732 ERROR manila.share.manager File "/usr/lib/python2.7/site-packages/oslo_utils/importutils.py",line 36,in import_class 2016-09-15 17:44:06.281 2732 ERROR manila.share.manager traceback.format_exception(*sys.exc_info()))) 2016-09-15 17:44:06.281 2732 ERROR manila.share.manager ImportError: Class CIFSHelper cannot be found (['Traceback (most recent call last):\n',"AttributeError: 'module' object has no attribute 'CIFSHelper'\n"]) 2016-09-15 17:44:06.281 2732 ERROR manila.share.manager 2016-09-15 17:45:44.317 2732 ERROR oslo_service.periodic_task [req-a24899f7-4d96-4780-9f52-1d381654ee74 - - - - -] Error during ShareManager._report_driver_status 2016-09-15 17:45:44.317 2732 ERROR oslo_service.periodic_task Traceback (most recent call last): 2016-09-15 17:45:44.317 2732 ERROR oslo_service.periodic_task File "/usr/lib/python2.7/site-packages/oslo_service/periodic_task.py",in run_periodic_tasks 2016-09-15 17:45:44.317 2732 ERROR oslo_service.periodic_task task(self,context) 2016-09-15 17:45:44.317 2732 ERROR oslo_service.periodic_task File "/usr/lib/python2.7/site-packages/manila/utils.py",in wrapper 2016-09-15 17:45:44.317 2732 ERROR oslo_service.periodic_task raise exception.Drivernotinitialized(driver=driver_name) 2016-09-15 17:45:44.317 2732 ERROR oslo_service.periodic_task Drivernotinitialized: Share driver 'GenericShareDriver' not initialized.
很明显,错误的根本原因是找不到CIFSHelper这个类. 查看manila.conf配置文件,发现对generic这个后端存储有如下配置:
share_helpers = CIFS=manila.share.drivers.generic.CIFSHelper,NFS=manila.share.drivers.generic.NFSHelper
这个配置文件是由packstack生成的,应该是版本不一致导致了配置文件信息有误. 查看Liberty版本的manila/manila/share/drivers/generic.py
文件,发现该文件有CIFSHelper类. 但是到了Mitaka版本,该文件已经没有这个类了. 因此导致了错误. 配置文件是针对Liberty版本生成的.
下面手动修改配置文件.
3.2 杀掉share进程
3.3 修改配置文件
[root@packstack ~(keystone_admin)]# vim /etc/manila/manila.conf share_helpers = CIFS=manila.share.drivers.helpers.CIFSHelperIPAccess,NFS=manila.share.drivers.helpers.NFSHelper
3.4 重启manila-share服务
[root@packstack ~]# /usr/bin/python2 /usr/bin/manila-share --config-file /usr/share/manila/manila-dist.conf --config-file /etc/manila/manila.conf --logfile /var/log/manila/share.log
此时再查看manila pool:
[root@packstack ~(keystone_admin)]# manila pool-list +---------------------------+-----------+---------+---------+ | Name | Host | Backend | Pool | +---------------------------+-----------+---------+---------+ | packstack@generic#generic | packstack | generic | generic | +---------------------------+-----------+---------+---------+
4. Permission denied: ‘/var/log/nova/nova-manage.log’
安装成功后可能还会遇到一个问题,如下:
[root@packstack ~]# cat /var/spool/mail/root time: 2016年09月15日 星期四 12时01分05秒 cmdline: /usr/bin/python2 /bin/nova-manage db archive_deleted_rows --max_rows 100 uid: 162 (nova) abrt_version: 2.1.11 event_log: executable: /bin/nova-manage hostname: packstack kernel: 3.10.0-327.el7.x86_64 last_occurrence: 1473998463 pid: 24458 pkg_arch: noarch pkg_epoch: 1 pkg_name: openstack-nova-common pkg_release: 1.el7 pkg_version: 13.1.0 runlevel: N 5 username: nova backtrace: :__init__.py:925:_open:IOError: [Errno 13] Permission denied: '/var/log/nova/nova-manage.log' : :Traceback (most recent call last): : File "/bin/nova-manage",line 10,in <module> : sys.exit(main()) : File "/usr/lib/python2.7/site-packages/nova/cmd/manage.py",line 1517,in main : logging.setup(CONF,"nova") : File "/usr/lib/python2.7/site-packages/oslo_log/log.py",line 243,in setup : _setup_logging_from_conf(conf,product_name,version) : File "/usr/lib/python2.7/site-packages/oslo_log/log.py",line 319,in _setup_logging_from_conf : filelog = file_handler(logpath) : File "/usr/lib64/python2.7/logging/handlers.py",line 392,in __init__ : logging.FileHandler.__init__(self,filename,mode,encoding,delay) : File "/usr/lib64/python2.7/logging/__init__.py",line 902,in __init__ : StreamHandler.__init__(self,self._open()) : File "/usr/lib64/python2.7/logging/__init__.py",line 925,in _open : stream = open(self.baseFilename,self.mode) :IOError: [Errno 13] Permission denied: '/var/log/nova/nova-manage.log'
解决如下:
[root@packstack ~]# chmod 777 /var/log/nova/nova-manage.log [root@packstack ~]# su -s /bin/sh -c "nova-manage db sync" nova
centos 6.3x64 安装saltstack
参考文档: http://docs.saltstack.cn/topics/installation/rhel.html http://docs.saltstack.cn/topics/development/hacking.html#installing-for-development http://docs.saltstack.cn/topics/installation/rhel.html#enabling-epel 注意: 1.不要使用pip安装,这样安装了salt,还要自己配置服务 2.不要直接使用yum 安装,也就是文档中提到的第一种方式,这种方法有yum update,会升级cetos 到6.8 一. 环境及准备工作 1. lsb_release -a LSB Version: :core-4.0-amd64:core-4.0-noarch:graphics-4.0-amd64:graphics-4.0-noarch:printing-4.0-amd64:printing-4.0-noarch distributor ID: CentOS Description: CentOS release 6.3 (Final) Release: 6.3 Codename: Final 2. uname -a Linux test40 2.6.32-504.30.3.el6.x86_64 #1 SMP Wed Jul 15 10:13:09 UTC 2015 x86_64 x86_64 x86_64 GNU/Linux 3. python -V Python 2.6.6 4. mkdir -p /data/soft/app/python2.6 mkdir -p /data/soft/app/python2.6/env 5.安装pip,setuptools,参考 http://pip-cn.readthedocs.io/en/latest/installing.html,下载地址: https://bootstrap.pypa.io/ a. 下载get-pip.py ,上传至/data/soft/app/python2.6 b. cd /data/soft/app/python2.6/,chmod a+rx get-pip.py,python get-pip.py c. python get-pip.py d. pip -V,显示 pip 8.1.2 from /usr/lib/python2.6/site-packages (python 2.6), 则安装成功 二. 安装 1.使用EPEL安装源 a. exit b. 检查是否安装了epel,rpm -q epel-release c. 手工下载http://download.fedoraproject.org/pub/epel/6/x86_64/epel-release-6-8.noarch.rpm,上传至 /data/soft/app/python2.6 d. rpm -Uvh epel-release-6-8.noarch.rpm e. vim /etc/yum.repos.d/epel.repo, 将baseurl前的注释去掉,并修改为sohu的epel,baseurl=http://mirrors.sohu.com/fedora-epel/6/$basearch,注释掉mirrorlist, f. 使用yum repolist查看epel源是否正确添加,Extra Packages for Enterprise Linux 6 - x86_64 后面的数字大于0即为成功添加 2. 安装 yum install salt-master yum install salt-minion 3. 启动 service salt-master start service salt-minion start关于CentOS 7 部署saltstack服务和centos7搭建ss的介绍现已完结,谢谢您的耐心阅读,如果想了解更多关于 Saltstack安装 (CentOS7.x)、010-SaltStack及SaltStack Web UI安装部署、
本文标签: