1 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
修改字符集,重启才能生效:
在tomcat的startup.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
修改每个tomcat下server.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 集群配置属性详解
- <Cluster/>是tomcat集群配置节点
- className:tomcat集群之间实现信息传递所使用的类。
- channelSendOptions:值可以设置为2、4、8、10,数字代表含义如下:
2:Channel.SEND_OPTIONS_USE_ACK(确认发送)
4:Channel.SEND_OPTIONS_SYNCHRONIZED_ACK(同步发送)
8:Channel.SEND_OPTIONS_ASYNCHRONOUS(异步发送)
在异步模式下,可以通过加上确认发送(Acknowledge)来提高可靠性,此时可将channelSendOptions设为10。
- <Manager/>配置为如何管理集群的Session信息,tomcat提供了两种管理器:
BackupManager:集群下产生的所有Session都将放到一个备份节点,集群下的所有节点都可以访问此备份节点,每个节点部署的应用可以不一样。
DeltaManager:集群下某个节点创建、改动的Session,都将复制到其他节点,每个节点部署的应用要一样。这个管理器是tomcat默认的集群配置,适用于一般的小型集群。
- className:集群管理器
- expireSessionsOnShutdown:设置为true时,一个节点关闭,将导致集群下的所有Session失效
- notifyListenersOnReplication:集群下节点间的Session复制、删除操作,是否通知session listeners
- maxInactiveInterval:集群下Session的有效时间(单位:s),集群内不活动的Session,将被Tomcat回收。默认值为1800(30min)
- <Channel/>是tomcat集群之间进行通讯的工具,主要包括五个组件:Membership、Receiver、Sender、Transport、Interceptor。
<Membership/>维护集群的可用节点列表。它可以检查到新增的节点,也可以检查到没有心跳的节点
className:指定Membership维护类
address:广播地址
port:广播端口
frequency:发送心跳(向广播地址发送UDP数据包)的时间间隔(单位:ms)。默认值为500
dropTime:Membership在dropTime(单位:ms)内未收到某一节点的心跳,则将该节点从可用节点列表删除。默认值为3000
<Receiver/>配置消息接收器,负责接收消息,接收器分为两种:BioReceiver(阻塞式)、NioReceiver(非阻塞式)
className:指定Receiver使用的类
address:接收消息的地址
port:接收消息的端口
autoBind:端口的变化区间,如果port为4000,autoBind为100,接收器将在4000-4099间取一个端口,进行监听
selectorTimeout:NioReceiver内轮询的超时时间
maxThreads:线程池的最大线程数
<Sender/>配置消息发送器,负责发送消息
<Transport/>分为两种:bio.PooledMultiSender(阻塞式)、nio.PooledParallelSender(非阻塞式)
<Interceptor/>配置Cluster的拦截器
TcpFailureDetector:网络、系统比较繁忙时,Membership可能无法及时更新可用节点列表,此时TcpFailureDetector可以拦截到某个节点关闭的信息,并尝试通过TCP连接到此节点,以确保此节点真正关闭,从而更新集群可以用节点列表。
MessageDispatch15Interceptor:查看Cluster组件发送消息的方式是否设置为Channel.SEND_OPTIONS_ASYNCHRONOUS(Cluster标签下的channelSendOptions为8时)。设置为Channel.SEND_OPTIONS_ASYNCHRONOUS时,MessageDispatch15Interceptor先将等待发送的消息进行排队,然后将排好队的消息转给Sender。
- <Valve/>可以理解为Tomcat的拦截器
ReplicationValve:在处理请求前后打日志;过滤不涉及Session变化的请求
JvmRouteBinderValve:Apache的mod_jk发生错误时,保证同一客户端的请求发送到集群的同一个节点
- <Deployer/>同步集群下所有节点的一致性
- <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 Tomcat的access 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
执行一次就行了, 不需要每次执行
2 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) 配置每个Tomcat的server.xml
将<Engine name="Catalina" defaultHost="localhost">修改为:
<Engine name="Catalina" defaultHost="localhost" jvmRoute="tomcat2">
f) 测试Apache与Tomcat的关联
在每个tomcat的webapps目录下创建test目录,并创建test.jsp
test.jsp内容为
<html>
this is tomcat 1
</html>
//另一个tomcat为this is tomcat 2,类推。
启动apache和tomcat
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) 配置属性详解
1、vip(virtual ip)。直接路由模式的 vip 必须跟服务器对外提供服务的 ip 地址在同一个网段,并且 lvs 负载均衡器和其他所有提供相同功能的服务器都使用这个 vip.
2、vip 被绑定在环回接口 lo0:0 上,其广播地址是其本身,子网掩码是 255.255.255.255。这与标准的网络地址设置有很大的不同。采用这种可变长掩码方式把网段划分成只含一个主机地址的目的是避免 ip 地址冲突。
3、echo “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。包含验证类型和验证密码。类型主要有 PASS、AH 两种,通常使用的类型为 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获取keepalived的pid,kill -9 pid
启动命令:/usr/sbin/keepalived –D
2.4 日志配置
2.4.1 Http access_log的rotate
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文件里面找。
3 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的安装包,本次测试安装是mount到nas上galera安装包的目录进行安装的,也可以拷贝到测试服务器上进行安装,因为拷贝比较慢,所以采用了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文件。h9HNrbFMjdxhFy3K(77)UFXgUnaJ1LHi7Igu(68)20vWtw1ITy5X2_fx(65)2OvWtw1ITy5X2_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