Appearance
Linux双机热备使用手册
目的:
服务器A(例:192.168.1.34)和服务器B(例:192.168.1.35)互为热冗余服务器,以虚拟IP(例:192.168.1.190)对外工作。
实时数据库安装分别在服务器A和服务器B上安装,本程序检测服务器A和B的网络情况,如果主服务器网络中断,则将服务器B作为主服务器。
注意:
1). 只适用于linux平台
2). 和实时数据库配合使用
3). 数据库已经安装,目录为linux-x64
步骤:
文件夹权限需要设置为644
1). 切换到root用户(su - root),或者用sudo执行以下步骤操作命令(sudo需提升到root权限)
2). 拷贝keepalived_20240411.zip到数据库linux-x64文件下
3). 在linux-x64目录下,执行unzip keepalived_20240411.zip解压压缩包,
会解压出rtnn_keepalived_ctl、X86文件夹、ARM64文件夹和keepalived文件夹
4). 创建检测脚本目录(mkdir /etc/keepalived)
5). 根据系统架构,移动对应架构的检测脚本到/etc/keepalived/路径下,如X86系统,移动X86文件夹下的config.yaml、op_alive到指定目录(mv X86/config.yaml /etc/keepalived/ 以及mv X86/op_alive /etc/keepalived/)
6). 配置权限
移动到数据库目录下,执行以下命令:
chmod 777 -R /etc/keepalived/
chmod 777 rtnn_keepalived_ctl
chmod 777 -R keepalived/
chmod 644 keepalived/keepalived.conf
7). 修改切换服务配置文件(linux-x64/keepalived文件夹下keepalived.conf),每个服务器均需要修改:
A.角色(state),可选项为(BACKUP,BACKUP):代表非抢占模式;可选项为(MASTER,BACKUP):代表抢占模式。
例如:34服务器 state BACKUP,35服务器state BACKUP;
B.网卡(interface),通过命令ifconfig查看需要绑定的网卡,如eth0
B.优先级(priority),角色为MASTER的优先级要大于为BACKUP的优先级(100 > 99,范围0-200),该参数抢占模式有效。
C.虚拟IP(virtual_ipaddress),同网段未被占用的IP
D.其他配置保持默认
8). 编辑/etc/keepalived/config.yaml
数据库IP:ip: "127.0.0.1"
数据库端口:port: 8200
数据库用户名:user: "sis"
数据库密码:password: "openplant"
连接超时(建议用默认值):connTimeout: 500 # ms
读写超时(建议用默认值):rwTimeout: 500 # ms
数据库目录:dbDir: "/home/magus/linux-x64/"
9). 配置两台服务器数据库镜像,参考:
服务器A->B镜像:
<?xml version="1.0" encoding="UTF-8"?>
<openPlant>
<Replicator PN="mirror" IP="192.168.1.35" PO="8200" SY="1" >
<RepItem PN="W3" TN="W3" XF="0" />
</Replicator>
</openPlant>
服务器B->A镜像:
<?xml version="1.0" encoding="UTF-8"?>
<openPlant>
<Replicator PN="mirror" IP="192.168.1.34" PO="8200" SY="1" >
<RepItem PN="W3" TN="W3" XF="0" />
</Replicator>
</openPlant>
8). 用脚本rtnn_keepalived_ctl控制数据库的启停(./rtnn_keepalived_ctl start|stop),
切换服务会随着数据库的启停而启停
9).ip addr查看
单网卡热备配置
! Configuration File for keepalived
global_defs {
notification_email {
acassen@firewall.loc
failover@firewall.loc
sysadmin@firewall.loc
}
notification_email_from Alexandre.Cassen@firewall.loc
smtp_server 127.0.0.1
smtp_connect_timeout 30
router_id LVS_DEVEL
}
vrrp_script chk_rtnn {
script "/etc/keepalived/op_alive"
interval 2
}
vrrp_instance VI_1 {
state MASTER
interface enp1s0
virtual_router_id 70
priority 100
nopreempt
advert_int 1
authentication {
auth_type PASS
auth_pass 1111
}
virtual_ipaddress {
192.168.3.240 dev enp1s0 label enp1s0:1
}
track_script {
chk_rtnn
}
}
双网卡热备配置
! Configuration File for keepalived
#global_defs {
# notification_email { #设置 keepalived 在发生事件(比如切换)的时候,需要发送到的email地址,可以设置多个,每行一个。
# acassen@firewall.loc
# failover@firewall.loc
# sysadmin@firewall.loc
# }
# notification_email_from Alexandre.Cassen@firewall.loc #设置通知邮件发送来自于哪里,如果本地开启了sendmail的话,可以使用上面的默认值。
# smtp_server 192.168.200.1 #指定发送邮件的smtp服务器。
# smtp_connect_timeout 30 #设置smtp连接超时时间,单位为秒。
# router_id LVS_DEVEL #是运行keepalived的一个表示,多个集群设置不同。
#}
vrrp_script chk_rtnn {
script "/etc/keepalived/op_alive"
interval 2
}
vrrp_sync_group VG1 { #下方vrrp实例都放进一个Sync Group,这样的话,group里面任何一个实例出现问题都会发生切换
group {
vip_inter #实例1
vip_intra #实例2
}
}
vrrp_instance vip_inter { #实例1配置
state MASTER #指定实例初始状态,实际的MASTER和BACKUP是选举决定的。
interface enp2s0 #指定实例绑定的网卡
virtual_router_id 51 #设置VRID标记,多个集群不能重复(0..255)
priority 90 #设置优先级,优先级高的会被竞选为Master,Master要高于BACKUP至少50
advert_int 1 #检查的时间间隔,默认1s
# nopreempt #设置为不抢占,说明:这个配置只能在BACKUP主机上面设置
# preempt_delay #抢占延迟,默认5分钟
# debug #debug级别
authentication { #设置认证
auth_type PASS #认证方式,支持PASS和AH,官方建议使用PASS
auth_pass 1111 #认证的密码
}
virtual_ipaddress { #设置VIP,可以设置多个,用于切换时的地址绑定。格式:#<IPADDR>/<MASK> brd <IPADDR> dev <STRING> scope <SCOPT> label <LABEL>
192.168.1.108 dev enp2s0 label enp2s0:1 #IP与网卡名称请根据实际情况修改
}
track_script {
chk_rtnn
}
}
vrrp_instance vip_intra { #实例2配置
state MASTER
interface enp1s0
virtual_router_id 52
priority 90
advert_int 1
authentication {
auth_type PASS
auth_pass 1111
}
virtual_ipaddress {
192.168.4.203 dev enp1s0 label enp1s0:1 #IP与网卡名称请根据实际情况修改
}
track_script {
chk_rtnn
}
}
virtual_server 192.168.1.108 8200 { #VIP地址,要和vrrp_instance模块中的virtual_ipaddress地址一致,请根据真实情况修改
delay_loop 6 #健康检查时间间隔
lb_algo sh #lvs调度算法rr|wrr|lc|wlc|lblc|sh|dh
lb_kind NAT #负载均衡转发规则NAT|DR|RUN
nat_mask 255.255.255.0
protocol TCP
real_server 192.168.1.107 8200 { #RS的真实IP地址,请根据真实情况修改
weight 1 #默认为1,0为失效
TCP_CHECK {
connect_timeout 3 #连接超时时间
# nb_get_retry 3 #重连次数
# delay_before_retry 3 #重连间隔时间
connect_port 8200 #健康检查的端口的端口,请根据真实情况修改
}
}
real_server 192.168.1.106 8200 { #RS的真实IP地址,请根据真实情况修改
weight 1
TCP_CHECK {
connect_timeout 3
connect_port 8200 #健康检查的端口的端口,请根据真实情况修改
}
}
}
virtual_server 192.168.4.203 8200 { #VIP地址,要和vrrp_instance模块中的virtual_ipaddress地址一致,请根据真实情况修改
delay_loop 6 #健康检查时间间隔
lb_algo sh #lvs调度算法rr|wrr|lc|wlc|lblc|sh|dh
lb_kind NAT #负载均衡转发规则NAT|DR|RUN
nat_mask 255.255.255.0
protocol TCP
real_server 192.168.4.161 8200 { #RS的真实IP地址,请根据真实情况修改
weight 1 #默认为1,0为失效
TCP_CHECK {
connect_timeout 3 #连接超时时间
connect_port 8200 #健康检查的端口的端口,请根据真实情况修改
}
}
real_server 192.168.4.202 8200 { #RS的真实IP地址,请根据真实情况修改
weight 1
TCP_CHECK {
connect_timeout 3
connect_port 8200 #健康检查的端口的端口,请根据真实情况修改
}
}
}