这篇文章 主要是希望路过的大神指点迷津,并非一篇完整的搭建(希望在大家的帮助下完成)
首先 按照github上的seesaw 的 README.md 搭建环境
当然上面描述不是很清楚,附上自己的搭建方法(参考 http://qiita.com/albatross/items/e38352911b2043531043 和 http://blog.csdn.net/shenshouer/article/details/50637291)
· realserver centos7 64bit
· realserver application nginx
· seesaw node centos7 64bit
· seesaw01 10.10.11.191
· Seesaw02 10.10.11.192
· Backend01 10.10.11.181
· backend02 10.10.11.182
· VIP 10.10.11.223
· client 10.10.11.25
关闭 selinux
# vi /etc/selinux/config
SELINUX=disabled
临时关闭 selinux
# setenforce 0
yum install -y git golang protobuf-compiler libnl3-devel
# mkdir go
# export GOPATH=/root/go
export GOROOT=/usr/local/go // 红色部分忽略,这个是我装Ubuntu系统时,apt-get 的 go版本太低,手动安装了 go1.6.3 用的
export GOBIN=/usr/local/go/bin
export PATH=$PATH:$GOBIN
# go get -u golang.org/x/crypto/ssh
# go get -u github.com/dlintw/goconf
# go get -u github.com/golang/glog
# go get -u github.com/golang/protobuf/{proto,protoc-gen-go}
# go get -u github.com/miekg/dns
在用go 装上面几个依赖时,如果总是失败,可以到对应目录手动git clone 对应项目,然后再执行go get
# export PATH=$PATH:${GOPATH}/bin
# go get -u github.com/google/seesaw
执行 go get -u github.com/google/seesaw 可能会有错误提示 package github.com/google/seesaw: no buildable Go source files in /root/go/src/github.com/google/seesaw
进入 root/go/src/github.com/google 下 看是否已经下载好 seesaw 如果有忽略
# cd /root/go/src/github.com/google/seesaw/
# make test
# make install
将源码中的etc目录复制到/root/go/bin目录下,
# cp -r etc /root/go/bin/
编写/root/go/bin/install.sh:
SEESAW_BIN="/usr/local/seesaw"
SEESAW_ETC="/etc/seesaw"
SEESAW_LOG="/var/log/seesaw"
INIT=`ps -p 1 -o comm=`
install -d "${SEESAW_BIN}" "${SEESAW_ETC}" "${SEESAW_LOG}"
install "${GOPATH}/bin/seesaw_cli" /usr/bin/seesaw
for component in {ecu,engine,ha,healthcheck,ncc,watchdog}; do
install "${GOPATH}/bin/seesaw_${component}" "${SEESAW_BIN}"
done
if [ $INIT = "init" ]; then
install "etc/init/seesaw_watchdog.conf" "/etc/init"
elif [ $INIT = "systemd" ]; then
install "etc/systemd/system/seesaw_watchdog.service" "/etc/systemd/system"
systemctl --system daemon-reload
fi
install "etc/seesaw/watchdog.cfg" "${SEESAW_ETC}"
# Enable CAP_NET_RAW for seesaw binaries that require raw sockets.
/sbin/setcap cap_net_raw+ep "${SEESAW_BIN}/seesaw_ha"
/sbin/setcap cap_net_raw+ep "${SEESAW_BIN}/seesaw_healthcheck"
# chmod +x install.sh
# ./install
执行成功以后
# systemctl status seesaw_watchdog 即可看见有这个服务
# systemctl enable seesaw_watchdog
将seesaw源码中etc/seesaw 下的cluster.pb.example seesaw.cfg.example文件复制到/etc/seesaw下,改名为cluster.pb seesaw.cfg
# cp cluster.pb.example seesaw.cfg.example /etc/seesaw
# mv cluster.pb.example cluster.pb
# mv seesaw.cfg.example seesaw.cfg
修改两个配置文件如下:
/etc/seesaw/seesaw.cfg
[cluster]
anycast_enabled = false
name = test
node_ipv4 = 10.10.11.191
peer_ipv4 = 10.10.11.192
vip_ipv4 = 10.10.11.190
[config_server] 这里我不知道怎么使用,后面也会有错误,没有解决
primary = seesaw01
[interface]
node = eth0
lb = eth1
/etc/hosts
10.10.11.191 seesaw01
/etc/seesaw/cluster.pb
seesaw_vip: <
fqdn: "seesaw-vip.localdomain."
ipv4: "10.10.11.190/24"
status: RODUCTION
>
node: <
fqdn: "seesaw01."
ipv4: "10.10.11.191/24"
status: RODUCTION
>
node: <
fqdn: "seeaw02."
ipv4: "10.10.11.192/24"
status: RODUCTION
>
vserver: <
name: "test-vserver"
entry_address: <
fqdn: "lb-test.localdomain."
ipv4: "10.10.11.223/24"
status: RODUCTION
>
rp: "admin@localdomain"
vserver_entry: <
protocol: TCP
port: 80
scheduler: RR
healthcheck: <
type: HTTP
port: 80
mode: DSR
proxy: false
tls_verify: false
>
>
backend: <
host: <
fqdn: "backend01.localdomain."
ipv4: "10.10.11.181/24"
status: RODUCTION
>
weight: 1
>
backend: <
host: <
fqdn: "backend02.localdomain."
ipv4: "10.10.11.182/24"
status: RODUCTION
>
weight: 1
>
>
这样一个节点就算配置完成了,可以启动并成为master提供服务# systemctl enable seesaw_watchdog
另一个节点的搭建和配置方法一样,将第一个节点上的两个配置文件拷贝过去,修改 seesaw.cfg 文件
node_ipv4 = 10.10.11.192
peer_ipv4 = 10.10.11.191
即可启动当然启动时会有一些错误,参考 https://github.com/google/seesaw/blob/master/doc/getting_started.md
加载模块
echo ip_vs > /etc/modules-load.d/ipvs.conf
echo nf_conntrack_ipv4 > /etc/modules-load.d/nf_conntrack.conf
systemctl restart systemd-modules-load.service
ip link add ip+net type dummy
如果你的网卡 不是 eth0 和 eth1 参考 http://qiita.com/albatross/items/e38352911b2043531043 修改一点源码重新编译安装即可如果你是用Openstack 虚拟机 网络问题参考 http://blog.csdn.net/lwei_998/article/details/50450182
现在集群能够正常启动,但依然有错误,提示无法找到 ca.crt 和 seesaw.crt
我猜测是缺少HTTPS 证书认证 ,于是自己在对应目录 生成了这两个文件
# openssl genrsa -out ca.key 2048
# openssl req -x509 -new -nodes -key ca.key -subj "/CN=seesaw01" -days 5000 -out ca.crt
# openssl genrsa -out seesaw.key 2048
# more /etc/hostname
seesaw01
# openssl req -new -key seesaw.key -subj "/CN=seesaw01" -out seesaw.csr
# openssl x509 -req -in seesaw.csr -CA ca.crt -CAkey ca.key -CAcreateserial -out seesaw.crt -days 5000
当然这个问题解决了(不知道是不是这样解决),两个节点依然有错误信息出来master 报错无法获取服务器上的配置 ,服务拒绝(就是上面的 config_server 没有理解到位),我理解这个是为了动态修改配置文件,然后动态修改用的,也只有占时跳过了
backup 这个报错是无法获取 peer 上面的配置服务,看了下源码 这个报错是 因为没有实现这个功能吧 显示 #TODO
两台backends 的配置我这里就不描述了,和LVS一样,网上很多资料(一个脚本搞定)
除了上面那个错误 ,基本的seesaw 集群就算搭建完成了,下面是测试,也是我没有解决的问题
1. 启动两个节点,环境正常,一个master 一个backup, 正常提供负载服务
2. 关闭master 以前backup成为master 继续提供服务
3 再将以前的master启动,它成为backup 继续提供服务
现在的问题是 多次关闭当前master,让两台主被相互切换当前充当的角色,就会发现 当关闭的master再次启动时,它虽然成为了backup,但是外面来的请求实际上发送到了它上面,但它又不是master,就导致了请求失败
没明白 它明明是backup 而且网卡也是关闭的,路由也没有,为什么外部请求会发给它了,master上面有VIP,路由也有,反而收不到请求
还有个现象:虽然以前master挂掉了,现在由新的master提供服务,但在我关闭以前master机器时,负载服务会卡一段时间无法连通,感觉现在才开始转移服务,是不是以前那个master被修改了什么,导致它一直存在这个集群中,或者是当前的master记录了以前master的一些信息,导致以前master启动时,数据默认往以前master走
如果有大神能看到这里,我希望您能帮我解决下,或者你们有遇见相同的问题,大家一起讨论或者把你们的解决方法告诉我,也可能是我某些配置或者安装不对,都希望指点,谢谢