2018-01-27 23:03:47 nplbnb12 阅读数 135
  • MyCat实战讲解(MySQL集群)

    Mycat是阿里推广的一个开源组件,其核心的概念为库表分离实现操作,利用合理的库表分离可以用更高效的方式来进行SQL数据库的开发与处理,适合高并发的数据访问处理。 在本课程中将为读者讲解库表分离的设计思想,以及数据库的垂直水平分割概念,同时后将为读者讲解高可用的MYSQL集群机构的设计实现。

    8200 人正在学习 去看看 李兴华

HA高可用集群

HA即(high avaliable)高可用,又叫做双机热备,用于关键性业务,也就是有两台机器A和B,正常是A提供服务,B待命闲置,当A宕机或服务宕掉,会切换至B机器继续提供服务。常用实现高可用的开源软件有heartbeat和keepalived,其中keepalived有负载均衡的功能。

 

下面,使用heartbeat来做HA集群,并且把nginx服务作为HA对应的服务。

1、试验准备:

两台机器,都是64位centos6.9,网卡 IP如下:
HostA eth0   192.168.1.119

HostB eth1  192.168.1.120

HostA eth1  192.168.153.119

HostB eht2  192.168.153.120

虚拟IP:

192.168.1.122

2、准备部分:

关闭防火墙iptables -F

关闭selinux:setenforce 0

设置hosts:

192.168.1.119 HostA   

192.168.1.120 HostB   

3、安装heartbeat /libnet/nginx

yum install -y heartbeat* libnet nginx

4、主上(HostA)配置

cd /usr/share/doc/heartbeat-3.0.4

cp authkeys ha.cf haresources /etc/ha.d/

cd /etc/ha.d

vi authkeys //加入

auth 3

3 md5 Hello!

chmod 600  authkeys 

vi haresources //加入

HostA 192.168.1.121/24/eth0:0 nginx  #配置虚拟IP

vi ha.cf  //修改、增加如下内容

debugfile /var/log/ha-debug
logfile /var/log/ha-log
keepalive 2      #配置心跳检测间隔时间,单位秒
deadtime 30     #超出该时间间隔未收到对方节点的心跳,则认为对方已经死亡
warntime 10      #超出该时间间隔未收到对方节点的心跳,则发出警告并记录到日志中initdead 120      #重启等待时间,单位秒
udpport 694      #设置广播通信使用的端口,694为默认使用的端口号
ucast eth1 192.168.153.120    #设置对方机器心跳检测的网卡和对方IP
auto_failback on      #主重启后,资源自动恢复给主
node HostA
node HostB           
ping 192.168.153.1     #设置ping
respawn hacluster /usr/lib64/heartbeat/ipfail   #ipfail,该进程用于检测和处理网络故障,需要配合ping语句指定的ping node来检测网络连接

5、从上(HostB)上配置

使用 rsync将A的三个文件拷贝到HostB上:

rsync -av ha.cf haresources authkeys HostB:/etc/ha.d/

修改haresouces文件:

HostA 192.168.1.121/24/eth1:0 nginx  #因为HostB上第一个网卡是eth1,所以要更改成那个eth1,不更改会导致HostB无法定位到eth0网卡,而无法正常工作;

修改ha.cf文件:

ucast eth2 192.168.153.119  #设置机器心跳检测的网卡和对方IP

6、启动

在主从上启动heartbeat服务:

/etc/init.d/heartbeat start

7、测试

此时,两台机器进程情况如下,HostA中nginx正常启动,虚拟网卡eth0:0正常工作,而HostB中ngixn没有正常启动 ,虚拟网卡也没有工作。

 

 

HostA上封掉PING包:

iptables -I OUTPUT -p icmp -j DROP

等候一段时间后,HostA上nginx进程销毁,eth0:0虚拟网卡消失,同时,HostB上启动nginx进程,出现eht1:0虚拟网卡,测试成功:

 


 

2015-11-17 14:04:56 u010928799 阅读数 22767
  • MyCat实战讲解(MySQL集群)

    Mycat是阿里推广的一个开源组件,其核心的概念为库表分离实现操作,利用合理的库表分离可以用更高效的方式来进行SQL数据库的开发与处理,适合高并发的数据访问处理。 在本课程中将为读者讲解库表分离的设计思想,以及数据库的垂直水平分割概念,同时后将为读者讲解高可用的MYSQL集群机构的设计实现。

    8200 人正在学习 去看看 李兴华

一.系统不在虚拟机中的情况

  使用ctrl+alt+F1~6切换到命令行界面;ctrl+alt+F7切换到图形界面

二.系统在虚拟机中的情况

  Ctrl+Alt+shift+F1~6切换到命令行界面;使用Alt+F7返回到图形界面

(注:以上方法切换后,图形界面并没有关闭)

三.命令模式修改

  打开终端,输入init 3,回车即可。

 init 后数字的含义:

 0 - halt (Do NOT set initdefault to this)   //停机(不要把initdefault设置为零为0,因为这样会使Linux无法启动)
 1 - Single user mode                    //单用户模式,就像WinXP下的安全模式
 2 - Multiuser, without NFS (The same as 3, if you do not have networking)     //多用户,但没有NFS
 3 - Full multiuser mode                 //完全多用户模式,标准的运行极,即命令行界面
 4 - unused          //一般不用,但在一些特殊情况下可以用他来做一些事情
 5 - X11                //选择此项,系统在登录时将进入图形化登录界面
 6 - reboot (Do NOT set initdefault to this)    //重新启动(不要把initdefault设置为6,因为这样会使Linux不断重新启动)
(注:以上方法切换后,图形界面完全关闭。如果窗口中有文件未保存,将丢失。用init 5 可以回到图形界面,但原来的进程已死。用startx 则在当前级别3上加载图形界面)

四.每次启动直接进入字符界面,则要修改etc/inittab文件,将启动级别由5改为3即可

  终端以root身份执行 vi /etc/inittab 打开inittab文件,编辑后保存重启即可

 

2018-06-11 20:23:41 meiLin_Ya 阅读数 264
  • MyCat实战讲解(MySQL集群)

    Mycat是阿里推广的一个开源组件,其核心的概念为库表分离实现操作,利用合理的库表分离可以用更高效的方式来进行SQL数据库的开发与处理,适合高并发的数据访问处理。 在本课程中将为读者讲解库表分离的设计思想,以及数据库的垂直水平分割概念,同时后将为读者讲解高可用的MYSQL集群机构的设计实现。

    8200 人正在学习 去看看 李兴华

                Linux -- 之HDFS实现自动切换HA(全新HDFS)

JDK规划

                1.7及以上  https://blog.csdn.net/meiLin_Ya/article/details/80650945

防火墙规划

    系统防火墙关闭

SSH免密码规划

            hadoop01nn1--> hadoop01nn1 需要免密码

                hadoop01nn1--> hadoop02nn2 需要免密码

                hadoop01nn1--> hadoop03dn) 需要免密码

                hadoop02nn2--> hadoop01nn1 需要免密码

                hadoop02nn2--> hadoop02nn2) 需要免密码

                hadoop02nn2--> hadoop03(dn 需要免密码

      如果多节点之间全部免密码更好(生产环境不建议)  默认环境

 

Zk集群规划

    已有可用zk集群  https://blog.csdn.net/meiLin_Ya/article/details/80654268

开始配置

    首先我们要将所有的hadoop删除干净。如/temp  /hadoopdata 等等,然后将hadoop的压缩包导入。你的集群中的每个节点也是,都要删除的。

删除后解压hadoop:

tar zxvf hadoop-2.6.0.tar.gz

修改core-site.xml

<configuration>
<property>
  <name>fs.defaultFS</name>
  <value>hdfs://beiwang</value>
</property>
<property>
  <name>hadoop.tmp.dir</name>
 <value>/home/hadoopdata/tmp</value>
</property>
<property>
<name>io.file.buffer.size</name>
<value>4096</value>
</property>
</configuration>

修改hdfs-site.xml

注意中文注释不要带

<configuration>

<!-- 指定hdfs的nameservice为beiwang,就是那个代理程序,询问zk集群哪个namenode还活着 -->

<property>

<name>dfs.nameservices</name>

<value>beiwang</value>

</property>



<!—指定hdfs的两个NameNode都是什么名字(等会儿下面会配置他们所对应的机器的信息)-->

<property>

  <name>dfs.ha.namenodes.beiwang</name>

  <value>nn1,nn2</value>

</property>

 

<!—NameNode1的rpc通讯地址-->

<property>

  <name>dfs.namenode.rpc-address.beiwang.nn1</name>

  <value> hadoop01:8020</value>

</property>

 

<!—NameNode2的rpc通讯地址-->

<property>

  <name>dfs.namenode.rpc-address.beiwang.nn2</name>

  <value> hadoop02:8020</value>

</property>

 

<!—NameNode1的web界面地址-->

<property>

  <name>dfs.namenode.http-address.beiwang.nn1</name>

  <value> hadoop01:50070</value>

</property>

<!—NameNode2的web界面地址-->

<property>

  <name>dfs.namenode.http-address.beiwang.nn2</name>

  <value> hadoop02:50070</value>

</property>

 

######如果给一个有数据的HDFS添加HA,此处无需更改,保持原有地址即可#####

<!---namenode存放元数据信息的Linux本地地址,这个目录不需要我们自己创建->

<property>

  <name>dfs.namenode.name.dir</name>

  <value>file:///home/hdfs/name</value>

</property>

 

<!—datanode存放用户提交的大文件的本地Linux地址,这个目录不需要我们自己创建-->

<property>

  <name>dfs.datanode.data.dir</name>

  <value>file:///home/hdfs/data</value>

</property>

###########################################################

 

<!—QJM存放共享数据的方式-->

<property>

  <name>dfs.namenode.shared.edits.dir</name>

  <value>qjournal:// hadoop01:8485; hadoop02:8485; hadoop03:8485/beiwang</value>

</property>

 

<!—单个QJM进程(角色)存放本地edits文件的Linux地址-->

<property>

  <name>dfs.journalnode.edits.dir</name>

  <value>/home/bigdata/hadoop/journal1</value>

</property>

 

<!—开启hdfs的namenode死亡后自动切换-->

<property>

  <name>dfs.ha.automatic-failover.enabled</name>

  <value>true</value>

</property>

 

 

<!-- 指定zookeeper集群地址,辅助两个namenode进行失败切换 -->

<property>

        <name>ha.zookeeper.quorum</name>

        <value> hadoop01:2181, hadoop02:2181, hadoop03:2181</value>

</property>

 

<!—zkfc程序的主类-->

<property>

<name>dfs.client.failover.proxy.provider.beiwang</name>

<value>org.apache.hadoop.hdfs.server.namenode.ha.ConfiguredFailoverProxyProvider</value>

</property>

 

<!—防止多个namenode同时active(脑裂)的方式-->

<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>

 

<!—指定ssh通讯超时时间-->

<property>

        <name>dfs.ha.fencing.ssh.connect-timeout</name>

        <value>30000</value>

</property>

 

</configuration>

hadoop-env.sh

export JAVA_HOME="/home/bigdata/jdk1.8.0_161"

建一个master文本在hadoop-2.6.0/etc/hadoop/

注意

   新建master文件,文件中写 所有namenode主机

hu-hadoop1
hu-hadoop2
hu-hadoop3

slaves:

hu-hadoop1
hu-hadoop2
hu-hadoop3

开启日志文件:

hadoop-daemons.sh start journalnode                                                                              


启动zookeeper:

  zkServer.sh start 



然后进行格式化:

hadoop namenode -format


在master上开启namenode

hadoop-daemon.sh start namenode

在salve11机  同步元数据信息

hdfs namenode -bootstrapStandby

格式化ZK(Master上执行即可)

# hdfs zkfc -formatZK


格式化后可以查看zookeeper存放文件:


启动dfs:然后再查看zookeeper

start-dfs.sh 


进入网页:



现在我们来测试下,杀死hu-hadoop2 ,然后看hu-hadoop1是否 可以从 standby=>active


然后我们再启动下刚刚的hu-hadoop2:查看它的状态


很明确的看出来了吧

然后我们看看zookeeper


然后现在我们去杀掉hu-hadoop1:再看zookeeper

当然此时网页hu-hadoop2又从刚刚的standby==>active



    这是为什么呢?

记得我们前面做了一步 hdfs zkfc -formatZK 这一步就是将hdfs信息记录到zookeeper,还有hdfs-core.xml中的配置。

这就是zookeeper的强大之处。我们可以将zookeeper理解为数据库,而它和数据库又不太是因为他是一个树形,只有在树枝的末梢才会存储数据。它的大小有1MB,不要小看它的1MB,它的作用比你想象的要强大

再记录下我运行成功后的配置文件吧

hadoop-env.sh

export JAVA_HOME="/home/bigdata/jdk1.8.0_161"

core-site.xml

<configuration>
<property>
  <name>fs.defaultFS</name>
  <value>hdfs://huhu</value>
</property>
<property>
  <name>hadoop.tmp.dir</name>
 <value>/home/hadoopdata/tmp</value>
</property>
<property>
<name>io.file.buffer.size</name>
<value>4096</value>
</property>
</configuration>

hdfs-site.xml

<configuration>
<property>
	<name>dfs.nameservices</name>
	<value>huhu</value>
</property>
<property>
  <name>dfs.ha.namenodes.huhu</name>
  <value>huhu1,huhu2</value>
</property>

<property>
  <name>dfs.namenode.rpc-address.huhu.huhu1</name>
  <value>hu-hadoop1:8020</value>
</property>
<property>
  <name>dfs.namenode.rpc-address.huhu.huhu2</name>
  <value>hu-hadoop2:8020</value>
</property>
<property>
  <name>dfs.namenode.http-address.huhu.huhu1</name>
  <value>hu-hadoop1:50070</value>
</property>
<property>
  <name>dfs.namenode.http-address.huhu.huhu2</name>
  <value>hu-hadoop2:50070</value>
</property>
<property>
  <name>dfs.namenode.name.dir</name>
  <value>file:///home/hdfs/name</value>
</property>
<property>
  <name>dfs.datanode.data.dir</name>
  <value>file:///home/hdfs/data</value>
</property>
<property>
  <name>dfs.namenode.shared.edits.dir</name>
  <value>qjournal://hu-hadoop1:8485;hu-hadoop2:8485;hu-hadoop3:8485/huhu</value>
</property>
<property>
  <name>dfs.journalnode.edits.dir</name>
  <value>/home/bigdata/hadoop/journal1</value>
</property>
<property>
  <name>dfs.ha.automatic-failover.enabled</name>
  <value>true</value>
</property>
<property>
        <name>ha.zookeeper.quorum</name>
        <value>hu-hadoop1:2181,hu-hadoop2:2181,hu-hadoop3:2181</value>
</property>
<property>
	<name>dfs.client.failover.proxy.provider.huhu</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.ha.fencing.ssh.connect-timeout</name>
        <value>30000</value>
</property>
</configuration>

mapred-site.xml

<configuration>
<property>
    <name>mapreduce.framework.name</name>
    <value>yarn</value>
    <final>true</final>
    </property>
</configuration>

yarn-site.xml

<configuration>
 <property>
   <name>yarn.resourcemanager.connect.retry-interval.ms</name>
   <value>2000</value>
 </property>
 <property>
   <name>yarn.resourcemanager.ha.enabled</name>
   <value>true</value>
 </property>
 <property>
   <name>yarn.resourcemanager.ha.automatic-failover.enabled</name>
   <value>true</value>
 </property>
 <property>
   <name>yarn.resourcemanager.ha.automatic-failover.embedded</name>
   <value>true</value>
 </property>
 <property>
   <name>yarn.resourcemanager.cluster-id</name>
   <value>beiwangyarn</value>
 </property>
 <property>
   <name>yarn.resourcemanager.ha.rm-ids</name>
   <value>rm1,rm2</value>
 </property>
 <property>
   <name>yarn.resourcemanager.hostname.rm1</name>
   <value>hu-hadoop1</value>  
 </property>
  <property>
   <name>yarn.resourcemanager.hostname.rm2</name>
   <value>hu-hadoop2</value>  
 </property>
 <property>
   <name>yarn.resourcemanager.scheduler.class</name>
  <value>org.apache.hadoop.yarn.server.resourcemanager.scheduler.fair.FairScheduler</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.zk.state-store.address</name>
   <value>hu-hadoop1:2181,hu-hadoop2:2181,hu-hadoop3:2181</value>
 </property>
 <property>
   <name>yarn.app.mapreduce.am.scheduler.connection.wait.interval-ms</name>
   <value>5000</value>
 </property>
 <property>
   <name>yarn.resourcemanager.address.rm1</name>
   <value>hu-hadoop1:8032</value>
 </property>
 <property>
   <name>yarn.resourcemanager.scheduler.address.rm1</name>
   <value>hu-hadoop1:8030</value>
 </property>
 <property>
   <name>yarn.resourcemanager.webapp.https.address.rm1</name>
   <value>hu-hadoop1:23189</value>
 </property>
 <property>
   <name>yarn.resourcemanager.webapp.address.rm1</name>
   <value>hu-hadoop1:8088</value>
 </property>
 <property>
   <name>yarn.resourcemanager.resource-tracker.address.rm1</name>
   <value>hu-hadoop1:8031</value>
 </property>
 <property>
   <name>yarn.resourcemanager.admin.address.rm1</name>
   <value>hu-hadoop1:8033</value>
 </property>
 <property>
   <name>yarn.resourcemanager.address.rm2</name>
   <value>hu-hadoop2:8032</value>
 </property>
 <property>
   <name>yarn.resourcemanager.scheduler.address.rm2</name>
   <value>hu-hadoop2:8030</value>
 </property>
 <property>
   <name>yarn.resourcemanager.webapp.https.address.rm2</name>
   <value>hu-hadoop2:23189</value>
 </property>
 <property>
   <name>yarn.resourcemanager.webapp.address.rm2</name>
   <value>hu-hadoop2:8088</value>
 </property>
 <property>
   <name>yarn.resourcemanager.resource-tracker.address.rm2</name>
   <value>hu-hadoop2:8031</value>
 </property>
 <property>
   <name>yarn.resourcemanager.admin.address.rm2</name>
   <value>hu-hadoop2:8033</value>
 </property>
 <property>
   <description>Address where the localizer IPC is.</description>
   <name>yarn.nodemanager.localizer.address</name>
   <value>0.0.0.0:23344</value>
 </property>
 <property>
   <description>NM Webapp address.</description>
   <name>yarn.nodemanager.webapp.address</name>
   <value>0.0.0.0:23999</value>
 </property>
 <property>
   <name>yarn.nodemanager.aux-services</name>
   <value>mapreduce_shuffle</value>
 </property>
 <property>
   <name>yarn.nodemanager.aux-services.mapreduce_shuffle.class</name>
   <value>org.apache.hadoop.mapred.ShuffleHandler</value>
 </property>
 <property>
   <name>yarn.nodemanager.local-dirs</name>
   <value>/tmp/pseudo-dist/yarn/local</value>
 </property>
   <name>yarn.nodemanager.log-dirs</name>
   <value>/tmp/pseudo-dist/yarn/log</value>
 </property>
 <property>
   <name>mapreduce.shuffle.port</name>
   <value>23080</value>
 </property>
 <property>
   <name>yarn.resourcemanager.zk-address</name>
   <value>hu-hadoop1:2181,hu-hadoop2:2181,hu-hadoop3:2181</value>
 </property>
</configuration>

master

hu-hadoop1
hu-hadoop2
hu-hadoop3

slaves

hu-hadoop1
hu-hadoop2
hu-hadoop3

2017-05-31 17:12:32 wyl9527 阅读数 599
  • MyCat实战讲解(MySQL集群)

    Mycat是阿里推广的一个开源组件,其核心的概念为库表分离实现操作,利用合理的库表分离可以用更高效的方式来进行SQL数据库的开发与处理,适合高并发的数据访问处理。 在本课程中将为读者讲解库表分离的设计思想,以及数据库的垂直水平分割概念,同时后将为读者讲解高可用的MYSQL集群机构的设计实现。

    8200 人正在学习 去看看 李兴华

1.切换你要的用户

[root@bgs-5p173-wangwenting ~]$ su hadoop

2.生成密钥,一直按enter键:

[hadoop@bgs-5p173-wangwenting ~]$ ssh-keygen -t rsa

3.将秘钥发送到其他机器上:

[hadoop@bgs-5p173-wangwenting ~]$ ssh-copy-id -i ~/.ssh/id_rsa.pub hadoop@bgs-5p173-wangwenting
[hadoop@bgs-5p173-wangwenting ~]$ ssh-copy-id -i ~/.ssh/id_rsa.pub hadoop@bgs-5p174-wangwenting
[hadoop@bgs-5p173-wangwenting ~]$ ssh-copy-id -i ~/.ssh/id_rsa.pub hadoop@bgs-5p175-wangwenting

4.验证是否免秘钥登录成功:

[hadoop@bgs-5p173-wangwenting ~]$ ssh 172.24.5.173
[hadoop@bgs-5p173-wangwenting ~]$ ssh 172.24.5.174
[hadoop@bgs-5p173-wangwenting ~]$ ssh 172.24.5.175

如果能登录且不用输密码,则172.24.5.173可以免密码登录另外两台机器。

5.同理,如果其他的机器上免秘钥登录,重复上述步骤就可以了。不过你可以写一个shell脚本去执行,每次只要修改一下用户就可以了。

思想是:每台创建一个公钥,然后再.ssh目录下创建一个authorized_keys将每台机器上的公钥拷贝进去,则可以实现免秘钥。

2015-06-04 17:07:36 weixin_34185560 阅读数 59
  • MyCat实战讲解(MySQL集群)

    Mycat是阿里推广的一个开源组件,其核心的概念为库表分离实现操作,利用合理的库表分离可以用更高效的方式来进行SQL数据库的开发与处理,适合高并发的数据访问处理。 在本课程中将为读者讲解库表分离的设计思想,以及数据库的垂直水平分割概念,同时后将为读者讲解高可用的MYSQL集群机构的设计实现。

    8200 人正在学习 去看看 李兴华

HA 即 (high available)高可用,又被叫做双机热备,用于关键性业务。 简单理解就是,有两台机器A和B,正常是A提供服务,B待命闲置,当A宕机或服务宕掉,会切换至B机器继续提供服务。常用实现高可用的开源软件有heartbeat和keepalived,其中keepalived有负载均衡的功能。


下面我们使用heartbeat来做HA集群,并且把nginx服务作为HA对应的服务。

试验准备工作:

两台机器,都是centos6.6,各增加一块网卡eth1,使用主机模式连接vmnet1,并设定为192.168.11.0网段;eth0为NAT模式,网段为192.168.20.0网段;

spacer.gifwKiom1VwDyWQlN76AAJC6vGAx1I551.jpg

开机启动后,拷贝ifcfg-eth0 到 ifcfg-eth1,修改DEVICE为eth1,ip地址设为:192.168.11.20

# cd /etc/sysconfig/network-scripts/
# cp ifcfg-eth0 ifcfg-eth1
# cat ifcfg-eth1
DEVICE=eth1
TYPE=Ethernet
ONBOOT=yes
NM_CONTROLLED=yes
BOOTPROTO=static
IPADDR=192.168.11.20

设置完成后,重启网卡,ifconfig查看eth0、eth1的ip地址;

# /etc/init.d/network restart
#ifconfig

主机的配置:

hostname hello

eth0:192.168.20.20

eth1:192.168.11.20


从机的配置:

hostname web

eth0:192.168.20.30

eth1:192.168.11.30


1、设置hostname,分别为hello和 web;

2、主从都需要关闭防火墙;关闭selinux;

# iptables -F
# setenforce 0
setenforce: SELinux is disabled

3、 vi /etc/hosts   //主从都需要增加内容如下:  

192.168.20.20 hello 
192.168.20.30 web

4、安装epel扩展源

# yum install -y epel-release

5、两个机器都安装heartbeat、libnet

#yum  install -y heartbeat*   libnet  nginx

nginx做代理服务;

6、主上(hello)配置

Heartbeat软件的安装目录为/etc/ha.d目录;

拷贝配置文件的模板到/etc/ha.d目录;

cd /usr/share/doc/heartbeat-3.0.4/
cp  authkeys  ha.cf haresources   /etc/ha.d/
cd /etc/ha.d

vi  authkeys  //去掉前面的#号,或加入下面的内容:

auth 3
3 md5 Hello!

更改权限为600

chmod 600 authkeys

vi  haresources  //加入

hello 192.168.11.100/24/eth1:0 nginx

192.168.11.100 ip地址是流动ip,虚拟ip;用来绑定服务的;子网掩码为24位;使用eth1:0绑定虚拟ip,并运行nginx进行测试;

注意:两台主机的haresources文件设置必须完全一致。


vi  ha.cf   //更改为如下内容:

debugfile /var/log/ha-debug
logfile /var/log/ha-log
logfacility     local0
keepalive 2
deadtime 30
warntime 10
initdead 60
udpport 694
ucast eth1 192.168.11.30
auto_failback on
node    hello
node    web
ping 192.168.11.1
respawn hacluster /usr/lib/heartbeat/ipfail

7、把主上的三个配置拷贝到从上:

#cd /etc/ha.d/
#scp  authkeys  ha.cf haresources  web:/etc/ha.d/

8、从上(web) 只需要编辑ha.cf

vi  /etc/ha.d/ha.cf   //只需要更改一个地方

ucast eth1 192.168.11.30 改为   ucast eth1 192.168.11.20   

9、启动heartbeat

先主,后从

#service heartbeat start

10、检查测试

ifconfig 查看是否有 eth1:0 出现则说明主已经开始工作;

[root@yong ~]# ifconfig 
eth0      Link encap:Ethernet  HWaddr 00:0C:29:43:3D:32  
          inet addr:192.168.20.20  Bcast:192.168.20.255  Mask:255.255.255.0
          inet6 addr: fe80::20c:29ff:fe43:3d32/64 Scope:Link
          UP BROADCAST RUNNING MULTICAST  MTU:1500  Metric:1
          RX packets:433 errors:0 dropped:0 overruns:0 frame:0
          TX packets:429 errors:0 dropped:0 overruns:0 carrier:0
          collisions:0 txqueuelen:1000 
          RX bytes:37095 (36.2 KiB)  TX bytes:75381 (73.6 KiB)
          Interrupt:18 Base address:0x2000 
eth1      Link encap:Ethernet  HWaddr 00:0C:29:43:3D:3C  
          inet addr:192.168.11.20  Bcast:192.168.11.255  Mask:255.255.255.0
          inet6 addr: fe80::20c:29ff:fe43:3d3c/64 Scope:Link
          UP BROADCAST RUNNING MULTICAST  MTU:1500  Metric:1
          RX packets:396 errors:0 dropped:0 overruns:0 frame:0
          TX packets:399 errors:0 dropped:0 overruns:0 carrier:0
          collisions:0 txqueuelen:1000 
          RX bytes:83641 (81.6 KiB)  TX bytes:89725 (87.6 KiB)
          Interrupt:18 Base address:0x2080 
          
eth1:0    Link encap:Ethernet  HWaddr 00:0C:29:43:3D:3C  
          inet addr:192.168.11.100  Bcast:192.168.11.255  Mask:255.255.255.0
          UP BROADCAST RUNNING MULTICAST  MTU:1500  Metric:1
          Interrupt:18 Base address:0x2080 
          
lo        Link encap:Local Loopback  
          inet addr:127.0.0.1  Mask:255.0.0.0
          inet6 addr: ::1/128 Scope:Host
          UP LOOPBACK RUNNING  MTU:65536  Metric:1
          RX packets:0 errors:0 dropped:0 overruns:0 frame:0
          TX packets:0 errors:0 dropped:0 overruns:0 carrier:0
          collisions:0 txqueuelen:0 
          RX bytes:0 (0.0 b)  TX bytes:0 (0.0 b)

查看是否有nginx进程、heartbeat进程;

[root@yong ha.d]# ps aux |grep nginx
root      3731  0.0  0.1   5000   632 ?        Ss   10:52   0:00 nginx: master process /usr/local/nginx/sbin/nginx -c /usr/local/nginx/conf/nginx.conf
nobody    3732  0.0  0.1   5200   984 ?        S    10:52   0:00 nginx: worker process
[root@yong ha.d]# ps aux |grep heartbeat
root      2765  0.3  1.3   6684  6676 ?        SLs  10:44   0:01 heartbeat: master control process
root      2770  0.0  1.2   6488  6480 ?        SL   10:44   0:00 heartbeat: FIFO reader  
root      2771  0.0  1.2   6484  6476 ?        SL   10:44   0:00 heartbeat: write: ucast eth1
root      2772  0.0  1.2   6484  6476 ?        SL   10:44   0:00 heartbeat: read: ucast eth1 
root      2773  0.0  1.2   6484  6476 ?        SL   10:44   0:00 heartbeat: write: ping 192.168.11.1
root      2774  0.0  1.2   6484  6476 ?        SL   10:44   0:00 heartbeat: read: ping 192.168.11.1
498       2787  0.0  0.2   5380  1488 ?        S    10:45   0:00 /usr/lib/heartbeat/ipfail

11、测试1:主上故意禁ping

#iptables -I INPUT -p icmp -j DROP

windows客户端一直ping 192.168.11.100 ,一直通,禁止ping之后中间会中断一会,之后一直通;

wKioL1VwFDfAufNjAAF54o941FY163.jpg

在从上ifconfig查看出现eth1:0,查看nginx进程也有,说明转换到从机器上运行;

[root@web ~]# ifconfig 
eth0      Link encap:Ethernet  HWaddr 00:0C:29:97:C3:EC  
          inet addr:192.168.20.30  Bcast:192.168.20.255  Mask:255.255.255.0
          inet6 addr: fe80::20c:29ff:fe97:c3ec/64 Scope:Link
          UP BROADCAST RUNNING MULTICAST  MTU:1500  Metric:1
          RX packets:460 errors:0 dropped:0 overruns:0 frame:0
          TX packets:469 errors:0 dropped:0 overruns:0 carrier:0
          collisions:0 txqueuelen:1000 
          RX bytes:37104 (36.2 KiB)  TX bytes:101866 (99.4 KiB)
          Interrupt:19 Base address:0x2000 
          
eth1      Link encap:Ethernet  HWaddr 00:0C:29:97:C3:F6  
          inet addr:192.168.11.30  Bcast:192.168.11.255  Mask:255.255.255.0
          inet6 addr: fe80::20c:29ff:fe97:c3f6/64 Scope:Link
          UP BROADCAST RUNNING MULTICAST  MTU:1500  Metric:1
          RX packets:1022 errors:0 dropped:0 overruns:0 frame:0
          TX packets:1035 errors:0 dropped:0 overruns:0 carrier:0
          collisions:0 txqueuelen:1000 
          RX bytes:191275 (186.7 KiB)  TX bytes:182393 (178.1 KiB)
          Interrupt:18 Base address:0x2080 
          
eth1:0    Link encap:Ethernet  HWaddr 00:0C:29:97:C3:F6  
          inet addr:192.168.11.100  Bcast:192.168.11.255  Mask:255.255.255.0
          UP BROADCAST RUNNING MULTICAST  MTU:1500  Metric:1
          Interrupt:18 Base address:0x2080

12、测试2:主上停止heartbeat服务

#service heartbeat stop

windows客户端一直ping 192.168.11.100 ,一直通,停止心跳服务后中间会中断一会,之后一直通;

在从上ifconfig查看出现eth1:0,查看nginx进程也有,说明转换到从机器上运行;


13、测试3:测试脑裂,主和从都停掉eth1网卡;

eth1网卡禁用,ifdown eth1 心跳线断了之后,会发生脑裂;主从之间连接断了,从在死亡时间没收到主的心跳,则认为主死亡。

主死了,从机器接管服务,从机器使用虚拟ip地址,主和从都在运行服务;

主机器没有eth1网卡,一直运行nginx;

[root@yong ha.d]# ifconfig 
eth0      Link encap:Ethernet  HWaddr 00:0C:29:43:3D:32  
          inet addr:192.168.20.20  Bcast:192.168.20.255  Mask:255.255.255.0
          inet6 addr: fe80::20c:29ff:fe43:3d32/64 Scope:Link
          UP BROADCAST RUNNING MULTICAST  MTU:1500  Metric:1
          RX packets:11442 errors:0 dropped:0 overruns:0 frame:0
          TX packets:15376 errors:0 dropped:0 overruns:0 carrier:0
          collisions:0 txqueuelen:1000 
          RX bytes:842833 (823.0 KiB)  TX bytes:10226838 (9.7 MiB)
          Interrupt:18 Base address:0x2000 
lo        Link encap:Local Loopback  
          inet addr:127.0.0.1  Mask:255.0.0.0
          inet6 addr: ::1/128 Scope:Host
          UP LOOPBACK RUNNING  MTU:65536  Metric:1
          RX packets:1163 errors:0 dropped:0 overruns:0 frame:0
          TX packets:1163 errors:0 dropped:0 overruns:0 carrier:0
          collisions:0 txqueuelen:0 
          RX bytes:150095 (146.5 KiB)  TX bytes:150095 (146.5 KiB)
[root@yong ha.d]# ps aux |grep nginx
root     11686  0.0  0.1   5000   636 ?        Ss   14:27   0:00 nginx: master process /usr/local/nginx/sbin/nginx -c /usr/local/nginx/conf/nginx.conf
nobody   11687  0.0  0.1   5200   988 ?        S    14:27   0:00 nginx: worker process

从机器查看地址,eth1:0出现

[root@localhost ha.d]# ifconfig 
eth0      Link encap:Ethernet  HWaddr 00:0C:29:97:C3:EC  
          inet addr:192.168.20.30  Bcast:192.168.20.255  Mask:255.255.255.0
          inet6 addr: fe80::20c:29ff:fe97:c3ec/64 Scope:Link
          UP BROADCAST RUNNING MULTICAST  MTU:1500  Metric:1
          RX packets:7901 errors:0 dropped:0 overruns:0 frame:0
          TX packets:5891 errors:0 dropped:0 overruns:0 carrier:0
          collisions:0 txqueuelen:1000 
          RX bytes:603592 (589.4 KiB)  TX bytes:2094606 (1.9 MiB)
          Interrupt:19 Base address:0x2000 
eth1      Link encap:Ethernet  HWaddr 00:0C:29:97:C3:F6  
          inet6 addr: fe80::20c:29ff:fe97:c3f6/64 Scope:Link
          UP BROADCAST RUNNING MULTICAST  MTU:1500  Metric:1
          RX packets:20774 errors:0 dropped:0 overruns:0 frame:0
          TX packets:59144 errors:0 dropped:0 overruns:0 carrier:0
          collisions:0 txqueuelen:1000 
          RX bytes:3513861 (3.3 MiB)  TX bytes:12998603 (12.3 MiB)
          Interrupt:18 Base address:0x2080 
eth1:0    Link encap:Ethernet  HWaddr 00:0C:29:97:C3:F6  
          inet addr:192.168.11.100  Bcast:0.0.0.0  Mask:255.255.255.0
          UP BROADCAST RUNNING MULTICAST  MTU:1500  Metric:1
          Interrupt:18 Base address:0x2080
[root@localhost ha.d]# ps aux |grep nginx
root      8938  0.0  0.0   3684   584 ?        Ss   14:37   0:00 nginx: master process /usr/local/nginx/sbin/nginx -c /usr/local/nginx/conf/nginx.conf
nobody    8940  0.0  0.1   4936  2008 ?        S    14:37   0:00 nginx: worker process                                          
nobody    8941  0.0  0.2   4936  2064 ?        S    14:37   0:00 nginx: worker process

14、测试4:设置auto_failback off

主从都需要配置,启动heartbeat,主上禁止ping之后,跳转到从机器,主恢复ping之后,也不会跳转到主,一直是从机器提供服务;


HA高可用搭建完毕;



Linux架构之HA配置

阅读数 2486

没有更多推荐了,返回首页