部署高可用集群(虚拟机演示)

前言:

准备好三台虚拟机hd01,hd02,hd03(机器名后面会用到,如果更改请修改相关配置文件)

并提前安装好了wget、vim、更换了yum源、配置好了机器名和固定ip地址、关闭了防火墙;

安装并配置好jdk(以上步骤之前的文章都写过,并且已经有相应脚本,可以一键完成)

一、准备工作

将连接三台虚拟机的XShell链接都开启,然后点下面的按钮,能够同时操作三台机器。

 1.无密登录(同步)

多机器多链接一起操作

# 做ssh 公私钥 无秘

ssh-keygen -t rsa -P ''

# copy 公钥到 hd01 hd02 hd03

ssh-copy-id root@hd01
ssh-copy-id root@hd02
ssh-copy-id root@hd03

#回车

2.所有服务器同步时间(同步)

# 安装chrony

yum -y install chrony

#配置chrony

vim /etc/chrony.conf

注释掉server 0.centos.pool.ntp.org iburst等4行,添加配置:

server ntp1.aliyun.com
server ntp2.aliyun.com
server ntp3.aliyun.com

#启动chrony

systemctl start chronyd

3.安装psmisc工具包(同步)

(linux命令工具包 namenode主备切换时要用到 只需要安装在两个namenode节点上)

yum install -y psmisc

二、安装zookeeper集群

1.配置文件

只操作hd01,稍后复制到其他机器上。

将安装包传入hd01

#解压zookeeper

tar -zxf [文件]

#移动并改名(路径名尽量为版本名)

mv zookeeper-3.4.5-cdh5.14.2 soft/zk345

# 拷贝并配置zoo.cfg

cd /opt/soft/zk234/conf
cp zoo_sample.cfg zoo.cfg
vim zoo.cfg

配置文件:

#修改路径:
dataDir=/opt/soft/zk345/data 
#最后加上:
server.1=hd01:2888:3888 
server.2=hd02:2888:3888 
server.3=hd03:2888:3888 

#在上面改好的路径下创建myid文件(不同主机的数字不同,与上面相对应)

cd ..
mkdir data
echo "1"> data/myid

#拷贝以上文件给其他集群虚拟机2

scp -r /opt/soft/zk345/ root@hd02:/opt/soft/zk345
scp -r /opt/soft/zk345/ root@hd03:/opt/soft/zk345

#记得更改myid文件数字

vim /opt/soft/zk345/data/myid
2或3

2.配置环境变量

(多机共同操作)

vim /etc/profile

添加如下路径

#zookeeper
export ZOOKEEPER_HOME=/opt/soft/zk345
export PATH=SPATH:$ZOOKEEPER_HOME/bin

#重启环境变量

source /etc/profile

#启动集群zookeeper

zkServer.sh start

jps查看进程,若出现以下进程证明上述步骤正确

 三、安装Hadoop集群

1.在单台机上配置hadoop环境 创建文件夹

# 解压

tar -zxf hadoop-2.6.0-cdh5.14.2.tar.gz

# 移动到自己的安装文件夹下

mv hadoop-2.6.0-cdh5.14.2 soft/hadoop260

# 添加对应各个文件夹,后面会用到

mkdir -p /opt/soft/hadoop260/tmp
mkdir -p /opt/soft/hadoop260/dfs/journalnode_data
mkdir -p /opt/soft/hadoop260/dfs/edits
mkdir -p /opt/soft/hadoop260/dfs/datanode_data
mkdir -p /opt/soft/hadoop260/dfs/namenode_data

2.修改配置文件

①hadoop-env.sh

vim /opt/soft/hadoop260/etc/hadoop/hadoop-env.sh

#修改两处路径

export JAVA_HOME=/opt/soft/jdk180

export HADOOP_CONF_DIR=/opt/soft/hadoop260/etc/hadoo

②core-site.xml

vim /opt/soft/hadoop260/etc/hadoop/core-site.xml

<configuration>
    <property>
        <name>fs.defaultFS</name>
        <value>hdfs://hacluster</value>
    </property>
    <property>
        <name>hadoop.tmp.dir</name>
        <value>file:///opt/soft/hadoop260/tmp</value>
    </property>
    <property>
        <name>io.file.buffer.size</name>
        <value>4096</value>
    </property>
    <property>
        <name>ha.zookeeper.quorum</name>
        <value>hd01:2181,hd02:2181,hd03:2181</value>
    </property>
    <property>
        <name>hadoop.proxyuser.root.hosts</name>
        <value>*</value>
    </property>
    <property>
        <name>hadoop.proxyuser.root.groups</name>
        <value>*</value>
    </property>
</configuration>

③hdfs-site.xml

vim /opt/soft/hadoop260/etc/hadoop/hdfs-site.xml

<configuration>
<property>
    <name>dfs.block.size</name>
    <value>134217728</value>
</property> 
<property>
    <name>dfs.replication</name>
    <value>3</value>
</property>
<property> 
    <name>dfs.name.dir</name>
    <value>file:///opt/soft/hadoop260/dfs/namenode_data</value>
</property>
<property>
    <name>dfs.data.dir</name>
    <value>file:///opt/soft/hadoop260/dfs/datanode_data</value>
</property>
<property> 
    <name>dfs.webhdfs.enabled</name>
    <value>true</value>
</property>
<property>
    <name>dfs.datanode.max.transfer.threads</name>
    <value>4096</value>
</property>
<property>
    <name>dfs.nameservices</name>
    <value>hacluster</value>
</property>
<property>
    <name>dfs.ha.namenodes.hacluster</name>
    <value>nn1,nn2</value>
</property>
<property>
    <name>dfs.namenode.rpc-address.hacluster.nn1</name>
    <value>hd01:9000</value>
</property>
<property>
    <name>dfs.namenode.servicepc-address.hacluster.nn1</name>
    <value>hd01:53310</value>
</property>
<property>
    <name>dfs.namenode.http-address.hacluster.nn1</name>
    <value>hd01:50070</value>
</property>
<property>
    <name>dfs.namenode.rpc-address.hacluster.nn2</name>
    <value>hd02:9000</value>
</property>
<property>
    <name>dfs.namenode.servicepc-address.hacluster.nn2</name>
    <value>hd02:53310</value>
</property>
<property>
    <name>dfs.namenode.http-address.hacluster.nn2</name>
    <value>hd02:50070</value>
</property>
<property>
    <name>dfs.namenode.shared.edits.dir</name>
    <value>qjournal://hd01:8485;hd02:8485;hd03:8485/hacluster</value>
</property>
<property>
    <name>dfs.journalnode.edits.dir</name>
    <value>/opt/soft/hadoop260/dfs/journalnode_data</value>
</property>
<property>
    <name>dfs.namenode.edits.dir</name>
    <value>/opt/soft/hadoop260/dfs/edits</value>
</property>
<property>
    <name>dfs.ha.automatic-failover.enabled</name>
    <value>true</value>
</property>
<property>
    <name>dfs.client.failover.proxy.provider.hacluster</name>
    <value>org.apache.hadoop.hdfs.server.namenode.ha.ConfiguredFailoverProxyProvider</value>
</property>
<property>
    <name>dfs.ha.fencing.methods</name>
    <value>sshfence</value>
</property>
<property>
    <name>dfs.ha.fencing.ssh.private-key-files</name>
    <value>/root/.ssh/id_rsa</value>
</property>
<property>
    <name>dfs.premissions</name>
    <value>false</value>
</property>
</configuration>

④mapred.site.xml

需要先复制再修改

cd /opt/soft/hadoop260/etc/hadoop
cp mapred-site.xml.template mapred.site.xml
vim mapred.site.xml

<configuration>
<property>
    <name>mapreduce.framework.name</name>
    <value>yarn</value>
</property>
<property>
    <name>mapreduce.jobhistory.address</name>
    <value>hd01:10020</value>
</property>
<property>
    <name>mapreduce.jobhistory.webapp.address</name>
    <value>hd01:19888</value>
</property>
<property>
    <name>mapreduce.job.ubertask.enable</name>
    <value>true</value>
</property>
</configuration>

⑤yarn-site.xml

vim yarn-site.xml

<configuration>
<property>
    <name>yarn.resourcemanager.ha.enabled</name>
    <value>true</value>
</property>
<property>
    <name>yarn.resourcemanager.cluster-id</name>
    <value>hayarn</value>
</property>
<property>
    <name>yarn.resourcemanager.ha.rm-ids</name>
    <value>rm1,rm2</value>
</property>
<property>
    <name>yarn.resourcemanager.hostname.rm1</name>
    <value>hd02</value>
</property>
<property>
    <name>yarn.resourcemanager.hostname.rm2</name>
    <value>hd03</value>
</property>
<property>
    <name>yarn.resourcemanager.zk-address</name>
    <value>hd01:2181,hd02:2181,hd03:2181</value>
</property>
<property>
    <name>yarn.resourcemanager.recovery.enabled</name>
    <value>true</value>
</property>
<property>
    <name>yarn.resourcemanager.store.class</name>  <value>org.apache.hadoop.yarn.server.resourcemanager.recovery.ZKRMStateStore</value>
</property>
<property>
    <name>yarn.resourcemanager.hostname</name>
    <value>hd03</value>
</property>
<property>
    <name>yarn.nodemanager.aux-services</name>
    <value>mapreduce_shuffle</value>
</property>
<property>
    <name>yarn.log-aggregation-enable</name>
    <value>true</value>
</property>
<property>
    <name>yarn.log-aggregation.retain-seconds</name>
    <value>604800</value>
</property>
</configuration>

⑥更改slaves文件

vim slaves

#删掉文件里原本的 localhost

#更改为:

hd01

hd02

hd03

3.复制给其他机器

scp -r hadoop260/ root@hd02:/opt/soft/
scp -r hadoop260/ root@hd03:/opt/soft/

建议在此处多机快照

4.配置环境变量

多机操作

vim /etc/profile

#hadoop

export HADOOP_HOME=/opt/soft/hadoop260

export HADOOP_MAPRED_HOME=$HADOOP_HOME

export HADOOP_COMMON_HOME=$HADOOP_HOME

export HADOOP_HDFS_HOME=$HADOOP_HOME

export YARN_HOME=$HADOOP_HOME

export HADOOP_COMMON_LIB_NATIVE_DIR=$HADOOP_HOME/lib/native

export PATH=$PATH:$HADOOP_HOME/sbin:$HADOOP_HOME/bin

export HADOOP_INSTALL=$HADOOP_HOME

重启环境变量

source /etc/profile

四、启动Hadoop集群

1.启动zookeeper(多机)

zkServer.sh start 

检查出现QuorumPeerMain进程,正确。

2.启动JournalNode(多机)

hadoop-daemon.sh start journalnode

检查出现JournalNode进程,正确。

3.格式化hd01的namenode(单机)

hdfs namenode -format

4.将hd01上的Namenode的元数据复制到hd02相同位置(单机)

scp -r /opt/soft/hadoop260/dfs/namenode_data/current/ root@hd02:/opt/soft/hadoop260/dfs/namenode_data

5.在hd01或hd02格式化故障转移控制器zkfc(单机)

hdfs zkfc -formatZK

6.在hd01上启动dfs服务(单机)

start-dfs.sh

hd01: DFSZKFailoverController、DataNode、NameNode

hd02: DFSZKFailoverController、DataNode、NameNode

hd03: DataNode

多机多出上述进程,正确。

7.在hd03上启动yarn服务(单机)

start-yarn.sh

hd01: NodeManager

hd02: NodeManager

hd03: ResourceManager、NodeManager

多机多出上述进程,正确。

8.在hd01上启动history服务器(单机)

mr-jobhistory-daemon.sh start historyserver

hd01多出JobHistoryServer进程,正确。

9.在hd02上启动resourcemanager服务(单机)

yarn-daemon.sh start resourcemanager

hd02也有ResourceManager进程,正确。

当检查进程全部无误时,证明启动成功,可以查看验证:

# hd01 上查看服务状态
hdfs haadmin -getServiceState nn1 #active
hdfs haadmin -getServiceState nn2 #standby
# hd03 上查看 resourcemanager 状态
yarn rmadmin -getServiceState rm1 #standby
yarn rmadmin -getServiceState rm2 #active

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
你可以使用Ansible来实现一键部署高可用集群项目。下面是一个简单的步骤: 1. 创建一个Ansible的Inventory文件,定义你的服务器列表。例如: ``` [web] server1 ansible_host=<IP地址> ansible_user=<用户名> ansible_ssh_private_key_file=<私钥路径> [database] server2 ansible_host=<IP地址> ansible_user=<用户名> ansible_ssh_private_key_file=<私钥路径> ``` 2. 创建一个Ansible的Playbook文件,用于定义你的部署任务。例如: ```yaml --- - hosts: web become: true tasks: - name: 安装依赖软件包 yum: name: "{{ item }}" state: present with_items: - package1 - package2 - name: 配置Web服务器 template: src: web.conf.j2 dest: /etc/web.conf notify: - restart web handlers: - name: 重启Web服务器 service: name: web state: restarted - hosts: database become: true tasks: - name: 安装依赖软件包 yum: name: "{{ item }}" state: present with_items: - package3 - package4 - name: 配置数据库 template: src: db.conf.j2 dest: /etc/db.conf notify: - restart db handlers: - name: 重启数据库服务 service: name: db state: restarted ``` 在上面的例子中,我们通过使用`yum`模块安装了一些软件包,并使用`template`模块配置了一些配置文件。当配置文件发生变化时,会触发相应服务的重启。 3. 创建模板文件,用于生成配置文件。例如,`web.conf.j2`可以是一个Jinja2模板文件,如下所示: ``` server_name: {{ ansible_hostname }} listen_port: 80 ``` 在模板文件中,你可以使用Jinja2的语法来插入变量。 4. 运行Ansible Playbook来执行部署任务。使用以下命令: ``` ansible-playbook -i inventory.ini playbook.yaml ``` 其中,`inventory.ini`是你的Inventory文件,`playbook.yaml`是你的Playbook文件。 通过以上步骤,你就可以使用Ansible来一键部署高可用集群项目了。当然,具体的配置和任务根据你的项目需求可能会有所不同。这只是一个简单的例子,你可以根据实际情况进行调整和扩展。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Woovong

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值