liu1775999077

Tomcat 配置

1.1 安装jdk

rpm ivh jdk-8u161-linux-x64.rpm

vi /etc/profile

加入以下JAVA环境变量配置

#set java environment

export JAVA_HOME=/usr/java/jdk1.8.0_161

export PATH=$JAVA_HOME/bin:$PATH

export CLASSPATH=.$JAVA_HOME/lib/dt.jar:$JAVA_HOME/lib/tools.jar

 

1.2 安装tomcat及修改字符集

 

解压tomcat安装包:

 

tar -xvzf  apache-tomcat-7.0.85.tar.gz

 

修改字符集,重启才能生效

 

tomcatstartup.sh的最前面(在文件前面的注释的后面, 不要写在注释之前), 添加一行内容:

 

export LANG=zh_CN.gbk

 

启动tomcat

 

$<TOMCAT>/bin/

 

./starup.sh

 

1.3 集群和负载均衡配置

 

1.3.1 Tomcat集群配置

 

本次实验使用集群服务器两台,tomcat版本为apache-tomcat-7.0.85

 

1.3.1.1 修改server.xml

 

修改每个tomcatserver.xml配置文件的<Engine></Engine>中加入如下配置(此配置也是tomcat配置集群的默认配置):

 

<Cluster className="org.apache.catalina.ha.tcp.SimpleTcpCluster" channelSendOptions="8">

 

    <Manager className="org.apache.catalina.ha.session.DeltaManager" 

 

        expireSessionsOnShutdown="false" 

 

        notifyListenersOnReplication="true"/>

 

    <Channel className="org.apache.catalina.tribes.group.GroupChannel">

 

      <Membership className="org.apache.catalina.tribes.membership.McastService" 

 

            address="228.0.0.4" 

 

            port="45564" 

 

            frequency="500" 

 

            dropTime="3000"/>

 

      <Receiver className="org.apache.catalina.tribes.transport.nio.NioReceiver" 

 

            address="auto" 

 

            port="4000"

 

            autoBind="100" 

 

            selectorTimeout="5000" 

 

            maxThreads="6"/>

 

      <Sender className="org.apache.catalina.tribes.transport.ReplicationTransmitter">

 

        <Transport className="org.apache.catalina.tribes.transport.nio.PooledParallelSender"/>

 

      </Sender>

 

      <Interceptor className="org.apache.catalina.tribes.group.interceptors.TcpFailureDetector"/>

 

      <Interceptor className="org.apache.catalina.tribes.group.interceptors.MessageDispatch15Interceptor"/>

 

    </Channel>

 

    <Valve className="org.apache.catalina.ha.tcp.ReplicationValve" filter=""/>

 

    <Valve className="org.apache.catalina.ha.session.JvmRouteBinderValve"/>

 

    <Deployer className="org.apache.catalina.ha.deploy.FarmWarDeployer" 

 

            tempDir="/tmp/war-temp/" 

 

            deployDir="/temp/war-deploy/" 

 

            watchDir="/tmp/war-listen/" 

 

            watchEnabled="false"/>

 

    <ClusterListener className="org.apache.catalina.ha.session.JvmRouteSessionIDBinderListener"/>

 

    <ClusterListener className="org.apache.catalina.ha.session.ClusterSessionListener"/>

 

</Cluster>

 

 

 

 配置注意事项:

 

如果tomcat是配置在同一台机器上的,那么<Receiver/>节点中用于监听传递消息的TCP端口号即属性port不能配置相同,配置范围是4000-4100

 

 

 

1.1.1.1 修改web.xml

 

在项目的web.xml文件中配置<distributable/>,然后就可以运行测试了。

 

1.1.1.2 集群配置属性详解

 

  1. <Cluster/>tomcat集群配置节点

 

  • classNametomcat集群之间实现信息传递所使用的类。
  • channelSendOptions:值可以设置为24810,数字代表含义如下:

 

2Channel.SEND_OPTIONS_USE_ACK(确认发送)
4Channel.SEND_OPTIONS_SYNCHRONIZED_ACK(同步发送
8Channel.SEND_OPTIONS_ASYNCHRONOUS(异步发送)
在异步模式下,可以通过加上确认发送(Acknowledge)来提高可靠性,此时可将channelSendOptions设为10  

 

  1. <Manager/>配置为如何管理集群的Session信息,tomcat提供了两种管理器:

 

BackupManager:集群下产生的所有Session都将放到一个备份节点,集群下的所有节点都可以访问此备份节点,每个节点部署的应用可以不一样。
DeltaManager:集群下某个节点创建、改动的Session,都将复制到其他节点,每个节点部署的应用要一样。这个管理器是tomcat默认的集群配置,适用于一般的小型集群。

 

  • className:集群管理器
  • expireSessionsOnShutdown:设置为true时,一个节点关闭,将导致集群下的所有Session失效
  • notifyListenersOnReplication:集群下节点间的Session复制、删除操作,是否通知session listeners
  • maxInactiveInterval:集群下Session的有效时间(单位:s),集群内不活动的Session,将被Tomcat回收。默认值为1800(30min)

 

  1. <Channel/>tomcat集群之间进行通讯的工具,主要包括五个组件:MembershipReceiverSenderTransportInterceptor

 

<Membership/>维护集群的可用节点列表。它可以检查到新增的节点,也可以检查到没有心跳的节点

 

className:指定Membership维护类

 

address:广播地址

 

port:广播端口

 

frequency:发送心跳(向广播地址发送UDP数据包)的时间间隔(单位:ms)。默认值为500

 

dropTimeMembershipdropTime(单位:ms)内未收到某一节点的心跳,则将该节点从可用节点列表删除。默认值为3000

 

<Receiver/>配置消息接收器,负责接收消息,接收器分为两种:BioReceiver(阻塞式)NioReceiver(非阻塞式)

 

className:指定Receiver使用的类

 

address:接收消息的地址

 

port:接收消息的端口

 

autoBind:端口的变化区间,如果port4000autoBind100,接收器将在4000-4099间取一个端口,进行监听

 

selectorTimeoutNioReceiver内轮询的超时时间

 

maxThreads:线程池的最大线程数

 

<Sender/>配置消息发送器,负责发送消息

 

<Transport/>分为两种:bio.PooledMultiSender(阻塞式)nio.PooledParallelSender(非阻塞式)

 

<Interceptor/>配置Cluster的拦截器

 

TcpFailureDetector:网络、系统比较繁忙时,Membership可能无法及时更新可用节点列表,此时TcpFailureDetector可以拦截到某个节点关闭的信息,并尝试通过TCP连接到此节点,以确保此节点真正关闭,从而更新集群可以用节点列表。

 

MessageDispatch15Interceptor:查看Cluster组件发送消息的方式是否设置为Channel.SEND_OPTIONS_ASYNCHRONOUS(Cluster标签下的channelSendOptions8)。设置为Channel.SEND_OPTIONS_ASYNCHRONOUS时,MessageDispatch15Interceptor先将等待发送的消息进行排队,然后将排好队的消息转给Sender

 

  1. <Valve/>可以理解为Tomcat的拦截器

 

ReplicationValve:在处理请求前后打日志;过滤不涉及Session变化的请求

 

JvmRouteBinderValveApachemod_jk发生错误时,保证同一客户端的请求发送到集群的同一个节点

 

  1. <Deployer/>同步集群下所有节点的一致性
  2. <ClusterListener/>监听器,监听Cluster组件接收的消息,使用DeltaManager时,Cluster接收的信息通过ClusterSessionListener传递给DeltaManager

 

 

 

1.1 日志配置

 

1.1.1 设置tomcat的日志文件保留个数

 

<tomcat>/conf/logging-properties文件 中的每个FileHandler增加maxDays 参数, 单位是天。

 

例如:

 

1catalina.org.apache.juli.FileHandler.level = FINE

 

1catalina.org.apache.juli.FileHandler.directory = ${catalina.base}/logs

 

1catalina.org.apache.juli.FileHandler.prefix = catalina.

 

1catalina.org.apache.juli.FileHandler.maxDays = 30

 

 

 

2localhost.org.apache.juli.FileHandler.level = FINE

 

2localhost.org.apache.juli.FileHandler.directory = ${catalina.base}/logs

 

2localhost.org.apache.juli.FileHandler.prefix = localhost.

 

2localhost.org.apache.juli.FileHandler.maxDays = 30

 

 

 

3manager.org.apache.juli.FileHandler.level = FINE

 

3manager.org.apache.juli.FileHandler.directory = ${catalina.base}/logs

 

3manager.org.apache.juli.FileHandler.prefix = manager.

 

3manager.org.apache.juli.FileHandler.maxDays = 30

 

 

 

4host-manager.org.apache.juli.FileHandler.level = FINE

 

4host-manager.org.apache.juli.FileHandler.directory = ${catalina.base}/logs

 

4host-manager.org.apache.juli.FileHandler.prefix = host-manager.

 

4host-manager.org.apache.juli.FileHandler.maxDays = 30

 

 

 

1.1.2 Tomcataccess log

 

Access log的量很大, 如果系统里已经有http server,那么, 一般是不开启tomcat的access log的。

 

Tomcat的access log的配置在 conf/server.xml下,如果想要关闭access log, 注释掉相关的配置即可。 例如:

 

 

 

       <!-- Access log processes all example.

 

             Documentation at: /docs/config/valve.html

 

             Note: The pattern used is equivalent to using pattern="common"

 

        <Valve className="org.apache.catalina.valves.AccessLogValve" directory="logs"

 

               prefix="localhost_access_log." suffix=".txt"

 

               pattern="%h %l %u %t "%r" %s %b" />

 

        -->

 

1.1.3 Logrotate

 

/etc/logrotate.d/下, 创建一个文件 tomcat 内容如下:

 

 

 

/opt/apache-tomcat-7.0.85/logs/catalina.out {

 

    dateext

 

    missingok

 

    copytruncate

 

    daily

 

    rotate 30

 

    size 1

 

}

 

 

 

根据实际的tomcat日志的地址修改一下里面的文件路径。

 

 

 

备注: 如果是centos等开启了SELinux的操作系统,最好预先执行一下:

 

semanage fcontext -a -t  var_log_t  "/opt/apache-tomcat-7.0.85/logs/*"

 

restorecon  -v /opt/apache-tomcat-7.0.85/logs

 

 

 

执行一次就行了, 不需要每次执行

 

 

 

Apache HTTP server的配置

 

2.1 安装apache

 

安装依赖包,以下命令仅适用于centos服务器,suse服务器在运行yast2进行安装。

 

yum install gcc

 

yum install apr

 

yum install apr-util

 

yum install pcre

 

 

 

解压apache安装包

 

 tar -xjf httpd-2.2.6.tar.gz

 

cd httpd-2.2.6/

 

 

 

编译

 

./configure --prefix=/opt/httpd

 

 

 

安装

 

make

 

make install

 

 

 

启动apache

 

cd /opt/httpd/bin/

 

./apachectl start

 

 

 

2.2 MIME设置

 

修改 conf/mime.types文件, 将html的内容改为:

 

text/html                                       html htm do

 

2.3 集群和负载均衡配置

 

2.3.1 集群配置

 

a) mod_jk.so 复制到/opt/httpd/modules

 

b) 修改http.conf

 

vi /opt/httpd/conf/http.conf

 

增加以下内容:

 

#mod_jk

 

Include /opt/httpd/conf/mod_jk.conf

 

c) 增加mod_jk.conf,并编辑以下内容

 

LoadModule jk_module             /opt/httpd/modules/mod_jk.so

 

 

 

JkWorkersFile /opt/httpd/conf/workers.properties

 

JkShmFile /opt/httpd/logs/mod_jk.shm

 

JkLogFile /opt/httpd/logs/mod_jk.log

 

 

 

JkLogLevel debug

 

JkLogStampFormat "[%a%b%d%H:%M:%S%Y]"

 

 

 

JkMount  /portal* controller

 

JkMount  /portal* controller

 

JkMount  /idcenter* controller

 

JkMount  /pm*  controller

 

JkMount  /test*  controller

 

JkMount  /consume* controller

 

JkMount  /access* controller

 

d) 增加workers.properties,并编辑以下内容

 

 

 

worker.list=controller,tomcat1,tomcat2

 

 

 

worker.tomcat1.port=8009

 

worker.tomcat1.host=172.16.36.141

 

worker.tomcat1.type=ajp13

 

worker.tomcat1.lbfactor=1

 

 

 

worker.tomcat2.port=8009

 

worker.tomcat2.host=172.16.36.145

 

worker.tomcat2.type=ajp13

 

worker.tomcat2.lbfactor=3

 

 

 

worker.controller.type=lb

 

worker.controller.balanced_workers=tomcat1,tomcat2

 

worker.controller.sticky_session=true

 

e) 配置每个Tomcatserver.xml

 

<Engine name="Catalina" defaultHost="localhost">修改为:

 

<Engine name="Catalina" defaultHost="localhost" jvmRoute="tomcat2">

 

f) 测试ApacheTomcat的关联

 

在每个tomcatwebapps目录下创建test目录,并创建test.jsp

 

test.jsp内容为

 

<html>

 

this is tomcat 1     

 

</html>

 

//另一个tomcatthis is tomcat 2,类推。

 

启动apachetomcat

 

 

 

2.3.2 负载均衡配置

 

本次实验使用四台centos服务器,两台作为keepalived服务端,两台安装apache http作为客户端,keepalived版本为ipvsadm-1.27-7.el7.x86_64

 

以下负载均衡配置以http为例,keepalived服务器还可以实现数据库等服务器的负载均衡。通过修改文件keepalived.conf中虚拟服务器定义块中的端口来实现不同服务的负载均衡,本例为80,若mysql数据库服务则改为3306

 

 

 

2.3.2.1 客户端配置

 

lvs 客户端不需安装额外的软件,只需要增加配置文件lvs_real,本例将配置文件放在目录/usr/local/bin/

 

a) 增加配置文件,内容如下:

 

#!/bin/sh

 

#description : start realserver

 

VIP=106.30.130.30

 

. /etc/rc.d/init.d/functions

 

case "$1" in

 

start)

 

echo " start LVS of REALServer"

 

/sbin/ifconfig lo:0 $VIP broadcast $VIP netmask 255.255.255.255 up

 

echo "1" >/proc/sys/net/ipv4/conf/lo/arp_ignore

 

echo "2" >/proc/sys/net/ipv4/conf/lo/arp_announce

 

echo "1" >/proc/sys/net/ipv4/conf/all/arp_ignore

 

echo "2" >/proc/sys/net/ipv4/conf/all/arp_announce

 

;;

 

stop)

 

/sbin/ifconfig lo:0 down

 

echo "close LVS Directorserver"

 

echo "0" >/proc/sys/net/ipv4/conf/lo/arp_ignore

 

echo "0" >/proc/sys/net/ipv4/conf/lo/arp_announce

 

echo "0" >/proc/sys/net/ipv4/conf/all/arp_ignore

 

echo "0" >/proc/sys/net/ipv4/conf/all/arp_announce

 

;;

 

*)

 

echo "Usage: $0 {start|stop}"

 

exit 1

 

esac

 

b) 配置属性详解

 

1vip(virtual ip)。直接路由模式的 vip 必须跟服务器对外提供服务的 ip 地址在同一个网段,并且 lvs  负载均衡器和其他所有提供相同功能的服务器都使用这个 vip.

 

2vip 被绑定在环回接口 lo0:0 上,其广播地址是其本身,子网掩码是 255.255.255.255。这与标准的网络地址设置有很大的不同。采用这种可变长掩码方式把网段划分成只含一个主机地址的目的是避免 ip 地址冲突。

 

3echo  1,echo  2  这段的作用是抑制 arp 广播。如果不做 arp 抑制,将会有众多的机器向其他宣称:嗨!我是奥巴马,我在这里呢!,这样就乱套了。

 

c) 启停命令

 

停止命令:/usr/local/bin/lvs_real stop

 

启动命令:/usr/local/bin/lvs_real start

 

d) 客户端验证

 

执行命令 /usr/local/bin/lvs_real start后,接着执行ip addr来检查网络的状态,有如下结果,说明lo0:0 确实绑定了我们指定的vip地址,配置成功。

 

1: lo: <LOOPBACK,UP,LOWER_UP> mtu 65536 qdisc noqueue state UNKNOWN qlen 1

 

    link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00

 

    inet 127.0.0.1/8 scope host lo

 

       valid_lft forever preferred_lft forever

 

    inet 106.30.130.30/32 brd 106.30.130.30 scope global lo:0

 

       valid_lft forever preferred_lft forever

 

2.3.2.2 服务端配置

 

a) 两台服务端分别安装keepalived

 

Yum install ipvsadm

 

b) 配置keepalived

 

修改两台keepalived服务器的文件/etc/keepalived/keepalived.conf,两台keepalived的配置文件只有 MASTER/ BACKUP的区别,以下为master的配置:

 

 

 

#! Configuration File for keepalived

 

#全局定义块

 

global_defs {

 

   lvs_id LVS_YKT_A //负载均衡器标识(lvs_id)在一个网络内应该是唯一的。

 

}

 

#VRRP 实例定义块

 

vrrp_sync_group VGYKT { //一个网络内应该是唯一的。

 

group {

 

   VI_YKT }

 

}

 

 

 

# vrrp_instance define #

 

vrrp_instance VI_YKT {    //vrrp_instance.实例名出自实例组group 所包含的那些名字

 

    state MASTER  //两台keepalived的配置文件只有 MASTER/ BACKUP的区别

 

    interface eth0

 

    lvs_sync_daemon_inteface eth0

 

    virtual_router_id 51    //虚拟路由标识,同一个 vrrp 实例使用唯一的标识

 

    priority 150

 

    advert_int 5

 

    authentication {

 

        auth_type PASS

 

        auth_pass 1111

 

    }

 

    virtual_ipaddress {

 

        106.30.130.30 //自定义虚拟ip(须同网段)

 

    }

 

}

 

 

 

# virtual machine setting #

 

#虚拟服务器定义块

 

virtual_server 106.30.130.30 80 { //虚拟ip 端口号

 

    delay_loop 6

 

    lb_algo wlc

 

    lb_kind DR

 

    persistence_timeout 50

 

    protocol TCP

 

 

 

    real_server 106.30.130.31 80 { //客户端IP1 端口号

 

        weight 100

 

        TCP_CHECK {

 

            connect_timeout 5

 

            nb_get_retry 3

 

            delay_before_retry 3

 

            connect_port 80 //端口号

 

        }

 

    }

 

 

 

    real_server 106.30.130.35 80 { //客户端IP2 端口号

 

        weight 100

 

        TCP_CHECK {

 

            connect_timeout 5

 

            nb_get_retry 3

 

            delay_before_retry 3

 

            connect_port 80 //端口号

 

        }

 

    }

 

}

 

 

 

c) 负载均衡配置属性详解

 

 

 

  全局定义块

 

1  email 通知。作用:有故障,发邮件报警。这是可选项目,建议不用,用 nagios 全面监控代替之。

 

2  Lvs 负载均衡器标识(lvs_id)。在一个网络内,它应该是唯一的。

 

3  花括号{}。用来分隔定义块,因此必须成对出现。如果写漏了,keepalived 运行时,不会得到预期的结果。由于定义块内存在嵌套关系,因此很容易遗漏结尾处的花括号,这点要特别注意。

 

  VRRP 定义块

 

1  同步 vrrp  vrrp_sync_group。作用:确定失败切换(FailOver)包含的路由实例个数。即在有 2 个负载均衡器的场景,一旦某个负载均衡器失效,需要自动切换到另外一个负载均衡器的实例是哪些?

 

2  实例组 group.至少包含一个 vrrp 实例。

 

3  Vrrp 实例 vrrp_instance.实例名出自实例组 group 所包含的那些名字。 

 

1  实例状态 state.只有 MASTER  BACKUP 两种状态,并且需要大写这些单词。其中MASTER 为工作状态,BACKUP 为备用状态。当 MASTER 所在的服务器失效时,BACKUP 所在的系统会自动把它的状态有 BACKUP 变换成 MASTER;当失效的MASTER 所在的系统恢复时,BACKUP  MASTER 恢复到 BACKUP 状态。

 

2  通信接口 interface。对外提供服务的网络接口,如 eth0,eth1.当前主流的服务器都有2 个或 2 个以上的接口,在选择服务接口时,一定要核实清楚。

 

3  lvs_sync_daemon_inteface 负载均衡器之间的监控接口,类似于 HA HeartBeat的心跳线。但它的机制优于 Heartbeat,因为它没有裂脑这个问题,它是以优先级这个机制来规避这个麻烦的。在 DR 模式中,lvs_sync_daemon_inteface  与服务接口 interface  使用同一个网络接口。

 

4  虚拟路由标识 virtual_router_id.这个标识是一个数字,并且同一个 vrrp 实例使用唯一的标识。即同一个 vrrp_stance,MASTER  BACKUP  virtual_router_id 是一致的,同时在整个 vrrp 内是唯一的。

 

5  优先级 priority.这是一个数字,数值愈大,优先级越高。在同一个 vrrp_instance

 

里,MASTER 的优先级高于 BACKUP。若 MASTER  priority 值为 150,那么 BACKUP priority 只能是 140 或更小的数值。

 

6  同步通知间隔 advert_int  .MASTER  BACKUP 负载均衡器之间同步检查的时间间隔,单位为秒。

 

7  验证 authentication。包含验证类型和验证密码。类型主要有 PASSAH 两种,通常使用的类型为 PASS,据说 AH 使用时有问题。验证密码为明文,同一 vrrp 实例MASTER  BACKUP 使用相同的密码才能正常通信。

 

4  虚拟 ip 地址 virtual_ipaddress . 可以有多个地址,每个地址占一行,不需要指定子网掩码。注意:这个 ip 必须与我们在 lvs 客户端设定的 vip 相一致!

 

  虚拟服务器 virtual_server 定义块

 

虚拟服务器定义是 keepalived 框架最重要的项目了,是 keepalived.conf 必不可少的部分。

 

1  虚拟服务器 virtual_server.  这个 ip 来自于 vrrp 定义块的第4步,后面一个空格,然后加上端口号。定义一个 vip,可以实现多个 tcp 端口的负载均衡功能。

 

1  delay_loop。健康检查时间间隔,单位是秒。

 

2  lb_algo.  负载均衡调度算法,互联网应用常使用 wlc  rr

 

3  lb_kind.  负载均衡转发规则。一般包括 DR,NAT,TUN3 种,在我的方案中,都使用DR 的方式。

 

4  persistence_timeout.会话保持时间,单位是秒。这个选项对动态网站很有用处:当用户从远程用帐号进行登陆网站时,有了这个会话保持功能,就能把用户的请求转发给同一个应用服务器。在这里,我们来做一个假设,假定现在有一个 lvs 环境,使用 DR 转发模式,真实服务器有 3 个,负载均衡器不启用会话保持功能。当用户第一次访问的时候,他的访问请求被负载均衡器转给某个真实服务器,这样他看到一个登陆页面,第一次访问完毕;接着他在登陆框填写用户名和密码,然后提交;这时候,问题就可能出现了登陆不能成功。因为没有会话保持,负载均衡器可能会把第 2 次的请求转发到其他的服务器。

 

5  转发协议 protocol.一般有 tcp  udp 两种。实话说,我还没尝试过 udp 协议类的转发。

 

2  真实服务器 real_server.也即服务器池。 Real_server 的值包括 ip 地址和端口号。多个连续的真实 ip ,转发的端口相同,是不是可以以范围表示?需要进一步实验。如写成real_server 61.135.20.1-10 80 .

 

1  权重 weight.权重值是一个数字,数值越大,权重越高。使用不同的权重值的目的在于为不同性能的机器分配不同的负载,性能较好的机器,负载分担大些;反之,性能差的机器,则分担较少的负载,这样就可以合理的利用不同性能的机器资源。

 

2  Tcp 检查 tcp_check.

 

关于配置文件的理论我们就先讲到这里。由于应用场景的不同,配置文件也会有很大的差异,在接下来的章节里,我将以两个具体的应用来展示 keepalived 神奇功效。

 

 

 

d) 启停命令:

 

停止服务:执行ps ef | grep keepalived获取keepalivedpidkill -9 pid

 

启动命令:/usr/sbin/keepalived D

 

 

 

2.4 日志配置

 

2.4.1 Http access_logrotate

 

conf/httpd.conf

 

 

 

CustomLog "|/opt/httpd/bin/rotatelogs  /opt/httpd/logs/access_log 86400" common

 

表示一天一个。 86400 表示的是86400

 

2.4.2  mod_jk日志的关闭

 

安装阶段, 为了查找错误, 一般会把日志打开, 等系统安装完毕,就要关闭jk的日志文件。

 

 

 

JkLogFile /opt/httpd/logs/mod_jk.log

 

#JkLogLevel debug

 

JkLogLevel error

 

JkLogStampFormat "[%a%b%d%H:%M:%S%Y]"

 

 

 

上面这段文字一般在 conf/mod_jk.conf下, 但这只是约定的位置。

 

实际位置要在conf/httpd.conf文件里面找。

 

 

 

Mysql集群安装

 

本次测试将3台服务器配置为mysql集群,三台服务器都需要安装galera并配置/etc/my.cnf

 

3.1 系统要求

 

1GHz single core CPU

 

512MB RAM

 

100 Mbps network connectivity

 

3.2 安装过程

 

3.2.1 Disabling SELinux for mysqld

 

semanage permissive -a mysqld_t

 

或者修改: /etc/selinux/config

 

SELINUX=disabled

 

3.2.2 关闭防火墙

 

Systemctl disable firewalld.service

 

Systemctl stop firewalld.service

 

3.2.3 安装galera-5.6.39

 

    公司nas上有galera的安装包,本次测试安装是mountnasgalera安装包的目录进行安装的,也可以拷贝到测试服务器上进行安装,因为拷贝比较慢,所以采用了mount的方式。

 

a) 安装galera之前需要安装的包 (这个不见得准, 和安装操作系统时的选项有关)

 

cifs-utils  用来mount NAS不是安装galera的依赖包)

 

net-tools   (ifconfig 命令)

 

telnet

 

boost-program-options

 

perl

 

rsync

 

lsof

 

perl-Data-Dumper

 

 

 

删除mariadb-libs

 

Yum erase mariadb-libs

 

 

 

b) 安装galera-5.6.39

 

挂载NAS

 

mount -t cifs //172.16.36.211/software /root/mnt

 

安装galera-5.6.39

 

cd /root/mnt/ server/mysql/mysql5.6/galera5.6.39/RedHat7

 

yum install * (此步骤需要联网,a)中的依赖包会一起装好)

 

安装时, 务必仔细看提示信息,提示信息中有临时密码存放位置,首次登陆需要用临时密码登陆。

 

3.2.4 修改mysql配置文件

 

修改文件/etc/my.cnf

 

[mysqld]

 

datadir=/var/lib/mysql/data

 

socket=/var/lib/mysql/mysql.sock

 

user=mysql

 

binlog_format=ROW

 

bind-address=0.0.0.0

 

default_storage_engine=innodb

 

innodb_autoinc_lock_mode=2

 

innodb_flush_log_at_trx_commit=0

 

innodb_buffer_pool_size=122M

 

wsrep_provider=/usr/lib64/galera-3/libgalera_smm.so

 

wsrep_provider_options="gcache.size=300M; gcache.page_size=300M"

 

wsrep_cluster_name=”credinetykt”

 

wsrep_cluster_address="gcomm://172.16.33.202,172.16.33.203,172.16.33.204"

 

wsrep_sst_method=rsync

 

wsrep_node_name=node202

 

wsrep_node_address="172.16.33.202"

 

 

 

注:上面加黑的斜体字是要每台机器单独配置的。

 

wsrep_cluster_name是集群的名称,通一个集群里的服务器名称应该配置成一样的。wsrep_cluster_address包含集群中所有的mysql服务器,本次测试为三台mysql服务器。

 

wsrep_node_name是某台mysql服务器本机的节点名称,三台服务器不能一样。 wsrep_node_address是某台mysql服务器本机的ip地址。

 

3.3 第一次启动第一个节点

 

干净安装

 

这个步骤只做一次

 

su – mysql

 

mysqld --wsrep-new-cluster

 

启动后,要根据安装结束时的提示,修改mysql密码。 目前这个版本, 密码在/root/.mysql_secret文件。h9HNrbFMjdxhFy3K77UFXgUnaJ1LHi7Igu6820vWtw1ITy5X2_fx652OvWtw1ITy5X2_fx

 

set password for root@localhost = password(\'新密码\');

 

 

 

升级安装

 

如果之前有数据库要迁移,用mysql用户复制data目录后启动mysql

 

 

 

mysqld -–wsrep-on=OFF --wsrep-new-cluster

 

mysql_upgrade

 

mysqladmin shudown

 

3.4 启动后续节点

 

启动后, 用正常方式启动另外几个节点的mysql, 然后,再停止这个节点, 重新正常启动。

 

对所有的节点:systemctl disable mysql.service  禁止自动启动。

 

禁止自动启动的原因, 是因为集群的启动方式和普通的不同。

 

3.5 日常重启动

 

检查galera所有节点的grastate.dat文件, 找到

 

safe_to_bootstrap: 1

 

的那个节点, 必须先重启这个节点。

 

命令式: service mysql start -–wsrep-new-cluter

 

用普通方式启动其它后续节点:

 

Systemctl start mysql.service

 

分类:

技术点:

相关文章: