1.外面的电脑可以访问本机的虚拟机(共享虚拟机服务)
iptables -t nat -A PREROUTING -i enp2s0 -d 172.40.5.1 -p tcp --dport 2222 -j DNAT --to 192.168.4.10:22(路由前iptables作目的地址转发)
2.虚拟机连接外网
1)关闭本机防火墙服务 systemctl stop firewalld.service
2)开启本机路由转发功能 sysctl -w net.ipv4.ip_forward=1
3)iptables作源地址伪装
iptables -t nat -A POSTROUTING -s 192.168.4.0/24 -o p8p1 -j MASQUERADE
4)在虚拟机里添加网关地址:route add default gw 192.168.4.254
3.brctl show 查看网桥
brctl addbr lo1 创建网桥
brctl delbr lo1 删除网桥
brctl addif lo1 连接网桥
brctl delif lo1 断开连接
一 。ansible介绍
1.自动化运维工具,基于Python开发,集合了众多运维工具(puppet、chef、func、fabric)的优点,实现了批量系统配置、批量程序部署、批量运行命令等功能。
二。ansible特点
1、部署简单,只需在主控端部署Ansible环境,被控端无需做任何操作;
2、默认使用SSH协议对设备进行管理;
3、有大量常规运维操作模块,可实现日常绝大部分操作。
4、配置简单、功能强大、扩展性强;
5、支持API及自定义模块,可通过Python轻松扩展;
6、通过Playbooks来定制强大的配置、状态管理;
7、轻量级,无需在客户端安装agent,更新时,只需在操作机上进行一次更新即可;
8、提供一个功能强大、操作性强的Web管理界面和REST API接口——AWX平台。
三。安装ansible
1.部署环境(7.2)
yum -y install python-cryptography 安装依赖
python2-jmespath-0.9.0-3.el7.noarch.rpm 环境
python-httplib2-0.9.2-1.el7.noarch.rpm
python-paramiko-2.1.1-2.el7.noarch.rpm
python-passlib-1.6.5-2.el7.noarch.rpm
sshpass-1.06-2.el7.x86_64.rpm
2.安装ansible软件包
ansible-2.4.1.0-1.el7.noarch.rpm
3.升级依赖软件包(需要配置centos7.4yum源)
yum update python2-pyasn1.noarch
yum update python2-cryptography.x86_64
4.验证安装是否ok
ansible --version 正确显示版本号即安装OK
5.在所有主机配置主机名 vim /etc/hosts
192.168.4.55 zabbix-55
192.168.4.77 scal-77
192.168.4.250 C250
192.168.4.30 nfs-30
192.168.4.33 web-33
192.168.4.44 web-44
四。配置ansible
1.默认配置文件路径
/etc/ansible/ansible.cfg
/etc/ansible/hosts
2.添加管理主机配置
vim /etc/ansible/hosts
[web]
web-33
web-44
[web:vars]
ansible_ssh_user="root"
ansible_ssh_pass="Taren1"
ansible_ssh_port="22"
[db]
nfs-30
C250
scal-77 ansible_ssh_user="root" ansible_ssh_pass="123456"
[db:vars]
ansible_ssh_user="root"
ansible_ssh_pass="Taren1"
ansible_ssh_port="22"
[ling:children]
web
db
:wq
还需要修改配置文件,
vim /etc/ansible/ansible.cfg
host_key_checking = False 取消61行的注释
3.使用一些简单命令验证
ansible web --list-hosts 查看组对应的主机名
ansible db --list-hosts
ansible ling --list-hosts
ansible web -m ping ping组下的主机是否能同
4.可以新建一个文件,然后在新建这两个配置文件,就又 可以单独作服务
5.配置ansible使用公钥验证
1)首先生成秘钥
# ssh-keygen -t rsa
2)然后向主机分发秘钥(一键部署到所有主机)
ansible-doc -l | grep auth (帮助文档)
ansible all -m authorized_key -a "user=root exclusive=true manage_dir=true key='$(< /root/.ssh/id_rsa.pub)'" -k -v
6.ansible命令基础
ansible [options]
– host-pattern 主机戒定义的分组
– -M 指定模块路径;/
– -m 使用模块,默认 command 模块
– -a or --args 模块参数
– -i inventory 文件路径,戒可执行脚本
– -k 使用交亏式登彔密码
– -e 定义变量
– -v 详绅信息,-vvvv 开吭 debug 模式
----------------------------------------------------------------------------------
批量配置管理--模块
1.ansible-doc模块
模块的手册,相当 shell 的 man
ansible-doc -l 列出所有模块
ansible-doc 模块名 查看模块帮助
2.ping模块
测试 ssh 的连通性 ;ping模块没有参数
ansible web -m ping 测试web组ssh是否连通
3.command模块
默认模块,进程执行命令
command模块注意事项:
该模块通过-a跟上要执 行的命令可以直接执行,不过命令里如果有带有如下字符部分则执行不成功
"<", ">", "|", "&";该模块不使用shell 直接在 ssh 迚程中执行,所有使用到 shell 特性的命令执行都会失败
ansible all -m command -a 'uptime' 查看所有机器的负载
ansible all -m command -a "date +%F_%T" 查看日期和时间
4.shell|raw 模块
– shell 模块用法基本和command一样,区别是 shell模
块是通过/bin/sh执行命令,可以执行任意命令
– raw模块,用法和shell 模块一样 ,可以执行任意命令
– 区别是 raw 没有chdir、creates、removes参数
– 执行以下命令查看结果
ansible t1 -m command -a 'chdir=/tmp touch f1'
ansible t1 -m shell -a 'chdir=/tmp touch f2'
ansible t1 -m raw -a 'chdir=/tmp touch f3'
5.script模块
– 直接在本地写脚本,然后使用 script 模块批量执行
使用格式 ansible t1 -m script -a 'urscript'
6.copy模块
复制文件到进程主机
– src:要复制到进程主机的文件在本地的地址,可以是
绝对路径,也可以是相对路径。如果路径是一个目彔,
它将递归复制。在这种情况下,如果路径使用"/"来结
尾,则只复制目彔里的内容,如果没有使用"/"来结尾,
则包含目彔在内的整个内容全部复制,类似亍rsync
– dest:必选项。进程主机的绝对路径,如果源文件是
一个目彔,那么该路径也必须是个目彔
– 复制文件
ansible t1 -m copy -a 'src=/root/alog dest=/root/a.log'
– 复制目彔
ansible t1 -m copy -a 'src=urdir dest=/root/'
7.lineinfile | replace模块
– 类似 sed 的一种行编辑替换模块
– path 目的文件
– regexp 正则表达式
– line 替换后的结果
ansible web -m lineinfile -a ‘path=”/etc/config” regexp=”^SELINUX=” line=”SELINUX=disabled”’
– 替换指定字符
ansible t1 -m replace -a 'path="/etc/selinux/config"
regexp="^(SELINUX=).*" replace="\1disabled"'
8.yum模块
– 使用yum包管理器来管理软件包
– config_file:yum的配置文件
– disable_gpg_check:关闭gpg_check
– disablerepo:丌吭用某个源
– enablerepo:吭用某个源
– name:要迚行操作的软件包的名字,也可以传递一个
url戒者一个本地的rpm包的路径
– state:状态(present,absent,latest)
yum模块
– 删除软件包
ansible t1 -m yum -a 'name="lrzsz" state=absent'
– 删除多个软件包
ansible t1 -m yum -a 'name="lrzsz,lftp" state=absent'
– 安装软件包
ansible t1 -m yum -a 'name="lrzsz"'
– 安装多个软件包
ansible t1 -m yum -a 'name="lrzsz,lftp"'
9.service模块
– name:必选项,服务名称
– enabled:是否开机吭劢 yes|no
– sleep:如果执行了restarted,在则stop和start乊间
沉睡几秒钟.
– state:对当前服务执行吭劢,停止、重吭、重新加载
等操作(started,stopped,restarted,reloaded)
ansible t1 -m service -a 'name="sshd" enabled="yes"
state="started"'
10.setup模块
– 主要用亍获取主机信息,在playbooks里经常会用到的
一个参数gather_facts就不该模块相关。setup模块下
经常使用的一个参数是filter参数
– filter 可以过滤到我们需要的信息
ansible t1 -m setup -a 'filter=ansible_distribution'
-------------------------------------------------------
json简介:
– json 是 JavaScript 对象表示法,它是一种基亍文本,
独立亍诧言的轻量级数据交换格式。
– JSON 是纯文本
– JSON 具有"自我描述性"(人类可读)
– JSON 具有层级结构(值中存在值)
– JSON 可通过 JavaScript 迚行解析
yaml简介
– 是一个可读性高,用杢表达数据序列的格式。
– YAML:YAML Ain't Markup Language
– YAML参考了其他多种诧言,包括:C诧言、Python、
Perl,幵从XML、电子邮件的数据格式(RFC 2822)
中获得灵感。
jinja2模版简介
– 要使用 ansible 就要深入学习 playbook 配置及模板。
playbook 的模板使用 python 的 jinja2 模块杢处理的
------------------------------------------------------
playbook简介
– playbook 是 ansible 用亍配置,部署,和管理托管主
机剧本。通过 playbook 的详绅描述,执行其中的一系
列 tasks,可以让进端主机达到预期的状态。
– 也可以这么理解,playbook 字面意思,即剧本,现实
中由演员按照剧本表演,在 Ansible 中由计算机迚行表
演,由计算机安装,部署应用,提供对外服务,以及组
细计算机处理各种各样的事情
一.配置ELK集群
准备6台机器
5台 装ES 内存1G
1台 装kibana logstash 内存4G
1.elasticserach的安装
1)安装java 1.8以上版本
先修改/etc/hosts 文件,使自己可以ping自己的主机名
yum -y install java-1.8.0-openjdk.x86_64
2)RPM安装elasticserach软件包
rpm -ivh elasticsearch-2.3.4.rpm
3)修改配置文件
vim /etc/elasticsearch/elasticsearch.yml
network.host: 0.0.0.0 修改54行
4)查看端口9200;9300
2.所有主机配置/etc/hosts 所有机器能相互ping同
3.所有机器禁用selinux,卸载firewalld
systemctl stop firewalld ; systemctl mask firewalld
4.所有机器都安装 java-xx-openjdk 要求版本1.8
5.修改node机器上的elasticserarch.yml,重启服务
cluster.name: my-nsd1710
node.name:node1
network.host: 0.0.0.0
discovery.zen.ping.unicast.hosts:["node1","node2","node3"]
副用sed修改配置文件
sed -i 's/# cluster.name: my-application/cluster.name: my-nsd/' /etc/elasticsearch/elasticsearch.yml
sed -i "s/# node.name: node-1/node.name: $(hostname)/" /etc/elasticsearch/elasticsearch.yml
sed -i 's/# network.host: 192.168.0.1/network.host: 0.0.0.0/' /etc/elasticsearch/elasticsearch.yml
x='["s1","s2"]'
sed -i "s/# discovery.zen.ping.unicast.hosts:.*/discovery.zen.ping.unicast.hosts: $x/" /etc/elasticsearch/elasticsearch.yml
6.验证: http://192.168.4.xx:9200/_cluster/health?pretty
二.安装插件(head, kopf,bigdesk)
1.cd /usr/share/elasticsearch/bin/
执行
./plugin install file:///root/elk/elasticsearch-head-master.zip
./plugin install file:///root/elk/elasticsearch-kopf-master.zip
./plugin install file:///root/elk/bigdesk-master.zip
./plugin list 查看已安装的插件
2.用浏览器验证插件功能
http://192.168.4.55:9200/_plugin/head
http://192.168.4.55:9200/_plugin/kopf
http://192.168.4.55:9200/_plugin/bigdesk
3.
Rest API 的简单使用
– _cat API 查询集群状态,节点信息
– v 参数显示详细信息
http://192.168.4.15:9200/_cat/health?v
– help 显示帮助信息
http://192.168.4.15:9200/_cat/health?help
– nodes 查询节点状态信息
http://192.168.4.15:9200/_cat/nodes?v
– 索引信息
http://192.168.4.15:9200/_cat/indices?v
4.对数据库增加、删除、修改数据
– GET 查询
– POST 增加
– PUT 更改
– DELETE 删除
1)– 创建一个 school 的 (Index) 和一个 students (Type)
– 并增加一条信息
curl -XPUT 'http://192.168.4.11:9200/school/students/1' -d
'{
"title": "devops",
"name":{
"first": "guzhang",
"last": "wu"
},
"age": 25
}'
2)– 修改 school 下面 students 的第一个文档中的 age 信
息,从 25 修改为 30
curl -XPOST'http://192.168.4.11:9200/school/students/1/_update' -d '{
"doc":{
"age": 30
}
}'
3)– 查询刚刚创建的文档信息
curl –XGET 'http://192.168.4.11:9200/school/students/1‘
– 只查询 name 和 age
curl -XGET
'http://192.168.4.11:9200/school/students/1?_source=name,age'
4)– 删除刚才创建的文档
curl -XDELETE 'http://192.168.4.14:9200/school/students/1'
– 删除 school
curl -XDELETE 'http://192.168.4.14:9200/school'
三.kibana 安装
1.kibana特点:
– 灵活的分析和可视化平台
– 实时总结和流数据的图表
– 为不同的用户显示直观的界面
– 即时分享和嵌入的仪表板
2.kibana安装
rpm –ivh kibana-4.5.2-1.x86_64.rpm
– kibana 默认安装在 /opt/kibana 下面,配置文件在
/opt/kibana/config/kibana.yml
3.kibana.yml 的配置
vim /opt/kibana/config/kibana.yml (取消注释即可,只有一个要修改)
– server.port: 5601
– server.host: "0.0.0.0"
– elasticsearch.url: "http://192.168.4.13:9200"
– kibana.index: ".kibana"
– kibana.defaultAppId: "discover"
– elasticsearch.pingTimeout: 1500
– elasticsearch.requestTimeout: 30000
– elasticsearch.startupTimeout: 5000
4.启动服务
systemctl start kibana;systemctl enable kibana
5.浏览器访问:
http://192.168.4.20:5601/
6.数据批量导入
1)– 导入含有 index 配置的 json 文件
gzip –d logs.jsonl.gz 解压准备号的数据文件
curl -XPOST 'http://192.168.4.14:9200/_bulk' --data-binary @logs.jsonl
2)– 导入没有有 index 配置的 json 文件
– 我们需要在 uri 里面制定 index 和 type
gzip –d accounts.json.gz
curl -XPOST 'http://192.168.4.14:9200/accounts/act/_bulk?pretty' -- data-binary @accounts.json
四.logstash 部分
1.logstash介绍:
– logstash是一个数据采集、加工处理以及传输的工具
logstash 特点:
– 所有类型的数据集中处理
– 不同模式和格式数据的正常化
– 自定义日志格式的迅速扩展
– 为自定义数据源轻松添加插件
2.logstash 安装
– Logstash 依赖 java 环境,需要安装 java-1.8.0-openjdk
– Logstash 没有默认的配置文件,需要手动配置
– logstash 安装在 /opt/logstash 目录下
rpm -ivh logstash-2.3.4-1.noarch.rpm
3.创建logstash的配置文件
vim /etc/logstash/logstash.conf
input{
stdin{}
}
filter{ }
output{
stdout{}
}
4.启动并验证(启动命令太长,作alias)
/opt/logstash/bin/logstash -f /etc/logstash/logstash.conf
5.logstash 插件
/opt/logstash/bin/logstash-plugin list
插件的具体用法到官网查帮助手册
– 常用的插件:plain、json、json_lines、rubydebug、multiline等
1)codec 类插件
设置输入源的 codec 是 json,在输入的时候选择rubydebug
input{
stdin{ codec => "json" }
}
filter{ }
output{
stdout{ codec => "rubydebug" }
}
我们输入普通数据和 json 对比
– {"a": 1, "c": 3, "b": 2}
2)input file 插件
file{
start_position => "beginning"
sincedb_path => "/var/lib/logstash/sincedb-access"
path => [“/tmp/alog”, “/tmp/blog”]
type => 'filelog'
}
– sincedb_path 记录读取文件的位置
– start_position 配置第一次读取文件从什么地方开始
3)input tcp 和 udp 插件
tcp{
host => "0.0.0.0"
port => 8888
type => "tcplog"
}
udp{
host => "192.168.4.16"
port => 9999
type => "udplog"
}
– 使用 shell 脚本,对 tcp 指定端口发送数据(用数据端机器验证)
function sendmsg(){
if (( $# == 4 )) && [ $1 == "tcp" -o $1 == "udp" ];then
exec 9<>/dev/$1/$2/$3
echo "$4" >&9
exec 9<&-
else
echo "$0 (tcp|udp) ipaddr port msg"
fi
}
– 发送 tcp 数据
– sendmsg tcp 192.168.4.10 8888 ‘tcp msg’
– 发送 udp 数据
– sendmsg udp 192.168.4.10 9999 ‘udp msg’
4)syslog 插件
syslog{
host => "192.168.4.10"
port => 514
type => "syslog"
}
在数据端配置
vim /etc/rsyslog.conf 配置向远程发送数据
local0.info @192.168.4.6:514 (系统日志自动发送到远端主机;一个@表示udp)
authpriv.info @@192.168.4.6:514 (登录系统信息自动发送远端主机;@@表示tcp)
5)filter grok插件 (类似CPK)
– 解析各种非结构化的日志数据插件
– grok 使用正则表达式把飞结构化的数据结构化
– 在分组匹配,正则表达式需要根据具体数据结构编写
– 虽然编写困难,但适用性极广
– 几乎可以应用于各类数据
格式:
grok{
match => [“message”,“%{IP:ip}, (?reg)”]
}
定义的函数路径:
/opt/logstash/vendor/bundle/jruby/1.9/gems/logstash-patterns-core-2.0.5/patterns/grok-patterns
例子1:
filter{
grok{
match => ["message","%{IP:ip} %{WORD:method} %{URIPATH:uri} %{NUMBER:bytes} %{NUMBER:duration}"]
}
}
grok 使用正则表达式把飞结构化的数据结构化在分组匹配,正则表达式需要根据具体数据结构编写,虽然编写困难,但适用性极广,几乎可以应用于各类数据
6)output ES 插件
使用Logstash 收集数据,格式化以后放入 ES 集群
input{
file{
start_position => "beginning"
sincedb_path => "/dev/null"
path => ["/tmp/alog"]
type => 'filelog'
codec => "json"
}
}
filter{
}
output{
if [type] == "filelog"{
elasticsearch {
hosts => ["192.168.4.15:9200"]
index => "weblog"
flush_size => 2000
idle_flush_time => 10
}}
}
放入集群以后的数据可以通过 kibana 展示
apache 文档 金步国
7)input filebeats 插件
filebeat 配置
input {
beats {
port => 5044
codec => "json"
}
}
这个插件主要用来接收 beats 类软件发送过来的数据,
由于 logstash 依赖 java 环境,而且占用资源非常大,
我们往往不希望所有集群的机器都部署 java 环境安装
logstash,而使用更轻量的 filebeat 替代
ilebeat 安装与配置
– 使用 rpm 安装 filebeat
rpm -ivh filebeat-1.2.3-x86_64.rpm
– 修改配置文件 /etc/filebeat/filebeat.yml
paths:
- /root/logs.jsonl
document_type: weblog
... ...
paths:
- /root/accounts.json
document_type: account
output:
logstash:
hosts: ["192.168.4.10:5044"]
– 设置开机运行
systemctl enable filebeat
– 开启服务
systemctl start filebeat
一.部署hadoop完全分布式
准备四台机器
master,node1,node2,node3
1.安装环境:java-1.8.0-openjdk.x86_64 和 java-1.8.0-openjdk-devel.x86_64
修改/etc/hosts使所有主机互通
关闭系统防火墙 关闭 selinux
2.配置 SSH 信任关系
在master上创建ssh密钥,并分发给node端;
ssh-keygen
ssh-copy-id root@node端
注意:不能出现要求输入 yes 的情况,每台机器都要能登录成功,因此修改
vim /etc/ssh/ssh_config
Host *
GSSAPIAuthentication yes 修改57行
StrictHostKeyChecking no 修改58行
3.master安装hadoop
tar -xf hadoop-2.7.3.tar.gz -C /usr/local/ 修改名字
4.配置HDFS 完全分布式系统(只在master作)
1)修改java环境vim hadoop-env.sh
export JAVA_HOME="/usr/lib/jvm/java-1.8.0-openjdk-1.8.0.131-11.b12.el7.x86_64/jre" 25行
export HADOOP_CONF_DIR=/usr/local/hadoop/etc/hadoop 33行
备注:java路径查看方法:readlink –f $(which java)
2)vim core-site.xml
fs.defaultFS
hdfs://master:9000 (设置谁是管理者)
hadoop.tmp.dir
/var/hadoop (设置文件的存放路径)
3)在所有值机上创建文件存放路径
mkdir –p /var/hadoop
4)vim hdfs-site.xml
dfs.namenode.http-address
master:50070
dfs.namenode.secondary.http-address
master:50090
dfs.replication
2 (设置备份数量)
5).配置声明DataNode节点主机
vim slaves
node1
node2
node3
6)配置完成以后,把 hadoop 的文件夹拷贝到所有机器
for i in node{1..3}; do rsync -avz /usr/local/hadoop $i:/usr/local/; done
7)在 namenode(master) 上执行格式化操作和启动集群
./bin/hdfs namenode -format
在没有报错的情况下启动集群 ./sbin/start-dfs.sh
8)验证hdfs是否启动ok
启动以后分别在 namenode 和 datanode执行命令 jps
成功的情况下应该可以看见:
master端:NameNode SecondaryNameNode
datanode端:DataNode
./bin/hdfs dfsadmin -report 查看节点
9)文件系统已经创建ok,进行基本命令的使用
– ./bin/hadoop fs –ls / 查卡文件系统中的根
– ./bin/hadoop fs –mkdir /abc
– ./bin/hadoop fs –touchz /urfile
– ./bin/hadoop fs –cat /urfile
– ./bin/hadoop fs –rm /urfile
-./bin/hadoop fs -put *.txt /qq 上传本地文件到/qq
– ./bin/hadoop fs –get /remotefile 下载文件
5.Yarn 安装与配置(体现他的数据分析功能,先只在master上操作)
修改配置文件
1) vim mapred-site.xml
mapreduce.framework.name
yarn
2)vim yarn-site.xml
yarn.nodemanager.aux-services
mapreduce_shuffle
yarn.resourcemanager.hostname
master
3)配置修改完成以后把配置同步到所有主机
for i in node{1..3}; do rsync -avz /usr/local/hadoop/etc $i:/usr/local/hadoop/; done
4)启动yarn服务
./sbin/start-yarn.sh
5)验证yarn服务是否启动,在所有主机上执行 jps;
master:ResourceManager
datanode:NodeManager
登陆以下网址,是否正常访问
6)使用yarn的单词出现频率统计功能;(在任意节点主机都可以)
• 创建文件夹
– ./bin/hadoop fs –mkdir /input
• 导入要分析的文件
– ./bin/hadoop fs –put *.txt /input
• 提交分析作业
– ./bin/hadoop jar ./share/hadoop/mapreduce/hadoop-mapreduce-examples-2.7.3.jar wordcount /input /aaa
• 查看结果
– ./bin/hadoop fs –cat /aaa/*
二.NFS网关
1.新建一台服务器作nfsgw
部署java环境,关防火请,selinux
添加ssh锁
设置所有主机的/etc/hosts 所有主机都通
2.在master停止所有服务
./sbin/stop-all.sh
3.在master主机和nfs主加创建相同的用户,用于登陆nfs
useradd -u 500 -g 100 nfsuser
4.在master修改配置文件
vim core-site.xml (之前做的配置不动)
hadoop.proxyuser.nfsuser.groups
* 这里的用户为刚创建的
hadoop.proxyuser.nfsuser.hosts
*
5.同步master上的配置文件到所有的data主机上
for i in node{1..3}; do rsync -avz /usr/local/hadoop/etc $i:/usr/local/hadoop/; done
6.把mater上的hadoop安装目录拷贝到nfs主机上
7.在master主机上启动dfs服务
./sbin/start-dfs.sh
8.查看dfs是否成功启动
成功的情况下应该可以看见:
master端:NameNode SecondaryNameNode
datanode端:DataNode
./bin/hdfs dfsadmin -report 查看节点
9.到nfs的主机上设置相关配置
1)修改配置文件
vim hdfs-site.xml (之前的配置不要动)
nfs.exports.allowed.hosts
* rw (设置允许访问 NFS 主机列与权限)
dfs.namenode.accesstime.precision
3600000 (设置文件自动更新时间)
nfs.dump.dir
/var/nfsfile (设置转储目录)
nfs.rtmax
4194304 (设置读缓存)
nfs.wtmax
1048576 (设置写缓存)
nfs.port.monitoring.disabled
false (允许从没有权限的客户端挂载 nfs)
2)创建转储目录,并修改权限
mkdir /var/nfsfile
chown nfsuser:users /var/nfsfile
3)查看服务器是否安装rpcbind和nfs-utils安装的话,要卸载掉
rpm -qa | grep
4)先启动nfs所依赖的服务Portmap(一定用root用户来启动)
./sbin/hadoop-daemon.sh --script ./bin/hdfs start portmap
启动成功用jps查看会出现:Portmap
5)设置/usr/local/hadoop/logs文件的权限,nfsuser有rwx权限;
setfacl -m u:nfsuser:rwx logs
6)切换nfsuser用户登陆系统检查自己是否拥有logs和/var/nfsfile的权限
7)启动nfs服务 (一定要是nfsuser登陆系统,并执行nfs启动)
[nfsuser@nfs hadoop]$ ./sbin/hadoop-daemon.sh --script ./bin/hdfs start nfs3
确认服务是否启动,jps查看
正常显示;Nfs3
8)登出nfsuser用户,切换到root用户;
输jps查看,正常将显示:Portmap ,Nfs3 或(--process)
查看端口2049和111是否启动netstat -antpu | grep
9)端口起来,说明nfs配置成功,找台客户端挂载nfs验证
10.新建一台虚拟机,作nfs的客户端,挂载nfs使用;
1)yum -y install nfs-utils
2)挂载nfs
mount -t nfs -o vers=3,proto=tcp,nolock,noacl,noatime,sync 192.168.4.15:/ /mnt
3)查看挂载:df -h
cd /mnt
ls
touch
-----------------
三.Hadoop 节点管理(增删修)
1.在hadoop集群中添加一个node节点
1)配置所有hadoop环境,包括主机名、ssh免密码登
录、禁用 selinux、iptables、安装 java 环境,vim/etc/hosts
2)把master的hadoop的目录复制到新建的机器
3)在该节点启动Datanode
./sbin/hadoop-daemon.sh start datanode
4)修改master的slaves文件增加该节点
5)在master设置同步带宽,并同步数据
./bin/hdfs dfsadmin -setBalancerBandwidth 60000000
6)在master启动同步进程
./sbin/start-balancer.sh
7)查看集群状态
./bin/hdfs dfsadmin -report
2.在hadoop集群中修复节点,和增加节点操作一样,无非就是换台服务器
3.在hadoop集群中删除节点 (如果修改了备份数量也需要作以下操作)
1)配置master的hdfs-site.xml
vim hdfs-site.xml
dfs.namenode.http-address
master:50070
dfs.namenode.secondary.http-address
master:50090
dfs.replication
3
dfs.hosts.exclude
/usr/local/hadoop/etc/hadoop/exfile
(定义存放要删除的用户的文件)
~
2)在master增加 exclude 配置文件,写入要删除的节点 ip
touch /usr/local/hadoop/etc/hadoop/exfile
vim exfile
写要删除的主机名
3)在master更新数据
./bin/hdfs dfsadmin -refreshNodes
4)查看集群状态
./bin/hdfs dfsadmin -report
如果被删除的主机状态为:Decommission in progress 则表名正在同步数据,不能删除
如果被删除的主机状态为:Decommissioned 表名数据同步完成,可以删除主机
5)修改master的slave文件,删除要卸载的主机名
6)在要卸载的主机上执行停止服务操作
./sbin/hadoop-daemon.sh stop datanode
7)删除完成后
一. zookeeper的高可用集群
1.安装环境准备(准备4台)
java-1.8.0-openjdk.x86_64 和 java-1.8.0-openjdk-devel.x86_64
2.修改/etc/hosts 使集群主机互通
3.解压zookeeper
tar -xf zookeeper-3.4.10.tar.gz -C /usr/local/
mv /usr/local/zookeeper-3.4.10/ /usr/local/zookeeper
4.修改配置文件
mv zoo_sample.cfg zoo.cfg (改配置文件名字)
vim zoo.cfg (添加以下配置)
server.1=node1:2888:3888
server.2=node2:2888:3888
server.3=node3:2888:3888
server.4=master:2888:3888:observer
创建datadir 指定的目录
mkdir /tmp/zookeeper
echo 4 > /tmp/zookeeper/myid
5.拷贝安装的目录到所有主机并创建myid
for i in node{1..3}; do rsync -avz /usr/local/zookeeper $i:/usr/local/; done
mkdir /tmp/zookeeper
echo 2 > /tmp/zookeeper/myid (根据id号配置)
6.所有主机启动服务
/usr/local/zookeeper/bin/zkServer.sh start
7.查看每个主机的状态和角色
/usr/local/zookeeper/bin/zkServer.sh status
8.创建脚本,查看所有主机的身份
#!/bin/bash
function getstatus(){
exec 9<>/dev/tcp/$1/2181 2>/dev/null
echo stat >&9
MODE=$(cat <&9 |grep -Po "(?<=Mode:).*")
exec 9<&-
echo ${MODE:-NULL}
}
for i in node{1..3} master;do
echo -ne "${i}\t"
getstatus ${i}
done
二.kafka集群(node节点主机上配置)
1.安装环境
kafka集群的安装配置是依赖 zookeeper
2.安装kafka
tar -xvf kafka_2.10-0.10.2.1.tgz -C /usr/local/
mv /usr/local/kafka_2.10-0.10.2.1/ /usr/local/kafka
3.修改配置文件
vim server.properties
broker.id=11 (修改21行,每台服务器的id不能相同)
zookeeper.connect=node1:2181,node2:2181,node3:2181 (修改119行)
集群地址,不用都列出,写一部分即可
4.拷贝安装目录,拷贝完后要修改配置文件id号
5.在所有主机上启动服务
/usr/local/kafka/bin/kafka-server-start.sh -daemon /usr/local/kafka/config/server.properties
6.验证服务是否启动
jps 命令应该能看到 kafka 模块
netstat 应该能看到 9092 在监听
7.集群验证与消息发布
1)创建一个topic(随便一台主机就行,创建命令脚本)
./bin/kafka-topics.sh --create --partitions 2 --replication-factor 2 --zookeeper node3:2181 --topic lingxudong
2)查看已经存在的 topic
./bin/kafka-topics.sh --list --zookeeper node2:2181
3)查看已经存在的 topic详细信息
/bin/kafka-topics.sh --describe --zookeeper node1:2181 --topic lingxudong
4)在两个终端里面,生产者发布消息,消费者读取消息
生产者先发布一个会话
./bin/kafka-console-producer.sh --broker-list node1:9092 --topic nsd1710
消费者消费者进入绘画,并实时读取信息(--from-beginning 表示从开始读取消息)
./bin/kafka-console-consumer.sh --bootstrap-server node3:9092 --topic nsd1710
一.搭建hadoop的高可用集群(namenode单点故障)
1.集群需要用到的服务角色
192.168.4.10 namenode
192.168.4.20 namenode
192.168.4.11 datanode
192.168.4.12 datanode
192.168.4.13 datanode
2.新建master-2服务器,完成以下配置,满座以下要求
1)安装java环境,关闭selinux,firewalld;创建mkdir /var/hadoop
2)修改所有的/etc/hosts 使所有集群主机互通
3)装master的锁,可以直接被ssh
4)在master-2上修改/etc/ssh/ssh_config,ssh时免输入yes
5)在master-2上ssh-keygen创建密钥对,发给集群所有主机,包括本机;
6)暂停之前的hadoop集群服务;所有主机上删除/var/hadoop/*
7)重启node1,2,3的zookeeper服务
3.修改master的配置文件
1) vim core-site.xml
fs.defaultFS
hdfs://mycluster (设置组)
hadoop.tmp.dir
/var/hadoop
ha.zookeeper.quorum
node1:2181,node2:2181,node3:2181 (指定zk)
2) vim hdfs-site.xml
删除一些配置,最终为:
dfs.replication
2
dfs.nameservices
mycluster 指定hdfs的nameservices名称为mycluster
dfs.ha.namenodes.mycluster
master,master-2 指定集群的两个 NaneNode 的名称
dfs.namenode.rpc-address.mycluster.master
master:8020 配置的rpc通信端口
dfs.namenode.rpc-address.mycluster.master-2
master-2:8020 配置的rpc通信端口
dfs.namenode.http-address.mycluster.master
master:50070 配置的http通信端口
dfs.namenode.http-address.mycluster.master-2
master-2:50070 配置的http通信端口
dfs.namenode.shared.edits.dir
qjournal://node1:8485;node2:8485;node3:8485/mycluster
指定namenode元数据存储在journalnode中的路径
dfs.journalnode.edits.dir
/var/hadoop/journal 指定journalnode日志文件存储的路径
dfs.client.failover.proxy.provider.mycluster
org.apache.hadoop.hdfs.server.namenode.ha.ConfiguredFailoverProxyProvider 指定HDFS客户端连接active namenode的java类
dfs.ha.fencing.methods
sshfence 配置隔离机制为 ssh
dfs.ha.fencing.ssh.private-key-files
/root/.ssh/id_rsa 指定秘钥的位置
dfs.ha.automatic-failover.enabled
true 开启自动故障转移
3) vim yarn-site.xml
yarn.nodemanager.aux-services
mapreduce_shuffle
yarn.resourcemanager.ha.enabled
true
yarn.resourcemanager.ha.rm-ids
master,master-2
yarn.resourcemanager.hostname.master
master
yarn.resourcemanager.hostname.master-2
master-2
yarn.resourcemanager.recovery.enabled
true
yarn.resourcemanager.store.class
org.apache.hadoop.yarn.server.resourcemanager.recovery.ZKRMStateStore
yarn.resourcemanager.zk-address
node1:2181,node2:2181,node3:2181
yarn.resourcemanager.cluster-id
yarn-ha
4.同步master数据到所有集群主机
for i in node{1..3} master-2; do rsync -avz /usr/local/hadoop $i:/usr/local/; done
5.在node1,2,3启动zookeeper集群,并验证;
6.在master上初始化ZK集群
bin/hdfs zkfc -formatZK
7.在node1,2,3启动JNS
/usr/local/hadoop/sbin/hadoop-daemon.sh start journalnode
8.在master格式化文件系统
./bin/hdfs namenode -format
9.格式化数据后把master的/var/hadoop/* 拷贝到master-2的/var/hadoop/
[root@master-2 hadoop]#rsync -azSH --delete master:/var/hadoop/ /var/hadoop/
10.在master执行以下启动命令
./bin/hdfs namenode -initializeSharedEdits
./sbin/start-dfs.sh
11.在master和master-2上分别启动yarn
./sbin/start-yarn.sh start
./sbin/start-dfs.sh
12.在node1,2,3停用journalnode
sbin/hadoop-daemon.sh stop journalnode
13.查看集群状态(任意集群主机都可以)
./bin/hadoop dfsadmin -report
bin/hdfs haadmin -getServiceState master
bin/hdfs haadmin -getServiceState master-2
./bin/hadoop fs -ls hdfs://mycluster/
./bin/hadoop fs -mkdir hdfs://mycluster/abc
./bin/hadoop fs -ls hdfs://mycluster/
14.验证高可用,关闭一台状态为active namenode
./sbin/hadoop-daemon.sh stop namenode
查看是否还可以看到文件系统中的文件
./bin/hadoop fs -ls hdfs://mycluster/
在查看之前状态为standby的namenode现在状态是否变为active
如果可以看到文件,且状态为active,说明搭建OK